From 02f2e0ffe0d83db766a82298a29f241c8e7557ed Mon Sep 17 00:00:00 2001
From: Rick Carlino
- +
-[Watch a short YouTube demo of the app as of 2023-09-16.](https://www.youtube.com/watch?v=0H2MufXrYl8) +[Watch a short YouTube demo of the app as of 2023-09-16 (older v1.1 release- new video coming soon).](https://www.youtube.com/watch?v=0H2MufXrYl8) +## ~~ALPHA~~ Beta Software -## Demo - -[Watch a short YouTube demo of the app as of 2023-09-16.](https://www.youtube.com/watch?v=0H2MufXrYl8) - -## Private Alpha +The app is now stable enough to be used for serious studying, but there are still stability issues and many features are still pending. If you want to use the app but are hitting stability issues, please reach out. -I am privately hosting an instance of KoalaSRS. Please contact me via my blog/LinkedIn/Mastodon/etc if you are interested in trying it out or want to help with alpha testing. There is no free public instance at the moment due to hosting/API costs. +I am also privately hosting an instance of KoalaSRS. Please contact me via my blog/LinkedIn/Mastodon/etc if you are interested in trying it out or want to help with alpha testing. There is no free public instance at the moment due to hosting/API costs. I've created a [group on Club House](https://www.clubhouse.com/c/join/B2Tyn13w) to discuss KoalaSRS development in an informal manner. Feel free to drop in and say "hi" or suggest new ideas. -## UNDER CONSTRUCTION ⚠️ - -The app started as a command line app while I experimented with different quiz strategies. Now that the details are resolved, I am converting the app to run in a browser so that it can be used by non-technical users. I am working directly off of the `main` branch for now since it seems like we don't have a ton of users. If you want to use the app but are hitting stability issues, please reach out. - ## Table of Contents 📑 - [Demo](#Demo) @@ -48,11 +41,11 @@ KoalaSRS rocks a minimal GUI because the focus is on what you can _hear_, not wh Here's how the app works: 1. Korean sentences with English translations are loaded into a SQLite database (I use `seeds.ts` for now but an editor is in the works). -1. The app creates a queue of sentences, sorted by difficulty. Difficulty comes from past quiz fails. More on quizzes soon. +1. The app creates a queue of sentences, sorted by scheduling need, which is calculated via a cards age and difficulty. 1. The app asks the user to take one of three quizzes. All quizzes involve listening to Korean speech or speaking Korean sentences into the microphone. 🎤 -1. The user has to pass a quiz to move on. +1. The user must pass a quiz to move on to the next card. 1. Once the quiz is complete, the sentence is played back in Korean and English. The user's audio is also played back to help with pronunciation. -1. The process goes on until the queue is empty or the user quits the program. +1. The process goes on until the queue is empty. The app has three types of quizzes: @@ -60,7 +53,7 @@ The app has three types of quizzes: - **Listening quiz:** You listen to a Korean phrase and then translate it to English. This quiz comes after the dictation phase. 🎶 - **Speaking quiz:** You get an English text and are asked to say it in Korean. The program transcribes your phrase via speech-to-text, and GPT-3 grades your answer. 📣 -Please note that this app is not ready for non-technical users just yet. If you want to try the app, you'll need to clone this repo and build it on your local machine. There's no public demo available, but we'd love your feedback! 😊 +Please note that this app is not ready for non-technical users just yet. If you want to try the app, you'll need to clone this repo and build it on your local machine (or ask nicely for an invitation to a private instance). There's no public demo available, but we'd love your feedback! 😊 The program also comes with helper functions for formatting prompts, grading responses, and inspecting results. @@ -72,7 +65,7 @@ Check out the [whitepaper](https://github.com/RickCarlino/gpt-language-learning- ## Developer Setup 🛠️ -**Prerequisites:** NodeJS is required. I've tested it on v18 of node, and newer versions will probably work too. +**Prerequisites:** NodeJS is required. I've tested it on v20 of node. The project is in a semi-public alpha phase. If you don't understand the instructions below, you might want to wait for the project to mature before proceeding. **These instructions may be out of date. Please raise an issue if things don't work!** @@ -92,7 +85,7 @@ The source code is permissively licensed and open for review by software develop ## Project Status and Limitations ⚠️ -- I use the app every day for studying, but the documentation is, well, not great. If you really want to use this app, consider DMing me on Reddit for help. +- I use the app every day for studying, but the documentation is, well, not great. If you really want to use this app, consider DMing me on Reddit/LinkedIn/ClubHouse for help. - By design, the app won't quiz on reading or writing. This is a speaking/listening app. - The target user is English speakers trying to learn Korean. I can add other language pairs later, but the main focus right now is EN/KO. diff --git a/pages/_study_reducer.ts b/pages/_study_reducer.ts index 8b30305..5ce34f2 100644 --- a/pages/_study_reducer.ts +++ b/pages/_study_reducer.ts @@ -1,5 +1,3 @@ -import { unique } from "radash"; - export type Quiz = { id: number; ko: string; @@ -12,11 +10,25 @@ export type Quiz = { }; }; +type Failure = { + id: number; + ko: string; + en: string; + lessonType: string; + userTranscription: string; + rejectionText: string; +}; + type State = { numQuizzesAwaitingServerResponse: number; errors: string[]; quizIDsForLesson: number[]; phrasesById: Record{quiz.lessonType.toUpperCase()} quiz for Card #{quiz.id} ({quiz.repetitions} repetitions)
++ {state.totalCards} cards total, {state.quizzesDue} due, {state.newCards} new. +
+ {state.failure &&5?N3mdlg+D|`!*l$)4z7iI`QT75REHP`I-buIq5zVnHka|ry(U`Wt>=MWO z&<`GXT#+K#(W{~ptSl|l!YMh#NHt;M6WrwVvL+`bBqtzg?IWO>x#G zeg2O9GOoOrbypxRYpvs3!Wk^Dcqo(W*nIU4o cd(*6LwdC0VpJYoKd}$52FjL)?Dna7ATYc7R62rZdtbp99B_i?S06e)Dv@ChwN@ z-_N#MMZ#0Ye`L8Q5{~9a%^3^LF2n5J+yco0ZS^*Vth+qny8^YenBaT0rUq12k>Rtn zzO;(Bog3etyCJ@!rsfQ9h)Z@x^0xcubxBo X_p6i`4D75_|K47wF?H z@c5?UUEcui 2L !C5?2Z;^)ZV 4IZPeKd8lJpep!F(Wt)tNhkX#=H3 Xbyb#Ly%qfEonqV(kokYgz&J>I41rPPI6_17hvW3VPMZ vTpj&c`TOR;{8#?@SeFFm3{&(FbNO3j7 g06W;z;?BhSs5EYV5&`-|jnPD*K6b%NbS-holpYYbuh3-;iYz!p~fEG+o?jn^X z2 iM^A1hr#eKa$IfYJHEQ=G_*Lmp z`8B%j)u;od0$>2ynlakwi!J>x{m$!^SoKs4s@EI!w<-N8(?|)Lj}@tjv6$njJxoS* z=Y}kvC(pP)iM6BTWs+K9PUbTs-a4=C-L_TDbMt2u=59RKbUhPrdr^0WL%K5+fgyj} z8>OtkDd#GZs!rk9>5<-;xEU#Bo%)%E*s#04grC+u$AZqqop?PdTt*~k%<6@&|9JXF z1eqWoIHi74->q_GOnMYtT|69tk8DOMO{Xgy!k(WiC_CviQ9fogZbNG(S8tkvP>INf zh$nD5j+ne=4mQBcV2w}r_J9GB5+;lEMP_vK&$H%v8qF)sgYpLw9_#7@lgJ74sFmvk zH7S!WOKgez(RVTObwS;bU{oc~bK7xfoIld3?&~Ts=1!(Fw;zR6pYyo5D&83lbkoK} z%QLyDqZK}byYp1r_p9l2gV?OLw)G&n1A%=qweqUks%Q$ALq+rBix7>lTp0y-=J1E! zJL3j)V{AroLOmre29ORP>% >aTGv`&hMFBd;y6$*+AFFMt) zX&f_Fwd(@yi#vSH!yW(-FByw`D_Pi0e!r?S?Kn_tKi8Hxi|4;1V1G45BB43)Wb9@F zI84c8bGZwZ_bJ&w2jTu0qL{0h`t0*V^*LRn6yTA _@h*8zqh46`N0 KCxmKiT^~syO{vOY z8t$yRqp95>j#k8zSW}j6RCE9#BU)!zz!ixm(%1HS(*u{vnMz7w5x(Q8Yd(_o`#734 z)|%>d;|CJ8v*3046`nUFJ$nc*21c~S+4Bi!b}U%DWf<~@_pD#Y(?|t;>zceSjoI&Y zbhKZqWGcD ysgW{ko`|hWHk|oxHjQ_9-M=IJiH9!-7Dt z>||xFHE3Wbd%~&SDJQ_QIJC3yKBsuCm(~oB)*kj_6Jpph#clt_sHP#TZwGgdN$UN` zI>KhmWy*Mr-V1yoTC(OJENY{c{k5A=Gq; !aRT=T9G*O6$gw$^-ti)?8MQi2AAbz4d7kh)WG)<{@Egv+|Bwm$A#k%XI zwU)78(Mb_8^e0Ie-kib!ADl<7KK3oD9_>MmWeC#B!%fkBB>7QDcE_CxAY|W}s4(>` zE<9r9ztb(H+W5zWdS0HF>I9b+ecR513rG-}bN^1mvj0Zo4sOp&V^aSkA *);)~3|%ZvEYo>3Xw$Bpz|??hz` zUwR7{R%mIrJ(j}C!R=bLVv+>Vq@&&`ZfY>(5A0h7GBxihr^rX_Ip|Ka@B~Qw(0@YC zF7(ED9O`U|sxq^{M?)+<{xsqZhl;XzjOBnVqhMxsFq7=BNa=s|oki>tXEL`S^EPl- zWm08sMiA>iYK{K`F_Jdpg%_`3wtn7!^JpMSPdA>iRZyC*hi`jWlMDtxAA)CCGKz6- zui!})2@eRtv=o(2DF4$lzTG$GlNmzs`LS?MyK1s^bEh2&g)bPc)E%?171XB$c(@7! z924w}Yb?&xh3_74Li^h l=6#U26mk(4qYMG4Mf_D}rTpz{;chj0Jba zpXlL(ej3aGEJ5`fb)3B>pxI@*>aWzOejZJ;SXt_#l&0a<@0J~B`hN3IC$D^8{Q00| z>0fjIze?^(SEeN g z_x@BZUH(mp*Z!qB|5s_w|97knL2j0pP*cUk{vmrQc)*S?l7%kl9SThW@g~7mtXe-; zhb$ZG;hLJm3~qF^F5G!Da95G<#5QR zs)7L^H_8{Fi&oj>VE)AaU;ihoz?bMjngjve?;fe5B*~MF#+frEmnBz@5Zs5_5fDc> zo>9eZczq7fI<~@{@XkrsPT=(?7+}`+KDueAd4SMR5=@}t+6ae9JGzW_RZ5nzqIMR4 zz6YM1!r+pCKaX|crJ)xYclz$~1XK5MfqT%?gj-eIdGGFG(6@mR&?dal4|<;u0}x5w zv3w_jdfUPPhclpK=XGx7-!4Cbj(4~k+W#H&@j<3 25}gF&t`RI#&>9#P@QiWfFSH>M!-mDU^&+drO%p|gdfNtEzJ^)T(?&Wu)H;LYR7 zEFc@a)OjPi->yvJI`;SqLO@^bBlRcp+8}h{_4pWLY9ag;@mXJ33Y8wV04ZBZ>7KsI z!K9VT+sMi;rKqbB@ BrSH}sr;g8a`f7 wn8i$Bsx{Xi!z%w*PNY)AFmN>}Z7AR>bkHRM6_gr1pFp$bw*^DlkBOu0$~S`T`#Q zw*D1n*xVpyQe!M^Zw|j}CDUk@Lc6FR(Rf(9ip4J0KsY7hRP}~KT8$#}Y)~3}^J^r` zV;Jb~QOY$l1 )y9U51|E3}icVSpjH`rqFwLfIm&w3FHIZWdvHMR?!JZl8IX z*)8*5yw8aHLb!9eI??*Geth{weNK`Y{%vhQmPT;D_}unqf?K~1*pwFxtSpE7&Qvpr zaK~F%_ZND =kW$&Om=Qg+6P6n*|&ZPv+0r^Hl?GNt&*&O~RX~`iju->y_H=_GQ+uUNqjx z1@MybjMKP4Mw|{jy8n1n>)Toj&wV2^r%hJvkshw1`l_BV;;c1IaMnLz#wR-be9k@< zn}3NkKYm%Y>aIsSoUyp9=j<2R|6Wx2S#8-Fzo}*~+$OsJ`93Mv{qD@!Zi^Y+H;?y% zrTd701c@BiPwK*e%-ZJ|2C!J+9s6^MGyeOSo&RSj03&sHcCg`JO?SfIVd#N-CGdDF z@FEW$OGRk>s)4_V9j@|Ue$)8n|D50A2F-BzJH^*5t3;3bpL}!g0T^#b%Db(bUxA>K z^6bzScz`{W1)?w)7h@Rzp=K~cW;;E^t==k!>fxLq0eFm-dfPOD)}H}do(a@!c4HiRr@Xf za$_{ZJ`6C@^~jjY8|~hzw$x#C%wX&p9E`W-akF7dcd}qxlSHU!d%!8^F$#Zj8;E;? z3`}$mgF54r3c%6&{j4RPI>%2n!uioZa_zX2e5E!^Ro$FAU_H>_dy; o^g>h13+9K}uS-V-4}zveO^FQ?@%V&r(*sImvJ6?uxLIw6 z?sF1?OZPG}L!Th|^9d`8%iEOQTbA7f?dNB#XL;&2H~8 SAW&)JKYA!9#VU=lc>ixphqegQ_-fKQe3UWg3aG4ZKV}_VxWrAK9DI$ur#MN;jXj zU#$D8s@fs@z~mW1z$8t Q)3UfWMX%ACH-zYy$Cd$Esh@U5bc4Fi#kftquPVvaJ9 zLSTfo8o4FcTd)(bUE|~2ygmny2Lr4M-vmiVxGhCRy00yZl_uBKdodT1$!R^(axb5e zcwoTX zEQ9Ad%@ftzEiJk8Cf6-k!*`P`yo%A?JNf&zajdGiGN0@q%{6Mr=sHyp)X%+q&hFu+sOz ~I-#@aG8h~VF&ChK$a9L?4aFtVc8owXqnX=iF^w}!0Mp3S+ zxb)1~KjYXirq*dLYf;Ml+fd*x4`vZgLqmKtK|IZ#gV!2PAmWsS&%$NL%f)SUWe^ zr~VeTvleo3nA?!uQ C3IMtDuCKez8-(+N?qf}&_V<}CEhsL8%R(11+28y;4Sx?!NL zX!)}G;x}z(G*~H$w^TJ8OD4y=Hk2%J`%hl`BChdup>2X4cz7=btb6LK6Z&Hr^=HMF zLMc&mDx2%ZN=J7l71^8yCuguZIfjoHAn~}KeFAK{?A>>RuHmVR!ty5TF3`ghK?<7o z8`F7klcr17v-)5eLXEn&PrB^XQOMk&Og1su=1`k3Ggo8Qf!d?${pWG9>?jz%v*Dgo zK &JFYL=Z_B^~6-KD%RgZscN zFI6lS?o&>08{CN$z-ZjbkjC8g%k$Hzdeyc!?4kRBElfWcfWmSXQU#ef^M3HnT!TA$ z!+Wq~`r4gu^Qz*?rIcw%sebG*{shjNGi|Xo3JI|grQrC8l};#6#jKQ5Kfc3t4}e7T z9EF5RcBY2XF@swlZg6K?2fE_iUb3+|gYvH_^jktQ4J>u+f{dQZ%rL$U(AFk#iN@Xl z_(k>L&wAqE4B6(-flQ>4zb{uYUgUk w=UFjOrpy8Ht z82QBcxmQX0w!8JTG@~=atg0g1aBu5}jLT3!gN6#ewO-NbNBkokitqLuJG>k_#>&`O zQ%M_#Od=PKsZP7{4bADtZ?!Y*{CS=cf9(YhB#){+W9*XOY6g{dNH)=s 6p&P-@U5&LSIB!vy;?GkS6%CF+P~|ksshO#KDehSd;E| z`y1cDP;ar9Y_4~M+rC8B#n+z#1)oJIIxM{q*rCv*>#8H@Lnx3z-sxa{7Ig3=oMsK5 zk*pBi@mnb62jk?`qR#K<-{*La73t4v71^FtV-=^ahPQ@kg3VQ(whLN;1B1;HDqj8l zCvXU(hT}IJW8?@9HiRY{-g|e#W8dJxUn(~WijU-m8w^R$e=FGt7U}s5f@Ctn+JX1- zdirVXdk@^;LCCN*I4?jWd1L7-2i_3 `KHp0{m&p~ei)$g* Ih5Htc$@N0v& I#PXzTPq`Jb)SeCk@xnaM5zydrX0e*}4%lJ5ZK`;QP5M}UX#Ff;U;SG`&Xo(Z# zPjwWr)p~{sH}7BJZ@Z%dYo6Sd0RJ`7|7nTt&UoRHbuQfto2Zni&!P-BJ_0>u7Bv?T zh}4uRM{+=|Q9J^}&+^{z>jI1--SKPm7}8aw+4szEjV7;54s{Ks>}2f=5m^{ #0? zz}@%%?JbNc=U|?wA507^9cKWI*B Q;cE!)x)O%8 zzyLD!0Z;nn$XJTLj4y3c`CHMHL=}H|CR3c4tza0dANu8v8vlH0v9ZjQmATE0)x)fx2Vo{07Y0 ziG3fqq-Yh%K6viG!4}>^d>PCjggJ~LA#UM}b)KWCG1Nk$#>s=)BhsCm{C6Fp_4@}G zmowOAR;)T;W1G$?d4t&$7a(mx%oG#N*SnEcvU71m@o_;fr;H?-!JZiDAnF@-j(t4I zMJZ?nc=y2x4nJW0fY(=_7ql=FYkt+lvgZ; ;| z9PN$iQWTBdVx!xLV|N+fjq;e{F6aci0S3?oC2curCSK8drh)X!Ynw22ztxmk@xQ$+ z4Iys3yq__H&S=zzoTUg`byE^nwnhv>%nwPWWdu#WWg!IGr; ABU{P zcfU@MglHv5Q9koD`?#{b bFZj<}|mvPn8&%P|rql~j3v zJRxJAt_uxS>&!{S#Ye*HhT~*l*|+6;A0A ~RY-xeOn!Zf%BQ|cskNo_{0%-84mioq zvS9(k8z@9LFZg%}GdDZ|Z0;If os%Nk>)ac1g8XH@;+Pp%0p zmSRm0Nh2bhe2-MdS+UR&2_RVmomc2yJUrdYvW-L9k&PE`_Z?}j+7=}&4tSt#V^S-Z zv?OzWjVF%ePm<6}8yfD3eqf1UYDs2S^NBanbSR#yDb(g>HS|2Ew)GsoPo6Y`@81s! zAlKL6&SA;kNQP+LK4nS3>|Z w!1{<$jyyruX zQ|Ea#(5BY1#AGPkO75;XCYz48ag(i&A3SRur(t37cxYZWBT zGG(vT&pyNYtx=4MGQYkHVKsO$nme8+{FP={0Ew0f?v{jR%^3GBLr(By*9_{~?KZw_ zR!b(f1rB(S)T;lMb|O dO=n3<|SNH)F2%DLFVE(sV#rCGoB?fH-&Cx?- z_c?_wMzeG2OK-edoy>Bb7_%)nGGC4E#fh4t*K9o`JH$@Ay&1n0@Qzy!o!1fL|GdG) z^0tObIjR#!{oXx@efI#`VwOIurze%I{hIxmm8UfiBMGa`T@tlW%oB0{$VUQ?XNfnO zDM^sZyPrm@k3Xk 6|%olpRt}}f$xYveGBpT$n~SS z8C?U(ih12m0p^n6%FH(;3hEz(+tw(@_23=tYw!*sUBCBnh-_j#e8O#j@o^<&W(qR7 zv8VBZSUiKH{0b&o)LQNLqT~}+wpd#?Z= 8c15{1Oqyb z2L0)SES#n^8J$6%4wss$-Bj@<`yU>Z%Af-PCh2h{7d0nyosP7)LPr6(eLWb|Hg&?1 zc3cs%@xg$C8-om5qDR7ERpJhvn_*chl@(obm~SHxW42{%b1Z5+JS{F}ymJT@&>>Aq zMO|Ny#FRL`>t%mnVoS*XG9#d+Q>>jO_wG@_b4KDPeAkiyVuBan!Oi ;1ia+O)s9eUE^Y4F_7`j*LcBOVVFyzCL~wepx@IfPg~5D z$E$axRz2!;=c~!Y4g;dd;>(eJ_O;d;_)yI;f(P)SqN=7?9?EN1S3$}@h?!YqHBrao ze)A=wT}y?ZnegnmaO+Qt;s2~y{vYXo*uWC3KF*n*85->T=lSnH%8&mixp4#u^_FpK z?h%B>gnpvOxlM+Qf;q4aieqAEi8stM ~Pb?3Vwt~>hp)%k7`h9sBt?1PHGx1VPKuz_|g9NRgy=t!-|;O6)Ta(Oz`aXDowJ! zs&f6)0)EYt&q-se~QiND8t}U&n zcF|f>jn-2dTf}uG_N^jzK^qjUd-MJ<^Jeaw_g>$;nS1BGzkYxGX3m^5=bSm`` K9aP@7^iATmP9pq-kGDElea!<)Z?%N_ytnI|;d%3K3 zX&KVQ9kL12gtyWA;T1JVfwrhMn69c_ps&0q8POAljIk}}k>-$Og-m#4AKP{RM;x|; z-s68AYZ}goKcqLrQBtySKv09@i`?nx`m_bXz`q?NoqVwYNYl&4P+!|PcO@#cJIG>` zf0J96kjt4>O?~BZUY^yhxeTNU${?`dnV;Q)?lOo3Q$h5@$aynQKmRzKv&ve#n4Iq* ze(C;+)M(74f`Xp>`ZM;TL-iMsFI;QMkHw51jt&fzcIgl_Hqx;;2Z#v})a x-_tlWK{VVT!-IWyM=t#g-|OQ1=zj&Y>a_@sF4@3OdSn%g<&<3+zW{pw zW!F_0$$ZSGh+r77 oayQqyA5J5;xjQX z9)!22wpDo#s`sKwe2`s1AFr3bqu|}#%TUd@v=oxMQ$tEZIb_mYYySfM(rFkg#@o+M zE`@o@etSCc{ZIr?2>QghFIT-@^MV4Vo34d!3=0PamG;8CPzIqQhAi!d#7Q|~tnJ2N zOIgqJ20Y==n_A-#zSF4K3-aCdL6>=73FzC4ZgLC}mw&kLLCj&g=?#3*t7? 4+hnCO+ExQ}yaPMb?q-93iRwt#?1|dg4q=oi !d~ }?pJ$rxP4n7!536oBHiiGTD z4n1)tjg`PphS1;s9MO|(_5raiWqQ#_y8lD3B-_w%^^Vqan^Pf9n$~-YZt@{kYZ)D| z6nc$Sf-KT2Yz8Mb;eGWK#`KpD4YgTF=G8K0ermt)ei65X+ZvwcJ9m`Vsd>OWNi`Vk z=ch=@UVVA$$dr;%rh-M`op`|`#A}h2wd-5h*M}1XbL(>2trWuILg$fn!F_v<75W{R zO=Zq4S=RR~g~PSPYM~mi5$$)ib;|DdOj~!%3D$OB(U9R6%be1f@=p)X3}H$)$eF%{ zK7-jcjtl9~3Xaq2&@Dw{e~)v#DFw@i$855|dADCT&_>xq4#$@uPzy^FzzHNX7<*CJ z7wg|=le@}ZJLXgK8E@!oOGi{gl+7C~2#Awh@gDa;8gHZ4h>!)(IInn%Jb8;^kW7G? zuvJIj-S>^hYtbmC8)aYIEcoKYeXn@G-NOaUotr;xkxgIOWFgX)$&rVQtmqNuA9{sh z163;Qo-sMj1Ea^f=qzcea?kjP3PK{zMY9Q+LZ`vs3e*ii+`*OE#0+cVz`F#2AfBWs zDatjzb7(|x8LsW=(aa_r+0w@4v(spV(+n)R6tx!R50KsxwL$q+6Th&}Dh;+|&%)M2 z@dyKLfA>5pex+fBCGM?ZiE89^0lGvgKYUrZ9*;Ymb2h*H!B)D4dWzq*nI8~(PR03| zfat%<%WjfPbMG5FG!}BmqY?*ps{eMh*D2P&+ng1+h#mz3xlVc6+9JFFcx3F@V51MA zAa~?zksy?sQ=%us-yv5F@LC+=cU26%4fnDZ7G`D!EUjXv)26sviv8@MV`rN8uFfmZ zQtAW*pL^j32{*Z540tX*Z>p_SJ88_>@*}1o-#~>iH~pQ2S6XLvN+MwPQp5$+EOZP4 zyzHoYds3=gW(NOVkyNzFCqWEc-ZSYbzvVXZM%JiR=WCD9rshWmH8O=zKsg86#ihW5 zZy4&o!P*wZu3oWDr|#X(NklZ|$f~_DK3?&uqawHe8(@D27M9 Kar ziQR+X98T#1TSN9W+Cv$A0@66`B61v39C+sLjyS7jT5eaO5=DIKW_G_0X8npGWc~_A zP!l8X%3PbGKGx+*)Ofw>;YvHcZ10;zqC;=gyvn7Lcf~a&$Hz@RN^kPaKk_YnN!km+ zUUs%k3rixo$MW2A6;lF2d&23NgxSf{nSY7mYb$S+rfo)l$T{vxYxUsWvt-1eN1qe- zo8!0kn|pVaF^$bnJ73bsMFG2U q0{Jp_s5w1JI%OY=lX>~+si3GgeQu-@YvMLFE zH0)s&Dg$<1KG8nYa G-a$&($0tOrfR@b z7f<@V>4CMDj+$N3VJKazX#c30s)@IrcR2ryk3jHSnfXX?N#y$ob+-_4-_#XV{Wc~0 a50&e;4e`%}@gJT0zgga&W6OAd9r+Czu=BS7 diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b2270612c94ceb5038d58d96ac3a5f11e4479652 GIT binary patch literal 27884 zcmdqJbyQW++b#+sAkrXR0s !0VoioN|48{f)YpuEFeB*hZ`MxXklY$iHbJFJs2nd)m(h^Dt2v0Z=5D?v- zp@6^SjQkw}A82;cnvMtvSY40bh;d9 bHpX*LcmIH)H>EeQ@b{rcZ ZXpwDG(2V&ax##HCRaPm|cR?J9gQCV1vPO{Hh!;dexP&Bu<14RrHAr*l=$v)! zYcDU|N?NWhNcn8!3=Cc-B_-`GG$ve~!W`Foap4~J_V(X{f_}xv_pEdV7d9=C+0^+{ ziw7M+sC Wn`UvSsGu>5qG)aSio)+492_X7w)VWdy}yp
KkMS*h>M_Rl+ z2Ti#=;Rkd=LXFq@UGD6p5jytW1ZM{eDIVuLD{E`w9v*^^cR(j(e#yrNPwg+<;*tFD zVYJTP==t;K(=FaY2uLUx2J?0H I8CKOQ;*LG|l+Le_fEpCK~GJ7wX`G*)gTMd@|)4({;zGw$f L}6@0^^t z*C3I3GBNbv$S=MnuS$j8*F?3|mQyDg54U;qYYKU%sr~No1y>GY3|Nz{^>YjiC)C94 z@w`f}D+eoHGBh-_dDkWHf2H~vi_M;=o!DY3H!WaMA%bE;g!!1YOFlxFWW2A~*dl>Z zlsm!{zJ2>fEbPXv+u-!&@@QpmzCK3m;TGIg6Gok@7a&P4;t*@Jy)7a6L6z8`|LN1G zIJhJ-4oY~ES0-f)=?zOEg XjP? zJn;K>c8@dj)wQ+b(^I3v#pc0uk(7l-S5J)m_RuK}Ev^12YH@^+hzOID^}cW_vGfBF zamW x0DVTph*`DRE_dB?i!&vJkXO83}de1e4Je%K60fHFR*op(U@zPT^~9w(Q|UoJTt zBZ$ob;_QoQD?fh}1|EexWw8co#y&`9?^^R4)g jyT&9(FM1qx|`_P}S>oCIY)ex%{&PweWF0M_h&P!DT5aAe@=1TzOq_xyQuWCtFm zZ+JLYv(l8?ax$D=KAHXN*ee7YT3Yv$K8A9w;unO3W7U@Gc=-5GEuY=VV#MisN3*~c z_x5kdRhCmfgD}bP@bHxK1-|i2r2lgdnQ6RJ{Fb$|*5%)Ai2VC+8BSp-EH$wLGH8lV zomsM&yf=t3ro4OqJ6+KE4Se1aJ32ag-f3JOAvQMFZn+JS*Ji$VwL6TFmDTj>WaIG$ zk`bikVD?-~WlaDO8EN(PMF4~BsxTQa2Mhji_;4o{c|KX9E1MzeZ9Z8<0_F!~z|j(2 zA%w|dZFLd0Iur^4hwoGRz7zrNZLJS?wjkWp*VhZ*>{T8>m ID;t!)AYjdu8=;B^W6`~Q=?6ZJ` dMWLXb+qq&eoGNg3xI|Sr(GQ~5d^55$BQ0%!fa4~+)ik?SwZ(?0QPqsq<6R~S z)f>gPf4>WOhK~N|>rI!dVbl9A2X$*$9%ozai5y0kFtG>s*{SK@?~uU4f%P>77dI=O zil&viT#r#Ko7)#Y?!xCbAMpbZt5&4(4g}>#??WhUy%z+r*hR5lOf!L17h!7T4EPO3 z8*QZUdyuq2$W;x&ZFBxbKuM_punSw$(Gvi;oVLdTf#oHni+ENT_u&DM(DwIpR+(0@ z)m%*k-=bT<$jGO3pX=?)_$7dB5F&Xmj2Xlh!M}V=BcD?7RDvaFl +N|o}jp>^hF|XhNPuJ57K0RaTur pznBiF9ug<^jCysi9D>QtG?n# zirw?a(90Wc^v974I6MUa0Js@3kHrf`(W_UIMiYxWz!r>nQ-E)q%v6{lfN>SiyR8G@ z01{w_IrkWVYReLe;e6i{LE?AVo95u;z`Gh)`)7B?=IWZAY@PtKijUX`F5MY DL`b6qA&MRyW%Rf~XNY@qETj z1!WvEI^icJrT1D|S~&{om?)hj8Dj2Rv#`r )(JP)AX-yk263p#}W8&XnMUQn0T z?R~Se!tbs(uuY$uo0sRwoR^b>SVEZ$$jkGo${8!*{ +IL0<>azK#P uqk!UJd##W2Gs7E5Mk&Ocz5fPCtJ0d*|&9|F_Mr^-G(d*tjL;xnt zHV2b1NV%VZ)RvL4q&XlcFq%F){%P_p;1TY^luGRqTQTBtGenhqXB{dZW)f7BDguN- zU;(z{F06N *r0h vNRC?J1O* BvbtAY+TW@dePxae{b(ge*S512c=xAtLbth zVD?HXD&Hq8=(xH6i9B_((AJCwkaE1zOc9*=0ZiU>qiZST)WnfXSxKpPaL}nXYxzn< zjjWm5Su|C}^w0&0CQ51B#i+mKSvzr8=amGqGFXL>u&}k<6dMOVCHk1q!jgvPl{0bp z@WZ9U@`b*I>8q=fx08VX0RD%Dj-KUuxJbF1kh1{LiQ`6``je8(U$Sh?RXS-d2lFx@ zG5}nLLC%j;cPTD6o-6-|N|$%uvyh3-)L4@R1_mC$eY-+%6XodJoWC};8~lgkZIY&v zvNyM9iU%XqUGEeg!{HEPP7cGa5XU#2@K|>XXF58%z`8pA*{ZLdn0)ig_nwzGH{-Ro z`fUW}R=g>V$NOVBVV=bKQjwH$iR|s(C-xOT^o*P_1or1(4c{sN@INTI2MjlMZs|K3 z{v%laI{F70WbU=KNHG^hjEl(;#tB= -y^BOgGZa`gC* zYiG1B_lS(rM{bTfvB!(G`8ql}9ue>D%tilfKt6G6FI(@ Qz*^Lq9M9)| zVtmm0-~$j41mNP(A=6I7@;anJ5CCDK<7~UgTeH n!g|vR7ND)aeAMSvxyk=o>MjZx3E$zZvxc-(CTkMuS!}tCQ z*|~3boBkp`KHdSA=K7fA!19QLl;d`@U&{zi@)d>V?uj(tU+ o))d7Mt7; zIGH>mOqv
<7*`8lIV0NY`N(;Xv>$x{Lct)iONh&ebOnKkUr6&?E2LnBZ~#N3+?9noHC>vb!=* zSw}@ 8 zdo9v%w8#L4fPfU B5x@|2Sb7ZU}rX0V{L3= z@}*ou8laA$WFBFFcMp1a0001lybL@r0G|N<0%9BY$O3^#P&WYdpZoipL#z3^=+#w2 zKn6c;^j+CDpA)v;o`l^f9RhnSn`hqy&oexj#3kUc{wy;y^C>E-Bf!r8Av2|Vx;b|P z-JPbD$C19b0UHAeF>!Gp?CjV9qlAUAwb<$FVU`@-0=C{D{s Wo(m nryA`+G1(APg+1yN8DK>IeLns+xnov-1jQuF?Jf$F$e~j@pZ% zkT xDxkg-`hQ3z{_l)*&{-D|H@``IyZ*Lm<0Zray)Z|(vQOG8%kJ7aq}$+c zJk19QiwH3J2^!UFuU%Ve{W@01EZ7 nrth?#RWsZ8X$IZ7jpGOG+*Se=r{-ZPrd^p zJv%#2)~K|C!q1!X^>t$)DGdN(59oB#%`t_L3%l*2FapTDx@m0hB)S5EVkGXLkV*z| z{ Z2bYYyb{;0>aa;loVM2`($Kfgzqoc4q%lP6>ghJW)>x@G&E+v zacCW)xrj05IqS$oH}QjS?z1uC?`kUN8_4) bVe4a4^dQ<7-)GL}NU@wEH*++L4XX>bH aycZW#e!nKdw1D9gRkw3IQn z2`t)bC3`?Ng`WbZ`@S9q;NTFTtsy^t{LyRn2q)(FHdASqadFOPIXS4S2ck;9$e|rS zAR_#0q94{fvIW4P%Kw(V4APxxUn{3lvt5zaG7a42vt67wa$oO_zP(v`$ORX@yu7TV zIs`!rsNyB}&ojD#Mmy*{r3)!HVqith0Me=B=HN;Ynay9jlt-;6pbxC70N|$}X*h|s zf?N`L0#tTg@oJ*zo!oTd=& #P?{MnfkFo{iE{(jaw z6u@#M1Lq ;$j8+IJk_0Rl k8uyVp) buY4Wtrm*jl*? zf-D90Y>vSbCLp0=J?7nxK=dT`FHb-sJl1dp @QTDR@= z @>2oHgPyYyE8hJg_hvg$nZ8#Q0Q-YqRv(Un;5cr>q^nmwWZIeoUw-+!m? z68p@Lh$Z{`SqwIzt*Q-jV6B?mPZRlUDFGK3-k0C``0=B(jEp^7t?g2a(ng9LedLC+ zZ+3ZI-SpZ{7AMf)&ot6`EY<3r6`FUpRQTrY0&X~uJA<)L0Sd4?+xpz*Y_=N1)<}qZ z2*THDw+ofRMs p6|XyEIV zU)D|r*h 94KHN@?B5>=wILzHZ50jP>a6-J#1%k>V~1enN;l^nnlVn1VC6}x1qfB+ zz=P;m(kpuUlWC*K`ULp?93%vn_ECTk6ifyZ_H2#yE=M%{r_jM~z#|VfdVBF*QAM4$ zaHe!!({2)qA|z=ObX^SVc0nl5^|`z5>gmBFA?X9Z`OG$m0Dm~}g>7tbn2)?PG&BV9 z?r}Gz=-;l8yL5gLQI8d` )s)Z+Rec9`-5S^!EoR01$J2V#z^+9G>^i)RIk-N~s zA|idS=*EMF0i!L*iXD*qS4U+Hxk*WcT$q7c;19U~!q53M*m-I-0b3yl8vrC@R$g^s zUOq=h7jQdznUj ;|h%p%vFPik*Z6ed87g0ZRSxyGI0D;2UO&`0nFVn%GCt%}M& z&02zJ^vL(&y&q^8O8pXYZ`+Ixq3eOr7KoaLlitQ7YQ5f~1qR>#$Pr8Rn$2gc7=ffd zJ*@#2s~dQz>;3JiV$1D`EHhyk1Yo^dGa#vfIbH>l-QD%MNYJ+ir|k|9P)K;Kh&ebo zF0Zf0a^=bNJokA-f!aKNuNO06u>t1LbaQaw?Sb|GtOZB{f#U~Y{6KUk0ULuLiaxSz zGjD4|L_`cK(fKtF-MCk)%^1V84GXy;Dl&Nwci~01r|9%?$9oYA_4TfEm8Dx7rbEda zEzt08!$(j$GBP4q5*Lz+eclz~7D}C#lHr|mx^Bra-l*H{y4gG(EB^|mZl|E|g@Hs< zqEEM0m#nb6Hy^@g>5{Uw2q%4(zZz!eRqN*je0&lW78AV?;5@H^CJ&Ite^?BJC-&9q z0(a^wkaNL~pM4))f}1cQ0YNvAM@3k#fRFrHc?F;bC_gX&TXfIaY4j9CIA|P32YP## zL73?Tk}J@}Jm3e#_3Si6i2tJ=0bs8GGo=Ur9Z>n-sgkJYb&XGsR!wQd2WVdK6B|vH z+J%vwVA` i@ zpBrB~9RDqG$*iz&=HI@`nX&jQ!HU=Cj-{uOth?dxk2OR`xS&w?Z;=)z$G`=_#O8rS zc91HBquAx$`l?b2#Hlza5hG=|MuL@o!d|XW7pK1N-zG nWYP4R2_w6{t6#nAr)2IFR>9YztVchfpQu z2Jxsc;nsh08oW)PQ@i`QunaA_L}a#FjG>{j)K! |Ct5=r{9)S3Z) zeYZkQZv0VufetS@OMcBAab&B6RPlnZ*82SSYtm^u{VLC^gPEkW@JdeB(TA!zor`zR zEg@5`Y+~i?DI_V@l)F#kUyQxvL+xF;cUG=58Lu6TplVCKyf?l<_AE-7ZVR@Bd{C<^ zy~SgoSX3w(y+AOSS=t%p@9OGh8=r|)`G%;TSI$S-h$xEU<&6<5m}*Sqv4URr49v*O zV0^Hkof-KhY`b;r_~W+Wuf~?7%PGcA_npGZM_76~axhthg~h_4e4D3I4rs2 n92zXMYmyV*_7smD%#K M(*>NM>gI(9O=@5szxA+{?^lcMCx0W(k3EdiX1v$2X8zc%>2N;aQu+5=Ll4@ts zuw?jp3a`37H~*|rnxW8b^j`f^$5_J^o{!DjXKQ$O?ruJWj k+|_rxkKA-DTOu`5k!WyV{JHCU-F;A2o{3xR z;i1vv9|q?Q*P2z`t1lYvEnXN}M0KLY@NG6GP#qG;Ww%C~-2A9>wV_9*Q<$BCuk4mb zV_2?123e4q=T&?Ci > zi^((Ekd6&^!pxQlK@+Roq@R2hn5d=1*4FDs*b*zaoFAz9BDRj^ZZj5d@scihAVmZ1 zyl_5vK`D?Osm#z9mrr+9G1m7A3Fo&jx;|wcO_b>uQ!6@!Nh-$83^5aY0t3T~p=jf2 za;LkO$P6Rw(_KFrckEvdC@h8MQ*J!f!qAZWw8KBjxc*dBD+K~>qI9a@qzbpT+3+6- zFsJ-N&p0&!{CaZN6guGY$M^I+SVH(%3zLj#PG% zevOgwYdAjk*PA%BlFZh;o2TPEJwGO_42Cjk()E)&N6FQjQvy@mb8XoZxXV6$T3v6n zMs8{nhA=gDZ*&| 4t063`A%=!aI`*L zv-^4?uG~wa)Sfs~1)H5XWf;KiW>du9hdyUN*}lHzqHH|GL^rZy(tms|p5nV_7d#b) z`naH&=FyFuzU~ReXIybK>aY>j1^r77PLZ)PSb3|)NIQ2unwy?95&WZ`bMm88R5T&3 zson!!0=60q*PMgBDuN24(132ehJz2+A?#Ymyqb6KM}swXcF6qAE1jJE VfW-}J-f2JUvP Qgg$V7|TwXVMlgLOGJ?rE%&dVUTX#_5FWBRCBRh Tla4xoY(7(DlU_^Za0%?h|(6 qNdr6L>HCnGStR{Rf5lRC2KufpaIZ7V67A9jsUSRM=XXTz#CjM3*-%xi=^-dhOU|4O-eoRlR@|r5YJ^B6V+B;dx zCW995wl2r0?HJzv9wu3GQRbRTKt*dzSVx+>6!W7##|Xhk6eWI-(OA7FRIHcF``Z;u ze&UR_^~U=_k;+JrWkR0%9yAJ r} zkbIXPlZb;K@lDq`sXpiSlTvnTsDL)QhI?5E_%O#eF d#?udCI5>7A@O zldAI`x<+m4gG`OGJgf dUm5TtEMYwcfCJkrp>MXcd)_%|_pPs6x@En4 zUDAhIsbk|(gGfosVKp*E=D{9|prr%Lx6KH&=SUGn0xEJo 1hq(@?IZ4`BN!df0bcTY~B zg}nmDm;%H(5Dtq5O-?mE*cD9qJT8{+^;$8x@K7piKCgbYtu)|SYw`O%sPb^KvSzj4 z?!12+g2qv9r%t^FGsYt@SfBFTNnnCGx#T7|Y+bIei2ah~k1~PP-&42EL@qoO^{rJC z)Q4LfLc`Ppqih^UZemothDy->$#=>DBTHY75rHdX4ZsOF?2Y*Y=yOIzXM@#IgBxJu zae TKG{7mA`s1(ZkyQR_YatHp||ZdTPf*q*o|{;{V9F4RwIjK?tc56 zsq?s}jJfOV=jjH>L^`;ZAU~uP=M!Y`QVx|nF3rm^(@Xz_b>>7c>nu%XT)yTi#YW44 zNaa_BJ55;65<|H<6F=d{$B>3@+~~H3YpFa(t@!wr;A@XXL0xo-MH0);)&o^k#nhyq zNj`>H?IH>F>ApulUQ#yE^cqnCd(TeoJWB6HM-tDcGGDLFqVuZToTv9Eyh_v@&qkZs zq#q2WY8&pYtF&?CpHnDR?9bRs-Lcw#xBGg^{$k*G?KR6%du}!!0AP*^r7Om9A})NC zETS!n>T?Z@`NYBaARC vdvcHYt31|bU7^UXL6lv5^DajhH#R= zSy4 *C61?o!xb*xoCr568V(hN#rQr!>|7CmG26h@WpvA z)rkH>*gdvwS%~Dd6KjEuqF^M)Zl*5_+3Qlu)MJT0uw(=`ppFX9%Z;;h0UHiKB<#Jk zVF>ym$XCIBlPfLh6|GnQQM!5*iuLc;x-hCNobU@zV~_HHAWm{n67fQN2Fg3hnmpAO zbazh&%1G#Ze_Fos?!A%du80t9$#x%vp_;GCWx;?ye%ze7c?Sd|?=vul*o zG1bh2&{~9hLL^C~^%nwtEDjBjWNg^9W>aHSb?}d^f4%R$vS%m=-wZejd#O|pia>Pc z^l?4^40!KsJ@aW4OEz6Gbup{ESF6FB;=fy62&{U>H(no|(;rcH>&*R}_c+q0WF-cc zu=%goTeDylSlNvI7|2^i ? zKq8Upt88STbq#T8{;3vi`rZqZeAs0u?Z#Br|E9HKr5Gb6fX;IOZY4XUtSHCg;jW1l zib+EZ5I&TjDcEtZOX|ArfUhj8Y(Bf;he{1>!;5aCfpoNy4L#eD7F}djCt|#Bq3*Pn z=%`g41((Rw@PQ=g*Vu_J>h1adt%jTDi@EWSjO9XKwU G4=a>YIdmV?}Du$T$a+qBurA2?Or;Q^e>g zzdlX_B!ZEWcD(S-?XM>e<~O;n@5x&fW+vVDG!;(cO!?VDf~Yvg9LshcN4!1&o5GH7 zm&~YW^Zp))Dw uhS^`x(6P2hNzG@=LK$`Gm{UNS}5L#iOjDW9mv7vJ;s;$D_+{%&wZnS%Z&m z*D|QIsG0BC{tx-Q>)#(;k{q2=O;X1i!YJkSY(NlnN$74JWw5ZJ1H!u(j58l57Ec`t z*nDft4a}&44as*7&WrKkYlp@>^QBGTaY;+sgH|*Ke|ppKX4_bit$+0@M_^ByiH^QY zBIXm9_Agnty S6#a)2U-%b!6kc#q~41#V&Fn<#QR8IYf6O4rp#bc0Zh z4bFW9Vz?^G(&6h@qWyAS*-7 ^@mrDk LnmjoS|tz!LeRNDBtM`;xjw#logA35eevb_*DIn$RS%Hd0qfKB%}(5U zIW>{Ii)BgU<6LOb_(_vgq2Qfl!0zNEFma})ZKV$=RYx1YP#8=v5{Qe|@xN1Dsa&WR zr4je>1Wic$eI>P6jh98*0!)NrI|oQju)pu3LID+m!Ms0^mvoUQf}itb*T$h-G8Hwy z+sKvDREw%ErKv=TDJ4Iq2N3xVX9Dv9!Gf2PrT!%n#@mk|Rh%!6k~iLL#;vA3^0d+A zhVF-K%&Ryoj#`)JM|Hjdh`k&WYwzp5wX718I4GV>r+x0P467V&@egq`C$!lFh+tks zs8WeKcdvyp@6=4Xb*ErfK)bFm%FJhQ6Aahw>!)WkfeI~mm452+`mb5yb@m?RG}TAl zOhDBdli{mj>3>%#QYoaS@6b<@SvORofK<&QM~BH;Q;t{9dc@w1<%j5ydvvSbC8_~| z#y#cB|OTMxb-&8IaCMZ4^o8iLf%eoqx%1?;GF+#M##Uyy0`sI*h;}dUAf$G zYmJF3& ngua|4E0sHEzA7J+&>C`dga$apNx#o!nH^fdN(vrk>r7S@EdQ5QPGtVq+dEaS*T| zl3=Brm|#^=15y>B>K2Z!V3Va_?SIVdkWqu0xLlCDnKlhk%npC<1W>$mEKU `J3D-hSp6^0|#BVfJe^fss*mrintv>;A;K`G?; z3H~**qbvjg0Z2*?kU {(}ePpclDu}keb91(P4Mactn?a)z50bX+?^=!BRni23{|_ )NA@EZi?ZawvGntq>c)di%XKx_WIFY2>y#`?SbE^`oO IKXLPQQCX!r{G_jSeLTGADk#5@qgnJ(}34>-{`m-fbGaU zlte`~l5Shf*@g_Zn$Bz5Zpw!{m#WJm=UO4%xw~ku3uh+ISBnX{k=)CH{seq4X^1Mk zlU(krUj0hh-3pSm(AZ**6w(pt8 zPG3p2Y|>IYl;GtJcW&+sRFD+qj|FRVlXWnZ?`6BuC?F-f>dmQ}k^R!$VxGdX;a{Dp zNs2g bSNUN2;lsO4I@nVE?TDnS z-_;@A6j$@zh+~2Bz%#CgDTYL>Q9?P%>1e%vrU3^H-|WkxPARjo) !gg AWih;HC5GzSsrX&XQv){q;ikB%#P&tQq2)?9lM zG>j?oWU$YsnI>o`*ioaBty0PPE3uVfx9<7l04 >zlT&ge+R&d!`gu zF2I>ZlC`dA>k}tX!?ym71V@%)LNvOmxbE)EIq)N~!|ptOhrrcgPmYdz?If$=X0i?( zOxQ0te&?_O3 D>}ay;R2VK$=DV=_4d^uejvqp-!SA~I@1PBUT6IJwjuAs@Kj`@ zNN}tmUyT7zCm;<3KJ6J6=7wjQ>7~BI&OgrhPI{u)4LfyUHPAE6m1`HD>^XAgS>3nI zZ}A@}iQmt8h*HiqJIWJ($SJ9(SMSntYf7+umSgM41U<)YpRzKzP$T=0qtN4uzTPqr z@MiuY=>iUvpaFQJPo&v@2|?>W=m|yZc~k$s#jmU(G~gfsSmE`Zc5FtMR|D_*_-+S@ zYpB>&x5A?YLWjxhB_Q|>WW4@3`-;bp>VR73=SLbapjLvdfJagOG&WN_U-UVLp3Q77 zzN4P$gS!p>!*ee$_lCoVU%QU0%QpfwOv-cEV*9*mT;K$^TcQ=)SA)>r9r5m_R>4T^ zR)HRGN3OmyfoI1&Kvi`*VB34O%^U2=I<#UX)XESyQl5#Oz*AFp{fXnz%ogjDZp*Tw zWXZ1C`R^rOGuDU${T1U*I3lawWl+-1#hy1SH}|wpaH{DKA?{98>}>VLCk`OsH9)jD zNPm0og=S{=n-hC%7DkY!Ze0D4xFmDmhLO)U$90v2D{)$5wah5BC4Su&=4K0
WTeZZCb|1#BVN}*;UGldQCIG-396~pxyykw1_CW5NKs}DJeHhB zY6Kz>ySm>M$|Yu$>j)7O>9tU}-%RN|mrWC1WFl53P~6Nmv}kTl97U*geeT4z )m}(akN?DkBpt*OKD9?p^p<)KeS@DbF3h+QDUKiL$ z&zib+{1OQax7w8oHm3q& B<}9E`uXs12yu})1OXL* cVrXhWA z8e2J8XmzdI`qb?a0ZA-N)L~#Z!=u`my@xdi#!@~scK`+owh?hwX`#0hb;gRHb2huO zH-!?bs54q!F^x68d3afVdmm0jma?Vj6`KTfv=9t-2Tdb%@m24n)~utVx#T?;%7=5Y zGl4P`KSqj@9HTM9*_{2=P<_!ZG-fgRsC;R#^8$7(RxEkhjlv?Jz5}q#gLhR$nR-9R z)?ze3x-{O*NH;4Du29q&T`Br)xtK{MACKM^*{Dlx>h_JwdiUn&?q^4(&vCqF18o|I zE@|5R)&4e2C*w@n$K7r0e8tJe_{(U?`$fGZS-6H}pgPJ-Bvsh3GFHvG)DIG2fe2hQ zA3#fG0e99lVs?tGc2Gw~{9SRwr0n4}zwdv@$tbwtUAR>zmKHOGdF-6#kW?Uu;`1wV za-AbLKy0lsz1~%7I5H@vNo5Dqvi5)00s#FvxYWrxrKN!;7_L?yB$>WN5ng&Vi2A$F z29~ccYWH8!5f(b-F&OQBl7PKk?<=3PJDwjMh@+3hbV0=V#h$m7@-+=>(KV8s=2`{Q z+NEa3OdE(~%!|5iUJlva-t?~>sI^;4L%`OXk>FDU1j2)&`A>LlKtrtHD_*6HnDFGf z@;R-SPZv{-ns^J7By C$GKj$MnFkRz|kYRQ@NBmLInr@+3=`ViCLws8zDp z>$P&23|SsG)#j~{i$rwfO8J=%vC(PsdfTh5@A{bSjxu=aC6HCDDSt}KGch|?fGsB^ ztxF}V;0(B$&1OEt%@-M#Ji)OFC;CP5M&Mgwv*(lsU2}@fi6hNyW zO?2|+|BOhlMb-LmPN`3Msm_iI1Z4xeCbmLs!g1k_a6}Eyy4yIhxEcNaV_wt$(npg1 z-{qUXb^C>XF=yPWfE;kmzPl-XK~d?b%A}v#=E=mwnk6^WwWuuOnp`N}dMlDKCx|@q z_s1zxj_`SxTjr%S7awKo{L%RuYS9APA-UMm!497ETGS8h_&L5|U`fEQHp03rMbgE< z6y~XUy)8WRHY*;F2itFYNnyoZG9Zr77ekF^MAfr|v(F!F4;R-g`r!}$tuBnZ+Z9=V z{@Jr^sF9p>zog;r#0Y42#Te=}F*nzVtmkK46AaI6$r5)m9W>}N_+$fdjwOl45?6TE zEfMo4%;Vwy$daP*qJ*N)3U=-#e6jY$ck SH8Wzg;{CF)exQv(Q zJrNuNf6~;t&svis{9O@A`6(|Cr2U^4#@&UhG0d@rn 6><3iPE zSa1KQ5%_MA(A-cTeNKsz<~DCHZ&uH$U;Ngq87KW*Zlt6ADMKld;rxYX9lY#mrSWgdE{WSt4t`3l}?%!0P-9 zvFYbw{w7jPSdwQ>DoQRdPX$)9;xiPseTCRBQ !WV8QaqCnX>UWn zDI2|Uwle4XWF~U@$Ln^#O{uEM5lz`+xb5nCD8rd=i%#{TXQ#j;NsQ>@!<;{u2zCd@ z4Zd&j)tfxpXBHMgHu_6Fcb 9(6CZ;d(e($^E`G*VL~13M%DP(vMP|{Y-M?0XvE2UynGg=ykfD9tH=>x~{%# z_IydPYlu4pqU4T~_CBY8yDjz&2dAMQbpeWRd10U;($4DLw5LZPG2a|yS1e!JBuJ=- z6 y< <+)k$lD}`6!;g{ Vq4 zYU0Q8y55%@U7+qh`kmo_&irpZ?*A`O%qGR;0Ohv ZE|A(`+ z-d1#6xEwA Oe;kyA=d-YRY)5P2i;#1py>Qlo&p6Jh5@MNuJgXBS=^tf z0!Iv{N_2bs`abs;6&K?Y5ac*tfe!CXrF>9htYzfQ%*-qSdV1_Y&kyMw{itu27Fz?- zwMLl%;{Ekht08#fOd_u}DJc8118>ohOA{mjZOr1v#; iF!q?8ANOgH<=SNu? zdrlE(z3OiTb)*rZ-q+>}>Cw@qH8)#XkvQb!7}Z*LDtA-0Eg=TrogbH=mF;*l#n$j> zxgAVO*YO$zmy+@)sJ(s3%8CU#uYC%9whBQp`ZEj+ubu1T IP6V`5bh|NrB#_$CAvwrB*7bpXBZbkiRsbW9&WX&1|{aB-@)VN22n* zEk8l_*dC*E+Mgv56%_>+l>jZ);FTdr(=#(Gpf`hcY7%rpKbEsTc5{NJ ~2-k)Yb z-Cm_ff|}n<&`!+nxQPM!CNL4Urb?;6YcR5%>mwpC^?dJ~!AnFYHK^p}<#7oKgFyem z+Rb5WY56|h-BdKG6R0*ud zVW6q0$+$O)dZWLxvJ%;^NUOSF>>iks>OYI>e}(E`yU+JQeV3PBF7bC06{m3ssLx-` z-vxbta^TAtxYEX?h~2UuF&Wta=xt)!hlkaG*Bs=l7EW?iN2jC|R^NgKtkvb^m$Z`M zQNYS0Ou+kY41pmqsh1R8?EetHzXJ1|5?3?Y?CA rZ{Qp(mna9<*zHR?DZ9{BAQkhzz2}y&}geD4U9#D!@8fes{+HFl} zq5%!7Y3=4x6wRekX{1uJXdYCO21E25*M5JW&-?!KK7T*YUweP{wwAT->%PwOIFIW- zzUzbg*FY-d=~K~??u?NKqu5-u;2kn)b~3D?4Us}D6fg;|H1}tx W_T08xH zn4XB(D5qnVVab|s6(58Emr)=q#INPWv*5Z0em%t{C3!ZBUz_D>0gss)Y2``L5&)%U z8P!CW3&usRWHNV5PEM{`y}AN-Z2X%$ckkYM_Utg|8ZF2pBkFt1^5-3Pp&DGb9FT|J zq%mB$TRS`16P1INTwMz_@;w(l9431>^7Hc_KYOMO6joEL%(+n~O-;>Kq=#{*$77%B z71%KjIixm#W)m77?vs?X`*~p@O;C`9uz5(y0e&PQC1n)?7283qS&dgSm_v d6OW56 z=m zq`a(}d8%vD)6-Mc(V?T0ZMYw|kgIiiVOG`if`Wj${<5rdPtD`Mus@a6HJQoWxoHy* zwOdkBKl|6~A+)Bx@$r2?G=z+dmPSrCJFx1 zr7zka8_Tn@;-lR|`f8Akot<~fmMw=o7MwG0;;s!x6kk|eJOUY0mv2+?Neo5+vgIgd z+W9u`1=Q8m$zO)LMs@{_hLvi=+kKgt3B!7y)X=!sF}G~#Qqip4S_8-=kiDB-GWW=e zS*(wQtl*9vJK8ezMNGF_ziX_o-{|J%_GM}+1i7LUT3TV~D*oZ&+CI7_R#sNay*eTd zG9$3@S5bKWK5jD`+etgS+@`PJ5#u*8HQmE5WEh6HRantRO#vC13!epr8FIt7J^Ut_ zC4%@X4GQcBPO=|3zk!-Y?70p}T0YcL8ZFmuPz6uRhhh)cAt*_hN(maNmw_OnP16N; z4-E}r572UQat=9;X{o1bO{0qlPORT1adxaTTL=l-+?zk0kovxd>`DVVCJniCyS}Q` zgZ79-D=X~S`4gSx>IILXR~&(Y`9GqAv4hypojZpD8%p>1aZ=ps?XIk>thQWJRR$e^ zt2W#kV0;7;>J&kt<>ckHKR=X*vS@qbM)r)Eyn@=W+D;sJVSfpNSG0k`$4x?5Y9q=O zXfADCN~YXOo#}|B*B7e!hG5gGK#qv{+NW(a5lCMI^(+9N8W Ot%~Pul(4S<9UY_3L?&ywZt|i4pq|6B4qE zx(w(CZCc_K6@q}=n3b+VRacijf;w8gM;Q6nJ{-VyiIDsKO`czHyMW8o$G@5;njVTM zLjmmO;gRQ;a+}MbQXC{K& !Vr`unZI9q0=exoi zpJP!m2%-k(efz62jLHm2W3zWb0z#3Y5s;ag*=A;~BLAu?U{iQ*PtW 1gBoJ +^+Tr-u3 zb13Te<%zA~rMr70o)#^86Q27O*G?(NvCZCp|1D;dKRY|?Q&c2{yBZ29BkWUQSE1JE zE8&~Saq~z>Y^8alQuZQRUWvbXNnFo{f&1@d@M7f4#e#4(4+A}*IVuk5MOb`3)FY(C zi^j%v<^8>TDZRX_Y$yu1kyY+P9<<`Iapl1)ueL5g_ELlrm4K44Rmv%Y`7 eKmB FAS{;wL#5&ZB+%4sr%^w?vPu_r zy;wJgq}}c )Tk66k~^_H6`sv@JXxTj$*gaHr<82Gr(~h2b8H z_B1wxU5qU(0+8I_9vd4wc;!*}j?YMkzi4mIGx(vVu=pjpj8{n^OehNgC}U7k-afbG zv3XzUgD(JV%%ABxnQ3-KP{q|;*NW9A+p$Gr9HFq6fRl2U>+odi93$Ze-q?9&gcZsx zN! O8wo97tpnQ|5(QvCYU{PN7V?_yK3A%tQ;HxSb6Q#$;PO|Vx?gYW z^~pA4M0EsVm^yTuhazSzz#f4GfW+mJ(~m?eNb{xB*P{ke VCQ!CF)4>pxhm-0X~TG@HA4Vz3*>)s4l(vGX$^$d>XB{%=_GEChI7WgVyI6 zWEQI=+sR4JmW&s)pbb#v5Xqqt5xy82$}1|4CB|T!yc#8&{rS6I*Docxg{ftT{t-r5 zd1d7?l)(pbo~1RCxMTl7>t6tipuOz|t!*ZGy)ahCx1hkKpsd`oJ
wyIRQ|7m*&`@>blKRqZkW+tw z$k|W64enBb^SWGSW@eYKT!|2De)a0s{rmT)OUK_hS-ZQtUk42!rdgQa9zYtrXk~R5 zsoP5p5&H=sbMix3FjPz+|9oNoJ5=t>+Al8!mzg%kNU>uY!-#WSOKUU6DNJ>tVPVVj z3 SP^ bJ`ksv4y{rm!eg%!%m${1-ivTyEd zfSQzY8b6B9p)m&{RUhgjB7>P4=Rj#VC?-~ok}lT0%nMDEOhIH$r9MKCty;CJ9BIWh zmo9 U==|Ia>8)C5#8 zKWxmg_w?IZwcnj5y2V7TyEmhId*d=eNcgb{>Xf&)vqcIS>2wInFt@4DTxAXGWQhA9 zZ)0OqFb$Cx`7`}3-Wae;ZVXsnSbzlV;m1#&$b-Cv0@sQ{4FbeJ^*13s+rH~s CR%GZ(q!}zC4=0Z)mK01-2;(vC9Xxzk83QUAV9CUZs` zw@&M9zt16ZW!K)l1YPt%)M6tPmmkzlMQ!a$z~5XMvvjR&Lm6UnBq{~IK&w57saQf% zvKO1ArqJ=z$H74#Lbr8ZxL%3qA2;3!|EPv~4|CgswxcuIkoN{RN)A+AVE?z5yma&J z-p*~f)@0)XGZP;dN4 ?Ba7=Qa0EQmw|f(h$Qc5%U;41VI` z;$&Q3SXhAVaKjx0Nz7BV=*6r%cLswrx0SkRVzQJX-EMqhBD^<6!!$Bdd;9Pu0Nl7~ zWEr9*?TIHd&Me^qI*xN*chBCv30T{24Mx8c=5ux@2&B9$@>ezE9d!+F+QKI#b#mZK z#y!k{ssI*M)z_;?%gF4JmOel1(3%_*bBp(itF&ZMN=BRh{vS 8r1Slu)qHXE-tQ^ zpV}QTk{F(gzx#%U_JWAi2EZuTcM;&O@qa>>dx?u&T~nh3fFd6{-o4OJZe(R6k2sDI zz(mu8VX3=5s25dDO=n=q9l-n^iF&RpA!Sj0o2_qnn3qN)K->op9+=0RoP#?9?`5JI zR|UF<=Tm2P_I0ClOQ(DOCqUd9#1zrOha7(t_QeGZDOK(5+5{s|VB7E8B(7q{8-DY_ z`I9FDKn+rWRZ<0f8M(ML+HrluBbMfPWgCWL3>Ts3{VyQ{!c!Y*G(b5IIgRVt+S_k} z!UWdq32?V(FP(#=XH!*GCEwQHyy=WUQStcr?$G+?T68kiGLK)P`JgPF32aUU_>TZ7 z$#=}i$f#;=&h8m6Trd0W=<(yn9d@YFT*U=KRboFX{&8)jC7x&$@oUTs_1LH=mT(pA z#NbQG?4RKAltZ!A$FPWTi;1y8HylIOI spAlND17-Z hxh@mu>Ig>3_m=+nFCiA(4@_f(Megd3lpxnAJ$HC+!00>yHBiNnbpbOYXuN#GFrN z=#r7F4JB{>V>jDM5ajs($ASN!Wl4|vAa+~<7Va&m|73&V^1qgibUopPMN5oLTzc3d zpIn>@R8Yx#KYpBgGn;Kx7KCdqJAY)jneGSA0+jJ|t!yncbj;rM;q03?Uj##9YG#IX zvhHWsf{FK7KOqM_cz~auU$4}?K&cDw5T}t^UxIS{!`l_786O6Hd>&jVax(tXSIs9N zkT!i}<)7P*;`X_C<%%!Z3^3Hz!B8YhcL}Qt^FlT&5n6DOV%=iQ& {d{ZulF9u5d>d$ zGZN~G4)^^>%FbjyVtzycAP{kaLsTniN>IG>abkja(D6E%wM8u{>O6#0%BvPjSQvEG z4-NGV4SzEjrh!(Ung__-0e$+|X~F;{A^e=j^uS59@P2Gn$em>rg|R>p-yp}lm4?Y8 z@t>lFQzUvHE$6udzQY^7GP}Vwa3>F9+=nlzTksyhOv)>iRoOAXKUOKw(^W}XxgYH? z#i;DJX7>Gi_q<`o?kT6vdN<%6cF2!{u>}XHysL}jz<~qK0Jeq1#ANPMJAJwuYy2PQ zCmt6ZWRsm?gU|)Hu$Fk~LE!Jeoc*)B|DXuAKirS<>gp9>qsn`Dl-A^f@qULGbsZhV z=m)N&3TiHI&K?%kR*@@fQ9WU=KZY4W1^am*+rAEF%JZTkp542bg9onc<0$YhIhnw0 z0dZw8{5f#h!pY4b2F z<{Gk)e0PF^e6zEK_U+%_i)M`esO@-oi8Qkl+tcLjW8=Yy3s_oMiP~!p!W^2Knkomm z<>Iw#>*1{t*YbnsVo41l_G|@07&bz@PP#A{vzP&wQ2@oR#>XB^yJT$44KsqE=oua$ z`Jf>`HmSay++|IpRqhf3FY_)H0(VRx`##2PV8dSXy(_(0M1`P6T3Dw)etg#8sX4cy zp V!+UhP5IPWP9Qs90neNbm8#iy>4Iy(6L&k0YI;_QVuVUCl z(^w&u^XH@e{lV!ujhe JGY;YW^(1qUKm)Mv!wBic4pJ3JpiIbv8KV54#lw7fSVQG$V*rf=}$e0y#mo4 z5D*ZGMoQS-Vi9HYOt-$?UT%mom@WIUk`ZwFPZ%1;Hi_e#3hL N=o=dofUBD8^7RUNTePx(qN1XKp`m)QY9R#FxHa{seT)}W!eMBGsL^Zahi($@#Ef92!w)VW@59fOz;Lx9b4NR2s=Y9 zf$%2BS;-(;xZi{S<0nO;%U;a@37uF<>21GPtX$au(V?jD)b|14CU9Es;mS5Zjb4Tl zHo-i@no@6oJB gQWMbQozlhOIV;0~&VLP>AQSPeQD%4K;Bq`|sSoebDo_JO0EH6dKSm;bXTIPNH?R zq-yd4uY8oB3qukLL+|Kl0E`UcT);6b2iYhHQ!(FRy9j2{*|C?#_h3&~z-PWBk%*Pq zDrz1w&4j1Z(a{0MGpXpdpE~vz&vjcu8|N^8x{kf!hg(Gctja@_f}Z#9LqkI1^3G__ zjk CJP)8w~Yf8e>OS z!PRrf5&@fXo0QX9FrAJ9yeRB8XGPwJoI2vFI(DE^;e1Yu35wM=az?uLUnxxVJI<&W zi}=jMu*d9WeD&&WcrPE}aZ+CRk%dI~S|e|Bc!IV`LOz3C2(AjFvveaXhrr+Kgv)-- zaUF3Q_s8Dv1AnR-%Dfk1!~PduRngk2o_LC(5f8;%Um^zg^t!F>Ux|r4IHE}X%JTW8 zn Etq&|+1!zHpA$w>Yz zt9_WYf^@jy;g#?g!E+&}pGP`7hb6{%{$F1O%&;XC=ls!8VvUj`QP5CcyL?zr;rBea zu&OP5ZfKWFC=4~N`pqw1EQN`}HYsmqm7%oQepL)DHF>5C8lAwoSAVqiAH}gUfHB@= zY{X22b2U7uFw-Vdx50jPOdCw?6}S(9EINi0rkc~G-4aKR^nu -u{&0(DJ)QC=7~xiQ_t9Ik(21Wc1Z>Lt9BTRuL$5XBNVe~982RYb=km;;ukri>>y zFX*z+d;Ea%x0qOj(Y-|aPjWT~l&=t~Spc?d0^SkhGCAK@2mja0%S&ZG+`le_ mjyOKXz-IT_&=Eh*P>H>E9iNA>57ru?=i_|NcHx^X%Ks&3i^q>2Q)j=NO4dMK zsYT(;vFtp+$awx-?|beNFI2BYoX*!lx}eA62Ll4cEIZ=xKR=1+JpD2|Ta6DRx?^Gf z|2iS<2E!Kfqxy`bq>H^TeDq3O#USTr(h{3(m+x3vhe1a0^G<1Ja;pn|E-5ZPiv_Y< z-w`EZ7Q{3fLv!*E4(@bb$8l&m k~E zgNw!($L===^c7sMB@~m%yzbyo<-LLh)3FFnAxV==(N5n24|Xk%Rq^zLoa0Ui@MD2; zyhHkIn>X(g7vFO8$4mvzv2|@+&`WxUhIF!|p-Es>DB_e5DDri1Za|pYgsY@X9t!Av zu>xYCpBNJ$ oLyYV>7IW;z_GJuH{iVD7MxgP zu>CNusQVtQ@34Ru5I#S;`1|uBu>chm75OWY({Sc@3xK$IsI#7MIvfdsUzuaJ%e`PN za34Cf5xNIZZC0Rn<7|Bz|62!uD#tA$j8iuBgO%_e_I0waT u)@$C*oo_S!yvemnvKYtRmfk%Heifk0X_Ffb4Yv0m?r|BSCz z0d^WC9qTbUJnV