From 5b0e858abee91d41d05fdda1ab4b89e841a6c945 Mon Sep 17 00:00:00 2001 From: bach Date: Fri, 9 Oct 2026 16:04:13 +0200 Subject: [PATCH] 8x32 PI : vitesse de lecture, QR code et affiche, sens de l'image sur la vitrine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Vitesse de lecture : réglage VITESSE du lecteur et menu « Vitesse » sur la page web (×0,25 à ×2, gardé dans .vitesse.txt du dossier des animations). - QR code d'accès à la page web et affiche A5 (outils/generer_qrcode.py → qrcode/) : une coulée inspirée de « cascade » en haut, une partie de « tetris » en bas, couleurs tirées des animations de l'équipe (qrcode/sources/), titre en pixels de couleur. - Matrice de la vitrine : image retournée d'un demi-tour (INVERSER_X et INVERSER_Y) et nouveau réglage DECALAGE_X / DECALAGE_Y (ici 1 pixel vers la droite). - Doc : README, INTERFACE_WEB.md et CLAUDE.md à jour. Co-Authored-By: Claude Opus 5.5 --- 8x32 PI/INTERFACE_WEB.md | 12 +- 8x32 PI/README.md | 8 +- 8x32 PI/lecteur.py | 24 +- 8x32 PI/matrice.py | 25 +- 8x32 PI/outils/generer_qrcode.py | 328 ++++++++++++++++++ 8x32 PI/qrcode/affiche_interface_web.pdf | Bin 0 -> 71209 bytes 8x32 PI/qrcode/affiche_interface_web.svg | 12 + 8x32 PI/qrcode/qrcode_interface_web.png | Bin 0 -> 449 bytes 8x32 PI/qrcode/qrcode_interface_web.svg | 1 + 8x32 PI/qrcode/sources/cascade.gif | Bin 0 -> 5850 bytes .../sources/tetris/images_par_seconde.txt | 1 + .../sources/tetris/tetris_final_0000.png | Bin 0 -> 161 bytes .../sources/tetris/tetris_final_0001.png | Bin 0 -> 201 bytes .../sources/tetris/tetris_final_0002.png | Bin 0 -> 148 bytes .../sources/tetris/tetris_final_0003.png | Bin 0 -> 150 bytes .../sources/tetris/tetris_final_0004.png | Bin 0 -> 149 bytes .../sources/tetris/tetris_final_0005.png | Bin 0 -> 154 bytes .../sources/tetris/tetris_final_0006.png | Bin 0 -> 158 bytes .../sources/tetris/tetris_final_0007.png | Bin 0 -> 152 bytes .../sources/tetris/tetris_final_0008.png | Bin 0 -> 153 bytes .../sources/tetris/tetris_final_0009.png | Bin 0 -> 162 bytes .../sources/tetris/tetris_final_0010.png | Bin 0 -> 150 bytes .../sources/tetris/tetris_final_0011.png | Bin 0 -> 152 bytes .../sources/tetris/tetris_final_0012.png | Bin 0 -> 145 bytes .../sources/tetris/tetris_final_0013.png | Bin 0 -> 151 bytes .../sources/tetris/tetris_final_0014.png | Bin 0 -> 154 bytes .../sources/tetris/tetris_final_0015.png | Bin 0 -> 149 bytes .../sources/tetris/tetris_final_0016.png | Bin 0 -> 144 bytes .../sources/tetris/tetris_final_0017.png | Bin 0 -> 138 bytes .../sources/tetris/tetris_final_0018.png | Bin 0 -> 154 bytes .../sources/tetris/tetris_final_0019.png | Bin 0 -> 181 bytes .../sources/tetris/tetris_final_0020.png | Bin 0 -> 182 bytes .../sources/tetris/tetris_final_0021.png | Bin 0 -> 178 bytes .../sources/tetris/tetris_final_0022.png | Bin 0 -> 187 bytes .../sources/tetris/tetris_final_0023.png | Bin 0 -> 184 bytes .../sources/tetris/tetris_final_0024.png | Bin 0 -> 181 bytes .../sources/tetris/tetris_final_0025.png | Bin 0 -> 176 bytes .../sources/tetris/tetris_final_0026.png | Bin 0 -> 185 bytes .../sources/tetris/tetris_final_0027.png | Bin 0 -> 180 bytes .../sources/tetris/tetris_final_0028.png | Bin 0 -> 179 bytes .../sources/tetris/tetris_final_0029.png | Bin 0 -> 175 bytes .../sources/tetris/tetris_final_0030.png | Bin 0 -> 175 bytes .../sources/tetris/tetris_final_0031.png | Bin 0 -> 174 bytes .../sources/tetris/tetris_final_0032.png | Bin 0 -> 175 bytes .../sources/tetris/tetris_final_0033.png | Bin 0 -> 177 bytes .../sources/tetris/tetris_final_0034.png | Bin 0 -> 174 bytes .../sources/tetris/tetris_final_0035.png | Bin 0 -> 169 bytes .../sources/tetris/tetris_final_0036.png | Bin 0 -> 169 bytes .../sources/tetris/tetris_final_0037.png | Bin 0 -> 189 bytes .../sources/tetris/tetris_final_0038.png | Bin 0 -> 182 bytes .../sources/tetris/tetris_final_0039.png | Bin 0 -> 186 bytes .../sources/tetris/tetris_final_0040.png | Bin 0 -> 181 bytes .../sources/tetris/tetris_final_0041.png | Bin 0 -> 182 bytes .../sources/tetris/tetris_final_0042.png | Bin 0 -> 178 bytes .../sources/tetris/tetris_final_0043.png | Bin 0 -> 178 bytes .../sources/tetris/tetris_final_0044.png | Bin 0 -> 179 bytes .../sources/tetris/tetris_final_0045.png | Bin 0 -> 179 bytes .../sources/tetris/tetris_final_0046.png | Bin 0 -> 205 bytes .../sources/tetris/tetris_final_0047.png | Bin 0 -> 201 bytes .../sources/tetris/tetris_final_0048.png | Bin 0 -> 195 bytes .../sources/tetris/tetris_final_0049.png | Bin 0 -> 197 bytes .../sources/tetris/tetris_final_0050.png | Bin 0 -> 217 bytes .../sources/tetris/tetris_final_0051.png | Bin 0 -> 220 bytes .../sources/tetris/tetris_final_0052.png | Bin 0 -> 216 bytes .../sources/tetris/tetris_final_0053.png | Bin 0 -> 222 bytes .../sources/tetris/tetris_final_0054.png | Bin 0 -> 223 bytes .../sources/tetris/tetris_final_0055.png | Bin 0 -> 224 bytes .../sources/tetris/tetris_final_0056.png | Bin 0 -> 219 bytes .../sources/tetris/tetris_final_0057.png | Bin 0 -> 219 bytes .../sources/tetris/tetris_final_0058.png | Bin 0 -> 218 bytes .../sources/tetris/tetris_final_0059.png | Bin 0 -> 218 bytes .../sources/tetris/tetris_final_0060.png | Bin 0 -> 210 bytes .../sources/tetris/tetris_final_0061.png | Bin 0 -> 207 bytes .../sources/tetris/tetris_final_0062.png | Bin 0 -> 207 bytes .../sources/tetris/tetris_final_0063.png | Bin 0 -> 207 bytes .../sources/tetris/tetris_final_0064.png | Bin 0 -> 221 bytes .../sources/tetris/tetris_final_0065.png | Bin 0 -> 222 bytes .../sources/tetris/tetris_final_0066.png | Bin 0 -> 227 bytes .../sources/tetris/tetris_final_0067.png | Bin 0 -> 226 bytes .../sources/tetris/tetris_final_0068.png | Bin 0 -> 230 bytes .../sources/tetris/tetris_final_0069.png | Bin 0 -> 226 bytes .../sources/tetris/tetris_final_0070.png | Bin 0 -> 226 bytes .../sources/tetris/tetris_final_0071.png | Bin 0 -> 223 bytes .../sources/tetris/tetris_final_0072.png | Bin 0 -> 230 bytes .../sources/tetris/tetris_final_0073.png | Bin 0 -> 235 bytes .../sources/tetris/tetris_final_0074.png | Bin 0 -> 234 bytes .../sources/tetris/tetris_final_0075.png | Bin 0 -> 219 bytes .../sources/tetris/tetris_final_0076.png | Bin 0 -> 219 bytes .../sources/tetris/tetris_final_0077.png | Bin 0 -> 223 bytes .../sources/tetris/tetris_final_0078.png | Bin 0 -> 222 bytes .../sources/tetris/tetris_final_0079.png | Bin 0 -> 214 bytes .../sources/tetris/tetris_final_0080.png | Bin 0 -> 214 bytes .../sources/tetris/tetris_final_0081.png | Bin 0 -> 246 bytes .../sources/tetris/tetris_final_0082.png | Bin 0 -> 233 bytes .../sources/tetris/tetris_final_0083.png | Bin 0 -> 238 bytes .../sources/tetris/tetris_final_0084.png | Bin 0 -> 236 bytes .../sources/tetris/tetris_final_0085.png | Bin 0 -> 234 bytes .../sources/tetris/tetris_final_0086.png | Bin 0 -> 230 bytes .../sources/tetris/tetris_final_0087.png | Bin 0 -> 230 bytes .../sources/tetris/tetris_final_0088.png | Bin 0 -> 233 bytes .../sources/tetris/tetris_final_0089.png | Bin 0 -> 233 bytes .../sources/tetris/tetris_final_0090.png | Bin 0 -> 232 bytes .../sources/tetris/tetris_final_0091.png | Bin 0 -> 224 bytes .../sources/tetris/tetris_final_0092.png | Bin 0 -> 225 bytes .../sources/tetris/tetris_final_0093.png | Bin 0 -> 222 bytes .../sources/tetris/tetris_final_0094.png | Bin 0 -> 186 bytes .../sources/tetris/tetris_final_0095.png | Bin 0 -> 189 bytes .../sources/tetris/tetris_final_0096.png | Bin 0 -> 193 bytes .../sources/tetris/tetris_final_0097.png | Bin 0 -> 181 bytes .../sources/tetris/tetris_final_0098.png | Bin 0 -> 176 bytes .../sources/tetris/tetris_final_0099.png | Bin 0 -> 174 bytes .../sources/tetris/tetris_final_0100.png | Bin 0 -> 174 bytes .../sources/tetris/tetris_final_0101.png | Bin 0 -> 203 bytes .../sources/tetris/tetris_final_0102.png | Bin 0 -> 193 bytes .../sources/tetris/tetris_final_0103.png | Bin 0 -> 200 bytes .../sources/tetris/tetris_final_0104.png | Bin 0 -> 191 bytes .../sources/tetris/tetris_final_0105.png | Bin 0 -> 193 bytes .../sources/tetris/tetris_final_0106.png | Bin 0 -> 197 bytes .../sources/tetris/tetris_final_0107.png | Bin 0 -> 204 bytes .../sources/tetris/tetris_final_0108.png | Bin 0 -> 205 bytes .../sources/tetris/tetris_final_0109.png | Bin 0 -> 204 bytes .../sources/tetris/tetris_final_0110.png | Bin 0 -> 210 bytes .../sources/tetris/tetris_final_0111.png | Bin 0 -> 202 bytes .../sources/tetris/tetris_final_0112.png | Bin 0 -> 195 bytes .../sources/tetris/tetris_final_0113.png | Bin 0 -> 193 bytes .../sources/tetris/tetris_final_0114.png | Bin 0 -> 193 bytes .../sources/tetris/tetris_final_0115.png | Bin 0 -> 180 bytes .../sources/tetris/tetris_final_0116.png | Bin 0 -> 154 bytes .../sources/tetris/tetris_final_0117.png | Bin 0 -> 144 bytes .../sources/tetris/tetris_final_0118.png | Bin 0 -> 148 bytes .../sources/tetris/tetris_final_0119.png | Bin 0 -> 164 bytes 8x32 PI/serveur_web.py | 15 + 8x32 PI/web/page.html | 12 + 8x32 PI/web/style.css | 5 + CLAUDE.md | 2 +- 135 files changed, 434 insertions(+), 11 deletions(-) create mode 100644 8x32 PI/outils/generer_qrcode.py create mode 100644 8x32 PI/qrcode/affiche_interface_web.pdf create mode 100644 8x32 PI/qrcode/affiche_interface_web.svg create mode 100644 8x32 PI/qrcode/qrcode_interface_web.png create mode 100644 8x32 PI/qrcode/qrcode_interface_web.svg create mode 100644 8x32 PI/qrcode/sources/cascade.gif create mode 100644 8x32 PI/qrcode/sources/tetris/images_par_seconde.txt create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0000.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0001.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0002.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0003.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0004.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0005.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0006.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0007.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0008.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0009.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0010.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0011.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0012.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0013.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0014.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0015.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0016.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0017.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0018.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0019.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0020.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0021.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0022.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0023.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0024.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0025.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0026.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0027.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0028.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0029.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0030.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0031.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0032.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0033.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0034.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0035.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0036.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0037.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0038.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0039.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0040.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0041.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0042.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0043.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0044.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0045.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0046.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0047.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0048.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0049.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0050.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0051.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0052.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0053.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0054.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0055.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0056.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0057.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0058.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0059.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0060.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0061.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0062.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0063.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0064.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0065.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0066.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0067.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0068.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0069.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0070.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0071.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0072.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0073.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0074.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0075.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0076.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0077.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0078.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0079.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0080.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0081.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0082.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0083.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0084.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0085.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0086.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0087.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0088.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0089.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0090.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0091.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0092.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0093.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0094.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0095.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0096.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0097.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0098.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0099.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0100.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0101.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0102.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0103.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0104.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0105.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0106.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0107.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0108.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0109.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0110.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0111.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0112.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0113.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0114.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0115.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0116.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0117.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0118.png create mode 100644 8x32 PI/qrcode/sources/tetris/tetris_final_0119.png diff --git a/8x32 PI/INTERFACE_WEB.md b/8x32 PI/INTERFACE_WEB.md index 5b7ad1d..6dd0da8 100644 --- a/8x32 PI/INTERFACE_WEB.md +++ b/8x32 PI/INTERFACE_WEB.md @@ -36,6 +36,13 @@ Prenez celle du réseau sur lequel **vous** êtes : | en **Wi-Fi** (téléphone, ordinateur portable) | **`http://172.16.50.27`** | | par **câble** (ordinateur fixe de l'école) | `http://172.16.7.199` | +> **Le plus simple : le QR code.** Le dossier [`qrcode/`](qrcode/) contient +> le QR code de la page et une **affiche A5 à imprimer** +> ([`affiche_interface_web.pdf`](qrcode/affiche_interface_web.pdf)) : on la +> scanne avec l'appareil photo du téléphone, connecté au Wi-Fi de l'école. +> Si l'adresse du Pi change, refaites-les : +> `python3 outils/generer_qrcode.py http://NOUVELLE_ADRESSE`. + > **Pourquoi deux adresses ?** Une adresse, c'est comme l'adresse postale du > Pi, mais **sur un réseau donné**. Le réseau Wi-Fi et le réseau filaire de > l'école sont deux « villes » différentes, et l'école ne fait pas passer le @@ -53,7 +60,10 @@ Prenez celle du réseau sur lequel **vous** êtes : > marchent pas : la page n'est pas sur Internet, seulement sur le réseau local. En haut de la page, en permanence : **ce que la matrice joue en ce moment** -(mis à jour toutes les 2 secondes) et le bouton **Suivante ⏭**. +(mis à jour toutes les 2 secondes), le bouton **Suivante ⏭** et le menu +**Vitesse** : ×0,5 joue toutes les animations deux fois plus lentement, ×2 +deux fois plus vite. Le choix est gardé même après un redémarrage, et +s'applique à partir de l'animation suivante. --- diff --git a/8x32 PI/README.md b/8x32 PI/README.md index d77dfe5..8161aa9 100644 --- a/8x32 PI/README.md +++ b/8x32 PI/README.md @@ -439,8 +439,10 @@ animation, pause entre deux, horaires) et de [`matrice.py`](matrice.py) : | `LUMINOSITE` | matrice.py | `40` | de 0 à 255 ; montez en plein jour, en vitrine | | `COURANT_MAX_MA` | matrice.py | `2500` | un peu **sous** la limite de l'alimentation | | `ROTATION` | matrice.py | `90` | `90` = matrice debout (image 8 × 32), `0` = couchée (32 × 8) | -| `INVERSER_X`, `INVERSER_Y` | matrice.py | `False` | sens de l'image (partie 8) | +| `INVERSER_X`, `INVERSER_Y` | matrice.py | `True` | sens de l'image (partie 8) ; réglés sur la matrice de la vitrine | +| `DECALAGE_X`, `DECALAGE_Y` | matrice.py | `1`, `0` | décale toute l'image d'un pixel (ici vers la droite : la colonne de gauche reste éteinte) | | `GAMMA` | matrice.py | `2.2` | correction des couleurs (1.0 = aucune) | +| `VITESSE` | lecteur.py | `1.0` | vitesse de lecture (0.5 = deux fois plus lent) ; le menu « Vitesse » de la page web a la priorité | | `DUREE_MINIMUM` | lecteur.py | `10` | une animation courte est rejouée pendant au moins 10 s | | `HORAIRES` | lecteur.py | `None` | ex. `("09:00", "22:30")` | @@ -475,6 +477,7 @@ navigateur, et on gère la vitrine sans terminal ni carte SD. | **Changer l'ordre** de lecture | ▲ ▼ (les fichiers sont renumérotés `01_`, `02_`…) | | **Retirer** une animation de la boucle, sans la supprimer | ⏸ (elle passe dans « Pas jouées ») ; + pour la remettre | | **Jouer tout de suite** une animation, ou **passer** à la suivante | ▶ et **Suivante ⏭** | +| **Ralentir ou accélérer** toutes les animations | menu **Vitesse** en haut (×0,25 à ×2) | | **Supprimer** | ✕ : elle va à la corbeille ; « Vider » efface pour de bon | | **Savoir ce que joue la matrice** | en haut de la page, mis à jour toutes les 2 secondes | @@ -490,7 +493,7 @@ réseau filaire de l'école ne communiquent pas entre eux : prenez celle de | Vous êtes connecté… | Adresse | |---|---| -| en **Wi-Fi** (téléphone, portable) | **http://172.16.50.27** | +| en **Wi-Fi** (téléphone, portable) | **http://172.16.50.27**, ou scannez le QR code du dossier [`qrcode/`](qrcode/) | | par **câble** | http://172.16.7.199 | Ces adresses sont distribuées par le réseau et **peuvent changer** : les @@ -640,6 +643,7 @@ Pour voir ce que fait le lecteur quand il tourne tout seul (mode vitrine) : | [`test_matrice.py`](test_matrice.py) | | test de branchement et d'orientation | | [`mes_animations.py`](mes_animations.py) | | les animations de l'Arduino, traduites en Python | | [`animations/`](animations/) | | exemples : GIF, séquence de PNG, APNG | +| [`qrcode/`](qrcode/) | tous | QR code de la page web et affiche A5 à imprimer (refaits par `outils/generer_qrcode.py`) | | [`schemas/`](schemas/) | | schémas de branchement, brochage de la puce, chaîne Krita → matrice, capture de l'interface web | | `apercus/` | design | créé par `verifier_animation.py` : aperçus « façon LED » à partager | | [`krita/palette_vitrine_pixels.gpl`](krita/palette_vitrine_pixels.gpl) | design | palette de couleurs adaptée aux LED, à importer dans Krita | diff --git a/8x32 PI/lecteur.py b/8x32 PI/lecteur.py index 03e2e53..998bf7f 100644 --- a/8x32 PI/lecteur.py +++ b/8x32 PI/lecteur.py @@ -91,6 +91,13 @@ IMAGES_PAR_SECONDE = 12 # Une image fixe reste affichée pendant cette durée. DUREE_MINIMUM = 10 +# VITESSE de lecture de toutes les animations : +# 1 = la vitesse prévue dans Krita ; +# 0.5 = deux fois plus lent ; 2 = deux fois plus vite. +# La page web peut la changer : elle l'écrit alors dans le fichier caché +# « .vitesse.txt » du dossier des animations, qui a la priorité sur ce réglage. +VITESSE = 1.0 + # Noir entre deux animations, en secondes (0 = enchaîner directement). PAUSE_ENTRE_ANIMATIONS = 0.3 @@ -256,8 +263,19 @@ def charger(chemin): # 4. JOUER UNE ANIMATION # ============================================================================= -def jouer(etapes, duree_minimum=DUREE_MINIMUM): +def lire_vitesse_de_lecture(dossier): + """La vitesse choisie sur la page web (fichier .vitesse.txt), sinon VITESSE.""" + try: + with open(os.path.join(dossier, ".vitesse.txt")) as f: + vitesse = float(f.read().strip().replace(",", ".")) + return min(4.0, max(0.1, vitesse)) # entre ×0,1 et ×4, par prudence + except (OSError, ValueError): + return VITESSE + + +def jouer(etapes, duree_minimum=DUREE_MINIMUM, vitesse=1.0): """Joue la liste d'étapes, et la rejoue jusqu'à atteindre la durée minimum. + vitesse = 0.5 : chaque image reste affichée deux fois plus longtemps. S'arrête plus tôt si le serveur web demande autre chose (partie 5).""" debut = time.monotonic() while True: @@ -265,7 +283,7 @@ def jouer(etapes, duree_minimum=DUREE_MINIMUM): moment = time.monotonic() matrice.montrer(image) # On retire le temps déjà passé à afficher, pour garder le rythme. - if not attendre_ou_interrompre(duree - (time.monotonic() - moment)): + if not attendre_ou_interrompre(duree / vitesse - (time.monotonic() - moment)): return if time.monotonic() - debut >= duree_minimum: break @@ -296,7 +314,7 @@ def jouer_animation(chemin, dossier): print(f" ✗ impossible de lire ce fichier ({erreur}) : on passe au suivant") return if etapes: - jouer(etapes) + jouer(etapes, vitesse=lire_vitesse_de_lecture(dossier)) if PAUSE_ENTRE_ANIMATIONS > 0: matrice.effacer() matrice.montrer() diff --git a/8x32 PI/matrice.py b/8x32 PI/matrice.py index ae1858e..216b8af 100644 --- a/8x32 PI/matrice.py +++ b/8x32 PI/matrice.py @@ -121,8 +121,16 @@ COURANT_MAX_MA = 2500 # - rouge et vert inversés (gauche/droite) → INVERSER_X = True # - rouge et vert en bas au lieu d'en haut → INVERSER_Y = True # - les deux à la fois (image à l'envers) → les deux à True -INVERSER_X = False -INVERSER_Y = False +INVERSER_X = True +INVERSER_Y = True + +# DÉCALAGE de l'image sur la matrice, en pixels (après INVERSER_X / Y). +# DECALAGE_X = 1 : toute l'image glisse d'un pixel vers la DROITE ; +# la colonne de gauche reste éteinte, la dernière colonne de l'image sort +# de la matrice. Utile si un bord de la matrice est caché dans la vitrine. +# (Valeurs négatives : vers la gauche ; DECALAGE_Y : vers le bas.) +DECALAGE_X = 1 +DECALAGE_Y = 0 # CORRECTION GAMMA (voir partie 4). 2.2 = comme un écran d'ordinateur. # 1.0 = pas de correction (les couleurs sombres paraîtront trop claires). @@ -526,9 +534,18 @@ def assombrir(pourcentage): for (r, v, b) in pixels_de(toile)]) +def decaler(image): + """Applique DECALAGE_X / DECALAGE_Y : l'image glisse, le vide est noir.""" + if DECALAGE_X == 0 and DECALAGE_Y == 0: + return image + decalee = Image.new("RGB", (LARGEUR, HAUTEUR)) + decalee.paste(image, (DECALAGE_X, DECALAGE_Y)) + return decalee + + def montrer(image=None): - """Affiche la toile (ou une autre image de 32 × 8) sur l'écran.""" - _ecran.afficher(image if image is not None else toile) + """Affiche la toile (ou une autre image de la taille de la matrice) sur l'écran.""" + _ecran.afficher(decaler(image if image is not None else toile)) def attendre(millisecondes): diff --git a/8x32 PI/outils/generer_qrcode.py b/8x32 PI/outils/generer_qrcode.py new file mode 100644 index 0000000..48ff639 --- /dev/null +++ b/8x32 PI/outils/generer_qrcode.py @@ -0,0 +1,328 @@ +#!/usr/bin/env python3 +""" +============================================================================= + QR CODE ET AFFICHE D'ACCÈS À L'INTERFACE WEB + Workshop « Vitrine pixels » +============================================================================= + +Fabrique, dans le dossier « qrcode » : + - qrcode_interface_web.png : le QR code seul (pour un message, un diaporama) ; + - qrcode_interface_web.svg : le même, en vectoriel (pour l'imprimer en grand) ; + - affiche_interface_web.svg : une affiche A5 à imprimer et à poser à côté + de la vitrine ou dans l'atelier, avec deux + compositions inspirées des animations de + l'équipe (qrcode/sources : « cascade », « tetris ») ; + - affiche_interface_web.pdf : la même, prête à imprimer (si rsvg-convert + est installé : paquet « librsvg2-bin »). + +On scanne le QR code avec l'appareil photo du téléphone : la page web de la +vitrine s'ouvre. ⚠️ Le téléphone doit être connecté au Wi-Fi de l'école +(la page n'est pas sur Internet). + +L'adresse du Pi peut changer (voir INTERFACE_WEB.md) : il suffit alors de +relancer ce programme avec la nouvelle adresse : + python3 outils/generer_qrcode.py http://172.16.50.27 + +Il faut le logiciel « qrencode » : + sudo apt install qrencode (Debian, Ubuntu, Raspberry Pi OS) + sudo pacman -S qrencode (Arch) + brew install qrencode (macOS) +""" + +import os +import shutil +import subprocess +import sys + +ICI = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +SORTIE = os.path.join(ICI, "qrcode") +ADRESSE_PAR_DEFAUT = "http://172.16.50.27" + + +def modules_du_qrcode(texte): + """Demande à qrencode le QR code en texte : une ligne par rangée, + « # » = case noire. Renvoie une liste de lignes de booléens.""" + # -t ASCII : dessin en caractères (2 caractères par case) ; -m 0 : sans marge ; + # -l M : correction d'erreur moyenne (le code reste lisible s'il est un peu abîmé). + resultat = subprocess.run(["qrencode", "-t", "ASCII", "-m", "0", "-l", "M", texte], + capture_output=True, text=True, check=True) + lignes = [l for l in resultat.stdout.splitlines() if l.strip()] + return [[ligne[i] == "#" for i in range(0, len(ligne), 2)] for ligne in lignes] + + +def cases_svg(modules, x0, y0, taille): + """Les cases noires du QR code, en rectangles SVG.""" + return "".join( + f'' + for y, ligne in enumerate(modules) for x, noir in enumerate(ligne) if noir) + + +def qrcode_svg(modules, marge=4): + n = len(modules) + 2 * marge + return (f'' + f'' + f'{cases_svg(modules, marge, marge, 1)}\n') + + +# ============================================================================= +# L'AFFICHE : deux compositions inspirées des animations de l'équipe +# ============================================================================= +# +# En haut, une coulée inspirée de « cascade » : un liquide bleu glacier qui +# déborde du haut de la page, en strates séparées par de l'écume, avec des +# stalactites qui gouttent. En bas, une partie de « tetris » : des pièces de +# couleurs vives empilées sur toute la largeur, deux pièces encore en chute. +# +# Les deux compositions sont dessinées sur une grille de « LED » de 48 colonnes, +# et leurs couleurs sont prises dans les fichiers de l'équipe (qrcode/sources). +# Le hasard est « graine fixe » : on obtient la même affiche à chaque fois. + +import random + +SOURCES = os.path.join(SORTIE, "sources") +COLONNES = 48 # largeur de la grille de pixels de l'affiche +PAS = 148 / COLONNES # taille d'un pixel, en mm (≈ 3,1) +REMPLISSAGE = 0.88 # un pixel = un carré un peu plus petit que le pas + +BLEUS_CASCADE = [(170, 199, 254), (119, 179, 254), (118, 218, 254)] +COULEURS_TETRIS = [(255, 38, 38), (255, 127, 0), (255, 214, 0), (0, 214, 60), + (0, 220, 230), (255, 0, 255)] + + +def couleurs_de(chemin, garder): + """Les couleurs d'une animation de l'équipe, triées par fréquence, + filtrées par la fonction « garder ». [] si le fichier est absent.""" + try: + sys.path.insert(0, ICI) + import lecteur # noqa: E402 + compte = {} + for image, _ in lecteur.charger(chemin): + for c in lecteur.matrice.pixels_de(image): + compte[c] = compte.get(c, 0) + 1 + return [c for c, _ in sorted(compte.items(), key=lambda kv: -kv[1]) if garder(c)] + except Exception: + return [] + + +def hexa(c): + return f"#{c[0]:02x}{c[1]:02x}{c[2]:02x}" + + +def pixel(x, y, couleur, y0=0.0): + """Un pixel de la grille de l'affiche, en colonne x, rangée y (depuis y0 mm).""" + marge = PAS * (1 - REMPLISSAGE) / 2 + return (f'') + + +def composition_cascade(bleus): + """Le liquide qui coule du haut de la page (sur fond blanc).""" + import math + hasard = random.Random(11) + clair, moyen, vif = (bleus + BLEUS_CASCADE)[:3] + cases = {} + # Profondeur du liquide dans chaque colonne : une ondulation lente. + profondeur = [int(5.2 + 1.6 * math.sin(x / 6.0) + 0.9 * math.sin(x / 2.7 + 2)) + for x in range(COLONNES)] + for x in range(COLONNES): + for y in range(profondeur[x] + 1): + distance = profondeur[x] - y # distance au bord du liquide + # Deux traits d'écume blancs (des « trous ») qui suivent le bord, + # interrompus de temps en temps, comme dans l'animation. + if distance in (2, 5) and hasard.random() < 0.8: + continue + cases[(x, y)] = clair if distance <= 1 else moyen if distance <= 4 else vif + # Les coulures : des filets de 1 ou 2 pixels de large, terminés par une goutte. + x = hasard.randint(0, 2) + while x < COLONNES: + largeur = hasard.choice([1, 1, 2]) + longueur = hasard.choice([1, 2, 2, 3, 4, 5]) + haut = max(profondeur[min(x + i, COLONNES - 1)] for i in range(largeur)) + 1 + for i in range(largeur): + for y in range(haut, haut + longueur): + cases[(x + i, y)] = clair + if longueur >= 3: # la goutte, plus large, en bas + for i in range(-1, largeur + 1): + cases[(x + i, haut + longueur)] = clair + for i in range(largeur): + cases[(x + i, haut + longueur + 1)] = clair + if hasard.random() < 0.35: # une goutte déjà détachée + cases[(x, haut + longueur + hasard.randint(3, 4))] = moyen + x += largeur + hasard.randint(2, 5) + return "".join(pixel(x, y, c) for (x, y), c in cases.items() if 0 <= x < COLONNES) + + +PIECES = { # les 7 pièces de Tetris, (colonne, rangée) de chaque carré + "I": [(0, 0), (1, 0), (2, 0), (3, 0)], "O": [(0, 0), (1, 0), (0, 1), (1, 1)], + "T": [(0, 0), (1, 0), (2, 0), (1, 1)], "S": [(1, 0), (2, 0), (0, 1), (1, 1)], + "Z": [(0, 0), (1, 0), (1, 1), (2, 1)], "J": [(0, 0), (0, 1), (1, 1), (2, 1)], + "L": [(2, 0), (0, 1), (1, 1), (2, 1)], +} + + +def tourner(cases, fois): + for _ in range(fois): + cases = [(-y, x) for x, y in cases] + mx, my = min(x for x, _ in cases), min(y for _, y in cases) + return [(x - mx, y - my) for x, y in cases] + + +def bloc(x, y, couleur, y0): + """Un carré de Tetris : la couleur, avec un petit reflet clair en haut à gauche.""" + clair = tuple(int(c + (255 - c) * 0.55) for c in couleur) + marge = PAS * (1 - REMPLISSAGE) / 2 + cote = PAS * REMPLISSAGE + gx, gy = x * PAS + marge, y0 + y * PAS + marge + return (f'' + f'') + + +def composition_tetris(couleurs, y_bas): + """Une partie de Tetris sur toute la largeur, le bas de la pile en y_bas (mm).""" + hasard = random.Random(5) + hauteur_max = 7 + plateau = {} # (x, y) → couleur ; y = 0 en bas + + def poser(forme, x0, y): + return [(x0 + x, y + dy) for x, dy in forme] + + def atterrissage(forme, x0): + y = hauteur_max + 4 + while y > 0 and all(c not in plateau for c in poser(forme, x0, y - 1)): + y -= 1 + return y + + for _ in range(400): + forme = tourner(PIECES[hasard.choice(list(PIECES))], hasard.randint(0, 3)) + forme = [(x, max(y for _, y in forme) - y) for x, y in forme] # y vers le haut + largeur = max(x for x, _ in forme) + 1 + essais = [] + for x0 in range(COLONNES - largeur + 1): + y = atterrissage(forme, x0) + cases = poser(forme, x0, y) + # Les trous laissés sous la pièce (un bon joueur les évite). + trous = sum(1 for (cx, cy) in cases + if cy > 0 and (cx, cy - 1) not in plateau and (cx, cy - 1) not in cases) + essais.append((y + 3 * trous + hasard.random() * 1.5, x0, cases)) + _, x0, cases = min(essais) + # L'horizon reste dentelé : plus haut au centre-gauche, plus bas ailleurs. + limite = hauteur_max - (2 if (x0 // 6) % 3 == 1 else 0) + if max(cy for _, cy in cases) >= limite: + continue + # Une couleur différente de celles des pièces qui la touchent. + voisines = {plateau[(cx + dx, cy + dy)] for cx, cy in cases + for dx, dy in ((1, 0), (-1, 0), (0, 1), (0, -1)) + if (cx + dx, cy + dy) in plateau} + libres = [c for c in couleurs if c not in voisines] or couleurs + couleur = hasard.choice(libres) + for c in cases: + plateau[c] = couleur + + morceaux = [bloc(x, -y - 1, c, y_bas) for (x, y), c in plateau.items()] + # Deux pièces encore en train de tomber, au-dessus de la pile. + sommet = max(y for _, y in plateau) + 1 + for nom, x0, au_dessus, tour, couleur in (("T", 4, 3, 2, couleurs[0]), + ("L", 41, 4, 1, couleurs[-1])): + for x, y in tourner(PIECES[nom], tour): + morceaux.append(bloc(x0 + x, -(sommet + au_dessus) + y, couleur, y_bas)) + return "".join(morceaux) + + +def titre_en_pixels(texte, y0, taille, couleurs, depart=0): + """Écrit un texte avec la police 5 × 7 des exemples, centré, + une couleur par lettre (on fait le tour de la liste « couleurs »).""" + sys.path.insert(0, os.path.join(ICI, "outils")) + from generer_exemples import POLICE # noqa: E402 + largeur = sum(len(POLICE[c][0]) + 1 for c in texte) - 1 + x = (148 - largeur * taille) / 2 + morceaux, n = [], depart + for c in texte: + couleur = hexa(couleurs[n % len(couleurs)]) + if c != " ": + n += 1 + for ligne, motif in enumerate(POLICE[c]): + for dx, p in enumerate(motif): + if p == "#": + morceaux.append(f'') + x += (len(POLICE[c][0]) + 1) * taille + return "".join(morceaux) + + +def affiche_svg(modules, adresse): + """Affiche A5 (148 × 210 mm).""" + l, h = 148, 210 + encre, gris = "#141414", "#6b665d" + + bleus = couleurs_de(os.path.join(SOURCES, "cascade.gif"), + lambda c: c[2] > 200 and c[0] < 200) # les bleus + vives = couleurs_de(os.path.join(SOURCES, "tetris"), + lambda c: max(c) - min(c) > 180) # les saturées + # Une couleur par teinte (l'animation en contient des nuances très proches). + tetris = [] + for c in vives + COULEURS_TETRIS: + if all(sum(abs(a - b) for a, b in zip(c, t)) > 120 for t in tetris): + tetris.append(c) + + y_titre = 49 + cote_qr = 56 + x_qr, y_qr = (l - cote_qr) / 2, y_titre + 37 + taille = cote_qr / len(modules) + y_texte = y_qr + cote_qr + 12 + etapes = ["1. Connectez-vous au Wi-Fi de l'école.", + "2. Visez le QR code avec l'appareil photo.", + "3. Déposez vos animations, choisissez l'ordre."] + textes = (f'' + f'{adresse.replace("http://", "")}' + + "".join(f'{e}' + for i, e in enumerate(etapes)) + + f'Uniquement sur le Wi-Fi de l\'école (pas en 4G / 5G).') + + return f""" + Vitrine pixels : accès à l'interface web + + {composition_cascade(bleus)} + {titre_en_pixels("VITRINE", y_titre, 2.0, tetris)} + {titre_en_pixels("PIXELS", y_titre + 16, 2.0, tetris, depart=1)} + + {cases_svg(modules, x_qr, y_qr, taille)} + {textes} + {composition_tetris(tetris, h)} + +""" + + +def main(): + adresse = sys.argv[1] if len(sys.argv) > 1 else ADRESSE_PAR_DEFAUT + if not adresse.startswith("http"): + adresse = "http://" + adresse + os.makedirs(SORTIE, exist_ok=True) + + modules = modules_du_qrcode(adresse) + with open(os.path.join(SORTIE, "qrcode_interface_web.svg"), "w") as f: + f.write(qrcode_svg(modules)) + with open(os.path.join(SORTIE, "affiche_interface_web.svg"), "w") as f: + f.write(affiche_svg(modules, adresse)) + # Le PNG, directement par qrencode : 12 pixels par case, marge de 4 cases. + subprocess.run(["qrencode", "-o", os.path.join(SORTIE, "qrcode_interface_web.png"), + "-s", "12", "-m", "4", "-l", "M", adresse], check=True) + # Le PDF de l'affiche, si l'outil de conversion est là. + if shutil.which("rsvg-convert"): + subprocess.run(["rsvg-convert", "-f", "pdf", + "-o", os.path.join(SORTIE, "affiche_interface_web.pdf"), + os.path.join(SORTIE, "affiche_interface_web.svg")], check=True) + print(f"QR code pour {adresse} écrit dans {SORTIE}") + + +if __name__ == "__main__": + main() diff --git a/8x32 PI/qrcode/affiche_interface_web.pdf b/8x32 PI/qrcode/affiche_interface_web.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f0fa659f4640f5adba2e1cd10e50f9743001941d GIT binary patch literal 71209 zcmYhibzGBS+y76;Xc!?NF}hnqT1E||yIVn8q*Fi`odZOrrAJ6N(j`)pZjkP--+b=- zd4Au&_IhpCdG5N79p~}>95EJ61w|eKUQqx`-9hCYK$wA_!PVLkASubfr)KBk@cs>h z2=Xm$00RR9pW@qh@9jL0ukWnh+bP)DxZ2tQq@@9#?>+3SoB=-BscmM-%;NAL-rvgp z5)`LCWmeP9X53DKM{=EOFMdIasTP; z51j=9v0iN!^l)*t^CV>!^!(|m;|T$OI(w3My0v&(-g)EG@y;S)58`am@p$$0uy?g{ zeg0TL&%OO9tAF!$@5llUAFfxqT`EL8aO|`_ZF)%F zH0~^4Y*?^-Ise=6XqYhblqddZ{`3eTf}Jmpex0&7YN308XiMGll+bMkpIu!XO+Jo4 zd1f)vg)9&Z+|)?%J)sS3ItyP0qxC*&^gcc|FVmCMKi6YC+4FnyqjN{;^?KrVaW(oA zv3cwjPdQN+_lwcI|%zi(tcPM`d4!PFUk z6y+prYJms8T5tdI&37BZ^JMBNq)2_yH<>vOD7$VXC>hj9o-M>#vsH}sC@-1MrsDMhG{wsbi>>( z%4>{otB4mNF_5SI#b1wvH`xHAM(4?1y` zL3iW%&V?8z3YAREfc5f|_5>T+E@klNUom~b0KGd_Wz24BX) zq_nL>AJxZ8%O{z~IaW0Vw$Vg$ZcxoYDm@D}`$Hfj!^;cT3IWJ5sgAZd zTaH^m_-x3oQ>8J#=U3Ni7Z&pb9z45?JxLHY8Krz0mQzZZ z)~PI7MYp(J>GX_-H$?OuqmxHfd!b>Cb&pMNEWY8X+~HKA9(y`gT-sALxj5=sCX@g8 zgEu(Ei8%!|Ol60FAQxngJTmeXP#|m2=iKG3>4$Ij)5G)O7DN)x^r$bQBuYv>GcdOq z^h`TG1Q9!dNlWrVbXj8X?No(J;^j*>m6i3nI=fsw&tAs*-P1@{1oPEU1~DHp^iB{-@o=m6$2fq6 zq;0vKm(SHx87+@gqf0s1V7vzS7R=@DOA<2FOBT8Dg!4jH+^;X1153tAFONMFC#EBD zq*S}JGz$EwhB-@D#(vs^si2g9Wd%wSl+NsdNryw>EB;p2kkYRawLoh>*b|alX{7%x zsu)bK&oX);FjJ6b>A3nzv~FCsPHr}r+R!Y+sMKEwk6uDjm!6B31=n6K(ug_c$+jdz zK#q<$E+ZIX>Z!ieM)p|U%t2e>k`6VbT4kjG8n=sV)LHV~ZKdtbw&oe(!udCPHIrA! z^FA4X_-?s$kkP}Wb;A0A46dv5tK4Jp2O38zK8G$`dAM_sSdNQ?2=D%TgFsnobk&d& z_HIBkNI&$rhck+rg4oh^%5anELtm6b+CsQ)RIaT&hqjzxi85*l0|og&@|(P7f$yng zt3XUt^t6Vm6lQn8N+-v_8qkfL>(UavKS3Pa_9iS150s`=pwrr*x>O*a%1Tb{^I7&Y z)~ptPNpWy3K+E1={xf;t9-4mUOSI*IJZYodJ3vv|vrE?vk=c#am&6+%A4VF$+)QRN zn4z|3LkB6>pADz#GVM|czU%9p1JLbJQ8QR-YVL+Eqzb@1QVTNfF>`)lX?Lu!1cCjN zMWvVG!x@~*>H&5dZ`8z7VzO~s0!9o+x5OKId2NcQKz||vtks$o`M$0Cm-|2m^>8A^ zR9X9WF$Xc2Ffl$FvYvkXA<#7t!#|=#dD#AvDH4@|3d=|c>zz`WqQEzl`)C_o?=Ato zq-fjQLzs8(97U!|q~kByxVxh4wzJMy%G7bp!aG6%H1`_&h$5c*P7{C_F6&hgHTr4<_qsuVk}t#8xd$9zetYN_D2%3Bs3D;7Q0 z>PBI~W%OiK_c*9rz$}Y9QC4M;B|}(961X#mYlaS0R5M7e^Vh>i@#U4=ZU2VD33u3w z%i^!|kCYz@nZrY13%G^^3Y~VJ_>@YC$f_jyQIAeHPlQor`21l4EVyWjks&O@>PDp~ z#yQxU{|pzC;D$6DA)3A>$PxltNv1)Cp`q~#?c3>Nvs!w&p!IoX8R%vtW1xOS#h~@Q z!OcFhz^z6-&R5WImYUuOZY;|C=)~#KsF>VTWa}B%+bd$HypiiNBI3bhs?*iviy6-W z;j)Z&Bgku1jKr}FpYL=u{m7>#93X;VCv}g@10s|Gh}3RVCM{E)bOpNIep4oyZV^Dl z7CBoHbF@XB^;HMJ8F z&9cQK`(Ok|Nr%h;1#DOiRYYCv!UqKD_{ z2~kf9eU7}Zlb=BA(DJ3SlBk#sS!`Y`I!^%tsO&I4{7#ps$oj&Sv+}Q6FA5`M`;k|{ zG7QQx3^C$-GRYud(GhTIMVD`TX4KyCTwB1jz}kASq*3ed!GK)^U+!>gw4vGOsEZqI zcP>`$FL$ssITTQQ>jJmVr#osk&>CIk$6qnYr{k`w>31xoMl9V)oFwV{3Sy^zCLYh$ zoCkM%eXClP>9~*HnkQKeYHxO}H3AV&O@#MM zFlQEWtW|$aea<7Y+ryQTJup7_}H+>Bt(*XDM7I6g45LVLpDe=2Xm$lDY6>3IFQ1ieQV6 z7*FpGhQFfNKXO16kjq0v9=o2IlXn>{C1^1t#<*JNT~y%xImhz{EKW*!+;3~;7q1Vf znvxo9fVi$d4KiBUJ1!pRKCX${f#3wvD|-0Is4|pbAsuj(a+yVWR{#9Y$y|DYu0^CY z!pz6q=eJpyg>))Dmx-xs35>k0&0H!Yy)5{RFQqGAN5FN^L5$E;WiTZN41*0;uxV|S zIQ*StsoSCNPD!Y-M8D)sJC(S2qJ}#?9S@0(>#I zYbf;xK2%i-Y5tntIv1dP|F2J^=0CCI^^cB8mgEMmD@9X*F!S0?;&s}u|B{Sz!V6cgHtL_E&qWDL68#fXp z)9aknZ{H+be$GEzO4vMN=@5O|{TuMqyy#0#`<7(Q&&C|^bUbkC2Qw);hc-xrC2xMx zUO#%(o_%wHxLmLaL0q^#+`mzIeE6OGL!TR+xsPcC{d+>=lfs~*xlC8m-USUUxGrc6 zBzgYmrSO3N9r)ei=6QV9v17x#ld*5N^Xy_D0?FSE(;9$nlE;GN87v8U<|-CUqgBEgaeEV&i_~r z)3+US-P83hazs0Z%aQYsv{!|kLsnoC5J5e>7y2nR-Ks)iE>$9>eMC=&*cuN`&p}Ou z&8y@tAtxHI7CSrsB!wN#+Wmr4=>}_F;=&(jw0bdq!rd63D}4RzV7vE(Y4cBL43yX z89%Q0=P&yi7vV4LR64ek_USK_XNWundb=lIRW83&Cw{!A8FIA1uat#$k*{~H9dT_! zZ)hDxw=tNc*>q2uszZKVTpjxYV}98YN*j0|-wZxxjYs!#$@U&zbmaw+VE`ZPi2qij z#VvjzLXl8-`nYU9gKp&wCjVeCRn@{Dx`-;UUx{V!ZCl+k(sj5?_<<;@$UE=SPcy@( zE^z=J$^1?2>`g0O-1Be9HgF#Srf((eaZ6qlI7K%VDH>C zx_L&R?6K0E!Cl@1G~dvIgiaFoh4pxp^@H~N83QsyaoTz7kJakif+nc;h(626Sf*h03w8eu9Cr>3i4SWPa=_Yq&qJT@V); zGGI1m=JeoWqyXQ@>cs}{LX8VBgdu-$I?&HOhY;ww_W;gVc!rfSBU&(;6_o|GkaP`| z@z%=GE{_ZWW;b!W^(CoRln-hW&MGAG2t5~8EVzyNE_|7BKb%hw$HL|FQS`3FU))2C zf@3Lykt^-aUp3hN2Hs0?)vt2>BQ`Pf!Y)r4Q`N4tv*oXZt)fYHxh>H{2q%B-JT@b^ z;IFUdVF`a{pErKF0FCAinfXboUnR?5X=fbr@Fk~n{0+LWX@=3{-kG_#WF5j0@T>X$ zVMEeI$csft{c@-EOZBM>Appdb$Ud#x!|y{*>xxZ{^0ao1Wmfp`mB zUSvvz^rs}XL4(-J7xhZAYhO}WJA`EsG|z6Eti84nuVa&hy9S7K2Qp$BDS~Z^yft3y z510`f@C#iNYWY85=$SkWIl+T43OBoQQZ^kv?*-ZDBhC5yv@${NapEK{d7v~EJ7 zvoR$K`ZD~(yPqOAjT37#5{_Rg)4SR|DWTWa9_(j^lSwPbWMxB}Vx zwm*&;=O8D`2}u32S@jZH|5x)zeQy@84An`?HPkL90~j;us#A#CEDip%NaXj7rH0`_Qxb zmoW{))M^>>+N6xLD&e-tIGLa*x>NZB^zh}GM1=t(2NLq=nke-$H#?GU1vVIFYC8Cx zEovG#RUjG7D@{1hbmwh&_X!zg(3JiqvqYS1lCV6rDX%BA2y?0W<}G#ZmI@P4W0;B4 ze48X9@+^v_Uj5ZW+a`&=E}hnvGTxNgyl|?L3NsM?jh+A9uRPLd?H}r|>Z`%d! zhEnI3`GR5A!s@j!(>LkfZ8^5!EnnlliR=C zZx`7T3o>9qK@tpNkKo29dv0ytH+GCD)$knyvP6d39(3Y)> z&?czSG}gi^+<&{6FY};Win^Ibn&TrcYxOHnUo~V%RfQ}dT?#}^{5~hBU3-boqQSw0 z;|LBvtF1_Fxj%=!gWcWj?ZYCHYP3~X($ zh%pC?e_`r~Du)in?^ouRm_%NQc1G7F5QWD(fOo^Xga7h?J-jT zHx%>M`bPtMS3Rg(5HKcxIO|tgeSRUgMqnp27*gn8k;JwkA%FMJ;J$YyqNl@>*?&Us{XHl&8 z$@BFfYMhP{apdw(Rb=hD2R=?W&fNxv2ssTmHin3!x0dZNv>;wj>GftmCz?+l#lHh1 z?3$PRUOvkKHuHh!#R_oW^G)HtK^eEYr5}GVkvSt|f!An>SU8vR6 zzBY$0{0K2M;7R2WXp{h~!k8HE&D_tpe!=>k+N8TDLYcc^@48|5tHZ$X+FZW$_eaW|a>h_yy z7M8@Y^V^#>k)Ot~G>zfXt>rj5sMG#d4L%a-UYZ-PpFNzIVlIWCWxE){(_g z9$D*CfRcX5d6bdKWlAd1S zZ1hK4QtV97-3}w)l(g*i`fl-M0XZPzhrIiYJU7k{#gB#)0O8kMn(PFL0?8O&X+Qqq zAtKBR1bU;a!z@uDoAg7TS}<4eJ97!>a^%i7%ODBno5ujQGe^XCM(n z044^*VA-L)!pFl4!BgX9+qh|swz>;#Lc2EI9CIr?DtHHlQ(J2G1u5p9ztP#QO!v|8 zMT6(@AQ#BRAI!{M!GKY5ftgqXDh)MIu&uBZ?7uBKoP)9_)POj7;kg>-`W58*Ag;WP zdQcdXQ=_ay1U<_8jGzF=waq$%Hkji1(H`Pvq8)c`v;XHZMw_d}cI|RzA}|lut>D^J zDaxs{;HUdM^Y5l|)MK5&ibgQm56Hm<9t7k!$m%yp+@@A-e33}$NY8LzkHrbA)ocR& zmU1O$rfkDa(G;iF5eM-8;Ie7&uWSaS!MMH*k;e}{2`qKV3a91cq(Oe}>TLbsuj_pI zB47TVXiNJHr~qZdOj^5WV~U96qcgJRiaNgnDrilCx$MTS%5=Re7?PDZqJVrFIQaWu zT{&H-K5+>q-7xKm8WOr~4BZ@Ll0lzWqGOzZK#?nU99FW{N0+b!(+0&<5eo{fHjyyc zD@LD)O_o*UJwzE|5IM5?0J)XBvo{^Xm*sBRqaOFrYNd{X>fnO)ZL?*8Y1L-!_ooQP z)_W)40%91Dm3KJCc_=wbd2z$B!Go#wq8)x$klS>JxH*6ea=VY33^wgm*!n<<7?$bW z7UzW-ubl~6SsYd?00peg@<8kmWpgSen>l&LEDjU5L|WC@bRQ1fr`AnLmKXYT8SBWlAaYt0vRjVDF#zTsFc6dLDn$L#UQ`4 zHUR+7958Pz7r1>YD$lTfB=e)v_4Cd#BkhRV_?w`P%UjPW!8K&%U|K`;&za>kSo)HIEN_e$v5T z+Fk}LUl9z+3){10W9h?t#uRHdY#heUG11)asT7udFzXUM5r`vj_+loPo zRu=!G$z)!u*TILhLd#F&WBV}`bMhf0pxv4w?H@x)tftAVCR3riY-#zeZ_@JD&dDOs z(wOqNlr%jz4WYX6HQu`MxJdM;3sr`f)d$J=hpcXi%1`sS_sQG#E_;5n1MU$@WD1!$ zKVaQ;z(Cczq%U+KLa4^ilZUZnOMCS>aGsX{i*w7K-Uy1KwcL8-FkLyM(-k}g=iDG ztNU#<$>Ks<2Ci(PtTj#{%rrE`p;LMLX%H#t> zB@E$`_&n;>oQF(pff|@YlAH&A!=#gCvOA!o6>rOV*t9J{sWtk`qT#H!C{dW4#h+8v zo^uE&cmAJK?9N#ls1C-|*3lB6`$+j-xSYw6Gd)iOEMm1gKtTq1u;mm9UoNZ2LG<%kk6MgD1K1!qok_?>ak1)pW*9rjssvvlhr4@XISFuhm$VQ*UM z?Kt)BE3WqkF0*T@=3c2Z0mDi9^yYl?h=(+`4<`XqTd5HnL7MD`T7gn!oo|J`90m{iHImEZw? ze%*cjP=>jH+H@aP13wbUQ=9Ei46@zZ+$~u111fo&GlD0Q>e;x|5b214OGLnX%hGgo ziOI_!K!ng|UWCn%&mC)Wv2jg_v7j!G4!|%Xnt1ywruT8?iED!R z9COZ8E_t}gN0)!|)ax6}rL8LUVw(hLlrvi3?N^fwXN9xcorHql2WQX@qv{4(gO>;r zv)-kdioYP3kIH(RlayJ+susr_^~ZIx-0#=LY~xY1QJ3$G>bWpFfkrJmA^mIoT#->) z$4_exll%320tZgfdk^*Pl&8Y;o3P+IPpS4Z@iP`lZ9ygu$!Tu5I7lZ;W_MsxJ)T*p z`Cxr(N5K(BXYjeEV25>fQeALTy=Wx{d6xIl!)0EJ*1@X_WgXvf^sVclK97S(QCk%L zU5BVsk=67@X~{gZInA?EgihwyXde5d{T0A+q_Zi+NgH0u;z4S7Mf-5Bu~@g6Op-44 z6b9YRXMJHK%E21;z}_KS+cD7v18*LoWTnAaAf5*M2V{`9#{iDS%4*P|*R5ruypIYp zFIc!ryIU$+JBd4NQ}6A+*gMSIOsxML160X`YWr{+S57sly>%&J(g2Gmm-sAWPi>X> z1bE$7aX_-5$x`GjLgdIHlK(0JX9B0s*>=u4%ypdX$`w?WYjBl{liNsnr{vgb>yol^ z_f1s|c5*@u;?{jezqnUP;o8(q+@9p>M6EVwKly0im~(@CH)Uh{%zgb z{WOtq2gBVa%5a0z^H+YAWo$F&iNN&aZf?7#(lJ4nIV~l74sp`-Idbm?X>;3=qF9!s zRNItPTjf%2xgSz15wqAB9TlPZ8=SO-VvhP;3hF+@xJtPKO1Z?}2dHB6E4#HeRkw?w zeFa71xsuUE>_F9@8Z(`x!&%q$5sOJT9Ir}z1%OGdG`2ABHN?9F_DD{!1G`A5mMvbp zmW&mviOW|ZqxS)>{-7sN@rb|SJ)n; z?t#5)WSJkGr_9#be1Sownrd$vs?Er?&Y61$&oMp_JFeo-#~;6xm2vpK{gtx*B{Te2 z#UjT|o9z?Dj^9G+hl_@9$?~tYGqSlU#d#oZlQWgW_rosXpFi}nEH~2j^Dn^b!D9{)*sGb2wjlZ*u$&dz%q>isTg$k>r?MqAQ~r`KtYQ&`R9vx|}9AIfTy>blEz@wN5M#njMl>1noW;%oC(%i@DaI@-Ab({NkAHxwv0Pn%Q*>n6UB}b z+eC5(TkfCrEWdkX3#P3%lw>z51S#-1VzBBoJ-TovAd@{a%6Bmt(I;y_LV!=Svd zdZ`%jW{y3lQfNna_8Z0P=LJuwX-97_@||~|Qwr5X@Zj@01&xNsjj>!7jSxT@#EP?_ z_1d7QXLOfc*F0XBb6MxUb~!tm8H0KL(_M#=u{9h?J5zk4!7IYDaS(`FO4f1 zB!kIej`80VKnos=e1=l38xK28-v}E{gJaF69?d3T+zMwg?&(Xr2h4eOEJ-sWTy8>1~&4QHkc6P;U=lx~vT@|kr;>MBaLX(x}O$Ei;B2T@GWYDp_IbAMI`x85ONfFhq+Si=)(<84P|81#rIBf+PXSQ0zfonk=a)}IW9Y$A1YoTn@f)UCIEkf;oRGAMV5PjW;>UCxaz=ct{I)^EOb?PpCnTvdmAUQDj>pJpp#_B~ zNh^dj7BD!@))v3QNJL)j&YeKu*L#MPq&xkea2Ce=X995@o;Q%0cN?`_+Xf$hFlF{a z1{=rhh`#Iy`D_*&xAbN~hrzTyqlPnc^j2Q0CWj~e9#FPjgg737u*p_WC(ki@GZAx; ziB@(*!x7eSmr)P<7?gdC6THnW5?X7EH>NGK#odbIKoV(GX)TPc8eSU<$Y$x~kmUNW z9q8RD;(i(dSh5Q>SGiG99YRyZA;F>!VDoGiC%1GzJcrdp@fg`rk6(|^mC5*yB0q}{ z1H|gfGeeQ-Q+uD$T}(BYYqp?=QKuK(#&h&!=`3=i|YTa2f_Yw#5Au9*%{*~D-4UZg9EZ@;I|IC?SEoW_ z+UsuV^0*Ehy7o;WA?UJ0*@YdSYe5~tw20@u)(jUjVi3ZJT41qJWrzT_G51(9?U+1j zf4Yd!F;2%%ggD-}5u--uF%b8tdl&^einbVpV8m!(jVkkFC=$}#zQ8eUQ~M_994$M^ zSn`4x9<7y8C?PhoZ>A=*T^{((b=z&m8Q$@0wS3-g@wZWJ03{s_yoOO^Ox|Wpo-sa2 zfJ)gcqIM{4%&286-80q&F;A!~hW9%=0+h}2zfOR;sIb;R-fQG@=Tc?56s>h8lP6XN z{8BrG5ue0ErTh?Hy8&M3j<8BEqZ$n*9W~0aM!JX?-v6Ej_jKw{wLn!dNUq>8CI&5v z_7?ZUVmA3r;i}Kz2Z}b4vE)~)+?bB($g>bi5mU?jsaCVI+HMs8-&yb)>t^$$aQR$| z1M$qx=|w>{K(*05DQd)!L}Tzmh(YL(rh^$(=Dqmmeaxa`X#cMh?A33_H|#Gg$M2=N z__Ez3E-wLFpNm?W`m#Oa_#C3`LpFXohmp$Rj8@9@0@c0ebI7M|O0vaxuGD+5a={$B zf;|zjk$*@{0kL8yUM&$$kckb5&p>_SvrC^D+oNujHJBJTDPJHdKV(3ZcZ&xEuaw`| zRAoDb_7R!hc{5UsuCw327Nk!9YNsBfjn~3NMh%k}=CxQRNWE}@f`BZFz&KdmWMfuF z-*7szWrQ0y9HY2S9zkD>;$Z|w?B;fB58z#RWMz-d+XnzcVPy_>)F zJOW>A=QHi&p{qxh^}Jx$c^m%X=4V>TQ&Dli6!QBiU#XY#d1zjLv1Q`=biu)%^(^QU zJTSoqRx>fUSN@(x6cb(-no;M0l58OHu*hY$VZ1YxWzf7^QSsh`oy!coiCy{Nl*>9J zk8N-MSF?(ra;1EZ>6-9&LPv1>f!T8XCC`|<`b0X6f#_z(All_h9g#v23Y)@d1v0vA zNIc6`i%yzEG1w2&%o+?&bHLZUYixj}S z10yU--KPGEk3N}AA9k)4v5FgJ^WQch!V;V6K*u!0;>N5w+^yy#}8Y>_2e+OZypc9R(&^8 z*zu_;&rprY6DgXUMpzQMO`!-4AQdv_AJK#MnL1h}3}>%DLt^`-=W1#uUdO0uPhr#R zDQh%KLC>8d`^o`6f(ersvO5(5Fj{~o2e*ut-2B&GYhFzu&)ol0eNQ1xm&~V09DWO8 zrvr-1XC+6PM6L-;Ye#fP$#X#PItNrCz6{y6A69 zpoO;1`C^AglDPVB3LiPq#A|1;Uey0anN58Ky{N*!bR*!hejiurxy z1+0mFvw(^l6}Z8w3YtMrj*Q;QLHbOk?yULpgSNWG_!g*LD_9&FiVuq^0;iClC&^!= z{Pt3+X&qCl(JpKQ68K(%90k)CSl9gnGC@vXW0Czni{-yR*<8<8>qT#IAT%}@70yDk zLyF(1ee#KnXgme`>%TNR(FC5d(*#11C3}%e;@Q6`3omXvwdl~B|E0wlLG8b<7RUx5 zmp{y}7HE#!dYV%YuQd~Xt|C$`Fc?bQDX2Xu0PeA|U9!8J*?N`l$L2(~4U`WrE?Vt1 z@P4O8fc%XoI%|-LT|-1$$Y(Jma;WhB#R{8vvRwOM1p$2y37ZmJd?u6Qgj-yj!I(Zn z@(7MfkT9yMuvKU@ZW)k~TkigG8tpLTJ{CSD7EmbLZ2(Ap#!Hp)v|`(ilwt-+lpO=q z`}s@M7K6FRdcAMMxD3^TDPk&_KUHeV!iO`OyfK!$_TEJ(*>h#TFd<2`7iDxhMA!PG zN-&~7U`?6%(SOR!hRYXNUs|Q+N?tpt0kXxkAO1p^yi-T~$sdXAf^VMFP8!dSW?RL1 zhZ{Ra^jfYh`L;jM;spyCs5qKN^qEG;Z-8tx6Pf`ANF85h?vLg__TiViKp&HB#G4xV zqjGnEfAh+qKt^)8uh2ICQrfLqbqwhXRn)g@gFQl0^P0wTZMNnZt$Y z7>Q&K(gIb?pQ$(-u{VGbC{oIY)IA&MGyWIRDKhYA@_s(~ zZhdG~#y-#M4~@@xsx!<^mdMBaj-Zx55c$e=B(^&~h(#uL8iRC%bc$LvUSVZ`DKz_S ze<3lp2D{5Xc&eRT*46+1(bHUX1^wH)Al+z>wAU|tKbA0SCpfOg8X~^%!udE=4 zchSu|Y_@!S#zUoIZIVEMxg>MezTBv-1vIg3zrt>q(YuGi-!yb#pWF7xQgu}`M*3q! zd-2NA)?JYp4z*{VYqOJu?m#|r66b_etJ)v6n!Otv5UhpjSFRD3)$8=H7B0TJhe}4P zm3bU(4B#h;pjKe35Dq!xp;WPX4Sem*^EOS1F%W!Um&bns0wKqT7LxVfwkoEH^Zgse zv1SX*4qMw7EjVhd{8*%r7dc2-*@D`dAg>T7^;_&=v)juQaKgpUM^0W(NxEvg=1_Ih z?ImheNP5U^gB(kkN{D_6TH;DKSbu0^2$rTfa&5MCK6%vIlktI&{-+P_aT1gnc2&mY zV-b{bNpzFlhqzFuj7)@HBv}R8R=0Ckd(^oRbxN;2k!_YWQFX`@ue&xo@H9r9FhNfs zzn@vCk6hDuH3HbAe6LBEw)B3roW{4(+W;=;Wxk;oJXw%+N?^o*IT$8ojGHT8vTw5 zvgs#V=S0)tKGeeotyQh#A)BFm+ z4Aas@_>82ku`HN;?r}SY*NW$2PntYnRx@ZOxM7}-lZ)NT@IRwabKZS=2c2a7 zq`1}fwQ*72D-~AQOVBxi{*24XouQY<9)$;;T+}jdI~LN$w&+WMV3R1U1ei$g1hP#P zYmoS8v#4`c)s}}l&t+U2Xk}GzVLiNman*OJ&mEL5{>NmIrM5qRJTPJp8vyuR%iav@ zh6m(V{T$B9f3}J|o2&CIA94;v{7>Ucf$>e3jRd6rr}tl^ZvKry5jo9SeQ($wTu;2( zAWx%jJcl!X_VE>sYGrZ7Jfv9Z5ez#b4r~oNr+3Pu!`bF4aBG);u}#Ua6@dCj%z~i% zrZA+?j)>48cyPy^qrgJzE;OuXOBH_ymRET05;puF5kgFJF#mm6LRy$#g(RcEZ5$yH z1k8y482hUMYx1mZ>HWhY^q{?Wss2f-R?GTRiEwB%HU`-iH{GI0#)g(<&9Ghkzu^*A zo6|dH^B;;mZxegUlEKZpd=q;Pr;O& zETK5b2_n+77bJh1Vb@IWKe}gU2fA7+zo1GcU*z4f{mo()|FMpS3Xbq=Ic^zjN?8*d zxpd@aeioDbG2*e^np^1p?5~_=D!MG=HU{Rue}4f9?;ACOrlqiyB9i(ec3B5GOEChN zcCurPC7a`W}i-tF3~miue7 z%CxbptHFvWb!c5Eo=Ym%Rvvk-VnLH*S&~#jTR z!ztDl&Y$kuziKYn3lKsxAGtvdl{+y^svRK$ab&VP(JD^d%XZyI1>nC^n+`FMQ6pM7 zK1TsoaG-%9P?iez1Ub5ASF*%v67GhymLtuPj3-!g4>aB!NLViKp050RgfO`{hi|Fz*wn5c9 z+rqF6IZ;c$IRo?`1k?np_|ydMSaGZ;&D`+_%;M>*q-^-|`gAyMee$9M`o4m) zh`Dp5wQeT;2GB)XK3Wf=R@)N)K6hP{p4T9F<@4A7&C*^@i6BngZ^jxcNh5NGheWsP z->meD)R30TMG>!wH<`MY=#lZvo%e6mTWR@l+YWC4n>7a^9dkReu!B>tGjIM+=YF@N zTs;A~;gNi)+y)c8PO5)*MwZzIzv#4UHn$$NeyI8?X8xrDL6|PC5SSl60zv=&W}|9^ zWDLJ!sEtS=$YhgtCMcz!4A~cG67>DJL7*tg08`2Znr@|jo%}rM`*Py}+`Wd287Hm@ zDpYd!&^}`Ics51;Z=iDO^mh1UNiOKaht3}re3p{wmD^{Cn^n$z;-k;lDLt2j00Jtt zbg!(c5no|FZ(nT81i`Ei5$#LmY?T3RMjv%R`6?bua&qgd!Rvd|S+wXOn3HU*p(Syw zH=}PnObgwnE@r7%iP%If#d62D6QmNp@ABPEH>RExbl&%*@rgV60N4_~YyTi{614*0 zc(V?KYx%(3C^?k0^50YmxtqsJQd-(gfgG-{xU!#0)Foc_9@i{?ecw~4 zqBNEDzB5%t30*^iBjbI|cMgT%%=e8ODoU1;xmDHJuhk?hW)D=hSx=uWkpB+PLBHTj z;iXv=`})NNvroUF+a7KrD=z2tasPvf*8F14_Xn3-&oD=rvL*rWO5?A2MowUFoxF622!u`)g@7@ehDb^f<@|*dHmj^@qg3 zo7ZQb1oM}dL)O7g)?Z?JgU>O#m_$&ZqzfoP;JXhi3SN|zsAwPPL2JY4$nk&|j7l-oDE{5wIr zodsM!&{Hb^^l?)zl(2VoovH<7UN8%PA zO^2!JZ*e-7|2(+byfqnirh(Al3DQ3nv6wR1Ou`36(wDZq9PIlhT2yah3$L`A<`>)r z=5KH8z1XVbSl$Yz`^dj~wUt=f@FIOflLm5{QC)z19vkjZmC9;}YG<#Xrfw$CXqRBS_;&b!S;iI_W@u0YG7yN&pC;j@Pqd*o$s5|^cGjra3 zq3n66irgP#N&HlUm!g(+PEZG|R0=-t?ddVP>Nyfh4R*)O8059TNrH3wAqVaGAO{s*Zu+gD;kFpP&!`{VRQ~@l^_F36E#Dg`PVu6}DWy=nNYLUG zDJ8|7;!c3zP#g-hG`L%l;O+#6;_d_|6!#*<<>s98yZ3)TtS3*BnYGuR(at!xh z|@=cZXHMgf~r{ROiH&`^|bLSwm z?0pZ+m&rEYDD{F^({6PIxc{bJ{kh|@d+z+ZnQ`j-VVL4heX?98RN0d_=v({*0Wt2& zsp>tcJlRM!74`^|CLAr3tPSurHe5id;qQ zjHxEl4QzMmHZIS&gWmlh@|>38L{>X!?9U_TiK$8 z#k3ZMc~R!a31`mSMpK&9!obAfI`vCM(OKh<8e8g9nwb{;q@p{7KD3Y>K%zNCe8JRv z3D=2#a@6f$!olhFh%eL%6Y{g8Vd|#AAKqA&B4XCay^JRkDl<}0Np-URB>KC+Z zi?_K`nt@7bN~AXsaXA3vuGC+ER!Ls5iSCmUs2U$NoFg#M8$a-TE77)iHD^Z`ixC2K%QVSWmG5k7 z8G0d{2*<%v*kb8IfDFXDx*BW3ck$8Z<3i*#uvzdfaBaS>@!GLrDV(SN5@{PJ8{6}L zB{ud*O6Q_$!kU3q0A|ZJTnLGoHHLzl$Z#vqA4YE6ud{S8GAV4Zc9sWugn_#5`+ua9 z@=&EDxvNNpB~m+`moPr*=DrK2phDAlmVw3chm~U8OvOz(fDvrS7lg+`Y0OhiuS*ty zu5q2tQYK;=rL}9|7~W1!;Z~Tes?xXs z(d!wn0Gc?xas(xnuheO7kFnrkz}g|FYxZo-`!| zdTP!+0&1?0?%8LiD?v)gqsT^48(5D6G7&eFdAY?ZO;)w?QrM;$3v}7SFJ5E|zoN_* zW`c3LC{}&>@k~`hXkJQS6gOhp9VZRyiJqW>OQ=d~X746~M|r`7$2NvVs6IIpUbYb| zfF_E+(TNC9?zjiNJ`Y-(vgk`-;V;pqdcoO>SSiQ}P@NV~(Hb2tS~c@T?v(#z7w#xI z1#B`F(8;G8N|p_d;-4M0jA}KVG?o96cu55ptTTpR+gwQP+?ei)g;*@{EBnQB19ojl zcGIlnzN@KbFJaNOV~PSlc9+}kMl;pKoD-i)kGUoj8EIrX^P*Di^a~-}uzu8X6MlE5 zA7bQFzkXJxbl}Sxd9Et-lE@*#dMr;(fA9GIfSUFd!7L-6Veu^&_d{N`wlJoE)R_(nTMDr+HY*P6BkOui_mCvrcpRNQvnx>Z@q6D*A$cN?*{8kN zZ6Z&cPWrdSfy?c=^#b4Xvikb>tfx7nLp|iCWu10k-)xeFkG#zU#NOn`vx;@N;S-;K zd}B~|laG~ZtS#pHhZ_$iivopo`Fr3msSunr57i!gbk!-vw0`wYz1YQq>2`#Y69~m(-amIkHfUl{2mE{ zuORNeK z_=6l5@p9qJ&%IGdiDRPXt43vmoZkINmRjVYpGxAEua^ zgZ|*lVy6SS=f#%M(w7E2moz~PV94p5sXfE~smIdVM!Y0o%^XxFgb?%iX`F1$;CNT^ zM16l*rlZ^uzU}RF-!R;-@@d(A(7d(y1C5ivqIthO6T?ars!sb~)Hf&mVH`+NXq^IQ z`qP7k72Yl{&g&M4dz9?p3vI~%K+FL+-h;Qubxr<}#T+RM1&9h9Hi}-6;bab5 z9nS!doX(k?hc_qBR(3f})t#~c`^GE_=f<4+TPXkf1PFPTwKfpJ3Q1HU5}q|}4UWlT z*oFdo=uzR6CX{j&j(36aP7a+5eh`w?uNDyD?iqQ*?2T?A7kWCrqe*Cm_-1fMI;Ds` zSzaVA#uozcqvggB2;qeXE!js6-|iY4!|&YbFqsPy zw|&}ZeElTLL^k`I!!GIxD`I^0Bd$b~SAa%;`R7h@^eW|tw-59)lq;FvZi0b8LK?YK z?_I;4TND1@lY7QCzZX2I7rYnTz@#yl%aT%}^2_y6j5uKU!?^)NP|%WqJ5?R%S%wid1lLYENsYSbWljOChK}1!6#_! zo&oXs>=G$#=;MqrnlHRcbaW;vh6M#mG(X@)e!g>b*lcxRM;5sMT%!*C>OlC-HVi{% zs~xvlyIy+|UZSm&R&r=)TXF`S0cmjn4eJGaYi1vps4q*%`_=2m9>XNF9<^rmBh>1f z&kBBTcT9Q;Q$U^qZNk+oKZFBmWC(=VS?+VqUJ)iL(+LUSII58u)z~i2*rOA|(K6Us zB%u+5f=n+Q^C@9X!9AW@F<%AOb*moGb2m7}PAyDI$y#%^Ta61cuS%^+p2Dbs5PglZ zXVo}p`*lHK=BSaaYvZgZjiUph`fONs6(N5zMZe9n(7I{=};O8cn%WO(2M%b)XPS~v?(dbdsqElN>t}0xI1MpS(iY0GaEPF`nzx{wvbWQ2*-q2qy`}24OOGwJ5U^v@TfthhjGJJg zMQ<>w7F^Txsz=fEu79rMZuYFi3&*aa)h2eR)OL_!OWS7Z>nBcuU=j0_aO^)Mh93P-VqA)L!%%aHUXL<=@J zRPdjb@4i%=<(yA=k6Eu!a$=d55BZtdL?zJ3V+X8#RR?60DnvyFTR@VeB=qmNAQPTI zp`-lhzd;{4J9UY*@mgQ2Y=O^M&Hkfb8$({s@xx03_h)VS?b}Z3YXx4bi}KXdDMkjz zKkNtnfV*NCP;-FGR(n2WQ>Ets_$M7-aC#so#uMsP6vEZN^15-b9`%aaxGpV&Mh-G^ zU)i^Y47GAj5B4(`3#RGDx&A^j*n*UF^RMt4@>8mcBTeIh-Gb|^^Ae1UrlqmVYNeB_ zYIkq$DBck@{H!9FdZNeG#?=1a9_6;Ysb`X2I;mSOp;H-LPKMslfSYhqMxrO6UxZh$ z@|AGnvha;veQ**&F8l{6Q>4FhM4>UJQlGB2&)CAFJBJ74VGgqv>a;) zS)5e%w*=tFVlJpF56tw%3>Gk^n~+&$q0lKnZ-Y+|<`i*;n_<(kJpR5`)hMKOpaC z+-Uq`q6__%#@N#^wF)8lWI>x_$J*{xoNSZc($$KiEu)`b=bV4X*1Ov}>b;25i27Kg zA=FoeTgGup<|zBGokT@(iqmmviW6!@1ROhVAl!Pw73H1!E*j$f}RnVV4+!^?HfiVO#q0$!X&sd`5dtNtXN zHyoIL9qK!M!52pxWn{qkc3i!mG&_qJB?VF>Baz({BV=<;XwxHzpvgo6R&)~X~#u%l1? zbG`UMAJyB6gZ+>s0{F_aM*E~)StBQEdz|FuX(A!UhusKwZVtgjB^W%(AEAF1eWcbQ z^YUqa>v7StXGkJRERLxDq4U+N;;8>}VS=HE% zluTn$MPb$q|2=rv9XCAS6kmcEW+$3u%hTL(r$;&bsy4a9e&4}woB0rCTtxIsDj!F- zoa|lR_U%iqBBI=4LkU3+xJqR)(P0`MMr|4{hK=%H)ZAfo8?ISYV2N;*I5{?h3BI=d zR@Yw{HPA!_+&vtOex&5iHBsUIksv!!SjrVI#41v%78tZ`M4)eoUMK5nSceGrxJhd) z<3iJC6SZ+v|GD%N?G6PhzxYPVA+O2ekM(ix5LAXbnwp%2%8t8a>b;zn4lSlCNINLO zNJDc$Kt~ILU&0-FFLIAI%0x>8wza-r zsyW;6*=h5_v8WS^3}7TjX;8a5pjP5>y;d$PNj)J}nyn;AmYG^Dv?x67Ks8K1F~?!E zg6{$yA~L1^O_bO+o6X5Co2{15CebS>m82d^@1c#+N)8pNJ!Nq$o)*i_46PeR%g=(; zO)o!|SdA<{gIi7q0eR#L1f?`ykxUGvqEYLSHw-q<)RWeC{#O{vgMv}pJP@1u=$}#( zgGzgbVR{&X`E~^Lc4#&=))Oq0Od1E-v0;D-c3Zm?wo*Q;q2^A=`*PC)3W8c2T>b@s z)vRp@em@$OUSgKooMn0}W|~HQwmeftGO+)j_^-dl#^+u|K;my&%8IX<#-kazGLhC8 zG4-`P*T&A^jlBKRn-#0lfp+i8fx3dWS6<2na^F_jg6C?~-jf2~(acCpV$+7e7eA?O z2brE*@PdAR3Lc#XR(VHZ2@3Io=AH@Ckb{ors(OV?hG~%x*;JCi{oc7PVmH71RfRSL z@(rgyCC@KpRJA4`Av%+;0Ut7DfkwIH85AxMS;d^69eJp$HU>TP2l0L$K+4Ls4Y;V^J&@A zViYB?@ED0n4ZVjb;>Hu>)jdyF!@FC52l@aajp_pV8Q1t_*B{ME{#{Ht-1t3VF+Wpa z)JIJdZ`;*p0jEv>R;`x~*%P3N_ZWQ_PjA1NYT;&U&X;@1Oa)p^$_w>iTAKgd631Wy zsh+!J&b-C~xLgFvQxMr$+#sV@XLeJlw0#<8ngcH2%5LH}b+$QghMQzWoK}>EIc^A6d`ouGGgI5aQiSGw@MWv@)TF# zOVEI>nob_t0LkT%jdXWMkCa)M|7$r9TR@@>I0~NyuW{69oEB`(-<(7?+$~p*%oiWA z6E%YBnnHyZ%O(rv{SM_DjA|!6(tTq6T2G&Ee3a+%DIG=U_Hl63TwN*%zC*EqG`7on zr{4hyV23m-JD2IwCU?C9mTLpRc_F)q`hHi2bo+8R@~iDRee^LR9CV0alSdT9pdo5m ze(XOEC~%==N7uW}6XM{K>APhh?lUa}rjSlyoud09pfs*Ex-Iu&acFvJna!^AhA}8` zlBHCPz=c~S($ITN0z$rw{gM=>J-cS*Hy8LZ(>)8*UP`svY*XF3>H7hvy(a03g2-Ys zFw;G~*G3^KTuMovt7VGMg{^*B@p!4|*Il566#V1N5~q-;TLsN=?JX|uP#b#Y0ajX` zqYZWWNO^-&WjPo&I#j~A6OIuK5>yM74Rl>ML2R}LX@D65l@a=FauIQ~DG+v%Ds^r? zIX*tV57y3~f>wU9fv3yd$m5l)R;>9<-fiQjK!$B=`S=QFV-wNeMY@t43g(^6zizjYwoW=}Q@lnSq@V z$=}r{f1%82T$x z>D_V0V5UzCcW(<`M*+>!!4S^l4f3>-X8QAw`x|jb$aYPv2GM^#_xQZB^74z+AQN7} z_gX}OF4X}v;7yi<0mXgF+5r6X%E3Lhq+2=qOAx<{Wmi6>9*@KSY-&aM5oc23&?s88 z5m423nQ-QJP(}A<+VO_>gwg4$wUfykAy2x2Z2$j_tbzzIS7%$4Pu-oY56M+402+%2 zQ%5$D=KnR36yPV6JV%LMDs-$-UWMr$9~?_(NU#s}kt zO@^L^pf*(TC3V*1b ze~q(Lf$h(`0*abK)oSI57Ym+)E2T#(s03Bi>CM#5$QG)+laK*8?&@C*Bqh(h?$j^k zqZW&@lGZ3|ga`|5?@w!6b}gYCb%zKoO^N%=jS`U+Yus6d_9Bg(p|5AMX-*APO}JX) zlVl~1A^#akN?x0)-zvNuOwh1__WiEB+haNCa)8Y_{9bIQoNN$XNC>sDK$my1fCpTO zI#xji+i_Si&kT1wpgg6FH0(??L)j4&jt2hIE+8I}h-DFK6dNfbMRVS2YO>MVF3^=U z&_043>VS)WMU6O23o=)~VH_2qK~DAli6z|FJ{2C%-`|p$5ftr$eAFR`3>v`i+_alkNHAS)pjgcVV z_In2!CKWB)AP3|@p=5u~jZ@;xO4PHMN+*V4R_A{@FC-@Oe+F_yJ;rK?1Oe(hUQbz| z>ZGC4MsA7=;vA#Lq!neo{QI36!DorW9bXb?K7}JZK8;dHK>)MC6<_v=x^?NOsX zY=r~%77K$o5qug18P+AO8|A`Qi47%Udv%FhscD(QLZ_cH z1Qr3^1(!3+wt~M8Q-ywuX?TB2{SLHn>hUhHVj7G5Ll1o~gi57R@6>Z+E&zT!B*;(* z2l-qSIT1Cz++mR)qn5LU%5<$@iQZZ5ifwv*V+>QXklkT?vAg{2idV^tG>&&$)GhjE zC4j+owc8hx%*f|khnK>;!=;>Nfmdr=Cmy3iH)Xxl89!} zcE|h%&K@HM&h$=VJt#=b*P++D)0<<=;g7gE?4KZVI_Jr=6wW@s_~z|A5?gB!cbjSK zPj^NFj{oR!i45ylpmRY0dD%W$d>)8A1(+U;HRb@8Foz*!fSg{QZV%j2A^yT-O8lHU zm|&S5M(}E?#?S3zjSa^2!v|w8FKd$u$5(V``sd;{nt#~)FRN>yDj(*(4{pYw-98SK1daM_oO$}pK zLCn1FlvC>*EC|x5BoH>l1Gj8{IU+hDyUNJIazWLJK&Aa3&^v&3%2j@ob>>K!3JcZ=^*OHeL&R$ zZ?}hyuyXOwrW>C88Y=HD7P;`z|ApE9X8l8k=X6yL?p>-TEr&@<)e37L&ztK`8-|x^ zBOBwe9Ra+Kz-qG|7Rm{G>`xT}h)exi^M}Vpqx0JN+jmCl%F8o-u*47l>-}%(#)h$~ z*cNFzS)7kz(>Cq#W)EZp16O|0bk5mS&I#5h9~jl5g5a&FhoRC$-i$G7!>cHlLooy< zLhL6F8pyTgqX=t9g>cije2pOx3APx=eLg?U=duvvN-DUSW_FahP;fc7Y%jQZm?pIO zEH1ng1q!Sn5ZOo~5NV7(Zzx7cpip)GC1~2t6jaoIw)oOkx9RI_Pz_wV(jf!`UL!3NBZl#e(xFCBF*rj=5%T{l1RA7&u`dN`s80lHESew^v{7hN z712L&QG+MRz%{mr|3Exi+YknI{YeP|3)CIM*PWBkPX5I#<=OcHr`hc@ZGX) z$!Fd9h|zZ_uqy1MC>=B?VQ|6>L;FrP2Oh8z2fm?2Akz!m&SK(!EC^}Fnt7-@?hU9q zdeYro#(89pN*tY$%6aR^PN2~SS7-s?IBRQCYaTXg8#Ho+XNyS8T5Sl zgGH831OJYYcUhAsU&VeMvT+-h;l8Tpf{&zxMPFXr#S9#`RlVE~9!Y8P^~W`XEW~XM znaqa6V*NBy&jXWwt zKGj)Wh6O7;kw*O|E`!i$+pvUNtPr}W4>1%2m$onQgeyz_2?+G*7|4)Xx{vY+FU;L& z4L?Ii%C=Re zY6UI2s^TvMpoGP)NHf|cvV)5wv^7{$sIz_Ae|d2+u)7{bXBOtHQN1eh!=d#t9aj=I ziM4D&f~+*4omrLDV|bCU3&owfhV+~~TOnEJB#uTg=cH1nu#$L#rBPK;%S#`dIgz@C zVpqGB(y;~yA=%;&EmRTVuq~W_;O!$J*+lyzE7pugAm$b70E}wrWqr#4HMp6)47Jdw z8$Y9hoFBX_M}e>*M&z;~s&K#;|K{qARUXMapI#84Ch*+S;{R6CGnN41#$*&Yjp^SN zN%QFIRpp3svEF4!W3#;c3nnmHFswPu63$jSjYSiMDVRy-IPZpzANzcFSgS2i?FwK7|b#%wb&uW@Q z)oh^BgC!PhAnQ!-cqBevbjKmVXeYFGQ~`n?AR4E9iMT}p+a*WW3xl<%OWHo4BM}W7 zI)JNB$RG@hT$T5{NfEec?vZwy&8|-W8Cb+KzX=`w*r{fAGwAo4Eg8(M`Ol${|N%D=N`tE-yJfC{s?9L_jjn*&L~@0}nN#hO=@a!KM>b!%3iUpDMCKoWiHh5=nVDhv^W8I7lWk zr1;VD-H8KeWrwTlj+Pe*QxMmL#O>fV1>Helccbj* zpQ^Yn7KYCareVfw<*|m1z|c!n1qPcSRw{$=a+g9v152Ht@|w!d0!Vqce0(RxXaR@y zaFGdAr`u{g5ZIKMRW!qa#e^p~RgaZUvo0!#BvyF)^GBOSLkVR^@P-sCvtkSCw#BOWwm+B+esS#A=#iscO|G{t*}8sy%VLb_=@bi6|3Cpa^C z&ISmit~`BC8~V=?TS7CAHPPz92l*rgH`1sN_A*651+Hb(c2j_P;e(;)yIZ0g1tI04 zjt8H+PI7d2+!hL=PMf#C{&K(62`^7`o4<%Ljhkf2dSiE1mJ{~B6a}NoBU~0uEZ%4! zqiYat9DKIBT#&6D4iK1e`>7ccNm^Jn_+8U&h)tV7P{6k8^!am>85j3=V5A_9E^9C? zq#WPVp6|b?bM`S9Qd<#7wo7mgV_OgoONkhJvD`%Mj;8|!YUq@hX(Tdd7EsokbIXgg z&yVk3n=L`g>}LKQf`k-UkQHy_mPMY!ncUq@4VOgpIzQLfFbTu z16;q70M^uWIePW83mAS%-8g_~0H6yk2Bs^cEq#TW+V-O+v)|_FaF(}#Rs34zC|7UQ#25v!qMh`-cQ2c3) zQi%irQ=sLur_pNtf+L3UkLM=#QEiUlG?8f+8^T8?IqRKA+KnyKMhOyDvyKxke>@4% zp2R2(1#DGafp#;(&j+o+2k(!u`Z~)J^P=_QA6Aw<+wb058@OJ&zr*v{Y+N|qH+=$#PB_*c zcB<#d?}ah`VG?eOWYX`@crTdQ;CsbeyA-%>-rVA|{1F7V z3@KBrm+q_n9SqUv4N_*)4_5|KTi66D3lgM?I>fB&zTD^qNanqm29YhK#6kr|e5XW@ zU8kCJX}}j`4w{;VqnFgi;QAj&alc(8`1M})3&k_vn!PK8Ij)m6+QL*H7CK5@D?d0J zZ!EQXRA**QR*xgo235t|2G_8Ie*p?4qaR0K{D*U<=5Froq1zUU)NelSixfJB=<5gS z!$Btvdv7tO>{V;+!y+;8<`YbV^xp^d6)*KcD1t{WF&3~XH)f6q^(9nhF^>3kfD`h) zN|}DDFh2X}x)}_|-)Y&%L_wRQ5P^i-aW+#vqA|R!z!v^Y>l3R*>Xnku0%j5$pD!Q4 zqBPH_kIVK;$v?>QGM(%1$vI6?8>h1F;{vtakhrLG-RAbVB=lz>Lc2C$!toUkVa~|VF3fo6p1{P%W)#- z7GHk^U6qJUdrPo%@5_VkD)ffPkHblkyczxAC)!7}G5|Uc5sUA*$@ILv>df;yseYZ} z#x#wY1-nn@^-BEb_3T2|&9fQE)u^?#yTXQQ$u#T0Glb;__Y&oas-BOEmub7Y#C|Ci zS$Q^I{lNkq;t_kxDkA>KCL*qYeEnX+X&zB*HJt~-ETqm`g_tFV%|qSty0smDYYqWf zn2C6Cco!{Z)0Ky`oxW@jd5&L1fMh1$SiTh&e?%Q|#po3KKE$b^oN1>n*g5kuP_Ejn zo4$J56dk`1jWT|U)t=;5;~QsZN&*4TxS_9g0Y?q0Tvh^ImA;rkP=#eX`EEOJ$ekWc z)jUI#7uQWFN6IOpSr99InO(M$ZQ^v~Z`0e~2rBO116qIqt?YQCI<%Gl_FfS-d%Z>D za*)ZcpV9>Wa_CP}wIALU<$qT_h*&yW1W};v2^1{|bhC^Jf_ew!xqdep4=?jTLtoa4 zOJAbOtMFjiAQbEOqBHEyvxI8FPQ%bAmVB*rhO4eR=Q&5nI##NGzjCGEmQKW|w+66p zMAEUrxjHpy+pKnlL}PV_g6cDSylOws$70*(`9u9&J$&>@ue$SZL9+Ng%RS%Z;t%Z? zG%t?p7{kniAiSs+)O_$*8Np7m0mzFGWw3V)xglwUNDscQ6AGYd7?4M!FlZ!-imzy3{96QwzeegD zX!d`5*e|{l%xk{G5OgfWbsRwl@dJ04Jk6+t8hIRnwQXyo|KL&ocGqb}SQQ1y&b7}# z&7>Sf#hBTqM9BSXh%()WSWTEr>aEI7@VN2GnDTo8llvgf>P z7|Yhk)+-3uZ%-|_^4fI%6*^6$3Wne!3XR}*hhMyoS-VvNbF==cP^%;ChmXgfaUKR{ z`~4>r#-79hnwXk6wr^sizXGnpRaVH`Z;Jn1^iP z0yK$sdmpB1+dUSyB*%?jENoy+_oP7LV8Un~->mJ@@6KwF^YdH=b_@{zZ@m}6!BlrN zeaaPg{6zySWa!l(r=GX_SHk0u^1nEMzbZeYnI}C&0!#y-_WK9akcy*-i=jt(v1u#? zl+rgSipYoUUSfG!dUgXh8;;n@h*(9<{CqjIW8 zLGqy~q5>wDc%6oId#HAzhjJ7an=}OcLcd%=BnueOH?*XHOF8_sq{pzdc<%)dzRLCw z!qj$-W;1DFPP=0Z6dx;txZVi{N6NgfDpsa4=J%LjU)oJ6#)&aKc{(|CNMjz1>>cuZ zh*&Hh0*NNZt~F)8O|^YP#mseKC4B&=c0P<7Wn7y!^KW~F<{$O$)muJp>*?7}xi2W# z^v^oi!GUE8YK1g(H5yL7!+Y{_a|Kx6%YbwwddfoVd=al}Mr;S3QxABR41CHg=6yr+ zm^(^i#}GqkGa`U1fT!keF;z#ekO^{|AA(h<{n(#46Z72AqamVAH4__H$9GMWt1Fz% z(9*tXOya~6;3$xGIPcNV0Y0ROaD@ZPYzb}gEk)kTdq__b*-%f{7%hgDwR$k7zvvDc zg{(_i*}kZG=8+Ru9c4ZQaULtQdofgE`a;P9KdOthzfY0=o!Me2XP0o8SYH#pe1F+| zC?64jczyqf>G`6K$$>dQ(JW1bHO`9Ab?Rr^kVVW!j_r08@*_|#lQ|Q3A97~9t!R}Z zV$mmsRZF=eN+!-bO6yNXqI>7h{C4J*R}T4~-|>20a2+(Wn55FJp-#Zd{f^!leWqA$Vl{_D!7tVRBzpH~ zG6TbIWmzw^=Tssox?ABL+JIa8GVreBhr}AMGGhwF4@3LnRMkqhdsiT?$aq?>~0JUjGg19Z2slsS^&t@_%Ue!GX0@jc&nM6Bhu^WF%MJWUc8W$5+M2vf1h zc?@-ZxIUmFWRib)aM4n2TIO(3#+0R6WFzC<*~c^OW#U&Wj8Mf_{BP32mD9#$Icl{l zgUdqOlr0*&9oS1hO@9ZC?#0S6#)hiKXi-M$M!#|DVCz|w1BB{+4tI$JqWvg!V*k%V ztC~kf6ex_~{;@af;sQ5Nk7(e~Yc8JScD7Ddiz8W9q$*}gokT4T63ahuIwk|noF6#V zH$3zih7ubvspLpfMJB~8rhMu3Q|rHwTSWi8U3fp|SXjO?fwa?#y7GbCm;o8q0d|NB z)B%&i)0)DJ>(G*Mt^zGlw}lPxz4s_LQJ0LZXCO#-AVF8G?m5&9ISp-;p}tf`gVi?H zxx+?Up0Sic#`beKbd_5_JJCKk$+_yMNtVDhxYeWLS+r#W_q$8iTfs!Shop)htRG?D z*hLP46;i8To)tGm)Yw(z()V|7s0FxXsEPfUQ0`|h*_zQxuq+bevo$2jlOtZ0VP8)s zr45Q9rOkwTwQWS7F}|zmR*+A;IGD?zzL|d ze5i2ry;=ygv?_CR z(Nj$RM*15brc8HWm&Wv_^eDg^d_>dn&0w7@Wsk?(E8Z|ojPw1hYylAI_&S4H@!^Tx zo2C!E-t+BN6je8-0*Y3PV!4Xd-U%7A62yG<#yzs7lT7T|5c!$s zI+NOO^Gaj<6;U=aG#FWF^F^uii=HZ=quP{tK7xkp1Z@x*8Vz3;lEK;(p@A<8d&8wx zDRRi$>J@yNg{t1hIy0!E*>FY}K~7L)VZ>-!5Lf$`$6P-$d&w9=kgp=1;QyNtAL1_O z7ZqffNU{KtAm8&>Au6vt*d?L1mbKrs8`5fZdlIN9_!;y^K$@JRpwrRm5sJ0MFX`I-u@a z;|el1z7t>ju;2EaiEkGBzbB=ZBS{mPl(3lcr`OL`tNz+2G|tc~q?VHxx*ZP4`M(SW zCD*sk;b2h95r6k1-&pqN{u|`CuX9pKk9<6^27PTp=a!g;bu?{G<;bY_zV=zyN&S$K z!OM|40J||vqD2zDm-!K`ha|cQ$36&X;yRGRMlDaOg^KKql4D-0VB&WUCN=p-8{dLg z+moWIj-C7ZPA&}JfCH4*oJuWQ9z3~3GOale9$}cD!ns;nKhyrT0eD(>@C=tQ+{xb;yVWyEnugL-=qhyWeGc;B|79Jd z{Q;NL{@3*HK7LM~fZ;4Bya_$1=zyv22a#n$l3V42@BpIxs}uB0h6kgOkPf_4*PCI$ z=`HQ!y<2lb>dfvA8tpy(XZi;^E&4%)c!iF}0IbnMpY2#vz3;7;3=jO=&*>5{ztGi$ zhmq{&nxfv?TtAb~kHsMOd)?(vt&|N7!`v-iXWA{v!ML>>=o7RRMfRbRUH;k$RHWezA?Lda`_u^VxREP|L105Fr;ItA4$C-J4@XmYfD||5*JRK z)O}7vMS;d^rl@_ToK=(Rl!VME&booxga*?5*6wfdxd&+556M z%85wve&k@RhMA(um#d++i+6WSFLk52ZC9aWig0#XfWCHlTCoNtBdHNdgY&9r)Qu{) z)mS&avwG45xJ9+&!**c|(QVymHp^8gxB{G=e^N0evPvNs^FyYnqOQ7u6_i@2pLV=i zjeQp+Q@H`3Hqfqy*C!wR&da0WcC3Mw1FAA6)Og>e+^7~UT z+F;LCj9Vh4>&UKspV5AN7E1e~iUSLiGP@6RELs3%v?}g{%WLU4C>n2TE8B$I7enkj zvu~oeW}=msD=MNKx3BO(32BXHtc(&i<~SGIsxrP4eI#aHR4=}%xm`aqDqCOku9jC( zH4Y>3Iu9e6NY26d;?u$L^B}RlJIL2iYKr38cb_Ne<(@QZKWvgIZc{P%wE~G(br{L- zZi%Fq`)a60WsKOX>049P(_27m%b>`)X+0=f9Id!aoGeZZteY?5KU{>e7VM0AVL7Ap*RqH( z=WXNgx{Ih~Q28X-FwpZIp6{bo6vnj`A?5_RERI`m6-r(>CW=T&NX9mI)7p4e;ATBi zX>b-ie53RnjAk?4KxZ%AK)97=Cz3wgnXv|$y0He0Q7a*S2qtv?5J>2J;lPUON2z3z zN3SGh8it9~uV0S*3ej}&A!^6SuRhEPRy=&|zp^-XGeszGul^9*%}B}oM~cC>JaO3) zkk|7oP&E9y4K%l_Z|H3|!j(Gck^SM$LA#@zJd_Mb#~DSs+CT4))#zwT!!f;D6r!ty z!jYdN9qKp-!)VnMb#;^x+vmI~14h{)6w*<8@#x0`r+xUW7}5cqfbKxYyF0=~i8hxW zx9~e3E~v6oDbA>5_O|N9HD3<4#sT8wINzS zYT|FvfRm`glYr~<#(=vuf04%;+QR$pfV)fc?+A&}fK1~bcjJ=xl4}%&M;m5R4pWN2 z{$8q+CR)BG!=3S8ZtY^Sb6?AzZp}q~pVs`JhK>F2{_ebmGd!KSHs4<#?YKRhK0UOq z`rn_qrupATXH7r!pFG`Oodn#&PoB1RZu+zQZzKag^)m$AK8|+X(;;uidaN~aYMzZ5URB|Ia;NgJbsX=qAQPR)%=^)_g zVaK&%w{h=c<0`ArUgFR@D?F?J(srl&>dCKo(>TERr)PQ=oEp%$^ETl2oZ&_FQ_alw zRmZ)b?cCGZ1N`anF6;5Ju;Xq1+mA<&qbC7(I~}9Z=?qy8cao1ho)?y1R->YuJd^2v zzG=DI;1azS@w~3{4Tsb73edfE&EjtJ5g*mq*m&@5>$n^Uxb?m}O_qG}@P!ac!+pc47gGR!c$KgKDY^|q047YB%jj+A{ORRK`JSTBq z!&RWOUAQxJ#bDweP}X<(OUwoLe1Lc@!^m88z_)2`XO%a=Pz0{yG8e+^v3Ud*quAzJ z;f;P3Dk4c@{ETZ)c%SvW$iVc|fBZzZ&8Yda7~HZ}`HUrOqN8raT)2*t^ZQ3X#r6zW>bOYqUYw-9@94M&E|+a^Xr&09E3TT~*Qr*5 zIErQPk3G`u{@GwY3kfdctep)nfB9_8zS8&O*J-;{LB%vo0C!Jam5ZqR+_xee%pK&? zla(KGJvqtSn0QW}F#%3g3((uTzvLFiIN3k@>u?{1mTpj5 zNr+l<)>QS_QXs1pNh<7zE=gS1XMWjNomE3`G)Z{ojr6QYmP$qAl1(~z zfjSJ|!qX1|-!Ol}Lf-#BV+2ij)A6_O2WLLjDY4L4#NsX6yNh3;z-0VjFS&_R*+RPy z&|+=BJqD0)4`l3mJUq6JgDrWh@c!aaOhyk@yPu=$Qpt@Zm>c~EbKD4+$ z^MUGMllIUN%QamnCt{mgiQX!RmHvACsBgYmh<|f}7`+I}-Jn1w8)X6$EOnD&aw|Ofyup4hWGs8>8B?P3E;~AJB0%KZWr$Pjof~A zoY+nqqjpb`+^kQFIsUGBlazO@@McP1Cx3jt93!NH)|lPm0#DV3`hb zV%yosKbO$ zXw7dSMzyvC6s4C;tz_ld!vaB(n*};pba(SBGH-_~L(s)ma z^A6apKzA8(?U*NQ$-f005=~ddANSGsl%)6l0}os=Z`|QNqta&C1@+ui+YEIDYlYo{ zLRj#x_GSkRl5B|e(=?B9`tRopv3Nod)!}i=)+uJWDxCmjQ zE739zh6q*$CAL)-7esTW8lrY6K=6E|=;@f6(N$(sS>R`=@v7LKPOks72PwyX792T` zAAi-HIIhv|3!1J8ye`tWiGaMA&XYPUmbD@L2#Zz03@&%VlYQSl_qDLo;ZvOp(Q_w! zx%`a%y5erj5Bfq##1`bjezNc@AkIe-x$X68pF}7B{ zO*@9r_0#|~r)oHCA3uZTENCI79m!ohw5xgKxS;hRX0HNQjyDBvR1nfuV<7K+w^=Rj z>)CSlt?52iwSpjt3ijwQJIpsU$eOkLr)!$w5X%21PgaO+x56$DU{Yc~(D4y;3vfTk z>3D)p@5MblwcLyhrau&H>#IjlVihQl$kewvEqe$ysErF#w`uDpFgx5&W+yg27V&MJ zE!#Z-b%x}eg775YRjGezW@Edx(k>NL=**v^?z73bR^d; z!Yg8rOn+=t-c>%t!!q$=lX zy{&TrrO8U=lbq(ICLl&Us0x7kSon6aEuqhjS~!**jSiDvX*Kk)vCLd70+Hcz;WAAn zFMsv=5g;DyTdvi2-M3NMQ&6^`_EMb^x<8BE0EuJDpo_8;{x0yo6lFP~Iu9fOU zoNuUF)F&}_0pnqN9qf|>0YP2^r#&q}9gd5wdnZs3Kg&SV{d>I1s>Ra7ymcs%*p5$ayvseM>b+tdUl_?>$$b8jw@Z8|Qf>XZ#Gh|Gd2oe= zcPAa5T$&U}rZig=>fa1Re+_7>>DuvBbE?5$txdW1<Gj9&|_H`o?KPl*^?a z6|10$jmunlDSCj>lqY=Ge{|GJY3h&&VlreS&?#V3BjC(FCX4iY&R1^GVrftW z;YrgsGd0`=^L-4Vur$elQtszuaLj?atXsWmyj!u2*{(>R{9#Fj^krf3pnpqjZk|5~ z0y_(q;rg}<*8Qp9(ko*;tr_vv+~u@G0A-?%%z_^so%GMZ=DFj4KFOFPG=VS_GzjMN z>F+=HW0mi&f*G6^dn>Q3eQleXM2i5Ns0i!#nYvj`sluDv`z6x`- zsB{C_FUH*k==-j@E!~pU^NO$mylVc5gdU*hm$kBH#>v=5mY?i+0Mwbl7;zJ zKyfu6&Q_o28kLZiRC<^aY>P3XTo#ktASqV*eLAziF}X@VFYT(z+n*Q+$MGV}n{%0l zf0(7_b|ssid~ytdZ$HnD01Pg&%9+FhX=FBWXjGJ+Yv6cPm%q`mRhrTF_45p=_WMP%tus!7c^ECzK|qVmt_ubQ=#(vK=fOwET@OT? zedxdPLJoY9{pn&#zICxfNPUlG?~Guudw#1CD9`2sl}hWHfY(;-h{7Pc#JNpt@uXJj(CL)s6=J{>yB;v}RM*eb2Hsjf8-j#ZtOG4wXQ z!BrAWI$D4>KNCmsqPArDQgYd3DT)+yn!#F#8E|Ywxtx;A3igQRuLtnx+lGX$4oR^i zO}XVvl@BZ_NxkB#(d%sx1hp#D=G+C%%c+hbM?ZU{iztr;7t;tgGdbB8x|@ns(f5Pc_^=*Tp>-j&xKzSZmSrP8l*W z95JI3@gNv@HxyrF$=2$=@nmG2GPM5%Attv{S-jNam8SA1`{iz(SiIQtjn>_p!Rh&p z<_R2u^!Y)mchP4|%=o%Wve|nnK*JyBg+<$9ZL#{n)9gn#X}FH<8AIu^cDw08{jnOg z9h_P;upjKHO+o#!W! zB>1nE%}SU-O?MRy9WeGc`;*}*_s>7l7ogh&d-@_UU~Vtzk?>>NJ<#$y&nW)b*8 z4{N?(UC|;>^)>Lq%p4Op(_bx5shzX~UuQ@J8D-04v>Rt^`(3!6g-ldNySmtP^nNVq zERn9PRc*S?euQlv5qWohsC0I|&E+f?WEv$AD$)&yS&+J#S9*@_RCQ6t>~f1_H!Du_ z6)f8Yo_!AmEM~##XD=dJzk6)X`W=T$Mf1<7A}jXEHQf0nEA5!c2e#@}7b`4Wr2{TW zFCUsu7wik^xo3clZIFNFM&8xsHviZ~qQxTLkRR>g0$<+a+kUDrdm(?fGWCRgHYfT> z(ys#J_M;2B%ieA{B=YwdFi36i+~HusV@Ty}f7p2iTVv>UeCK{vx8&ubFf1!B-k+T% z?{X%Vzx19EEQ?Upo82CB@ae;^#ou zAd4Xq?Ue|LJ|K3@NdXJ{nflZ+-~m5%?33N9RS^@XP)oyCHBXy;BNLTbTfPpFrf7=| zu(Qy2kH5F)VMaqB-kWIL=8RPo8Y{p(MxqwI*W;$X4Cs z2M(4(bM4TC+1_pRN!?=;vJlnoRt=lZh%7)^MQ(qqo7KAST(V}=aib(i7L4r)e`+oF^HkXO_@EiPY3EwhK9U*J= zZ|l7Y(M7zc=5)b3q{d%^V)H(9NL!A9()Ox}Wk>sW4KuRQLl@7m%V?dRhIwn5el=j^ zN+C^Ewieg~Yh*pq08dCDN6Nv|e)%yH5QT&|PrNK<7C)lTYQlwl);z!*bP_PLM+Sqjk;O=t90~ zG2z#C_Nt1HpwQ&ZWmoxP=p&QRuJ>&ASCLmWP5jV9$f^oOtY=}{g3!zidoAmtxWV#y zj(T#r@QJfQ;)mVygSW0eH{&CXdcGDt+u1Es1H%eN6;f@y9%&3qZ1w|v?PNy*8U59+ z@1;`(L*JA}wrFF!`$)Smv^TCXC7hq$`RH-jtJd62a}OOXC;s|kBl#AZR?9b^0d+bq zm*nr!*WKBm-SOCrXCB~}1kK3`h3{t3CGygG&hUz_AfcN()}cPTZg)iKX+1IPPQbri z-b|dyS|DC(ts}s)mR8k%Zw4isMEk1n6_)O^aI!n>_4j|=6<^~tEW~q|XnPu|zlqmx zKZ;G~J4z(+{Hn;viL`uY;ms)E71o4D%0ze-oE`t!#ADY7s z-^h{uu-sJcneZ#!q@O%yUcHOo8U;{Vwm(evNuatpypu=OKGbRUkQ1V+#dm3M(DyFC z5vzX9DLIuO)YO3QQrO<=sBzo%)H3zzlW+XJSEi!JSm`oMd?`eqV_D6N!k>tHHI?D$ zV_ps+%`{qMCCpTK>oIBBU9%QV_-fYaP2Oe>QXh=9U(<2{Jvdc~sot!_PrSTa zr)0^#NF{oFqF91!;<4eZNAh8VKBsG--RbIubulN>W5dydihAs}utxIf{n`|bqx86l zC=g6-w6!82_v71)5v$ubSvJw54t+Tw)g!}yBSFR3cj%IJ$7RGb9XEuqucR}rh*ibR zcM22K`MywFL>O8xVxhsjW=C!A*ndYsr}25Le=i|RweTww-*-6H_7So8=ojhl-016A zu#amjpQBEqDc@bp`fDcaT{_gti(S-}Tyv9Rc7HevUROM+#>=qx%VCaa68=+)B>#P= zM!ueExyy5)?sEQ^lEHtXT2mm5N}GS)hDY`L<5OQGz@_mx&*c$`(~mDhq%xV(ZqHar zKBqzb+W5l*kN5#O1c1Hts0TfLiC>~7Aqk)`As9SNC~{>07vaBoVr^(zn41pjCei&>|)AV(0-rQ_n=zlgA+H$wAQ))JjBZ)QP-9hUFG{ zT6h2M89G6Hsz@;3KmsNxN&Xv@T$N!T=Up8{_Ic~#-H}1|?p*$~3 z2+JsTJeV|+E!DFhy_5@YU`NzDGHEP(GqpDDL6dniL@p|;m2}#Z+$5KkApasVtHF-v zG+>{a#<$`Hd?~lyC`2dA>ux%}c@I2!)XW+WO4TYMB3R2G!39B#-<>WYVA-@M0Pm(F zP|(lw)bi$CnPo~VO$ZBJVBY_9Sv=6XXh)NrPaww8#lIKKw`|a5*;bTSzRAvpWAyB!R<_>>ep;*!K?rJfZ$3+aeq2hR$J7GFnBLWoaxgCS-AFojQOhKy7< z?WugPsG1Cd(ZhSjo!9Ev*hPv`nr z<~J(XEp|Evkmdm=vAgYzLPfk*sq>~{GBqV+by`e+YL&7z<`iEvndsl86E(GdskeH2 z?-DMG!o0Qc$+qls_KT)WiX;W|$d>Q-de_<_&jg}o^+uk}abfSdk3P1$BAdhd(mJIq zu(W_;GWKvoI|%uKhn=|M4iq=)T||FF7C7` z$V;1Rx8z%!Y|_f>PnR|5H!%;S@Rhl=LBX;PIgmIFCDo31aa=JcVf+19&sWoLSN zf+A+9hRcBp0)HcjP72&CepXtwaAG)?(*2>a_(xf*K{NM5JEpBEcSE&|k|m+yC35Aj zH03;R_;RLF^}sr!A$e*FmEl5KY@v4>*Z;FIc~D#_W6&N<|~ zAu5@jc=CaaS|HZ5DYb}A^GLc-pGYkOS`df1sI`EwMnkFet$KP1;fjU&L5e%=>v10!r?AE2Ry{8 zCp@|%W{KmBsrI5WpP>T<9&9ITjrn)5F|$&-t_ zwwF?>PaP6CWwKbRB-)s@J(lZmWU`c#WwMOC=afZow~~kwc{xDk7OniOnCkA6ao4)@KcVcx#LV(!3Lgf9!SpN$fCD}exzvt4bm5?fElt&?+=U6a0|9VDtY zTCvURaHd>7zL#7D46qjHyw740vy|7VJd09X;2*8VD@(W%EOivRYc4PEbo2D(#27(D`Qax_>7Y0Tq5Z@u4q(Pd41Qeg=&Fk-u!nlbZ#DWzLcfg(Pk zY`A8cL7u5g$sS@~VW>5?cgwqAA>cYh@`+1{l4G?sfHVoFW$c?!lS~ojffn zx*DMi;F_{?seK9%**c=kR4EU3@qCFvul90tpsYh|7kQhTJ=+(^`Ni7=AMq;dO=FfA zfieaogVgkcQz&x<3i+zh3|G|=>^6md=^r)r1o7BZDAdQN0Ui#SxS5`V>cY7G{b$E8 z6sOR|owF5jW7`Uph};>S4ClQ|ee$fbyhYw!@Q4f5*;MkQEwVLm17049)SB}`$J%iDLWy~q@5(=ctFL7NS1;` zokQi1rD&#O#w(&@=42OhlyaDMDY_t{@EkvW?o7coX~avxtxqeVnfr6cnM~7qARva_ z60Jg26GS~@1XJD&-334MHsw%ciHLkuP_F_*B~DT<53HSDKH8X z0?bO;X1L4PKoe{zzL#w|@Ekw$Y40`{ya=BJ!U8G1bBQ@U1VJHH;siRdtBpkX*M|Kp zdcp-S9_E4wO1E zQ;CTltyG>6B%6?MvGCGt_6ua?jzC)FOvdS_C8oza6Tzy< zA~soJC0yaI?_-82>B~GSHbp3|?l zV4~F_D|+BF!4j3tST43B=a;y_-6!N@?|dugYbX@V z8GPEXNdZn;W*`UTUYJ9C^>N9QBaJ$2AhX${LJ%xYSRAPXm<{XnEjbQZs zkB@D&Kiz#R(s$Q^x>t#^PjU59^L+f(Lx+nFL0Ji#LTJC@Z?Y{`%Wgs}vVwbrkL-f) z7C|4s`@+e=R`!6E$@%VGE!>w$2D&mcwdl%%J1r@1^zSa2CG8x&9>2V&CRy+=MBE_w z(bhv_y|#ydlTx0v^=irm+p;lC)IsKlQ&oMUL^*D4DPoj)5@&}~ec`nh>c=chk^1m9 zKP_u+qyO?tDXZwC$lI=1aptq!M{oHelzJN(q9uN5S=aXRytA-H_FvtL7(B*eXfKsM z0Xy7Pzr~Hl72U6RFtTTz8ButRACD2i_#pgA_!UBbpT6sPXNY=Vkt(I9&34=Uz9Jk; z;@H6u#S7tELwrEvs-nPdyB)qpD5BT>iMm!id)k%g!4!?$=7+UBO5lZ8TB zowwa8j_PEy_{A$nFpHI~T6y{GAmH%;6!Qed>&1 zgNs?Z#lNeE&X;_XmQIoJk7EaWFnx0M(yA~)xx!gJNk?+9Si|on53z&y{#0!NmkeX{ z;gE|zl?CNpN=1J}53{B1h}Jcqe3@o-OruWilciXf*^L$L$_d9DjTL5yIF35*1Lj1X zlQ|ts)ktEC_@jbSw!=S_|A1rLsF?oBaM>L`qFZ>NbkQN zK3-NL-N&OkEo9+sx<{r|FL%7KVXCz}UF|m^xdQqfkOv7jh~>P_B5wYk4sV?`#BDYY z-!N@gY=B_sZsy;XQ2A@o-L>sK!3jaOtDUN+CQ13AgW2rQZo2dY|5YdWH9o~XL)Hek z2~rw1i%O_Pf-bAVLQ1G8PeQ1uOF}4TF4-(s5BS1{ z@IY%#bwe%!pizdV1tRMwy790&rmk3PPc*F05bVM;895V^SFC!;te(XFA0zaK(F+Y+ zip$v?G8vKvq%x6rVemw};t|(CkjsRAn zC($>OeB&lC6cqRkopV5?+|}$1eAxyE#T4h|C|j01bX_V5aGL_{rU!<$e<~X8qH7lW zdAh|^o!9&)G(o(iQ3{C;Is1+u?S=DvMKm&@VGCZHwZuPpV&K;(Ucj?DNLplrE(1$;j|;`USS8r}ZweO&;Hw z2Oj+qyopxx8X_?_^o?x_{zHFH!i7k)wv2)!>Co;`QMhi>Yy;QUxS`Ir6fXe0=p2zDcV(<*LXiLz#_$qRZb zK`UsHbpUqdB|zQi)Z(kh}{C!=o#iypODhqciDRBRAfj(!?W}Wjw8}AHFs9&Pjhg z{UE@I6^sc7iIfzF>wTw`Z~kknNOpF)~%*{+P8c<{u?@XU_$2;Yu&L<|CCsh z$txOVr|i#2lgs^Y^u9S6c<^d$N-MdC0|gx=(r`-E=_W^FCSB!nCjHI&vvP}>YC7K> zs+o+ynfP30 z4EATjVC=4NaQ5UrrOq~6S;Rsy3to@L(~Key5s}2Uw^2nNYn$a3rINeYXzv+beDDl! zc;HMma9WU|R>rX_h$yPpdq-mvw1Wo-yN@k5=P|NWQntJ?-H52FRFM`kP4@HUlXZ7i zlfO^0PSOLs?bCjA#{kJE%jJOE|L~9WQwq7+&H}kw*&^i{<7yqtg^WUnGXxSPtH(f^ z9;9UmWd9Gd0>Sq4dP%l!Kcm5~OPP6zp?RKCMS*hHTS|_)mU`iTlIMZQJ_0s}U$c`I zfEyU@$8fIU#~<$tF-AXmOB`M3>T`d}iFC6(`_Wrt3Yui&kgDxQj}PKWZ{=eYaPZlP zuHzCIum8LM#U|7#{-!w{WW@U&K=RnmgdE$9!c@hK;zhXG_$4`^1a)t(LM5A1e3R>B zEbb@QXM{LVLj0aLDFv*Tqy_8`vv#eQ3T5 z&i_;{OhE@*{&;CW4qn+^zhH}eAxP2WbY#H!mR#J$<1d< zc5FO8lC;_HO+9s!p-kw8KyxTzjpqcqTgk7}^`%wq*RV&2M;j_K zNuW;6WXsxgsNcC5ta;1DgyWn z-gZ=u(A}F-9}}d|+3|{Do2K)^Q})qNs|x|u73NIIrAEJ;dzFv5BpGm4Krw1L^mAn- zso^h5x)7pPh3qS88qDp*;%lSqVy1$_#E1vtmS${*uh|2ZqM6=psvQe?Epb|Z(pHQ1 z20f-9i}si79|)R&;~Map0kIQtKM_ulh`JO%rdCG_-lkJ)`KHa%G`a-)FF8vH-T%g~ zGXL7=;MdlR1k0;e@3B{3@O@ib+#jcFJ*ki8W&qixf0)cvyJ`*nkSQf5(?;LEs za+g&7UJ)e@Ld^6j@hm<3+FJvhULLD|U9Gq@R=*dS$83d){o>n|w2{NpfB6EH%UOf& z6dUjj9Wislv2G%3#HqC#;fkV4me@MFCX2(e^n7>B2p8NMmNtNTs{@1|AO!7C)dNr3 zFX&%!e6>yu;BV15u^di8v^GS2^eQ1Sfd#!`Jv32-UT~oXU8DB~O#bhlMav3* zcgy@hHI|MSn><5A$mH9nF=-N>^MPBKenwa=Vuq`DI$S^PxrOd#Gil7;y7L`xV|RsJ{^_ zYMIR`*PkU7ES^|>qhiq9phupx#1VMj)2f*r!aSUTDUEvf!RPM-S!J(a?Cbf-tMlMs zK#Gi9wg!M-_hV!Rhl$?2{>Yx}lPgH0()6kb<1Xf;!Ly;%4r{0nm35wvQ)yUmTcqZH zzqs6&+j3w!75|aV$P9!Rt@eoorJ*PtNkw2Fx2AQJ8b$=`*Tch?WT_CF;sBXf)jyG< zoVJnxOy_11pX^j~g7GUPn2ZN@lYLfV+7ZWQw}pboK2Ujo*g?|r@l-AcM)YR7Na9qG z0DEz>US+K15A5XGFyIGm7^f?3&ZH-f7g^6?%20)l+Rv#OYmNxWdHK`PorJ*usQk~= z=lZDlGb0TUiFBKE`K7-)a88{0IWeV9;s#%PV(>c_xM`jlurJD?yZ%H(cjtOR=KITK znePNVugL{4&c>q7a|OWur-!roZETyA8uM7~NXwwLO5_q;D>mX`wIjygrV%w zJC_A4t;y3x`57$Ok$fYL?);_9H>@(Sfj6IKgC$&S3o1NqMe?j4Ai(jQOXT_W!Zem1 z{qFW#a8s5mi3}>jV*l>+H>{Vst5_H!^Pwimsk%9dn;=opnonHfcAju1H}Z7HF(O~C zbK%abzyY;4Mpcm!r#qjb@jEeS-e6QLYefagM>ofIyYXa3X z3YtF}DMA8!bTNBGvYw}qQ#EwVY>@+G`r8y+o{B2k{p3UO?-9j>za_ zP)_-{=su&SpfOcv$SKv@E8Q`SB{|efQyuQWVIs3}w~|Jg@Z;m3vBHo4;tdRK8GHCU zQu6rc1&Sv_t|NFBMAY}u;hCPvx4IhSGE;VBr?txBE6k|~E!OH}e%7@-8kcjFlHi=RS5~OD{KgG4NQy} z>)ciPqiqZKmc*7TvdlN2(`nZ~HG%ykeQJmi(@SIrCaOwh7ovaWCxq_ zu}=MTQ~0TWwb%S3(=R{HoLbPwl`{)SeX@Ik*k#W7>8v?mqc=Sip1LB|U=gybc8-3< zO>7HO7UWk^`kk)4!2SJk18cXLQU6*UT(o^Tua4 zCZ&fP_da_k_7yefTM{RNX5pg!&s&v$(#&Bq!>dQUuj(EM@#U%|Ql{(X00{)BVCWOu zN`%^!-O^XQl~n5%Bi}E%09B1L;K%ZA68im|j*}(BfUOatukD&Ng_?-Qxi4hiHFpIz zEc@)gwB9k_7*~BuC{9JKl0yIvmx)Dzoj#i=>D+y1=L8+wG4SyTBqz!RROJ7XBX9Eb zesHa(h_&s3(A4GTOI|vd4=fb+{`!7m`1lnPYMsEh^?riQa>?bbYx2u>`m3T*Gdf|4 zKzDzpn}zfm4yhs)$*CRBjaTd#wHnw}c8c1Bn?tJNKVrVT?bNB~+*zR9jIFBaEu8=+ z3#9(bJ^GhhkIWgn^~nkbO%%b>Ho5jJ#epScDz+OY}RHhG9^^Td9~>pB7LMZp7rBp zOVXj#IEOmh+473f?WhQiC5^!d%_TFn?|L7K(aO$D9zbPh5qHpO8L$x;D1Hzw{Yx@< zvmmKYT#k_N)un{Mo!!UDed4O#mwb|Y`my?vb^wb=4F1@})ZgMV;9$%pajQ~lh)bP+ z2@6RzAC^lLAF1QfFPRswKabY;4@##;b686p4-jyn>9lw@p4sVkVA!yNo+0EjyJb2( z2Y@`p3&WHJFr(@8{u?{n%O#vKp^te~kzV(tvOspyS)kHI&4DaW?s3KAzt1@qApG5- zhl*vEQL_WUsqLo$^vaZT$6-S8xEK02RgFnp(UZUKgNAL`IOValMxp6PWTA=jkE77X zRAJx*1f>_NI1WrCe4};HKDM3KSIb{~VhYVN@r@
(uGqow^nOv0J^b>CIr4`bfy1pkyz(17 zJeZXH@2$Jvmwq?=!`KIR_RDT;a)m*3MIp`Tg;lj2gkTvPn9#$Nm(bgkp4%GI9F0lF z|8=tvTzO1Cs}A_ZN$8EwmW!z0pg8%DAxIW75!0*%uvn1;$JJ{9HoYK29on-3@)bghHBj}|n6NVSkBff}WOubRco6Rj~|HM23>Is*RA>bs}G(TA}Pe$b=of zl!RID@#HullwQm(x?@-5G$190oJSgaNEI@*@57#IKRqdZrgd2#X2?4OD_b6ct}NLs|PU zg1~x1ir^aKf4qv+QTyk?JKdfyJ66Bv##J0AnzlLLLc>;{3QOiMS|yto&-;`eQyOfJ z_bh}=V^x2{918D>p>8)1=dW@sMM96`r6~$ZXD`#?E*%j8wxnMPmRZbtx}Vd$wF!YU{axsnloT}7tcF7ET0 z@bJ*>L|dpPXtS)ZP1QU%jf!`d)JHt@07|^E0$Ub+bZ=iGyE-t8P3R5fccvG_%`lT4JVd&sC22*B)9E`pWQlrFxe)_+nAf`{W~Upl1CI$-p-Rrj9a zymNhH*138@)F!{AYE`)edC>Uai<{bWMQerj8%3fqQ;o4k-82TepU|2Ob0a(SDN@>({qfnPpLVILx={k*b&Kvc}2qy^d}l%gTm)K zN#oAOsq>jvGE5e1j4qjTlYjUuECDZ_EZ;52^Nd?(!trWD+v2B4M!h3U#R; zuYRw}SlPUzNPS7hQf8U*SaKyGz(c$UA^Lt)Rj2vDb<)wxf4xT4J6#K(qK#)OZ_9Nu z{h&r8j(ICvCA2?23gh%VqC3g%$0WYllmFvT^_gdl*_pMCA|Qjg;|2?6cMJJjr^Gv5 zX9Sq*ZoEX7IUJnw^A|c?KLw>{nOp08d*KZhErEA;kU(~9R+y>fPtr#)lgIr!V=VWV zWGF_gR zp(<4`|G4(V75s$$t8%&L&~2;x=Es!VO&U1c*sX(|;y8R8Z@{a0P7wyprq zj1b$QlL5eaK(?SiS}HB3U=kr^TGMmFJml5kz{4+cVyBQWq`Es_KG7`n&W0q>(dg~n z;LypUU~-}Nn@*$AJvSJ)RR0?N$>a8RWHXDTY|{Lj!)8i>S0ZknQ`avhO(RJRng|s? zHNz0sfu>Ew^lbLvkz^`+1sOiW_hLBl3O$*mA07({QL|uIEe04&3RzE@2wM7#^E(gS z41ZW&R+Ho9pv(7tB?n`ukrJ^%ia8EK`vvOeQj6V2MrKv^k?BfnUuu?hergGI zn2l=``89Xw1Lk&=HB34H->^L;D0_vMh&2MObK=UUfa7LXw8`@{O?UN=6a1rk+C9I7 zS~5S3^yiXI^iu7_{3`1MdtGld6rjlY&b+7%wEX?K3|J2hF=rNi0^)9&vjQv*3=2KL z8PiZu>(;)eR-4uR#~9Z7z|d84*-G=D&vV=W6zk$(Vy>%FO-gaj7h&u$7;#4tQ^?*v zdZYe4g4NR!S9+-BA)6D?`g4D^XdG#oO{E3PO(k5eP}Y9T3?!vu9-*ar_fM|H(oOZ7 zW8`q4T{GF^yZVX_?Z{9~B*K1P`J~mwo>bg@?EO!Qh{0d6iQ_u7d+8p_3ca%RPvtq>wEF~(9R$Xg6-6y9X>q#E(7y&lk@#W-3%*2mu(&k=v1J!+LlFEQ`x6Y zP`rf`^H5b;ijNaR_OTO2%`;b$PJxuUuk$u``K*hzqb4w1I*JRyO{)}wNn>$eVf>vZ zu$K9ti&yZSKr`uj=<{d4YTF%lnmB=yW-Y~@&2gjjJAA+1sLBjJ*M-{aJJUHF)l+dS&>F9ygM*$C_&%L< z$w=_QWDvcRE(kVT*R0jH@`iFJ;eUKEoMT`&p=J-Ed{C*;ez}qG;`ikL=tBNEVN8+y znbujWEd?GKS3k*{FNcG#95PziF;MiUb(Z{MWct{=4-CpY0;S7j`3qw_mL0ktr`ASX zLAz3|erf-8ssH1S-LYE-Fq!7i7zHMqc~E4fu>{c9L`cooL`=>1Oa|y1gDAK5o-?2? z5LCceZ)dA>irSv+Bq}+QVwM+UJz0NDN!+bO{o(5|paX|v7QMXqnvfDfHoB(9Cxgiu zD#ahES8c{s6zd4sKdZm2lHBv2DmSgq7WtSa)Eq7hgl}BeDNc`D502$F2j_wVWfuZ??!4zP z9ot~Jr5^j#_aZrN#cxKh`hmH!vxLCq!f9ZgN1*I5l%YqW1E9Tk#)!t;(GQU26zKr` zp?C8GWlzU0NZO@-j-8PhX)#;d-JjzS{>8W!Q z=B%y+kmuvhl|26r)##s{&ozd>7C<907~lEvp2E;G&cjo?lp1R{jCsI!i@vC#1H@UD zm4GOGzZ%WwfC-@yClkp~r5OO`I42xKaN-3V(b*m)sdL8iBdaTXyh2{@aIiu_@4`D( zz&1$5Xo0OPmjyY=j*9aN)LSshEkj&s21cPX{wPD5fOskYlp&y0z&N)(G3mj9neG6r zK)~;}HeE7H%|fE);I)#2cwLk!h;q@y&vKDsv}Tsd?nw<bf98YIgpu8;$%^v>(yB0#RP5c)(X%-3P z#EM4Do0qaPeF9#}XP*YVRMKddUca7BmLf3tsnOj&hnZu|T}$X*pS0F?BdE9Q87<*Lmn|62BC|9Ij3 zp3Gd;u41JwUaNSH$A@gRH#F+qKK*=7M3W=;G&0&3)QzZWzrl`=-wz2JEQO^doBQSq zbiKSCzO4NtHV*6kP`?9G{e!M@IWY$)OfGcV6GtX2%c9n@CRt(BbF46~rDVXZg{Z$gAe?tukO=Wn77a8 z7SaK(r$3`N$g2`m=yG*V0I51p3&&i#Fc(D80L+aHkBI9|K<*Y0`cBokG^_(Na+!## zUk)NEe`bfjk6(ri&}sD>)ndZwdT>ZO$am_tB0uze;F z8(29LsDRQJyL$bJ=GgaVCM}v%th(sJgAby9Ou;tJAp$RBGnXmsh0KZuSkbyaj62VE z610)ZqTX0QM5i~9`uK|nYsfDV*!USR4{W88`C@UxM|E|gV?vWxG+M@D2(Hr5afz_od$6t17ETazsZ5~WntyVgJ4WaL5 zq|tb-|%O;saAO96;lsZ^-aKN3u%2<0Q@QQRRkaUGCxwU|fKikF#$3x%jl`NdrX0f;ECLyQL>VkM=4kX5}i8=m{%1h$R&> zi0#Xg7NZ7RazsxUX+FK-u-OV}K2MC4C`^BxLTQ6L74TOATLy8rE!8j>e&q{!N zg#ZuGJA`#Vj*aJXKVm7uQMtk0NLv3;MFMb zUAvR%t_V8$>SzGT+0L%si0BuaM{d@{&6d(%O=pk!@nVVTH@ru;8-wUy5;y;vo^a~s zwD(qdfSqNXs2F*GeI;lI`0Y+d`W+6#4;8zHW!%Y9aFqK1b>w)&Qz`>#uVbqu&FHZWR^U? zliZi#R;2jiuS*?UVpbPGWKm#)CznL--+qRlS4bzbrWS`=>&Zb}c>+;51cAvfNG`sc zy1=()v6wCwjGbGhrz~%sdzd&bKS}>FVj5?rjfrtRnEks&5PO@&othl#(BU&g^9pMz<^dW$SdX2&fpn5Er_f5o1QzhG4agm6?i ze=QCr6^IHxy%Dgbqtc30Z$YGNl4HV5a)2K(KH{NCAj6D-e+cF3fVD z6c;$!@;B`~>-kQu)qDzRgS-~eyU1KJHi&WXqdcK1{vDHTE{K2O9wA3!y0{U2fRIl z(9ycn%iWJN;)_p?Xdi9&nXf471V#rreJ5HNd^@N+X7|pMNxj=ua|?2DIh@}z{+f|d z&*?I>Ki&d8VbI=aZ;nvJII0G;ih>`ASn}tA#>vf*8KkdX+;z{wEm)P*dDCV4)c2%; zL9fGuMbjfK=5;O9s*}8Udt!i9eigH#^l3_mvgwh3eY?XWzdp@U-873crNC7vXVVY9 z#f>olNN&&Q!R@|h*C-!i$mpd$F~!r=cN;!d!-ZqxGzd#F)1@HN+*G+l3 zi-~X6rS?#g3}GTCt3Po^(R>BI?HgO=ibv7x_R;4|VUT%QMbRvb0~_DWj%^ml>kPxk z9IdMVbzb8%wi!V~zX=Cc6iI5Rr2lyYLs=~n63kyYl$|gwk5M#nfznVZF@pss^u97g zCGQip>X#K?tz0vfFw`)WLbcokrwVyykv-@@!3ufA5oqIp0w$5O@A6f`k=!gyU#_bo zqXU0A*<`no@Exp4>1GtG-3WCQa$TcHT$7rTM*lX4LIwt5HnvLL;r2KHagbpfgUS&)*t zi%-m6MsJ>y{QsHU-5--twj?Kx^7`4sRuP*A1 z7S5CdTJ^x5-nWS_-FX5-)Lc{s%ssK;aj#GG?sWHPzAL^G&_I7*MK*Lx7BD9WVI>XW-Q{Nc^z)<@?F zEP>DQqFwzNu>}Cpe_T*9>51s}!*Tt>JZz;t&*`pD!!}O@o3+%6UWAxo`h`oVN(^Xh z;+RC3^yPhaw?00&QM(M_BoF@@)NJ5qSSCJ`N`yI}2h^^)k=z+%PCuZ`wR$G!yd5tX z4>{}Q9l>utqcp&F^&grl3MCq0wnz;y4ux@Ql?X)EOU^~C~FKYtI`c;q=<-1112tRxkp^y1RQr31COkjSX|dB0ha5?6-}uL3p#sf|J2oNflCC*6`GMt&ZZ6eRWxOjmCD}?V*R6ZnQKvmw}ZX9nY!16CNppD@4 zm0BCTy%T79D@Cui*(&u-;4`EtYR5YQL;`$N=X z91gczMFtS~wru-sYd&KPYtn;1cYu74@q2iQ`Pt&TWu@@B&BOs(?7$>=Ee@Xr6F))EYrPX`^v9y;pbjO*W#s+h*dbPn0t!Bnba2d~RygN0AMV9Qof7{+N?m2y{XkBTc2zJx8xcg@%yt^@)`@rH7BHjX$GIL2K=@VY!hfb|U% zt~r=+uEDRvnY*b`xf?*zzxOsLUtc9icrN!pY#s2(<7|V7T!p}>J@;v^-&)Ap-}1x1 zxhS^u8_V8==WAX?%qEd5EbwGtHcR)2_U6Gi6AFccfV%>nnf{-t*<*mXz4_mHX zBSAjoFBk%C@0Iy27x5ugZZ`LmpaC_P%!5#RGUF~CM)l zIrlXx7Tyal>-w+Cbep&EV7+F5u|#$>07+7V?Hy=1{Pgz}`yVig4iBoaQD3cLY<4_j zpg5hw?Xnjf-)DtUj?EG3#6-tICE6}Ec(4iBycTq9Li@+m(u8wu%s9(tALXx$(LOLN z9LLS;Dmmic|FUgfKX>*L+@ok*!VRT{)q_8BF$O`kat@+lA1@L8tCIn=)Pp6#zq>-i zHxsL`Pv@wH1Je@weXkPx!r(K-Bt#HLj)G0OM!@ikIu2>BQjqg6qxPB!eu_1dE5f2{3*0;S9JRIpi2~jn*FfoX#?Jc>O8;{qf-9gqoU(x8rl}7hupg>!-Q# zVRdJ5pH|uEdRO22u2SvG%UH~07BtdpS^HEWZo0TlpL)sIn`)zsUaoE{Q< zYc>{Kh;LS+{7~)$;Rhm&xDZBTqP|8y!4bEmds1L65~4sAjCVx>JU;Z>>qXQ1fVPJ0 zOtA0uSGpkY&u~$qsBSB0$03u6^_YOg#XwZuvww69&GKu$rDbeFrYlGVqsPqc-9v6K zVYtrY@xB=)_3-p-mi+PI?H8n@(^5@@kIF&vkT`A>Eb}!+FoOi`^sKCMaPdit-FpdU z<2FyDo52R%(?p%ov7J!?yjT#{a$n-^b<>=_MFJ;|vZxMo352|p8VMJtmzB`E8(_%K z+a>KI_`IPI;>^{zFT!*YmWLr$NX{INg0F~SF4s#*=i69CqM!X^@R9NmbBmNMcCa{^ ze=jJdc3=ohd$@2LTULq)Gj=StIQMVIt<+nmw#mrTF&PnN;!)jD(PwtvqRiY4pcbTg zTiYLB+PvQn9g<2bk>H{qoGmPcdy~$IutZ~l7vLjhAm);`b2o@GN3DJ2k(o{nI_rDu_w*q{u~U^nd*0RbS5?vOO7}5z}#REd09!hj^U~pP5f~^ zw;`6&-#AuD75i6c5Ok3mSbCxTR>SZ!2dnC7jaHyLV zre=xelLj~*U-H+<3(})sdOg4u#1$k*hKu>zN+_ihTQda-VIb-K^2`^6TVCw}+Sta( z(aFJB-}?6_TLTMd76N*L-|qwj1S~9!3@m@?O#h;DbN_Cl6LE7A132kB858_N_)XKN z2UZB^gail}2#0znTAer4zNaar!TA6B>FNdIC0Jw~D`+fDbwo8U`SV{Vxf4 z9q{?DadG_n{seSN?smombaDn304M7|qmeeYF?BK{V4(kdDV;0xGx3vCDi%!)1|Gw$(x&Fh+K)_1R%Kkq_ai(TzrMc++p6y6SM-jG=o^>*S817u#6Q7=+jwxPZ zmtT{l5{L>hXyU|<&v{G_a`;|`QR2D;adI+zzWrA2o)@~vm={Q)X-tl$bh2k9EfTx$ zu6b!w%P@-*+)v+baK+u?#b1`2)lG}eP8)ZGw_4Rs_<{qwbj^MsinK6nx}0w(J_Wh% zqSI&ht+m;iuMn11_WpvNrQ^JD99RhQ8SCu1Z62+4T-VKhgxzex}9%iI_5qzj3|K3T{TE=-QriV_P8~!-7H-=g^jJV5LsZjz(Ky8!%_50h$-pdy* z2#=HW-bq?X_103(#`ogMPF78-2G{)xz4mDz=kty1g^9TGd6LAQniBqaJ_Y3Pys3>z=BM$CBERPG@s*dJ@E5{-wX%Sl(;F^eeNsrjZ;OimjSy zOU>;;^D5SD^8UL}Xz0YWVJkuwE(Z6suOe)gFO|=so~prMgG({Za$9*5m-m~}!}L#> z?>v0!PyB77n}VqIMd`WeIH7rIdBpy(nf^p2fkaTcnqr%@hyIlM_4QWx`+qb|oq=tc;nVV#|)34Bf%V6x~Bkj-cWq=lqM=-EJmRB&rYQ;yC7xA;dF7|EsG^)WpVa@N@JFHn_EM%v9Qj40|8I%x$WKFZ-|=c z5HCnRySbjlfYJ0>v|*EYh$~(_1FUA-o@}<5%gs)a**~eyk7u&HWOReF`O8GI5pS6y z^Td{Qq1kT*@?D#^&q55){bV*B~t zRIg$EdUH*_@OnQpecLT?D>5vn2ZEcvThH}L!n3d0H&1)eGa;?=Ax;m7R^1Y_B|$oQ zsP@wA20CqD-qhasJ4{_t*7xyl#?@9wpdTPwXvl=2Zsn8@BXcfv^7)=gb9Q*Hl&_qx zWZG<1H~6|OpvW9?nO z^z7HsiW(VH`l$deb)NPDGBV_GBz)-|MpgD=MA_awlX_||y5IWA_L`c+N9RqWjnJ2d zE-dm^ok*mi^w5n^mwCLJOUcnm8gnp>nC*EA8y4Nd{=bF=A1pjn@pq zg|}2GrKXmpAFYo)O}KRnGo#@GJ`KW4qhR^&6l}E9Rco<%Rm^F_=W@ zQlJPDY_8Yyxv` zBnp666(%SJVcQ7zWKg^mGm?E?UN14_^)2V8;H&hy!U$1!oYwmG-J$UZE)u84mq@Y9 zP=jvDfv_S;d@4V*y(T4T3ChmOvYJp*W+t}dkJ6P9fezJ-QE>p%gp?q{5q!Ba%2gvv z%b!WI05U20BgI&CNsh&poOUH;p=B>JJWZ+$i?n5Hh1JkKr*o4S4c-I93r3 z!jXucA!VvqjnQFuN>*-z)|DV_l-H^HyL1by#oRqO!kOzSsPqOx&3gO4AEV#;=w!AzWOI*tiTCg8$CF{FiR%O;b?`r}HEks1mtss_nmjJ?TJ z*NRxjG;Sp3&7yH>B5-fe@);`FT25qKQn6|VVfKQ8Dv)JG=gA+3a_boPG~UX3laY~j z1ugOE5;(jr*=j>zg{-x?P4rhOqdc58{Nu-{MBEsmU&N}P^=j~9dl(h+1Ko^K;pn!u z7RObViWrA~840kcVKV)&koUo+PS6^lepQzW&+)J*kS6OzG6Rue-z(x5Y|jd5Ak;#7 z#E>OXuGL24ZXnp;wy7J%imr4~KVYy(_U5*!83m6{KdZ?eq;cWs+EHoM>No6ZP}%tr zflOqbN9v0H>+S@ZkH}TJgzPLXzk1B!82fC|Fy$loGxV3eO{H@P-v8Q6sou&LjkWJ zX4$Z+!i8)BF|i|y6R2>5v|N`V5RUya=pelOk~NQ#Y#G6=nz4dO_ae-$%MUQ3^IQx( zP~dL0s-3KFLzv;t`el3ESM6Ow(a?;_K|Cz zJ3%R+GZHnB2kw4d97$wlJb`0`=3_2TQxm&IWL_|e-Bs?%wkQ?~(b_l23xSKU5|gSU zv*I&aO%7p9d?Fcog6mnUN6=Rf*rIKra88MjAmLsP8QIFss^(kAj z*ut|7Yq$&I5}3=;c#FucTo)=cwS|~cPj;pL6{eYA>_WNL#U9w{;a)ef1fponFt)I% zQk?7gH-r+@bmUm3gkxawp(h@&6$xV_%}j}zy;M1mf?MPvh03extB+4g`g*VgQ|>Ec zm8J@#)$%J6YT4V+1YHKg>+*&LM{s%qCl*xEWE#rjppEMcUF=?K!;|}hl|4x{(UN}| zo&b{)7nS!Ru;V+sv-F$aMx%(?3$vKQ>?o|2?#nYMpQFjJH@@KK$O;eQ=a}HNJnXm_ zS=Wc+MUxL$RWlLnDysda;LIVbYw#wCe&52w?rSa=vOumEWa+c@ zoZ_CeZkcbI4^e=H`D6?enMBA8vt10GKR>tGv%`ydMf`{e4{9=q9qvCA-s)Gg&p-UhOZ+4C`D-|>L4Hwa+6=90SpV+2I1{xp!M zrCsTacbSs7r9g@%8ehgNpkG?>lSyKOwU^Ibjcm(%llWQWj<0LutJB%k%kH92_u}~^ z`rE#)`>$kgTd(_#@(0^T&}ZF%#V!QUt&P#gh4_c})FJ$)hvRm-7tq8z1l^D7Ie^FA z%cE}7582sD1B33BJ%jHbH^1`ZX47rmMAILl#j*~)leQ{?=0(C!Q7gxyNNyBOe!Z5I z3GvF=hB$5g?1qEp8`8RB`Qm7NZ93Df`eSSgY2`D5{F=5|6B;}I7x1WIg&hWOF@k*r zFsg6Kk*08ik6^e9wGLf}*UjHn#@>D=1ug^*38r9`LD@g9Mt#+tR}!vFnFZFWgT20Mt$sd&xyI z7u+a%N$4gLRkq6W!DUsP=KVNE!YI-!0*HFx*8ie#{Z%@F3KJ6(Bh$ZCF6RG5<@&9- z{=ZeO|JL)gW7=){2w(?YvwC)%*##8WjYEl)7fFTq=IRi-zDmSm@qdGLf5BqcE`;xz z#P`Kc*Bv;RUIzQcEo!g+GAKuVdL{CiEy|jyt(;5(c>;#hetMora292~2T~eZh>GTaM0M?3L z#cMhvCV2?z`fZMrfj-ROrSy_)#3z9mIcz3+hqs+-s;H{@9mYnlhC-==Q$lOX=ZuYs zn%ihFvqEo>(;Z*6YnPVnV72f=R^g5Nw8|Fm1_n>rFOG5(ubP|((mK$C!m zm5G&rhKZenfPtN!o`8Xok)A;N50iwGzLmM5fQ_k@F#-J_ih!e`F%Vy1pl9XyQ~y2E z-vk;)4yHc@A$>b>V{=n8AP=ygKO}&Yv9$^T`+q9pe=EP|3e?<<8G+1yepmkiB7P$l zzd?ZCP{)4+^G|=y22OvV2_*+-A#(%Jn{~sa!Mk<8N^d0^RLR$Y{brzOC z{rpe)6EOV#hW`1%i`W3M409V(0yE#rYc@`G5Vf0_95& z1S9@a{=fAw>FwEP{8q_T&RI3nW5O}Z5vzG@ zNt`Tsbevm|Se3kwMgtYq^rV@LozOtJLfVEpet36xhvbU!2&TD!B~Cbyc?tt!>&6%D z%{>#@sOC-RIrg>qGBh{yl45xjXV`|{&R0TyxT;=~Fn`y<;`*7URctj9%lK&Th-qeJ z#pHSAaCd3yXUwC3p=hKFMjfa7)TS!km3@?nn(Wnl!?{-{&zMj1{y=N1ad;=MneXyn#De7aYW9s|WGtwOV!&Ky7iYd^kgc6@dKu1X^l4laMgdGxuvLMUGelB>r6pu#3j4NLvPiLPj#7t3 zjYZM87^^%jC#_7Q09r+)gtd%Osa5GkS)`0nIk8OQuDwj=PO^|qIo(2rMut4CC4GWP z+p1-Zd5L*|dD$ud2yIqtmT`8c2wmnPg_qge<~jU`3(%gXNPNeCM{p;8=XR%b2YZK8 zU+mG$DcvsHuHG)wE~cGBtD;(JIX^gGJU4!fee8K$d`x>Mb%*V&%a`v%_WFGHQjzV< zH|R6_JdQVF10%b^ZpmcAM&gUxp>R|!Z`LmFah0}U>FWMV|a(!+IuiK=g`b4Dbm8F^jNc|zKNNcs5Wt6o(mGesBbo~^|jRy>qvV_Uii2;(7 zbKC^#RDCEu8PRC!x|T{i)_@u->oH5)xkx zSzUwt{4bt!OU@&f=IomGlJ@)aR7Rm`vSx)Nc~ErR)o*eNk5uIw9@T6YiJtU6>I3k~ zi^uBI+!zsgLs3@aOUg?NPyCssynD5hehky87q6?us8S`cI)OVXWv%NS9JLSE(+pfw145d*$>}e z`3-YnEu#6f{q!I0;W=CGe>TE-x|rBEQ>GRWZUaGqpsbP8Qx7)%Lo zd8qWJo<%3vV%7^n2eYj$9jZpG_GL z4Af1&L{)x)PYBtAfRTjH_%_FT$IqH>`w1IF22)1NhVpU8qI2*V^jASzRl(^*@Kn<@^xlZc^2~5bow#r{?F51w%OUL!(Gg5d zHWF4Hon8gi%6x_E*oNMz36QA13JtZl4;3j44hw@1HLLzm%LA4`1B^rfX~JTtR+)ML zjdn&>j62+;4(lzJPXvQzFP21CCb>P!I5W%W;?+*4-L|iZMI=^djx}L#J^MzKCii2UAg%1q<%JboLe7)7#RPyVgFZbzg8N^7Q zOsXg2<1LMDu`Lq%>VOEfdahP-oAs)R%u3d+cWdI z!Kq4M@!cMQ`~2#V!Sj6y$LV(65kihN#Cb4mLU-B;LaVBLHcg@t0l)oH-jU(zHZ6Z; zg?|(DJGV`q=cP3~s~@&w2PJW-G_~9sK4uP-cw~gc99h4p@#EzZ+Ho4rN}%`@4u)D8Y}jSZEKFd5GqqpAE7j`Sm=Q%kqt4otTlrtQIEfz`7;CH zob9s!{a><#M+l9a<0?i5vK>)v*SCmht(xqkn`XJ>zj}|(J5xuk2j%>GnI zQwuyZbxUA*LN@hXAg<fsG7K^Iy`VN3Wn|lna&5W*S zw@=pa{x#FW#jWPj8H^dNNGHY`j>pv8cDXJ<#k@2&J8Yvo^p#j)Lu>Ba{-0u_gqU~2v}LJhRKQjG zHX&6E=&-h$+_hY5nci^HY3yAv8gB{hF4b@HvqPL|pgMFenqA7{eO=(r)CPZqK&G`z zv`HqPPmI$2MA}*-V-x6%#^f;MRWaC$IO((~^mf?=)AuCS+$NL7Ruk?Ow@M`|fy!Hl z%6lQ==(G0iy6=O5IaJo{*=ci=o0G}rbAJ>Kgq-)zR$K}hfVnNN&aO-A835W|b)p}{ zwhYsq+=wu5R|M6HC@LZy&o)6B-tpAE0ZN0h-Uw?nk6GQm`Ki>(4_F1i9ngW+DnCUK z25FIgEDS#H0EQP~-xcD+nO=YfTMBW(A9 zQ_nPbdjr7=BE#sd$?KwcBfb#CEeFv)gFzd?jh}fpz}<%YABGY~uqQMI8DY2m=rFV`zmlZ7n?$HK|G~D+e=a zh$|fTjWo9*Q*gJ{3-cq&7#?5Hn?`ADggM;T36GD<$L5^&X|~TG$ap-*J}6sUnqEoW zWbL(j+}CIY`q=89w(VwR%#S6>jAf6Djxezs;IsyEUgG9)pK9Shok}1cgSGfYB4aRX zxJeH%z}-9e4JDPEQV{4h6O8+rm=#rp4ZJS^5`>q%Lr(SQs6O2_kJJR2$P_z<&-WBU zS@zVQ7$_zMT5h*WrtTZw9i&?dy#g2kGc$ES7c^|cC&U8{EMwPNNa`#2V^u7IloWH?j8kR_Lcf7^P!+g#EyX!U9_+knE$PSdCZ_Um(XDsGD6XN(w`t{SMI zAlwp)I${=YPppf2POq};kncz~LCEkXJvt+41KF`Lw@_}1z2>t(TbPI4h^2O{RGWlM;5TF+OaTq)`e;9crCQ7?jd(2XScnp_qJ~6C*M^VCC zFXSGeUP3>Q~~3VALucE`MSj+Bk?e(S>EIfF?BmK34~Nk77UiLs;atz|a053X7ps zTYGNYc)`hAr1V)%T9OS=yP{HhP#kIB+98_)i1Pgd%JPm+8lZ*(6Nzp7JDLJS<7BWs zLMu65a_P)ZukUvnIYs@38`YK6RtZ?~_}umzz`>N1m36U|af$NYXmDd@8O{j(hg8gw zQbiHVJ3!&B#ozJgfd~J<`MottE|5!U@As*oLED%Gvd~(ah zD=aC(+0GPssy>|YCPhLlE7|{X&QSD6AXFUM0A^YclZDU6aK`fG7OG7VT*1m^>KXE8 zNeSkeV!;nAfw6UN{yO1d++IlU!v#h5Kk| z|KUCjQpc#Swos44t)V+^4g-q?>RENaAH+fLfsy63XV~zJC(9pejx7rdEc%>grdtJ9 z=`aKkZ9xq2;v~M7Q44=ZLz=V(4N5|cK@j{z?-z6RK~NhM1(MMxAv%a7NWhR+=zt}E zreZa5oWJJu-OZdbIQmcaFJ0Ahs3vdjVf<&Z#UNH|V1o#;naqsu*o@A1V2n7@MEq%e zT_lb(Y0?@)GAVw(Md9{1&Ka~{*`e)ka)ORZ)&VZkR!`se-}sotVN`Ow{1P8xQWDjmckmX5{h|Y=vO0Kx6mZt>+au{+9*=Seu&q5=_3+f zkT}kJ`*L1Wb)beC=6U!_UPE!NvlS+TYZ?JWfw$yh?(@@q2LOlh;+xY@-w}zRxXKw} zfoj`#IZa_4ZTMBWo|t&(M?W9rOKQ+-s-+g%rl~^yYk+HEU27P?$j^29Q|EAe`zvB@ zR&Et6sn&YBbBq}MvYt6gaX=gV(Cjdur-|EKRO79fsOT*gjx<WA=2)?rx~*5R1la~yEt2+CUPEPKVld>nMmz{k9xlaH zGZ9(08BpVzEJtHg#NQ>~#Sa?`8N(Re7&93&8R;1iUOUafT9VeIMOT}kczN$$MDCc^I!Hg^JwP-Q^KveIpgeXvnts2=!5?1uG?#<~p@1 z#JQAGJp@YqMf_UkT zSnA&D=w@ZzG1iHO$d;EwGlVZJF(DE*fdOxbcF3?~iX@M3^`P~Obr-l_+MuDEjl=QA z@)s&$N7cFwUvf!G9Y7l!cP&wtI*EtpsMD8@bnxR>!inq;@CI&mZ8<&wL_1UQiERe5~eym zTaUhJZhb))S$E7!-v!;^C;2&cOO}tbO>=Kaf4G?X6Wc2j07vS8dQ2OD@!hGi6I&3u zf2)0+pbgd>PnRZ*$Fj1-yyM4LIWnF;?uJJP#)kE>v!X_}{RD479=F1r+adC%&w%f7 z+-^u03Ii?8FUx3a$vgZvf2_PWaC0Z}C#G_ipGt!%>po6L1DWadmTPs7LgXC!>}?9@ z?5lQPprn5+KE-}7U!b|1*NIYdHbb*z9hv7dIfuUL_VwP*yc|UEkJqaLxT9xW(5Dj= zerCEWWN&3Ou}%g-SBf74aA5(KK5_A2gKWRhwq`}Ts?B_CGnZNUJ#1V9bb^(@$6r?GGlPVq;#pzPPl z=`(w0TlJq`289abUBUV0UKCtlGknLk)UXV;#KH*3Is{|b?qS*73=F3AKgO+tW!w`+ zwg?Mp=wcbG5guAVywEl?r{-{`x%q8`+%Kd9zKr03uC?^>%E=br)%UV z$EVIn>PV|dGVDO?LM&q}V@z*Lr{2SkX{!82QSY!VXsW<~ZK=RkgZMmodvS$Ax7uHj#=)4&c#}1Q=M2d zg$`z2k7%DsU(+zhB8;psP06Atj4Uv5Z-So4Z|F!Xg-7HPG8C1f0J2IgU%V4W6ZJ>T z_C)to_Si;1j7w`I-2qSh%lW^8uPcX5$$Di@Wr|Xo(#BY>n6Fr`SR@#S=_wdEOdM8r z+lEQwRpRkJ>qV*o7BW!Puw9V3;xk8|Ywb_TT&P;Z*9Xr{5o&^$BpXuOM|e%RmQ_zZ zRSez(BVs79B5%anYQ4+!$@?H<=Im2Z0O`LGOqtA0)=DzCW@gb@VD_P8=m+67yAYqClTvI znJ-b%pwa`)$+3Dee=y;tTURqWwy*9Up&;peIe1*K&VzXjL?)T5kQA6$Z`tvzD~?vl3>bP6$u^UuVR z(OTXtE^9uP+F3db|H)48msULnHdGKU{O98(~1 zakhTPyu95SkN?JcGdYu+63>>>?5hvft?Gv)@RQpBi4S;pn+d~#BoyzO1&mi3vASq^ zaNng%I}4s#m5iU{Jne$$*s8t=4-w}1q5y0JlxO!YO0qHM8oP1!V*_h*szu*%KSb-3346@?Ud}@B^oD za87AIex#}Flb+IKgr^Dj5u4#~ta|w(O?}HMBq7KWftTBeDU5Z`ymS~|s`DIa^e)%V zGt45YWq@`e9;Vj&Lm&vYgy9PMT@~}}gkA`fhB59=U;kbhZCt;z7{5~xd9<5V$X-)m z=Tp zHELg6foI7E_zgbQL;u!JY1iEDoV-u(0B$Qln4GM=%FdEOSH1b-gZe=y zQb;hA12?n#q+mfIG=kWhE<_%oDP2~Y?LP6AL52fybyZ4*gDz;slc+Jd8Veqbdf)GV zFsdiN>}`=qEzk`c{g|0Su8DZBypZt`8PC-Po(_myR~OX6JJ<^C`<9zs#`V(WCVg$z z`{he%?kJ)ajz8{{uiwVu<&NzOmHJb9vlaP7l@9NQ#;I{yFPg5hDiDop*5Xl=vH|6% z9Y}bTa{W!TY=ySuKxDxalz*1%R{*oke0hm^+^qN7MAt(c1?D<(5=p`2r+#h$#(7u3 zg}IWhn$moZ`=Pf*MrC%kb<#bWb~CZBTt@@R52DT>K26Nl89rL)j1Wb&B{`)-d~a@u zBhJ_L(3q>Q7rC+h>LxEebB8fBBP?Tg8EH&%%(fUx$|+d*pR-YrgwU8Vd?gz6a3E)^ zV20C)x}k~$F~DM%V{f*(4YzRvsy`97tGglQPN%w2;=%TIf6~&YSMy_Bw&c4~tu298?cPUX8iK8H^ zH$-njBZWe$=uV7)JvT;|SEy0_q3Cf`nquKvI3|30b`g#Kb^^*WK8XQ)#!T1K)qu^! z4Nk_(h1j$Km^6r+$>`eKJKPp!&-e{{w}Y?kPa{GvR4`GOGR|96#K`%ei=i;Y70Co_ z-Srd4NPTfIqLTR(b7B=hOqaEnxcng`*X5jl( zDCItRAZv%9#vjOODK>BSXj~D8tiOX?ZHgR&Z8ddsl%|5T#ezF7WnT?TN=7dRS%=9& zAMgMZ55h`Ey}x#{ld@g3lps1?q>ZE$*P&Ujw^n0akbev&s=5QvzT?bY1jqktR_vIw?qi6hzL>1m)p z@X@kJ=gwon{mkGcwMj$Cez&U>fR%H`8DcXZff>NElCY6K763DDjganL%td$aI2Rnd9@Q`NrrP$o&t?h=n|^B#^8Adu)5+xAJHrCc6t3Z`qb#Y@Hb^f|IGiIjL&0@nnDF~%WWQ#8vh6?h- zl{54P2V)3RZK%xqNIJ_)9wO#OpH{Ba!|vY2!3_|4#YKkdJB94yMNFe|MHr3T6Y7Z< zGVJ@YU|P^$S&D$?R@&0`2n^nx6>Fy~jD9SbObZ2na}CA2vZm#F>mM>k7%Xc-2-zJC zt9H2Z^9Fy1HrJls2?USR5H0SVWhN!WxR&_~SD=W4E80==3|E!KUWG*JNGL>#r8>D3 z){liu9y{X$I>}JMIGDo8v$OEJ%%PmclJ=+MsEUSK5!V$Of4$=J2d{o89!5?aSX~?X-{~ zkKf5$$aLeQI$BFj4-lk`%RcfS*M=U}R&*SCoP?`k%MN^Z+8eAn%PyVjd9@t947F5G*m6TxYUm31VIc$W1m)&O~UiTUU94+pR+8fCp622}+gk{pZLFL{rlWp-0> z)>-&yr%F_(O*U2q^3kcKMcJYA3UX8oIt%0az6Fat_R+|*PKo1lrz^yVLJ&`IG3t90 z;K!!{jwy&7XwF520dA3sab`|@1tst8ti`fMctR|%1(#UUi7+g>Av7`)(WX?0KzSaz{?AEXDg4YY)TGZz(1J@MwdWKM0Fk+|Wkzulg^uX*$BoM~%<mi@L`cmEjoO}EMO`DdPg{`TLQ%>PPtcf&XN?Ju7& zWtz|RQlF6HMQX-d-rnQ8yv01^Q+@hh<)CnvbyazhPCj^Qd_vx;fE?ssGUYgY%EdKj3dVDBP;vq@ES~f@jfX_oF#C z{&W3b{es0`--fZY`3f(mg=g#&tCOlvCOs+R`~ILs-X^ZX=2g|&ZV7!u!SBLP>y-Wk z{&~o{HLgYYm-WT_&i?DGE>usrC%eV+;_$>%Nm^XIt(5HJ3)Jde7gVD0e;zGbMmy z7n%}G3@u?R9E}X22?TYO8P4T*?xBuRZhqQ+nYl@&#h}%7x|H$q=}XAaqfhqUw#Xbfbj z9Koe`#tPu|WXKE5V7Uf0P$1@^EFuF7A=cdy2pyaY?~IHgO9#v(RlD9(<5*F;_@}igV-y42&G~#iRZhyI74N>ncH;ME&49S3$d2feWBPf`n>; z(20TB%?2W^_y3AMPd#IFL1orfv6s%eQw-TIy~};0xa1($VGp6>zur&JDD81L@pp&% zb2&ZMP6_7k<{HZdPfy4-3yf5%-T##)t&e9E|)Cn75uw(s@cV5k!zRb_Xw@Kde_mS^~Z+P7TaJa zuAmR5>i#XZLYrp!{yTQ4c{|^)C<)PL9Fuz=_{K(Uyl!6?^T^+?yJfTKbJmK3lRvsn z=a~CBskQ@b zrDtARJ}^_kQVV=Xa&kgK!jJ#+I~yBkH!}Jd85-RQNJ~gaNqE3M(Olut9EES*vI-|P zHpuAglW@5g!raM`-f+`Q;nU3$gPn3NcK>;m;yD^mgy$(t-NTx&iP_~-c;m^=fNIHu uD#pr-PsmT$vBChjLVd{zku8|PQe2W)R8mm{^s%{trLiHGs;aBM8y5hCr4YaX literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/affiche_interface_web.svg b/8x32 PI/qrcode/affiche_interface_web.svg new file mode 100644 index 0000000..c6d39b8 --- /dev/null +++ b/8x32 PI/qrcode/affiche_interface_web.svg @@ -0,0 +1,12 @@ + + Vitrine pixels : accès à l'interface web + + + + + + + 172.16.50.271. Connectez-vous au Wi-Fi de l'école.2. Visez le QR code avec l'appareil photo.3. Déposez vos animations, choisissez l'ordre.Uniquement sur le Wi-Fi de l'école (pas en 4G / 5G). + + diff --git a/8x32 PI/qrcode/qrcode_interface_web.png b/8x32 PI/qrcode/qrcode_interface_web.png new file mode 100644 index 0000000000000000000000000000000000000000..b14636ed25d25f452bd895d5304ceca1239b7a75 GIT binary patch literal 449 zcmV;y0Y3hTP)(PTY`PN8OH(1@hO8utJ7f+2m}IwKp>FUi7B>y8t>y0 z1d=4jv<WOJY+&3Yecct z>lKzDkTki(ZIx;f0!ffqhi97*@5LaHb<)Cn1he53Ck}xmiG`*h?tA6z9UzcJ(xXj! znom`(wL&0y(wAD&cDzCNV^D6|1PEk;_!g&W&+PAshdKx(N8&fs)GWk)!LDTqflQIG zvw4qD>Bk|xTx&>Gb0N4u?tfIu>2c;um4wI5D>5Xj$&(&EQ-xC{bWBjeT=ReT76 ztdOA;{db4rX6u7MvP5lyh2xyrQ&~bFQ{-6H2Kewx4FZ`V!=SkG diff --git a/8x32 PI/qrcode/sources/cascade.gif b/8x32 PI/qrcode/sources/cascade.gif new file mode 100644 index 0000000000000000000000000000000000000000..d6ca39e10db3aa6d0d42403f4ffd2bb5cc1b442b GIT binary patch literal 5850 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 Sz*8tZhr_`A#P`8W?D#*X(%tj` literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/images_par_seconde.txt b/8x32 PI/qrcode/sources/tetris/images_par_seconde.txt new file mode 100644 index 0000000..f599e28 --- /dev/null +++ b/8x32 PI/qrcode/sources/tetris/images_par_seconde.txt @@ -0,0 +1 @@ +10 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0000.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0000.png new file mode 100644 index 0000000000000000000000000000000000000000..0ccfa641c4b29d66ee71819a48c87e1913065ceb GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@8}v z>EamT;hp@4pOq(tNzLf%!L7Xl%n_0ih3z7Si4TrHXjfm6c+tb=Z}_A2EKa76GprI6 z)Wkk4`xeM7(H5cb&EQMIu@@O}5?L2JOvC%0xoNp5GdSjlUvP|{KLuz!gQu&X%Q~lo FCIDBbGLirQ literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0001.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0001.png new file mode 100644 index 0000000000000000000000000000000000000000..efee28ac11a41e641a10f0282d6b99e5be97d0ea GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLb z>EamT;hp@4pOr_VL6F11RZ_x1O5l;sjVTUC0z@AL9dEhK@F>NNHz7fSxA~$0!&9-E zmk-Pj=O2>fn$H+7xo?rggQE{xGZpNZStM8{nEv_s={fhbB=+)7mm5D@4mD^9ub4UW wpT(a-g;PNyu04mfcs#!UU(kI_@HH#L-_6FVdQ&MBb@0BQ?FLI3~& literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0002.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0002.png new file mode 100644 index 0000000000000000000000000000000000000000..ecb79445d13462d6593d9a4b392db5bc80ae6945 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GU4 z>EamT;hp@4pOq(tN$t)riN=NvD=T;!GTS6u?mCFwDQo!SCMy2GyoE!*N6JA%&W(9u rW1gTe~DWM4fPqZkE literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0003.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0003.png new file mode 100644 index 0000000000000000000000000000000000000000..af5ce9d9f1825881d102264e96fae76ee324d8dc GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GT~ z>EamT;hp@4pOq(tNzLf%!L1iBF}Nuxys=Y?VKC;{-KewUEkmnbXiUR>0i`_#Squv+ tBzRre+AbPM@G=M3N&2!cPGs<6XL!fN7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GUC z>EamT;hp@4pOq(tNzLf%!L7Xc%o2?a1ssBcYzEC6q)#;6<_q`}bd>c6ui_!@#cTpy t?H3(V5+rz=FB&jBoqVyxK;jSs!-ESvPE47;T0kQiJYD@<);T3K0RTNLDLw!I literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0005.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0005.png new file mode 100644 index 0000000000000000000000000000000000000000..143b1d4225de2d4b13a8f1fc9221eafb342b8f69 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GU1 z>EamT;hp@4pOq(tNzLf%!L7Yg2M#!#Hb`J$I#lS=!kxgDXg+~;yX*oHH&O8i<}Doh yJyH%Da&F8Mx9yx5@Wc6udvc-)51YFc1H7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@8}j z>EamT;hp@4pOq(tNzLf%!L7Yg2M!q69BvTg=_S`2}7nt<< zB$tam&WMv(raAFP2uF~mP4VLli3ws%i(fK`#4*ISNm<_Her69eo59o7&t;ucLK6T$ CJuVOc literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0007.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0007.png new file mode 100644 index 0000000000000000000000000000000000000000..338042e22781c482f8835a6fbbf925a554bfb230 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GU3 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWv0dS1c2iKWjZNxgo#A*y@ssd9MB-12mPv)78&qol`;+00gKj7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GUB z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu^rask!WoAGN(~h_5e@P?^EBVZfMluP+d^t x8^OG*>*5rPJ3&e>GZ~g7o5=RGF>1&%FwEG@XX14G{aT>044$rjF6*2UngFPFE;9fC literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0009.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0009.png new file mode 100644 index 0000000000000000000000000000000000000000..399bf27115919ab8ad22ea65a91a86587286727b GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@8}l z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3;k!hrP$aq3Yg|M@%yud!%}#T6j|& zH5jMrw3sefy&z3uLZ0>37i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GT~ z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3;jcTh@Sy@#RwHX$B3FE^``nIIJC0 ur9)#JW+@)lmh${;?ejH5f~Wfp55pxD9;c$2t5|?$GI+ZBxvX7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GU3 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wy7w-0~{<%ru#=EF{TL=vTag$ w!!mVUNFifpTaTK`D>ao%PV&pDB#tmK9QnlK6nUuXKG0MKPgg&ebxsLQ06D2F^#A|> literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0012.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0012.png new file mode 100644 index 0000000000000000000000000000000000000000..7ba31ba5c80186aad1307f7e30fa7ca7bdf38e0f GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GUA z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wx|eDMrDBsaZX8|>;}yp#uHc* o)mPLk@8b3_PBGEs?_R>gu>Am!Q(}X+9?&=jPgg&ebxsLQ0H&xXD*ylh literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0013.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0013.png new file mode 100644 index 0000000000000000000000000000000000000000..765cdd4116c972ed9a401d07a4ff48f053f2f931 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GU7 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7LMin)9i@7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GU1 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7J$Tf9{Q3)7`+PMyleVx#9N y6C7piE$Rf!Ca^AK2{|r!tzlh~iMf#h1B037i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GUC z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqswQ5?Ginz1Gyx tYmjuA)2PE??YLDZG{#|;q6oVZ!vrlJr?kke3xP&5c)I$ztaD0e0sv0&C{F+Y literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0016.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0016.png new file mode 100644 index 0000000000000000000000000000000000000000..fa3cad392b39712ad03880aa43ae04f0daea4478 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GU2 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSrT!Tje;B=>oqsF oFrHC(#FOH9gLBn$&vHhFrXM^`)!N1VK+_mJUHx3vIVCg!0IYr}umAu6 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0017.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0017.png new file mode 100644 index 0000000000000000000000000000000000000000..7d2182b60bb7240c0a28208ca70f38bb72bc4699 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@B*h z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSrTWtH4+bSuq+AR h8o?x(CQ!)6#IR16!=*1ph7V{CgQu&X%Q~loCIE3UBRc>9 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0018.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0018.png new file mode 100644 index 0000000000000000000000000000000000000000..99c8781510f26fbe1efb61b97126b98f84408863 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GU1 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSrTWtH4+c(>MRwO z4Aosz_5Z*863HXMuR~t5T%7h<=ec4^;YNn@^Big-n)c5Gn#gTe~DWM4f__;9* literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0019.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0019.png new file mode 100644 index 0000000000000000000000000000000000000000..593d7608024e645799c3d922408e6f2459da3816 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiH z>EamT;hp@4pOr^q!NSIgf{_~*KKx(r6Y4X=NkZwA&!QcnhL6e^1>KmZ3Or`oqt+{B zAl0#e#b_3v+u;NgS%7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di4 z>EamT;hp@4pOq(tNzLf%!L1Js7c6X?D7b{rEqQyFgt&%r=c6+9#|eDQkD8{>FgTEX zX$2z>&*DS_DYgYZMzi?b4kuh#%6!dt&FqfV+yNm6S8e*byr|_->K)tWq+9YU cc6YNf@SgG7c%EhE1)!Y_p00i_>zopr03owHBLDyZ literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0021.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0021.png new file mode 100644 index 0000000000000000000000000000000000000000..177b725bdb56f007a146bbc083e9bf9a7ba9f5e0 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di5 z>EamT;hp@4pOq(tNzLf%!L7Vm%u-Skl8$<<7jM{l_lQrK=~CD(@;F1sKtQ;o;_|H( zj691QIeZiszf3UUabP|A!Ha#(>gTe~DWM4f7!WoU literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0022.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0022.png new file mode 100644 index 0000000000000000000000000000000000000000..4ddefb62f5231d3badb5359b89314ce58c1a28fc GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiE z>EamT;hp@4pOq(tNzLf%!L7Yg2M#o-^GHcaNIE96F5bv)ZrHfuj7pdFItlm7jQb)K z^d<@mb65CEnKIzopr0N`pm0{{R3 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0023.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0023.png new file mode 100644 index 0000000000000000000000000000000000000000..a99521b91d6213316cf994d45f45886866ea0ecf GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di8 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!plIJ{tC<3vG`XalM07U9RNscM0DR<;(JsPerl zafoqKSCf5Unt7$cF;1>$8S^8jhFup=?CLBP-uO*vWwYq2|Nom=9BsDxZS@n#wLD)W d=OiZ1&Cnp{wXxxx`8}Ym44$rjF6*2UngE@-JU{>d literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0024.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0024.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ad7bde82bd1552c76abbe502c3ac421b753984 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiH z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu~i&iu&{BW;FP!olW!{SJ_=gKosaz1_bjeV zG*M-m%x=iZnZMFJ>p+G=lMsjLWyaTP*L+h#wr)^*`@eodnt=b>;I+ao(dRbLX`gWP bC=)}#ORtSwCeeC8D;Ydp{an^LB{Ts5Vj?+> literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0025.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0025.png new file mode 100644 index 0000000000000000000000000000000000000000..95ac753256f05c3838ea20050032cdca07118801 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di7 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu{GQ9NJ&XZI%R<@L}5S#cVv=9a8Qd+11&zN-S)_pa1-qcpj}RT~*qYak_HaXMs&SA{Z36 Wcx~Lfd_o}5HU>{uKbLh*2~7Z7@jAZ% literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0026.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0026.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef5789c7c5f4f8858700ae8ec8677424ca9d060 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiG z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3-YV$7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di9 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3*Bq$))# abQoCjy*4V;cO?OBWbkzLb6Mw<&;$U-W;{dy literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0028.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0028.png new file mode 100644 index 0000000000000000000000000000000000000000..c57d813b8c2378525519851bdd5c65af0e6a78f3 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiD z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3>_*Bx_<~VALeTzW8H$MNM2lnviNt zltJG#k7i?8fj+Ag(Pkq}{zUx^c}aI&W_>=mDskq^|Me37YlGJct7KW8FOqW-6X#~Q Ys_nJ$(TVB@Knoc>UHx3vIVCg!03hx*tpET3 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0029.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0029.png new file mode 100644 index 0000000000000000000000000000000000000000..ee32430acbf91469395ab431a33812c6ab69ee7a GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiB z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7B}2A^iHU(xQxm(}WBsBJtc#2$ zYdrkaRk+1R#<#Os*L+i6(p?vemq{xcRG6ZM8-QBDVOTT$- UysmdKI;Vst06UU6vH$=8 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0030.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0030.png new file mode 100644 index 0000000000000000000000000000000000000000..828d2266d81f912121195b6db7a91b70415da284 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiB z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wx|9uM`vbbWsRl;lYdV9@g`cv zokDtslJ4G5FYalGlG~7%bl1h=VZw?A)g}M`I|eDti&`F~-mz^?x+TA2cQ-3T*+H+3 U;>%Zv04-ziboFyt=akR{0KdgHA^-pY literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0031.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0031.png new file mode 100644 index 0000000000000000000000000000000000000000..818bcabd2e23cec201e920d17edbbd47c95c1395 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di3 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7J$!II`SHaE8kB0b0A-#qg6 zIOVgb<#f)mi&cpQPu;Hhu9?l@F5SizVe;=k|0Jf5SFEmDIc|AsbGnivGDe5Ny~k_g UEPu9ZK)V<`UHx3vIVCg!0G5+E{r~^~ literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0032.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0032.png new file mode 100644 index 0000000000000000000000000000000000000000..a52b81d584c3493d42e2231a49f746c41f1379ae GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiB z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7J0Tdq|`MnVdUC7;`4{U0Ay zQ&ZIf4{c?8oN=}#Ms7o1(p?ve3kD$vm_GimpCHn){MyQEoQrgyN1k&&@hFLrK_c91 UV`P2U9iU|lp00i_>zopr08i98oB#j- literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0033.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0033.png new file mode 100644 index 0000000000000000000000000000000000000000..1aa63c6de0194e4951ae94c1483eb7187b5b0194 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiF z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqCPGOG!ycItCd? z)n9GaH`X-n6k4}kf<5@|iCvwg!inn1D;g>v{;!`P(y{#7%4?j9be~6_b3XAXiIL%@ Xu-8V#=YknP>li#;{an^LB{Ts5S}-`X literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0034.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0034.png new file mode 100644 index 0000000000000000000000000000000000000000..367ad6fb8eb959100434c2a5ae6b40f803b2137c GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di3 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSrSt!7cOj^DEP!e zqIdtN!_Qe$)dH2W{371|`EP&PZCWpf+(sR?7N-fh3iG0tN2zygo0D$Yzrm2fg|)6i TbfLd3&@Ki~S3j3^P67i6P`{6Qk(@Ik;M!QddeWoSh3W;3@8}w z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSrYRq7cOj^DEP!$ zqIdr{7cS;&zH4R&h-e#k3azV}$n)dz|KsvY5-q1ksdwD_dR)fmF+0QK6rq4SS&Y|! P)-ZUw`njxgN@xNA8_G8V literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0036.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0036.png new file mode 100644 index 0000000000000000000000000000000000000000..c4448c1c9f073640dd31bb07aced662ef9f38686 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@8}w z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSrYRq7cOj^DEP!$ zqIdr{7cS;&zH4R&h-e#k3azV}$n)dz|KsvY5-q1ksdwD_dR)fmF+0QK6rq4SS&Y|! P)-ZUw`njxgN@xNA8_G8V literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0037.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0037.png new file mode 100644 index 0000000000000000000000000000000000000000..18bfa1ded5d88dd6320c381ba933efbc63b7651d GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiI z>EamT;hp@4pOvSAL0Q@5)Bk!OSDzmyLdx#y%!>+lw@#d4aNxP9RV8D;uv_eb0|ruT zixU}6DJ_1PV8X+eYn74F5VFibs-CxV%9Kd+jd@OiYtE>6?Wl4!deHx0zJ5a6)0nKe i3RTzTiw%0^85nN%$t;@G)tv#fn!(f6&t;ucLK6V)dptw{ literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0038.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0038.png new file mode 100644 index 0000000000000000000000000000000000000000..2581982cf83e16e1c16630e904fb73925bcf9d9b GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di4 z>EamT;hp@4pOq(tNzLf%!L7W4%o37?)g>Jjjfzs+#U)|>Skfp#)@y85}Sb4q9e0E_@UssI20 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0039.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0039.png new file mode 100644 index 0000000000000000000000000000000000000000..b75b5c01abbd610eb3e893e78efc31dad62b0a77 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di6 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!px9BP;-Sf0W!sBhr%_#4yXj5rA`O~Lqu#vwsU za`rt{i6^FXsw_Lw#^#~OwfN)pc^)qtN`+smi5xxUv#4ctoC@>5AOAnHXGWY`dW~~Y g`Cmi!%Rd+y#6L?d@mr>~5@;`jr>mdKI;Vst0RHzrzW@LL literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0040.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0040.png new file mode 100644 index 0000000000000000000000000000000000000000..e2501471b4ce7b0b2c5b759704f9fb742882545e GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiH z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu{o>pNJti{|5zy0dvV9!0~S$oJbP0l+XkKjZZpt literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0041.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0041.png new file mode 100644 index 0000000000000000000000000000000000000000..44fc601dfd604a317ba0b34c52462544683e449d GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di4 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3?h$B5Ppu=-e0QBiuX}ckDf25v9gA zbxOzjPm)tKH!ftHRGDD%@0RdM?lrR`%ol2er3tCVd{vVCaQuJ2y~p7qy{&!%dtdik d&N#-;pc5jsWNP)?r$9RyJYD@<);T3K0RS$UJlg;O literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0042.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0042.png new file mode 100644 index 0000000000000000000000000000000000000000..02f0c521f9ece193191afa7803cdcbc2df32976d GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di5 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wx|OTMrGx9P5CQal1=jT4f?Ke zo1EFS=6#RPKEj3kN+RpGb7F|y~eqy{I4PV7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di5 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7J$TYyzU%8}R~{8N|6^xo#~ zFT0qtY(boFyt=akR{07jQQO#lD@ literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0044.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0044.png new file mode 100644 index 0000000000000000000000000000000000000000..387cbe18f4debdf99531efef5af7a763a0465512 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiD z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSrST>jS~gSSx+=+ zUcJz;YT-i0_`jVZY-?smm@m`_O%qa$`Kl!O;rRc4dym6KdRzSj_P*}7oWa(VafgkO Z;n`QAwFPp^cLObC@O1TaS?83{1OP5iI&1&{ literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0045.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0045.png new file mode 100644 index 0000000000000000000000000000000000000000..387cbe18f4debdf99531efef5af7a763a0465512 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiD z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSrST>jS~gSSx+=+ zUcJz;YT-i0_`jVZY-?smm@m`_O%qa$`Kl!O;rRc4dym6KdRzSj_P*}7oWa(VafgkO Z;n`QAwFPp^cLObC@O1TaS?83{1OP5iI&1&{ literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0046.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0046.png new file mode 100644 index 0000000000000000000000000000000000000000..debe80ef22c5c5c9f80e43337375d920eea75fe1 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3?%32 z;uzxLo&1NNmB)fXS(%xc~Fj@W*f#pWERC6Iq8Wu0@}iRzw|U-4K$?%ez8KO6o&sy@y`H-6Oj=T~``S)>t@8 z_$YV%pZ`CaO>~|Iy=J+%``?V_OofhPxdIH^u1l>K)P7$AbP9u~tDnm{r-UW|KPN=_ literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0047.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0047.png new file mode 100644 index 0000000000000000000000000000000000000000..d47142bf7ab69e9d5566a72ffae528b9f717cade GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLb z>EamT;hp@4pOq(tNzLf%!L5QO4HG9eGPV>lHn9m5DPClIP{hftDE;q$dIH14#_xw# zaJwZl#%HNo>G!BDx!7VdYr==?J`t~4+t{wGTC=e6ghR^RBfB_VR~k*$SeVt`$f#-k w|KtD1{FgS&@m?$J^8Qyc-?BypsqKyopZUZ#Cq*(f0G+|$>FVdQ&MBb@053m9y8r+H literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0048.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0048.png new file mode 100644 index 0000000000000000000000000000000000000000..d5560affc5bb7e6b5879ce01399fe7d0b9b35927 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLY z>EamT;hp@4pOq(tNzLf%!L7Y4%o3845)KmL3*sdn6mfDd%=q(vej{TG`#tW(dJ?^? zH7lpq&CE1W?OWzjbJS{@)7FKIq0Y|C6Fp~^3cpqpS$fK6QOl_uHnt^uJ{7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLc z>EamT;hp@4pOq(tNzLf%!L7Yg2M!pp9BP<2v5~Q*knvX~<87i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&` z>EamT;hp@4pOq(tNzLf%!L7Yg2M!pp9D49SlZ{Q_7;8j=csBkx{=eVe<8YDQRzHEgulp@$ur+1eVPj-SU8ZEKaK)+!=qv_L LS3j3^P67i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&= z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWvAMJy{C}B;N1=y%!-Gi)DJcmIi6tNY+h1@{ zXk(nic0go7wu8Aqx{1&w4&w|HS%Has9HJJB8!ej*iOGVjjEn=* z=SOTA-69qbkq8AOAnHXGWY`dW~~Y`Cmi!%MJp)w-p%b_>^qrmS0&5 PbQy!EtDnm{r-UW|or+1? literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0052.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0052.png new file mode 100644 index 0000000000000000000000000000000000000000..67ead31ae8604ac030db29dcd2110bfb8a737801 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&; z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu{kU8{F|Saz>pZzz&f2pS(%xcV{!BU|BY-+ zhCB~U7?v@_GVf}%5EfGGHE4DVel)?OvxV#K#f&B4CP}BSRctDDW?t3S##R&9Dbl-U zc7*vtjnFh9)hS#7haU9*m#?4D_B1AIu0qvy`C7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9k z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7uvX^1=U?d3Y3hxHmkQl#r5=z>rw- z;lKR_2Zc7qIcx_+7Gyh^3oIAs$ZU~xG2r14wOGt1FmZw#^TYrS0m+UVMxyi1T)EJ& zYT-i0`PLIA8NF7!=Bwc~b*78wr$h4p?f)t8p5A%I%JIuO`)3JK9E%F2Ss2#cQ?hM4 SkhBQsHU>{uKbLh*2~7Y2e@c`9 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0054.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0054.png new file mode 100644 index 0000000000000000000000000000000000000000..da538ecb383e915bc22f4286e70dc54702f97679 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9! z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7sYp<%9p3Y-|E*VjB*K7#SHEG#FU@ z_%ENKAn=%}fH{GSBh$g0;~i^|=^-Aev)qd-8MEUQ%=j;uD<+;!F%VBkQDbXsV+-Ns z<^8dzb&7a|`Nlk_z*T2dyewQM@celE|G4~;M9b+>>K*sK9+&Z9b~MRrW>~&f$<}LT RwJ^|e44$rjF6*2UngD;)MJ@mU literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0055.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0055.png new file mode 100644 index 0000000000000000000000000000000000000000..dadf31aace4db645971703931dd9e757c8e0f581 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9s z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7v)rK=zOQ*#iuRjxdSMaB_2FV-s*= z|NozvmnA8NA&7Go(!UnRIkbq>E)t9uYTwDItZ8guVzMAB zBjbShR*$%ZyGM3$x~?>utno0UG39{#fBSz5yr*|wv2y&f&i+|~6vv`MX%>b9qDr>D TB7Mm~*D-jy`njxgN@xNA*ce5p literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0056.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0056.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ac7a1ffa1e84eb99ea8d1a682539be0449197d GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&^ z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7C4;xbAN#Wh7!Dm_5}V=V=ElY* z;Ku&{KQk{&QVc^LgAb!3?+dnrizkNk8Z^6IJ~-hd_YENl9VtU0A!cW1=2dNNY&9pP zG-WsBCEaaV6f)CuN7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&^ z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7WkNvP!T*7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&+ z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7LMhGotFmrF`G%!oL^6nx^u zi31FWUOf0;zo5~fhx-6;gQmg~#=8m?L29AOXBH?<65qh8cZOS{@x*}(7aCSAT*w$d zMX8nXwc0gb4X>#)T{xGssWAWh@&6-xX2iLr*EkoI|21U4>>$v4TY-TyM#)ypZpAO4 PyBIuO{an^LB{Ts5x*bg4 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0059.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0059.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3c71772fd5bbfd9417fe6f1fc69e78e454ffd1 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&+ z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7J0Tc*{I`dN*PEuE}72CY3k zJUj|LeEUA~wII_&JW5*TNuQ<8F!1Ob7?_wW$jZn#Ailsu zFX8TyU7W5fjV5b6+~HvKp#Q&o{e-rsFdwtq+4GoZT| NJYD@<);T3K0Ra32Mh*Y~ literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0060.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0060.png new file mode 100644 index 0000000000000000000000000000000000000000..0b1a8c7d29044707311661791c602ae212894b0f GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&* z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zz`AV0#EFfJEf){||L?%uC?Vb;%@Ew+%X}swhwUJ*Lq<-9L#d}Tv)y}zR>s$A*L*d+ zrp|QXY-gFoSpVn$k7g5{=RvPoF7Ey}qd8Nd<5;c$!_z($>&BcMpmP`)JYD@<);T3K F0RSJKMwtKr literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0061.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0061.png new file mode 100644 index 0000000000000000000000000000000000000000..773cc60df3480101b5c55cc90fda6548b736f1b1 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&> z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zF!9o=Ue+{WWo2e&j>XOY{|hRe$eE#WhhfHn|NnV;SF|no9GLnr@xy=n*J{&xH71?% zS=8dpq$%+K$N!J)nGxrfUgKO;{@0NGvV%bHZ3Tu4AJhzX9(>>nbPR*1tDnm{r-UW| Deuzt4 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0062.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0062.png new file mode 100644 index 0000000000000000000000000000000000000000..773cc60df3480101b5c55cc90fda6548b736f1b1 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&> z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zF!9o=Ue+{WWo2e&j>XOY{|hRe$eE#WhhfHn|NnV;SF|no9GLnr@xy=n*J{&xH71?% zS=8dpq$%+K$N!J)nGxrfUgKO;{@0NGvV%bHZ3Tu4AJhzX9(>>nbPR*1tDnm{r-UW| Deuzt4 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0063.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0063.png new file mode 100644 index 0000000000000000000000000000000000000000..773cc60df3480101b5c55cc90fda6548b736f1b1 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&> z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zF!9o=Ue+{WWo2e&j>XOY{|hRe$eE#WhhfHn|NnV;SF|no9GLnr@xy=n*J{&xH71?% zS=8dpq$%+K$N!J)nGxrfUgKO;{@0NGvV%bHZ3Tu4AJhzX9(>>nbPR*1tDnm{r-UW| Deuzt4 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0064.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0064.png new file mode 100644 index 0000000000000000000000000000000000000000..4560c1cc4ea72e6d7ea28aa04f8af23acafaa834 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&| z>EamT;hp@4pOq)0VWObYhyV7wc(mqoPB&5PHK?`VJ&>>ORCa}dt?i_ z;zWa(%Lo5oK5&bpqm#8~$11ZV-h@U?maDBBehEYx7m2p7-PJ73aQVysdS~WUZ(r2N zOnv?T|C-qmW{W(uj5~$CaRgOy|4Q%XRtM8++ky6@DA0|JO07i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9k z)5S5w!#nv8KPyiPlUU3z3CWG8|NQUQ>buM^!>EM!#WACYMU0BQ2DKKv3T7T|ya@>s zyv-L47@khQSYjZ>w#AeEzrV3TgTcmziCLl2E3^)W%~cFHxS=K8v+C{t|7~m`&li6V zOno@><^TF?zB>K*sK9+&Z9b~MRrX4qh>W3Vm% S`wgJm7(8A5T-G@yGywn?XHJ^{ literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0066.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0066.png new file mode 100644 index 0000000000000000000000000000000000000000..ab75a7747581825509fc886d0e8cb8a95f31f8d6 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9& z)5S5w!#nv8KPyiPlbX@jgIfc07`XMs4UCee|NJi>Dzlu?AoYdRh2EntS)HU3*#c$Q z7PA=`^t2t!kZ3Tvl3^t=FY&{F6J}-(VQvY{wYMI8Wm=(hFl?rR`1>1ORXtr#|Nn1e z3wgfyb71O2&!7M6uledo2dYe+>B8C05)}92@&DuUOA;-oN2zz*`+8i)huP62ubE+q XfR2I7j#xgR0~tJB{an^LB{Ts54Zu#7 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0067.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0067.png new file mode 100644 index 0000000000000000000000000000000000000000..46611d985a9da3b9ed88569d01bc4252926bc0f1 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9o z)5S5w!#nv8KPyiPlbX@jgIjr-nIj5X8I_gGX8!*lc(hQ8A-HWF-@nlC zs;0zlm5z7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9m z)5S5w!#nv8KPyiPlbX@jgIjy04jgbOl-Tf~i`C8TjnV)Ai@P41Ff8MVW!|;XVy}aT z@)?D$!wFXyv{aT{bdce73Fwn)dHLXfCL5c8nwUXQ)YgNiT>=!l)+)H_-P#~pEYbSv z|9@WI73bWaFFtiB`QiWiYrZgTe~DWM4f=EhXW literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0069.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0069.png new file mode 100644 index 0000000000000000000000000000000000000000..c9d13dfd8c13f89a12d4c75c9726d5d59853ac0d GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9o z)5S5w!#nv8KPyiPlbX@jgIjy04jeGxIn=-!Zk3R7MDO!|`&AZx%n7G1m@bg+HWuK_ zY>_nKNlLuJeOSr3*G+j^#-I9Gjf^dwtUXi0az6-hhO{JVADh4}meb1PHu2m4dS~WU zpD+GgvFSs}hyV7k)u#1oOgiPWsKuE{Q}OS||Bv}EZJ6V|R@mkJuVlVujS5oR9U1C7 Wbqvby&AbS7AA_f>pUXO@geCyqiBgaN literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0070.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0070.png new file mode 100644 index 0000000000000000000000000000000000000000..5e777cbef2c7b27e016528b1dd32522d13fed9ce GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9o z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$VhiD57K_oGI8ku-ng9P+JhI?z&~(1ukf(Dl zLuH9z+Jy|O1x{8Hyhk2NcKr7@HfS)|*f87i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9! z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$VmqwF6H)M#)y?gV(f|L8yB?b`EaQn~-nG#} zSV*zgpxG_>(FTvs!-i7-=cgqwBqlK`FAbHpF>l(WzfGrS&dLp`20d^7{I7RrUiJCn z&lQ_KWc>L*zf}0Nn}}zsTHqnY#wmRNe*FK)o*8j&={3$p<$n#?FFOeI-d12p*Vi$4 TAYk$t=r{&XS3j3^P67i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9m z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7sXAIkQ;I&WRHRcc1zHf5jsU-UdzQ z>kWB2e)7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9) z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7uvXGNZEczc+3d7@T&BZfBGdSbI)h z!9;JmL7$jL%i@WDA{3SgYxy58F-Xw+Q9rAZv89t$WVwsj4BrJ?`gHgH|KDH0Z6vM6 zWzL}X;eWj|^QzAmf3Dc{A>+^g`K7|A-9$W7)dCMGHcsLD_v8OZ_RNTLORsS*D*tQ9 ge%V2w_qGB<))xJ?={MGN03FKU>FVdQ&MBb@0Nqqn!2kdN literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0074.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0074.png new file mode 100644 index 0000000000000000000000000000000000000000..962e119fbdbb766aa9c89debca9ccc93dd09c880 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9q z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7w^sIkTJFo11+Z%mq)Q4zXo8Y_Y0u zxbQ+RQARhQqu=dQa-+jaZwsmRd5r)4jSU(MHa0w(a)N0y=agd`pYHhoUog)x?Xb&3 zwgW8x{^w^nl-gOzhl#yR*qlR**{B= f;#gED&B74BN55_NqaO)CcQSao`njxgN@xNADXdoe literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0075.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0075.png new file mode 100644 index 0000000000000000000000000000000000000000..d400d2abce8f34d3f8bb40e0f2ce204f6514c54e GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&^ z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=L0DQjSqq;L5`fK5tZ_FQ|1jFRaF zebYLd4ORcypFO~E=m=BS;)$$j!WxYU-s}GVSH9D9rmgc3Zv*F_|MxF6ys9a&Tcu;8 z|L6btU7e}QT}zB6YdoCbaLT9t&;K9ICOXf9Ub9@>{clEdrb5TDTmc5Bi~4O}n5W$b PI*h^7)z4*}Q$iB}ogq;v literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0076.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0076.png new file mode 100644 index 0000000000000000000000000000000000000000..d8640d55dc7d5ab50d40e0adbb6e88fdd6dbc46b GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&^ z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr9a5qq6e1L;ZXgS1@k8`IEWD zt(^0*fzGx6^V1R-5|bE@CLUng%qg<##-m^V>sz8H+%yQ>!D!I<|G%_Uz})_G?o(UU zm;C=9X}&SXWnxI0kgAN3hvvur|MK+{+MdQ_%~hznE?;cG%W`oCFB606GyS&9XHMS( PI*h^7)z4*}Q$iB}UWQL` literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0077.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0077.png new file mode 100644 index 0000000000000000000000000000000000000000..2be17c27f699eaa85262bb2df84ab5d3c2cdb781 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9! z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7tkD%LEgi7qj^!BsWgKU*gdzB`|xg zy+a1i^aELH5`W)c`Tt+RM<-#)maODPR^AhtH<(`iuXlN%xH)lA0doS=|NrJD3);-B z7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9k z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7tkD%LEf1x66!6vJRZ!{_k&W&|qMd zka8rB)levU>p`9$|K+bL?BI6b+K|Y`%f@Dy$Hw-YU!eDeUgK_tWk3J_Z(|Fw7N{w? z9eC)$|N3jbI?{n#w2V82)>Tbp`q=+pzJ5a6)0nKe3RTzTiw$^LF7DuEV)%GKf8(m} Smcc-`F?hQAxvX7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&) z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zFfl7sT3MNy+3d`Mg9j9j_1?BE5I|2O9)-Rw|W zen!R1#pA#sh9sko<=0kT<6NZsJn~%g2_u*P|KI;%JjJ%!k%8g*`6$`zLa|SPZes9s L^>bP0l+XkK{Q6JW literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0080.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0080.png new file mode 100644 index 0000000000000000000000000000000000000000..31f2c816f133f746d57253cbf105a36216617a9c GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&) z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zFfl7sT3MNy+3d`Mg9j9j_1?BE5I|2O9)-Rw|W zen!R1#pA#sh9sko<=0kT<6NZsJn~%g2_u*P|KI;%JjJ%!k%8g*`6$`zLa|SPZes9s L^>bP0l+XkK{Q6JW literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0081.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0081.png new file mode 100644 index 0000000000000000000000000000000000000000..19cde57356fc6724759daf4d74989fd3fd1ec991 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Et5 z)5S5w!#nv8KP!(!!$d))FaPbA$vCxe&R22aOA{!YTETN5-}sD$QjEh!@ekFLIK+FT z95m+kuqiPg&XDM7W7L@6vy53M@xycECXHeNP1!@N6f z2V)s7|M_3<%)F|ILtce{)#3}UHFt3T`=5UI$R{lEW{c?xe>GXsO|gaqk>0pE`T-OS+W>gTe~DWM4fYh_jd literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0082.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0082.png new file mode 100644 index 0000000000000000000000000000000000000000..b8be795565e49d458640210248f68cc22fa3bb8b GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9; z)5S5w!#nv8KPyiPlbX@jgIh0NVsLXyig9n@{vh3Qyy5@RV-oYCj=|Np$aD^4la zOt4we;I9AVq2|Z`_1AoLqyx8T8FvZ^3T-fGn8EXCW$CKYri{~-(>^O~;<@<$zjb}X erh{1m3=Hl$ak8P?ob`atWbkzLb6Mw<&;$T&fK}1} literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0083.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0083.png new file mode 100644 index 0000000000000000000000000000000000000000..b59374d868859e282e1304f8ca935561083ba36e GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Et3 z)5S5w!#nv8KPyiPlbX@jgIjy04jgDu=aG=?7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9y z)5S5w!#nv8KPyiPlbX@jgIjy04jeGpbGTvR#2F?|E)oySIrL5ciL} zhFJ#+&T}7Ga`>VFL#vQm+>iQMjf^dwtUV#CZ#g{WGdr{3-~okWy|--(#1EMK|9}5N z!z!6W>?fPM#J)UYm1Fz=e{){a&5lK(Gd-ttOlW9jJdz^dzczTSuuJs0&2!i%rgr@M ifBz@*6yC6A1_phhIN6(u@za4WW$<+Mb6Mw<&;$V0mRjck literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0085.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0085.png new file mode 100644 index 0000000000000000000000000000000000000000..3a3a1b503d1868121f60c08393e67f568fda9151 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9q z)5S5w!#nv8KPyiPlbX@jgIjy04jeGpbf{sXVDv0SWu5?DrGpLs|F3+)6w>Tb!1yi3 zIO~ANY3{`@8N&ZIP89z)KP`bFF^N(6>MFAU%Vu8V3_ycQSao`njxgN@xNAHEUK( literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0086.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0086.png new file mode 100644 index 0000000000000000000000000000000000000000..8e78eec210f3c74686225d0c608e77fe90391700 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9m z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$VoPadR8}r}v{*qvk!@n)f&c$QiWrY57{xTq z`s>Ck!F%N4tO@_-rzJ2XCNU~sU1b*Vv4Ph(!@!`U@NpUc9ae+0|NontEYNEI;P`2Q z5W`jrN3T==|8LGqy4kTPbf)K&jtLE|j7L%g{MQDr6?Ta}w|Nfx#MF*||L^}~p28c} b%)oH!OPuV3I{i~XH!^s-`njxgN@xNAGO<)g literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0087.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0087.png new file mode 100644 index 0000000000000000000000000000000000000000..1eb9ac4b92d2ea55bdee775c65ec5bb26f877fa5 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9m z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vskd(k&v7?*`D9fLPCPT<702-c5o-m`u{&a!y%OKVe=Em zpZuoA%BoBL|Bp1^nB#JB)fp8p7movn7?O-SmS00}CyZSF|9}67@f6!? bM+SyN*WzT^Cx-t8x{<-t)z4*}Q$iB}^9NKm literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0088.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0088.png new file mode 100644 index 0000000000000000000000000000000000000000..c4fd968df08408e4af71a30b7ebf4d9dedec1a99 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9; z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7uuABA$WsA3 z54kB7fyGQgI)DD3-_@C_+!dCp7O3RJB*rE%+0kaJ-&Q|?T+8!CaxT*pfBmn2&L3bF d!OO(Jux(|WtSeXOYoIe3JYD@<);T3K0Ra2KOj!T` literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0089.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0089.png new file mode 100644 index 0000000000000000000000000000000000000000..419078edad8e05932ea9d4651d676964d7824799 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9; z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7tkD%Z4=u2`MgmEgBpy9gZmyAO71< zjbSkC;1ORScKGnchX2bYB^+i%9Prq>ig$|6hD0`AHa5e&JMS8IGc5c0|9=}>$WsA3 z4>^&~D^7A~%KrI(ephFza#vWYTA-2>lNg)8WJjB=ep~$naxKpn$+=8Z{Pn;7Ie&mz d1TPZXD%*$do%LV(U>@O1TaS?83{1ON%?PO|_2 literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0090.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0090.png new file mode 100644 index 0000000000000000000000000000000000000000..2e5a5a1ecf4638974ccec4dcefc0356b6b913402 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9u z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7tkD%Y-FujLOPImR^ol4H7PGjQ{@! zpJWwiK2gA!<=d2a;QwVF9t9trge6f|*|>spW;ixCI`&9!uYRD{kooWb{)LR8mM#2~ z*jc5sWE5B*{r|sac7)lYjL4pS3j3^P67i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9s z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7tkD%LEgiwj8U36qj{e8Xl(vnhkh< z)X!>UY$ws4jtz&|NozpUy!pwiiLrpQ9MRI Twq#B;&~*%+u6{1-oD!M<7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9+ z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7tkD%LEf1x66!6vJRZ!{_k&W&|t8! zVd9rny%PnKe*FKhp~t|Pe3(ayhbQUIjXTVS9PgNBJp2D&S}I_w^ACl}33COi6O}v? zKm50Utv0P!BWmhQmyfM1S2Q9d9Cj$oi&`F~-mz^?x+TBTX@S50_kU*BkY2;a$WSF8 WC;wp93KO977(8A5T-G@yGywpk)lVA$ literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0093.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0093.png new file mode 100644 index 0000000000000000000000000000000000000000..112ad89d77b800c31da87dcf2dfac225e50079ce GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@A9k z)5S5w!#nv8KPyiPlbX@jgIjy04jeF$Vq2WZa7tkD%LEf1x66!6vJRZ!{_k&W&|t8! zVPaOOw6ZcYv)P#i2M;J5>%DDTAb!B)|Nr|J8dk|1Vn6x+KmQ>GF^+}`kHioE?O&@+ z>(z*wI@9H2E6Wvy2nmNX%pb2*Zr9foci~s-U+B@7#Fii+F;AXhf7NuBH ScuD~1HU>{uKbLh*2~7YdSWw3R literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0094.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0094.png new file mode 100644 index 0000000000000000000000000000000000000000..773aa32cebf3dd9155aa9020a3a71d79aa20a641 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di6 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zFfl7sT3MNy+3d`Mg9j9j_1?BE5ImdKI;Vst02%8%+W-In literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0095.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0095.png new file mode 100644 index 0000000000000000000000000000000000000000..f9fdb192e03dfd03df80b86ecdcd0a130d6f0698 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiI z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zFfl7sT3MNy+3d`Mg9j9j_1?BE5I7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLa z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zFfl7sT3MNy+3d`Mg9j9j_1?BE5I7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@DiH z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zFfl7sT3MNy+3d`Mg9j9j_1?BE5IbP0l+XkK;}Sbs literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0098.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0098.png new file mode 100644 index 0000000000000000000000000000000000000000..69288cf685a70e5890c621a11ea0c73186dae6f7 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di7 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zQ1~Gvx2K1P=Y~Nu8*{USc^?14y$qNC{I7RrURA^)uk!!DJx6nd0>dN5qnf?67HTD1i literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0099.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0099.png new file mode 100644 index 0000000000000000000000000000000000000000..1aea368c6624df8089a33072ecbdcbe7445f5e31 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di3 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zP$&_a+tb6tbHkvSjk#IE{GC8!JEPC%|NnV;SDaF;negZTe+8bTMuv{#2N)PGXsYpt ToKQLnw2Q&h)z4*}Q$iB}<1;rI literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0100.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0100.png new file mode 100644 index 0000000000000000000000000000000000000000..1aea368c6624df8089a33072ecbdcbe7445f5e31 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di3 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zP$&_a+tb6tbHkvSjk#IE{GC8!JEPC%|NnV;SDaF;negZTe+8bTMuv{#2N)PGXsYpt ToKQLnw2Q&h)z4*}Q$iB}<1;rI literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0101.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0101.png new file mode 100644 index 0000000000000000000000000000000000000000..24f7b7ad8465c14410d718f09606f0af4eef84d5 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLZ z>EamT;hp@4pOwdgQCXlt#gWTU)bQaok2ySY%n4?X%{y4Po0O?9UcG#&xCUQyAae&d zBU{_W3>jYLfG9~{_QS?J|K_t@b9C_0Nl=N|`p`T}KvgAxw};m_!@!`U@bSvsiHQuC w|NO6aW?ogqA+N%}>fZnV?IGU;7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLa z>EamT;hp@4pOq(tNzLf%!L1h$Gq@=nc~ z-qUt4!>ZxQ)Qfu@x($BR&uV0B>16FWydsM^H2#J`GaGZWg!wyx#&$-Z&;S4P@~$|g nSTn(9#iF18<->xVR>?AaI;kakVuxub(0T?>S3j3^P67i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLT z>EamT;hp@4pOq(tNzLf%!L7Yg2M##6NEk3NzFVMnh~dx2mg5Y6%ntXY9?Z4VXchER z-SUMg@wTIuTdaW;+v1lDlfu~&<9^i7YGiEbWbHY;B8z$I-x~(aY|PCP=I;a=+Zla6 v|Nqa+yW*5$%>|_mzF4NR_h+1D;PXo{an^LB{Ts5&WS_m literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0104.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0104.png new file mode 100644 index 0000000000000000000000000000000000000000..49f2987a9363bb7b67ba92b9c58494a65eb78649 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLW z>EamT;hp@4pOq(tNzLf%!L7Yg2M!n*9cmEdC|E8Q)y7yiJ25Zm;9H9THN`m>GGDSD z+SVM>vn#=br!Cv+NByiu#+FXjp2I7$m__H@Flc6DZk8~AC(zi===1sie_q}drxa@@ l*sSRI{a-%J&6&%F;i9*e=)3GkOM#X%c)I$ztaD0e0swBYKobA} literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0105.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0105.png new file mode 100644 index 0000000000000000000000000000000000000000..3195d32ec5cc62c471f8909be2cf6d56f2e279ee GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLa z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu{o>oNHj8(H!V*!d9+>fnVQ(0KIW&zhbpH| zi&Mz4_BgtN+wCwzw$+dNS&fV>ovb~FS7b3ywYp)@%*Na-Vg62_v7OQ9^Z)<6yem#A n)=aQjQS;-!eAod;FK&hdJzAnw+B+7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLc z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3@7KgT2S0!TS8AORPU~+je%cZh!3H zD*EtI+q5`^9P7P{1owNlB}@FVKYM`T&=IC%i6L7XH|dz2S#a=x!m(a!mj{Uqm;d~) scV=Ey#38T3e=6qx|HEGF9%0N3>(6S5p7)jY06Kxe)78&qol`;+0PD|13IG5A literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0107.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0107.png new file mode 100644 index 0000000000000000000000000000000000000000..00407e5131fb244de65a38e0c236c30a45d15716 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLV z>EamT;r%wmk?Vj0k9Yaq+WZ^Ff9KbK(7xNWdiDbc+scfE9v4|SJzeJ?O39tPgQ=M5 zfN24*M90!v1y3P+&GOpwRg510oeY(f;wCZjW-SQh5!g~bU0CO(OE1Ij?QC;)?BSoW zBkVCt-{1I&iy9k4omb3%KJ&ZJ!Ysb>c@5kz+09SvG!m%7i6P`{6Qk(@Ik;M!QddeWoSh3W;3?%32 z;uzxL{WipruR($5^`5HlympiSe`Mchlv|*|DfQqVr&ZQph+!z; zzr)Pe^8CSNX3t3(ljl_2`^q)x-_$gxlsihyu`4>&3>7Zio2Pf-M59~7a&czMAGP8$ zzF#}Ym-BkJ@=<2x)olUw=S}ZhGOw!KQp76rqR;$9#F>@CK&LQxy85}Sb4q9e0CQMM AC;$Ke literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0109.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0109.png new file mode 100644 index 0000000000000000000000000000000000000000..6726d7e248b6d6f6cb597c59772aa7bb2265ad4e GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLV z>EamT;r%vbBkutPp5k3)?|E$}|Nqe#eksaii$@5PT3bX{0L!-rGdk=JsBH6$Tey?q zf!q%EKLYcbkJ?U9>1>`PeSdRY)200(z8yW`DGKbS7gg9;ZvC!yWb9>FEzTSqagTY~ z+E9zeBC0eM=n@7`S3j3^P67i6P`{6Qk(@Ik;M!QddeWoSh3W;3@F&* z>EamT;r%w$k*`64=k=bd@4R-C|Nms)XOt^2rK3=wKYG)I)~z~s87^Kn$hfSq?!X*| z0^S(rIF9+u*B>PFsd%My$&|&vPLFtVzDiB$k7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLR z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7J0Tdh^Xp5qn#PdwZd9F_%Y zGr2v|7MtOyAj{!w@afS1%RD>^J)8lihn{#AFn+Vj5qRnr;E{ZoM~a6h>CTST2^A6t xO#c7Bf1zQO%pvxZ%})RS*Ly5+s^H;ac&==I;_7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLY z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7J$TZ~o0p5qn#PcqyT94_=c z3D*&5Hu!Yt|79K?1s{oqHEg@uYs4MaNVx126j8Wg(9Fi%EMfjmps}6N=kx#nyu2$; pDb`G|(YWyMf4hrP%kcvY3~rl^&qO<3b^$to!PC{xWt~$(695A(KwSU; literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0113.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0113.png new file mode 100644 index 0000000000000000000000000000000000000000..1707042342bc65b70abf1dd28346e124ffe6e5b9 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLa z>EamT;r%w$k*~pkLpyHoZ?^e6|Nm^SU3zPQvDMxU+P)_aZDYz*knmUN&^(d7g@<7Y z+sZ~ZrQZssC+t34y>OPv+~L~cRiSrpHU8f6BkQvR^W_y+oEhV!R?N{q%%$`BKUbbq pOvd`UTqr_F!i1s}my|9|Nst@O1TaS?83{1OUx8N1*@! literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0114.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0114.png new file mode 100644 index 0000000000000000000000000000000000000000..d766732bd3bab215a1d5e6b99ce89d9db30a44c0 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@BLa z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zFtIOG`myb?YK3w`CdQ^^2UrD~A0#q7N;u3T#lw?y=Y|u@lgb5h5fTSX{{O#!p<$KG oA@-BaCV&3(e`IJmet>}?@U8Kg*1K7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@Di9 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zP$&_a+tb6tbHkvSjk#IET*F1;z2QCP%MJ|-9wste{`0@ynK_HW>4(D4|Nk8&7Rjoy ZF+{IZy_t8}@+Z(n22WQ%mvv4FO#m(8Io|*P literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0116.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0116.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc50811af6c29311ddc521613e3d3ade53e29a5 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GU1 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= yQ1~J|SI1z#Q4`}vJNFgJ3mp7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GU2 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= oP`D+_ndMP^y?~0@3xQV*OZmmus>_7=15IP_boFyt=akR{0NnB^HUIzs literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0118.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0118.png new file mode 100644 index 0000000000000000000000000000000000000000..62ad5e9128164b871408fa0912685785b2b8f479 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@GU4 z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= sQ1~J|SI1z#Q4`}vJNFffcQ`OIT#FGtUE#a(70^TmPgg&ebxsLQ0I(1&rvLx| literal 0 HcmV?d00001 diff --git a/8x32 PI/qrcode/sources/tetris/tetris_final_0119.png b/8x32 PI/qrcode/sources/tetris/tetris_final_0119.png new file mode 100644 index 0000000000000000000000000000000000000000..263c6c57ac1762ec4e4108e06fa9821d43066663 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^96+ofzy>7i6P`{6Qk(@Ik;M!QddeWoSh3W;3@8}p z>EamT;hp@4pOq(tNzLf%!L7Yg2M!oWu`NzyI3=+7Wr7Kh+hxWjSqDyV|MxdGXfW8= zQ1~J|SEpcqUNVCtO9E3HzeY>Q!3m9yVmy)(Hx3B!Y49;K{8yFRbL`m#cc2Xnp00i_ I>zopr0CKr7g8%>k literal 0 HcmV?d00001 diff --git a/8x32 PI/serveur_web.py b/8x32 PI/serveur_web.py index 23a3b70..b615ab0 100644 --- a/8x32 PI/serveur_web.py +++ b/8x32 PI/serveur_web.py @@ -350,6 +350,9 @@ def accueil(): actives=[fiche(n) for n in actives()], desactivees=[fiche(n, DESACTIVEES) for n in desactivees()], en_cours=lire_en_cours(), + vitesse=lecteur.lire_vitesse_de_lecture(DOSSIER), + vitesses=[(0.25, "×0,25 (très lent)"), (0.5, "×0,5 (lent)"), (0.75, "×0,75"), + (1.0, "×1 (normal)"), (1.5, "×1,5"), (2.0, "×2 (rapide)")], nb_corbeille=nb_corbeille, dossier=DOSSIER, adresses=adresses_du_pi(), @@ -507,6 +510,18 @@ def action(): ranger_dans(CORBEILLE, nom, depuis=os.path.join(DOSSIER, DESACTIVEES)) flash(f"« {nom} » est dans la corbeille.", "ok") + elif quoi == "vitesse": + try: + vitesse = float(request.form.get("vitesse", "1")) + assert 0.1 <= vitesse <= 4 + except (ValueError, AssertionError): + abort(400) + # Un petit fichier caché dans le dossier des animations : il est lu par + # le lecteur au début de chaque animation, et survit aux redémarrages. + with open(os.path.join(DOSSIER, ".vitesse.txt"), "w") as f: + f.write(f"{vitesse:g}\n") + flash(f"Vitesse de lecture : ×{vitesse:g} (à partir de la prochaine animation).", "ok") + elif quoi == "vider_corbeille": shutil.rmtree(os.path.join(DOSSIER, CORBEILLE), ignore_errors=True) flash("Corbeille vidée.", "ok") diff --git a/8x32 PI/web/page.html b/8x32 PI/web/page.html index 0b1a1e8..a700bd7 100644 --- a/8x32 PI/web/page.html +++ b/8x32 PI/web/page.html @@ -22,6 +22,18 @@ + {# Vitesse : le formulaire s'envoie tout seul dès qu'on change la valeur. #} +
+ + + +
diff --git a/8x32 PI/web/style.css b/8x32 PI/web/style.css index d9e913a..92e46db 100644 --- a/8x32 PI/web/style.css +++ b/8x32 PI/web/style.css @@ -61,6 +61,11 @@ h1 { margin: 0; font-size: 1.3rem; display: flex; align-items: center; gap: 10px } .statut { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; } .statut form { margin: 0; } +.vitesse label { display: flex; align-items: center; gap: 6px; } +.vitesse select { + font: inherit; padding: 6px 8px; border-radius: 8px; + background: #2a2826; color: #f1ede6; border: 1px solid #3d3935; +} .pastille { width: 10px; height: 10px; border-radius: 50%; background: #4cc283; box-shadow: 0 0 8px #4cc283; diff --git a/CLAUDE.md b/CLAUDE.md index 565134a..831af29 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -80,7 +80,7 @@ Le projet avance en deux temps : - Matériel : Pi 3B+ / 4 / Zero 2 W (pas le Pi 5 : `rpi_ws281x` ne le gère pas), GPIO 18 (patte 12) → **74AHCT125** (3,3 V → 5 V, VCC pris sur le fil rouge de la fiche DIN) → 330 Ω → DIN. Audio désactivé (`dtparam=audio=off`). - Installation : `installation/installer.sh` (venv `~/vitrine-env`, services systemd `vitrine-pixels` (lecteur) et `vitrine-web` (interface)). Docs : README, INSTALLATION_PI, GUIDE_KRITA, MODE_VITRINE (overlay FS), INTERFACE_WEB, CODER_EN_PYTHON. - Interface web `serveur_web.py` (Flask, port 80, gabarits dans `web/`) : dépôt GIF/PNG/séquences, ordre (renommage `01_…`), activer/désactiver (`.desactivees/`), corbeille (`.corbeille/`), « jouer maintenant » via post-it `/run/vitrine-pixels/demande` lu par le lecteur. -- Pi installé : Raspberry Pi 3 Model B, Raspbian 11 Bullseye 32 bits (dossier boot = `/boot`, Pillow 8.1, Flask 1.1), Ethernet débranché : accès uniquement en Wi-Fi, `ssh devel@172.16.50.27` (clé ESADHaR) ; l'ancienne adresse câble était 172.16.7.199. Le Wi-Fi et le filaire de l'école ne se voient pas : depuis le Wi-Fi, page web sur http://172.16.50.27 (adresses DHCP, affichées en bas de la page). Matrice posée debout : `ROTATION = 90`, image 8 × 32. Pas de 74AHCT125 pendant le workshop : **montage A** (GPIO 18 → 330 Ω → DIN, matrice en 4,4 V) testé et validé ; montage B (transistor 2N3904 inverseur) essayé : échec, trop lent (temps de stockage ≈ 0,2 µs face à un « 0 » de 0,4 µs), seule la 1re LED s'allume au hasard. Lecteur `vitrine-pixels` activé au démarrage le 2026-10-08. +- Pi installé : Raspberry Pi 3 Model B, Raspbian 11 Bullseye 32 bits (dossier boot = `/boot`, Pillow 8.1, Flask 1.1), Ethernet débranché : accès uniquement en Wi-Fi, `ssh devel@172.16.50.27` (clé ESADHaR) ; l'ancienne adresse câble était 172.16.7.199. Le Wi-Fi et le filaire de l'école ne se voient pas : depuis le Wi-Fi, page web sur http://172.16.50.27 (adresses DHCP, affichées en bas de la page). Matrice posée debout : `ROTATION = 90`, image 8 × 32 ; sur la vitrine `INVERSER_X = INVERSER_Y = True` (demi-tour) et `DECALAGE_X = 1` (image décalée d'un pixel vers la droite). Vitesse de lecture réglable depuis la page web (`.vitesse.txt`, ×0,5 actuellement). QR code et affiche A5 : `outils/generer_qrcode.py` → `qrcode/`. Pas de 74AHCT125 pendant le workshop : **montage A** (GPIO 18 → 330 Ω → DIN, matrice en 4,4 V) testé et validé ; montage B (transistor 2N3904 inverseur) essayé : échec, trop lent (temps de stockage ≈ 0,2 µs face à un « 0 » de 0,4 µs), seule la 1re LED s'allume au hasard. Lecteur `vitrine-pixels` activé au démarrage le 2026-10-08. - Schémas générés par `outils/schemas.py`, exemples et palette Krita par `outils/generer_exemples.py`. ### Chiffres clés