From 98a1a888b81ba1df286d78f1e066b9b5fc36d69b Mon Sep 17 00:00:00 2001 From: RomanAlexandroff Date: Tue, 25 Aug 2026 13:52:29 +0200 Subject: [PATCH 1/4] migrate the tech documentation from docx to adoc --- Makefile | 12 +- README.md | 7 +- docs/Technical Documentation.docx | Bin 338680 -> 0 bytes .../01-vocabulary-of-terms.adoc | 32 ++ .../02-about-the-project.adoc | 8 + .../03-contractors-requirements.adoc | 40 ++ .../04-program-run-overview.adoc | 21 + .../05-program-run-step-by-step.adoc | 96 ++++ .../06-how-to-build-the-sign.adoc | 110 ++++ .../07-development-environment.adoc | 71 +++ .../08-cloud-pull-ota-updates.adoc | 318 ++++++++++ .../09-uploading-compiled-binary.adoc | 45 ++ .../10-firmware-rollback.adoc | 544 ++++++++++++++++++ .../11-hardware-maintenance.adoc | 26 + .../12-functions-reference.adoc | 291 ++++++++++ .../13-architectural-decisions.adoc | 143 +++++ docs/tech_documentation/14-intra-api.adoc | 129 +++++ .../15-exam-simulation.adoc | 50 ++ .../16-create-your-own-graphics.adoc | 68 +++ .../17-how-to-draw-on-the-display.adoc | 56 ++ docs/tech_documentation/18-time-keeping.adoc | 28 + .../19-service-messages.adoc | 162 ++++++ docs/tech_documentation/20-libraries.adoc | 115 ++++ .../21-known-bugs-and-fixes.adoc | 81 +++ .../22-reporting-and-suggestions.adoc | 10 + .../23-confidential-information.adoc | 8 + .../24-external-sources.adoc | 56 ++ docs/tech_documentation/README.md | 44 ++ docs/tech_documentation/book.adoc | 65 +++ .../media/battery-empty.jpeg | Bin 0 -> 18057 bytes .../media/could-not-check-exams.png | Bin 0 -> 22272 bytes .../media/cover-shadow.jpeg | Bin 0 -> 655 bytes .../media/intra-token-expires.png | Bin 0 -> 22025 bytes .../media/low-battery-note.jpeg | Bin 0 -> 18447 bytes .../media/ota-update-canceled.png | Bin 0 -> 9517 bytes .../media/ota-update-failed.png | Bin 0 -> 14552 bytes .../media/ota-update-successful.png | Bin 0 -> 16078 bytes .../media/ota-waiting-update-full.png | Bin 0 -> 21570 bytes .../media/ota-waiting-update.png | Bin 0 -> 15192 bytes .../media/telegram-bot-error.png | Bin 0 -> 20180 bytes 40 files changed, 2632 insertions(+), 4 deletions(-) delete mode 100644 docs/Technical Documentation.docx create mode 100644 docs/tech_documentation/01-vocabulary-of-terms.adoc create mode 100644 docs/tech_documentation/02-about-the-project.adoc create mode 100644 docs/tech_documentation/03-contractors-requirements.adoc create mode 100644 docs/tech_documentation/04-program-run-overview.adoc create mode 100644 docs/tech_documentation/05-program-run-step-by-step.adoc create mode 100644 docs/tech_documentation/06-how-to-build-the-sign.adoc create mode 100644 docs/tech_documentation/07-development-environment.adoc create mode 100644 docs/tech_documentation/08-cloud-pull-ota-updates.adoc create mode 100644 docs/tech_documentation/09-uploading-compiled-binary.adoc create mode 100644 docs/tech_documentation/10-firmware-rollback.adoc create mode 100644 docs/tech_documentation/11-hardware-maintenance.adoc create mode 100644 docs/tech_documentation/12-functions-reference.adoc create mode 100644 docs/tech_documentation/13-architectural-decisions.adoc create mode 100644 docs/tech_documentation/14-intra-api.adoc create mode 100644 docs/tech_documentation/15-exam-simulation.adoc create mode 100644 docs/tech_documentation/16-create-your-own-graphics.adoc create mode 100644 docs/tech_documentation/17-how-to-draw-on-the-display.adoc create mode 100644 docs/tech_documentation/18-time-keeping.adoc create mode 100644 docs/tech_documentation/19-service-messages.adoc create mode 100644 docs/tech_documentation/20-libraries.adoc create mode 100644 docs/tech_documentation/21-known-bugs-and-fixes.adoc create mode 100644 docs/tech_documentation/22-reporting-and-suggestions.adoc create mode 100644 docs/tech_documentation/23-confidential-information.adoc create mode 100644 docs/tech_documentation/24-external-sources.adoc create mode 100644 docs/tech_documentation/README.md create mode 100644 docs/tech_documentation/book.adoc create mode 100644 docs/tech_documentation/media/battery-empty.jpeg create mode 100644 docs/tech_documentation/media/could-not-check-exams.png create mode 100644 docs/tech_documentation/media/cover-shadow.jpeg create mode 100644 docs/tech_documentation/media/intra-token-expires.png create mode 100644 docs/tech_documentation/media/low-battery-note.jpeg create mode 100644 docs/tech_documentation/media/ota-update-canceled.png create mode 100644 docs/tech_documentation/media/ota-update-failed.png create mode 100644 docs/tech_documentation/media/ota-update-successful.png create mode 100644 docs/tech_documentation/media/ota-waiting-update-full.png create mode 100644 docs/tech_documentation/media/ota-waiting-update.png create mode 100644 docs/tech_documentation/media/telegram-bot-error.png diff --git a/Makefile b/Makefile index 8274b3f..b00080f 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ ifeq ($(firstword $(MAKECMDGOALS)),format) endif endif -.PHONY: help release publish-manifest format +.PHONY: help release publish-manifest format docs help: @printf '%s\n' \ @@ -27,7 +27,8 @@ help: ' make release Run the Firmware Release Manager.' \ ' make publish-manifest Update ota/manifest.json from release-info.json.' \ ' make format all Format all .ino/.c/.cpp/.h files under src/.' \ - ' make format Format one file under src/ (basename or src/).' + ' make format Format one file under src/ (basename or src/).' \ + ' make docs Build the technical documentation PDF.' release: @$(MAKE) -C "$(FRM_DIR)" ROOT_DIR="$(CURDIR)" release @@ -62,3 +63,10 @@ format: fi; \ printf '[format] Formatting %s file(s) with clang-format\n' "$${#files[@]}"; \ clang-format -i -style=file -- "$${files[@]}" + +docs: + @set -euo pipefail; \ + command -v asciidoctor-pdf >/dev/null || { echo 'ERROR: asciidoctor-pdf is required.'; echo 'Install with: gem install asciidoctor-pdf'; exit 1; }; \ + mkdir -p build; \ + asciidoctor-pdf docs/tech_documentation/book.adoc -o build/Technical_Documentation.pdf; \ + echo "[docs] Wrote build/Technical_Documentation.pdf" diff --git a/README.md b/README.md index f3e41dc..536e9b2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ ![Repository Banner](docs/graphic_materials/github_repo_animation.gif) # 42 Smart Cluster Sign + +**[Full technical documentation](docs/tech_documentation/README.md) — architecture, build guide, function reference.** + ## Table of Contents - [Introduction](#introduction) @@ -17,7 +20,7 @@ Welcome to the README for the 42 Smart Cluster Sign — a self-sufficient information display designed to be installed on a cluster door. Its purpose is to notify students when the cluster is reserved for an exam and prevent them from accidental entering. The device automatically retrieves exam dates from Intra and displays appropriate warnings and information on its e-paper screen. In the spare time it simply displays the cluster number. -For more information, please, refer to the technical documentation in the docs folder of this repository. +For more information, please refer to the [full technical documentation](docs/tech_documentation/README.md). ## Usage @@ -94,4 +97,4 @@ Please note that while the project strives to provide accurate information, it i ## Conclusion -Thank you for your interest in the 42 Smart Cluster Sign project! We hope this README provides you with the necessary information to understand the project's purpose, features, installation process, usage, and maintenance. If you did not find the information you need, please, refer to the technical documentation in this repository. If you have any further questions or need assistance, please don't hesitate to reach out. Happy coding! \ No newline at end of file +Thank you for your interest in the 42 Smart Cluster Sign project! We hope this README provides you with the necessary information to understand the project's purpose, features, installation process, usage, and maintenance. If you did not find the information you need, please refer to the [full technical documentation](docs/tech_documentation/README.md). If you have any further questions or need assistance, please don't hesitate to reach out. Happy coding! \ No newline at end of file diff --git a/docs/Technical Documentation.docx b/docs/Technical Documentation.docx deleted file mode 100644 index 11a2d023603946ea63346806281e2d641627de82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338680 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�VtiU3u~LI=^=T5qIf}| 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
  • WLeDb`>f5H{8prW$pDw6K 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¬WdM4Nh!Ih-*GNuc^bylgCN$k5!On{ctiA#0ix}m1%vA zjpe?id8DsNf!bGnI;Fuhkaew|ud*F9#1b{CG<%zNpgAJYtRif(Jru}*s9;vBEl?pl zHZfeD)^KY*_fyY5szrPOqi^N}tQWXXcpE z@4o*>^6U4`#a~`$-@Rj(LGsdgnK-Zi9)54UyHJ8RZ@&v}SFiqjD~{#mwUa0pzG}lS zUz+eQQ@Z@e+i#PL+rPZ?{(4KOwfNiL|NB4Qe)A@Hty-^c?eC`M?7QV$mA|{0{GPe* zl9%tSKmQGW?q0o{UB9H^w=Vg!B+hPrFWT_W$!|aRPA-#pwS>9AK7c8l^iII$A7LZ8 zp+Y2$kl$Kt1W7S8N0mC~(vfZi00wS>bd{GFn1Ygyhg>H^(mTm9KFZ?v#E`6+mL{|A zsPsrNlm~1Mg$<8v0}4^H9G!Jh7RRf6CEo2&&^)SBg%UsTm9bC6zWc^#BX=}dLq?7Q+leh2rmkvs!w{0FEn5-~mD>=z5jOl#x~9vrQSQBMfFD4yiz5Bt(3=BS10Cgu zbi;ibTmGLX)j~y}G!QY6{INdP6gu%HiZAI?#uU|`>gsqxHBXnAOjLl7s!3$x>na5p zO_(Cdy5dhY9n_7y<`D+r!28BL4-l>v2UepHzM{yA)H_N2m_M>yjpv~cj}%Qfc&bNn z4kk*V)Z~>BM?lYTGD4@poZn}%CM#5|t1~SqTUju+Wx=EdjUFGUzx|sn`u;w!i?kwJ zifyZH0t_sf5Mxs>tHKNF2@9MT6c1N;!6(mO*-rc)ADn@bfAhiF9?oBkm%`Z(?yEO1 zjf=BaKkR>fWlFnH^Hg#%WX+bTMcP2d)|u^W5_c+)so&WFnJ-H$D^z19HSCVAAC|7N zq}#ek+Z-WvbbSC_B}^mH~GWAcY-|;jG zI-u=iK0tTTMbT*lJxkQJWWz$f)*<4c5n*pqDVQew5MSqEV?-HJGNfY5R0`F$fSGcu zvVsz#i;_g7y7}3mYR2hcr zm{f1{0PZkxh?w9}9w=sb?o}DuPI|&J39orgzy(mVp9I(F_Ja#8KqHE-YLI5XFi{tE zsvB4jp##l9gJzwUB~5%uVPjF5s+z9{Si4D8C>6(EKqd;2+oWZQwyoJpvz@LC5=S!| zt=K!T93WU8ob4bnLs4|8;S*JKS5^#puN%Ds#32CUJ+mE%%qUfx70ij^+NxA3Y}LWz zK;Z!j$Z~Dw@P8DnF0!nMtSSI4k$+i6fkT8&_8~NqgDnlsG}m`y{xJyT$aQ{SC=|$ z96mOx=&*3O zSO}5=4`Le$qG~cT6zu6&1%ybMq-f@5p*uhvEFeBm{TJDmRLg4Q4a%0yM6(MiJPMpt z>c7y5MD(#j`eRiQ`%*wj-dnSFR2(EK(!h_S$u_%|wZMm{>Za`2joKHY=DMaM zZ4!<j)#s%C8)9^&X!HnfI1A}OM1C`RW;KLU(oapuk2fr03f;W%c)i4F#gMMZ{e zqyxi&gW;Dn?Jtu!DBG6KFex95h1SqvV`q z%T%|T1#pRDQNzlsWOUFtWN4f}rb?3JI7HTY1aVabRSC6asWV&;9u$__e`EZ0C}@GM ziB!|XKvc$}EcRc&`KARt6wwxmDK-*Y9$2j7i$=nBx{8Km+KSUWoiH?XB<(%#?&$i& zc9=eGRUlfEsG{7B$JUvWi{y^a9yAJm{O3tHITB0Pg!D7 zQF9r@FasE%+&hWJ$tYcoQ$GpEL6V*fCAj7-aJ0OH(D}t%yHVh3^Eq}wv>}7fv4N;5 z__@^*6W*H7sTWKfN@OUj1C8+Kd~dN_!Pjz1$;$epuX($5ti=^Bg3+&W#7DA9;$?8U zzBdPYu6SM0+HQLy0NB^myg6o*zLi>_Lmv=!%PS#+nh@X)jaKtHjC~f)VcP*Le}u1jSq2vW0`B7nf8H}SeMn^Z z2d2j5z;?zgBMD^S&GJCea+v}{D>uevm~pm{4+IM|!v>9!H{g|$!02t& zKi+()JYb4=-+ZxP%s^83l0Ry`Y}m9-zvkxK@~+(A34_t7j~71E;C7NROchi zWR61X{$)p!sk1q}tN^5bhXbUzQ~^l6uzzMNgqw9ecJzz`&LL{s#ZC-%du2k zeBfws6q_2*LDc`oY=VU|w)1eYnsf6|@L*fa;u|501uzq~)NOq9TdL@U5G=tnD2}mD=8XOK-iisrtRSTu`#4BimBqIltC~>kfh{ zR5uOUI3FewHK`JDYR191C&X$HS8f?vTJ+e*Qm)YuE-oea1b`2)UGMJueA zP$>0+A5Q`SvmZg*PX$j%u~G7T9!!Mh{+Y*@q2GfCVCx8BDuAp_!!Zy5HdGd*S-!d8 z)sx^l^aEiW%)IL$6(*|$VTWQH#usL@c$M+zq5!L#gN=-Dxbfhv(>Q@`Du5}w^5*;( zgMIvjNQ~0W`h5V>Jffbsi18{p|Jw0$BzKE9e8?4Utlj&KUkD>^|2=#XE~TLG?Rz(9 zm01WwT(x@po)?7?fM-!~`Y}QbfP@GVo{evX!oLCN^=H9kh44nKW%0zj6{bnN5U4gJ zM99MVTwoObvnNPGnyt`f1=}LaK;8k0zXDny++jr*fL#!N`LFT9S(GJSQR}=X+{{9M zCiotRn!IlKIaUmZ-;RTM7+k}ynR$F0Bmr)wI_mSAFt)+|QuZGP|1D(cx5Y3E`8h!z z@F}+Dy+a!(Yc=h2jsOWk2LJ)S)Fp47hI3f_%NR)pEOr`R4rW{pSw()lKof~SK8@$| z_y&0-%HlSP1TziMVGY$&c1_pO-MZ?zj|yAlUj6Z7kbC!o+Zz`P_@BroU_~c>lKqFhBHO30n4;$Dw4vE5vZR_!u19TlfV`jEvVrhJeA6p9 z2eOD22&Q!4FPEIBa2}HS3GfX8bT$6O4G6MHd=m|X3ocV`;}s}daC3_80DJ-k%P3vz z1kb(_roe~rKkJ-)#}X^la9!4>$p0}SoJp=ssBPD$PaF*`g+@!K_ny8+sG*x}r=Pof z=D`$RrxNaMn!!Xtp5%WY>NeP}=ZR}6TcWooEW8Lbr}-^bzK$+YwR(iYUDZ`9YUzXD z^XW)&PeYwgHxRC}@&kPg^yl0uSC<7m;$E{S&XPP(dO&yl^kd(yDSmXda684`&4MUL zYe^+QamlDT(J(GRK({+E^N3s1*-ZdH0wN|t9$O%kkq?~W`+!PZMKyPLKRy9In%2>J z;9OYc7SC?@V5woaEno;R*ll6H`}wV+#ng^>e;;K3{@4FbL91KDQJP^+%3dnTwrEH- z2lB@vNSHm1<$A%f!xvyVuUj6CAt|D0D;v||BMxb2z{{r`#vZfs^KPXl!}IF{Io+x> zNv=d)*6jLD6{|#RKt-q zhc&W~DWMXvNj=861KV+d&AbIuIlcs1U-r0`ISErgMrDBeQSahOn0a{Cu~D?%URZz9 z2ZAwAI7o#k&V=+P%>3C}4NF&xMSzDDu#{nx;iuqbZE&iXuB+L4qoImy5>;2_ zdLM)ir$>j=Y!;@%B1YeD4pnasFq_;8R}nuw%g+Sr8f{o;`Z;%W6A$cxLGizW{mMCS z2TuMselnfGewYZJ&jVo#mh5HRu+E?Fm2c;#7q~g-X0!D8i^BD1nvb&0ql10A+#YrN zbFR}4b%$GQpeXyZ4c14TgDN^B z_NL0m)832UAJM85R<4)Aek_g^k7k_;cDOP2Vc(VgrSV3=f^zn@T+YKF9f17q2{%FR z{l-Y2oGF!>XO*?K(ko@ra3#_(VzxTI_mQ@|Se4hc$2)ob#IV=L015=!!UJ_MUIt0- zYy{=>}2*#-8u>_4erviF>ONs$yu(YEY}iql<*O;Xgo=Y7sS4^*5R z>b;2K0B%5$zY*GgX>h;)_8*+c{q%~{IOq{d==nV3=7Ap(Ckel_gD2pL+S|v_NdaEX zUI%G8d7!brJbbnfPw>3uNuF9e@8cy&GBmzw!Kkm=`@9Hx$v$qIdmHv{j;j ztP>Keg2{4>Zz6U}{;?v%EEo9@TdQub8Z>Vf+M;3$j^ov9vTZ@M4XZjM>yCy@l}w(6 z_MR~YCHG@OPd{-`JB`FnNt|BPU-xP$th%~uJ5sHqjw%X- zAjb!zIhyweUL=V2L$PemwpeMy$5>ev$Ay9{^1wGOfF`A1R?IBbpgnQ!nK*_+9Jz^w zX(Sv^6(LQ{Uniif1Lf-{K|5BSJQ$=0uurn#lOD=nc0^t>#ad(5M=D-BK;^$B&my-8 zS}ZSFl{^opq?dp%36g1BwRTF41jvqB8h~GY{09eqiI?|}aknSxoV~x|#^5mq^k^}c zc#uXuP2y#BkaA6M?bB&okF8GI_A*4owMA$kvJ1^vz~}cPf3`}=g*ck6io=YnFiA72 zv@q`h!&G^NGdxf);{5%$|0Hzrt@If@CaDB7pvY_PM=KV7AaA4X2H;yyIFEfbHI&BH zZg3lj7#LY$7@U^3rZ`ZAz4kxomiswamC#TIfNEwemV z0Kj!fbkn?JdK!a_cHkI4E1iF#JQ-n4IWeH4Y{jM1@CqES9_r@+$v(q!tZfl;RAA4br80=f{yQ%^($R zRS|f*Ry!bTj%iwIwNqgYq!n822j?F;4mfCbzJ$mS$Z$Xw<5&o3+y=zHoCLHJdQnLW zr()w-yN~*`Vs1qLw$nP4SaZt?l<-CAe&JD^`LF5%lt#wp>GBI&r8QHocCQ3iw!%rx}NH(hoO?pJKl$|u)wgv(YqVPG8l3+gJ3<5>)xf&k_5 z4}1FSgmt<#uCEn85k2pHPg=(|-HsW$*(010) zZDld@SHXm6`r@o}Ly33L4OY1NE9{+6&a{DJM9gqH!sL+{(hJxLWr%gKGmxiv{RpnG z^HWGaAa4mca<`Xuxl5sc~Yfp!M2Pbs#v#cy13Fp{GLz7)1HCzjtyesXt< zEqyTQgOD?ki^PnBBfKNxZ~Y(k@bAC<7f>8*fta`RaxWlkpVccjgO??dH*tzjIcI=) z){2ht%I_{KH9^rOL#fG1*%fum(W;*QqpvWRl~_%d&w2m^Fl2|&mvo7>M14wldCN0+ z(X9br<}HcP+B$veskT-XKZ+ys8kGdOA&-U~Jai(?qVkV({=WzEyq;- z7m;fWl>d}NzS~-;P72sE)+(tyr02UWZn>DnKBfiaTC#B|XMLoHELfT(^a?_LC+VST zszT&jt+k0}y1FI`)svU4zQfL>2aaFCZkixEvS88KmYmsnT?7(BE@I|~vyB(gFYF_X zB*hQ})#+6c_SleWUZJ3QO+~h9 z!yP0~b#=RzSMp?lDo#C)!B&EXoz&Z0n`G2d>*9nG)Y>>9PPlXq1J62* zl~)X-UQhb3?9z4fg-07vV)0T{i>_oN5;ijHhM)~3F+ zT-$cx>Jy5D<`qh+$h)rF=Ul~e+D6){BJsbf&46~VFU1||%ht$Ihf{EN!d+sTEG>or zPZ|Q4dDUeW$Fp+JUi948)2Vy8dZMTcmR^ezD~crPo>LvERfYH?;^GYUl~V5_SWLbk zw7xJ$s-{4jccqG+ZWtRagj8Npjne7*lkTdd7GZ!Eb#@pMy99u!35MAnIK#@EH(~bk za@0shZ8k~N_j?IO?($-!aiGf?A=mM=p3GDGqB|>SRnlcgsVivJBHokZRu%O3z%F>% z`M5MB-E=*Ys1!mjyzd4Qhg7J^u1!VPmR!TG1$B5;vlXLsbp5@c7B5&c({^y=nZ%bt zG7lralWXn_9!bz+r?5?EtLaK>(IE!hn-bA?Y8XH-->2JdSAz z>}ZtydKJ#dT@U{NWSdS^i=+#7s+zrpV?O#cQ`^;4i=STn5)io!AHxKS((mIm{{=r@ zNs^E(_#azEaULxcSr6;;XnGBRoEuLY)KHbbo0s-s;Xo=Urv)E#$H&%Z@|Sad`Lp{G zN49)9M+SfA&x4b{FRnQ=TG3ys{We+znI%iQ#Mi_>?-EB?P^$d_??h-j5@daN?IZD1 z9?EZ;=E}0>)`BU5r^~7#R9*jPe*5A0?c)v^P7+ngQ}`OCiHa*)PAyhlqcr9uQA=|7 zT(}AT)-=EtKsVsNaqV~bt`b)6tH1C2)myg-U)Mwq?6i=QPph%o=BkznU^C@wCyVZ5 z!6}~Nh^|=+d)bWrR+Bicg9yeubQc7%nAi7UA<>crRmALtG7DLjYY9@7h1w%?)jRvaLQl*sb@WmU zG+KNq2Wbkqs|#T~B54Iiv3+pHo2n@ZMlFIT3bH9^c)t9Mvj^a;)lzT7o0um|y+#wC zJ`ScoeFgr0(npo4mdz_ppA%&kfo{NQ_0AsPw2gj=BjZ`ME<6hFN{TF1Bhc-JWcALS z_xgBL*Gz5F?#>lHEGuUUy;FOdks;ZlU^sg1Xhtx3!;qDAMDS6O@o2(is|dgtWFETR zf}qDS7h3$Xr=m+V>e$dJa03c^B@exlN1<5_t5NGgP@1hfDv!Q@SvyI*Ye;4_SfdG& zg}EUc1XaDWN8DWs`&@^tuMf+d^$F)Kk`SUj5kY8oCe`#9}F z_Z%^?A=X6OFm1iw zUQiNTRdtkF8SP!Tx&)9tQ>>3*AGfJ!+7xKJCN7Dm`3L3>|Fs(h9Vh|NH?PL|QEt&tdMSe%uM&%9S+SECh7i8ji+SMdL zw#p{Xt=#!>I2Urtp>z-{UvHtH8ORYvc9eom>6BK%uZ8PL54`Y-Y^eH1k-6yEyoDjp zCvjDFje-{KVJe;=^R)vN#j{<{wK|RBZAa%1wv_ju2AgH2vMqLcACYrcQ{(Itt5%%C zP~BTDjjys>tejhyFVeR6KJ={*vmP??>37khjFM&5F#0|a?juSxQMXjbtcemqb|lNR zIx|ytp9&0L z+gxJH6di>Y5i(g)*05zong-d&IHNO#mtmCYue#s7eSvF#Ft11>-+|5ntoxR@Jk(Dp z(g@>a230XE@{)Uyc~(@mOt6DcJSPM|CqtATYg=psDKqP2jnG2MR(e2wy69&I^#{}0 zV!BF0sCSB!ka$c8>=VvpN6Bm_`Lv~J5GK%I7l@L}KRJkPmUc&brG>Pk+E+hW(UX-N zx9dQ`5iySOqz%}H5W*lfTEf~N)4}7a=mwOJCSSxv4&Zc8n7?@&CpXw@w!mJ|1`%53 zkq<+MJ36rCHJAA}w2f7K!}&wRX2Gj4OpFK|Z0i@r?3gfx$)+@|)#s9MG$P=OuLyX^ zHxmGcSv(&EOmLqVaSXe26ZU1n?d(_;y8jx{svBA| zeH&mGXlRZAItq}KFlE@M$VQYsVvK0@=)bL4T0N)y5G@go{OKYNRadQ2j$RX)m5h%b zZ=xUKANHLOw{L*0^V!EawdG`kEkHpg{$oi*Qu=h9}pe1<&NR zGjbCi^qtLHd36`j2IPjuFwz*+L(GacctTUxNkEj(covUuZo`yLiS`o|a=Rrz)8rLL zsKsFvSC%{*r)&&>{BCoVvn?csc-CjG9}w3| zhs5=w_8>)gNbG($?$$)2yk)Icyxsp4V4qCN<{b*AsW^IlOpBy7q!JidNe&*OYCUoc2!dyeRHhIpyb(|LDnq*MaME# zwchQTmjqssuxrP&0PM{$pCQ$468Mk~N@W&s$_I#>6T=!u+UCM9%_Bj?0g0209d#w- z3+5xjP5ubO#8JR4qj*HC=4RnMWFdK$>=_&{`~`V>OqQ6$&>y%OmaIvGfyut+Z(J~F zF3Zp)e%!CLRvOz^0*E@r;@Z;P)v`bVJ*FNYI~uJrI3!p`6F4wK@+zFRZ$$1U0UoQK zaK8k8ln1eqPS*61pSKqBsc<*EB$7D`acH1bm z^evB1yj_dvqN{uE9|!I2qj)%Epijf=Y1UIf2_T@PlO6(!mrPf*>(kDEXlGop6wj8h zS=u&`)M)M5NNTcJid54!hN0hncbUR zhK{lCT?BkdTx{~mS#k1K1a-RMHN*%7kqaK#DiaE?3ej}J{SqfZ{Iz>v!^0?~>Mrbd zbFC&5qz$hYXd@83Gt5rn0LKYK#>Mz1Na%@9Naw>w0nOis-iS#E65=YC672Cl$)ItwR33Tgs8!9FUaQaw=!(t?xxl!)NQ$nyzjEi+=p9TF(Veu5&1>>3K) zyz`G2m)xfhj(O>Frg!OniTh4s@+5GDTXSwvF zpU5RvD3`yXh~&5O@FBtSJ$WL*1PR!3PESB-#PSc51fr;!KO#yk&6eYvyeiluGBt98M4XrJz8VB1GM+ThMMro}XMBsd~(j~|yx@1ROx6>7EQ*%q46XK;@S9RaU z%eRPvR&#rRkZu0PTgbLb3< zw4I)CAc}zC4{5{gRL8bWGY6MI8ENLTl42;%gwr={P=&C{A1{&)4+%)_$@K}i+qYBb z8CRBJ{41&`kRARAy9clk;Rv(LbNi>b%RohL%Q}yMjT+u5G`@2bjET0xPqw}|e};T{ z75=ANdUwTGt`k{SuFtooEycHRap`tql7Ts_BtFF;nPWYbw!jF)YL;0gxpjC)}X^e zz)%U8-mJWjmEz~Un6ZAmo|FrBu0kU5IDju+fu#}uJOV+G(PH(abf^cB$ zJm)KgQd|HHj92U)WjwS^QsT-BkjvD>#>;FZ&gVv3m>XxSDq%IGdc$QT&V!I$5fGQOLHV~&?QxO1|xu?-Bb|;-E>r?Pa+7} zykoB~{m@nk7zJffURV|A>t#tezF}dFx^cqfR}X4c9Yqo(w_Y&gXo_z0)sapN+SMH% z7QWbS?(oX?Jds?tTnE`D0jmY+>gh|WPL4Pp|Nl?^eDNm$`j=7s?aR0Ng;n_i^Y_;m zno>>L_)p*+N$!#P^Steew7WRYrfNUAo4bP*px#f}wI zvdJK7N;g5tR_+tXQVe{en}hM%(}6x^kdtyf!{Bb>k3m<{_Jc*a;*XM*L|w^sM}GeX zd;so>5H3iAc|c&3zFvE<5fGv!O^^ZaZ35>@%&;N|kLsDTohyB_gvh2_ShhXh>AXfOD318ygWv{$M=-~crV z{;>>MquA0}A7jokp^bvEzr-{c^3g(M7ALWk*@?P`Bl7D*0v6d5?O}P0g^npW4giCk zVBpM}kjf!#dF;=|OO_%6Ix=2fPdh8LA)@26;U+9zLE`W8UvzbBzX^o!jeaY z3PI&V0&3o(`JMa5ygdJld%}I5t|$W`Jx!s9YV@DWR0$u+ogqX|Q$8RJp=OO@uhDM53+tmzVE< zX^6nVvwy<;m+~7L0a$rsm|%Amc;O+z6=6ed{l+*0M2BcN2+l)-D5Z{Qn6uTI^-j3_ z$QbP+G-%6)ZYk(pq{aw5E%&%03&v5QhXh)rwwmer5`_J$nhk$MA%>}OV?}7@%9}=!5SDzkS5vuNjbv4fi18WBax8`pwM+6Clom5wF z+8hP+WI+*yJ_i%+QNZe*0i8ief~5$$RcoFssG=(wZgq;#bGpP9R)+eLD2C=mQwV~F z^FD&Ax`4ZL;l0cCcPk7wmhr~gkaUkJMq}(hMRoByv1G$={zKQU857@c1uani+)4wF zCIpMH9EQ_DgRJA8d58{d#lJ68+G-0bsfe!mcC?GJF;7mfJ8^@{nISAS58*_Ib<%Fh zKPqsbts59%gtO+W7P|~YF&xl<@v-^?CYVFsV;%^Gm}1Eahw_POFk75(=Me{|5y3Yf zdP(8WnV&!eGPinaNjpC(625Ui!O7?f{(-pdhSB&6M+VKXR~L0tsCPmwW=K?_UAuDp zRZEZiw723dT@p;WPs!S|scp4Pu#JPU!vz| zg72%iK9Pe+zq@qgaf-0_Te)E--7~F&DKrHe5Qb>lFChGoMk?~D+>#n zWUH$9W7cpyF$>c?BupQI^p8qVaZ75#QH6yu(44|CIc>iy@cAX^8P>;`l0;2Zl|G|q zpRv9Rw#^gSArGabmsjQASG^dP_dHeBOaMv=b&9H}q9;{zL!VLiV1`{Ms6dhO`qZYJ zv#}ZHdCf|0U-AUMJUC6XnE_l~(W@_smVU+kR6%%Ycd)mi9h}03N}%XL%d)9zu4#b4 zDT^VM5RPee4v~MR<-3caMG{6??kdz|O^x)rpnb3Pjo|grn2M~{2TYT!z_lR>5leYkp5r8D;!x!Wi_lvn@!x}SXKIN;EMTMguw@T71kQffZfrreM14PY zv;8Qpd6RGy)U`)b))amJIH!3tX}nCv-TPspZto-k(X1G4>mS3SvL& ztajKZe%a3bzyJ0h=xc!H_c^@UnFYM3!usrFfb4LO?1e!Q*Leoo@+-7Kg+gnZNq8`L zqAl5|jXXe!NEIXrz#pw8yy$X5hY&a`@}5U-H7U)p|}w(0I?)N zmL-UPlmNmzk|uiyrh5XUL_>S*R}F*2&5{HHtK@Jr$90fxIwiwcI!!uh?}oU~DgmeI z4HN8x)x#~>-dK0`H5@~MdoaGCjR#Pr4HG}36=v_#8I}Vzn1XCP{Q@}Hm|3uQYb|xM zA0nt}om1JuZt}W^LHUp%nsR9tLxpk}aSC@mi$`Q%d3|X5dfUm_oKX8l5BOE!4^+ZaJE9Ht`)mPy z#l{@NggVVSjMHGl(itQw8cK5pf(L(=1pZ{j`4cFJqczkSB$k0i{c9X`MtfaZ^1Q)B zds#;7MR*+z6IsU>yX(}WQk?!^05TY|ck@#k+9@BXzkC!;o##BJimjR8kv6%t-_}$qfb?>hLTVjV zg3M(I=mnEnCyEj_02h{`>Z&^sEpnO1Sdk!MsuvL4I&=f1cNN2EWQb$RcL?N^KvAXD zJ%!I%l8uSw55V}6W`2@=X$tcU7SZkg*zgfG$GA}ESlwq_eIHy=cN%dOM3ZNh8U~sU zjiE3o0xh1Q=_%EB*zY1&V@IVnsRwkV+IV<6SS02aN*egdcuLHZyoDEzagt4;eLc;s^0Q8LvajVe(2Fi_{7iVZQf;$t z&`-P7;p8hW3dg~$B(kaPLjZzpz@YVelBdu?d)YKN;Y>Drhkj-rz`kk6@_aT8{Q$9< z;?h)MEYS}$fb>n;*g}5le}#_b>rp=bC}txBX|+}{lOgeMaZi1OlBA2KA!14LHlftc zgVj637D|GpDw1N>`pF2qsVkDTt|;%8(!&JEV1&};K)nq-b*L|V7$DEjN{V7D^aW9L z5mCr}y0obs1QWL+$njLsXAfcoQxe*S7?ZeUeB^uk? zS2n*6vM*$#UxFxICczgLDER{Dd|4f=I1IVfg3mt5--;}gzlO3SoShE#S}e#|$x z<;;!ku}YhJx^Wl|LqyFNDtM42zr|n1!E_9Y%TVaqpFhyG-Im;71380Pa%+ zWa(U7vNkKjWU%%W&!?4iBl@?U;=dvNoBej@cwdIIS|GeNf>XmVgR}T`21UGtUYHO} zTV^Tr!e&h5e%ctcG!R<69HwZ?rPx5BUKk67l8Q&cYD>#YC#&pKTq85GZ08s z3{x~js0bK!!OOXzNF9Q=NgX8zY;oRa*!oW=_Vzdi#gA-sAA5nf6d8(7>z zlU!LhjUE6I1YWS$mj(}z7E0ScUH3K~W8w@eR~pCBRd{_e<*q`=?9TGcZ=Zu+U*-5l zIqPQbkCV95L@^~nw(44sUEDW7on4;);(qzJ_wU>uI~oR-A*(xtX_J5_TBycGBhtZ? zFgqKQk|1p5M@yJp$=xO)PS`HxwSwI30*Ymdn!xWLMziitrGvsHH}>a?Wp|?cexjje zKWh@qi%7O*8xM^4de{!4U}=Ke>&&BFRaWl|+;)&u)phiGGNWpWiX#A+T0N@410<*T zeG;Hn!1=d+f+m5VabXvC4l3k&1%fAG@w*jsB%lE~I{>I}bQrs$4$x`I8|GfFqsp%^ zDS00F5m*8QofQy_{FDx_#!(;HZCsinzfR}F#5b@Ah~dcGEjT3cOAoWVbP*@zbU|uM z5IbZUg~YB*@!N>$Nhk5^4CJp*yHm`lX~{T$FR*p{dYNBH!{~Ze zOq|M@i^6Z1lvc&(Eu$tb3TRanwIP{v(T%dfc>@DM5E}g_J!}wFwRxg(YlF@-Pti=L zmS#|M=gKua)bwO`o>lJs>28SL=h?}1mD2VRu+@P6FaX`u8cuv7N-ac48ZfV7LR>NmCpP z_@)%Cf+*=aS_L_RezYQLEQrQac6`$Z9#u9Q^l9m!Fbs$js;qa~lJ+I?CNDyQ*S1re z8cNG4K9xJeKDE(!U3N63HeOwGOv`f2Y9ds73QSeWJcp3(&zk3LEV zxEIGSxHPG#w__TN7z48gw?k* z465UNLSwVpKylGSg$br7d!AmC*rKB9o-3{^D`A_pruTI3Ofu&eOJclw=UI&Jnlig2 zTO+DU!-bz{drHIhitJ*xh7l}0TPRKaMONCLW4iT;DT1b0w(c5LS;te7O5O*7YO$BLTAzgneo{1~3e&}m;LRtm31&0+ zm!+Xx2D9Kg@#oN=D?7ro21LHUvF~RbKKa6%jU9^D*{Ud0AeieOB*O&opm$AHQW7u; zgc!k-qM22rfQ$TWnPBeRy7?$pB~um%3CwPzO)w3GgwJ6YPC|5_t1-+Vm3lUztx%@{l%!6} zgTjDo)8#ec=?n(FFDKYonlLPVxJ%A4avC(Oi5Mf_%GzcSr#4OEcn(J{?1>57nWw?* zD>RM$IlhG!w0Rrt_$nhpa1p0z2#SsX4W%Wtnk4`pXHd2VNT6-Hq0M(bCXmU|65@z2 zT?CFRHX$^(Ej~91Mg&*jI#3T_{emp_eIvo;% zhH8d|=QGE(KD{|~x@Faqw?1uhJP8Q7g+cH<5=wlLv31ue)quVHgc2PQLlY6X(#r z3!XU^b2P{EE>z_-%dDj%Ukx zRJxyEz(=C^XNzcp;+CidP@u47Rr8>T8J#(6)8K zEd^~$Lbl+8wUA{GmxS!!$D7L&usV1c6-5gSquqPbePV02a}hEq?{ zY_#bGM>cF4SZ}lG3#)a5+P4|552SWvreWChcLvRq+4MUX1Ut9sWkYp%!|RisQahEX z#M1JM-68lAz3+vg&wyHyAMDx#4lp!cu{_VLfmAjPOEv_!dQUs`(4hAe$|8zCByoJT ztEJz*o+LiBttCG$UWd^vj4&4>yF|`~pRD4ix5ZC@YqHD*AqPJiPvZm$LXrPgqF@E-FO8?5dMZsCQn^m1>?-6&w`00YVcrI{6tt) zP!;GLG0LyePflVY6}S-OJue%IrW#;0LSNILUc4VA|L_0)8r*O+61I3fe)siF;xDG* z*dumn008k{Uze`DjmI}B_>@ul+W+arG|LvRPfyb^!Hu7u#ET#z_vlUbe4A$MCknIwDe6S>8=`e=E4+Oy^O}2X8nSk*@vbKGvM$(y{lDPT zgy@$k(2PHG7GaJ+LEeDWJRB!+8ee56<9L1=UtNXcAcqx!l)y8>p;iG>3oa=C7ngWS zHw9}=vn0sIQ~2?U?3egm8U0Lg1A()K2mF?z%<^A&;P62X^$r`$%R8_K>y=#@?5y4q6>Mf7B}8Ona5%iE^mRQ<%Na@%T2?5i#u z<=@Cu$7roh3I(%cTjO3%f2;8)nVQRcIIQ>ajla#Kv}a#u=%%jdYKAJAwZ@u~=+j?EscgR|}zuBLiIglm$DTQR2bJ~CpDrT+?tR=mAmACl(Citf&vNQDi~p@i_XKfDVIz1}@Cov#;}p z!AzECd6I3DMCaHrzC{v`{1H*P$uh!pZRuF%<}nn?_^Xswc4bgBLDa`>IGb^!U<`#` zZR&ATU`K68zuNu3s<->aVMLCDM^oiku~7gf;q;11a)9n z@e*t#nv}t+rS5J6*2~>zfla=!|8~m=`y2V>1m*>BznJImF5P$Fe$;BwYmDdFf@&6Z z(ND6>do)()o2~zySJ@Mm`^@un@)WD(jmJxvrrl)AZ&>4k>$xuOzG6&?j--p#An&s^ z{%nmG&LI3lNw306O$juz?s%qTY^jsnOrUwr6{!)*&T~aHLAEqkfWAe~xgz&thm8{$ z+4F4EgsqozMaWfG(bw<;fIR1lJo0k)I9Ei}1w~V_Z6n;sb43KjGjzkT0MAdEE262q z@&DQT*5$;JZOvDq>qN}#4p$l7FYetPp{v0*w!!#JY}%6-H$XYRWG@gn5fL z|AS`VFVyC@ThC<>b2Djq9i-9odalTey!^KF7D6lJyk+xVG=d3vhe^(3LOPDs`C5vC z1Q!y;!Dxhi_@0M-nWHeUod`-90k8q7#DHZeAr)+Y6`ldzQccdT;7;^2_5d&tRu5^3 z`?*PcMw8(UQJ~F&t4h!WM%Rs{+VYfly($(7tJ`I7=!Ud1j+a~zeRz}EgO|6VV zMmHs^1!xQ7nYy12d3Xj?Lhu?Nf~UP1uOTTsXL5xjTb`0+QPc7go~VdKMO;`Y@J~W|xvjJc zuR#lfMoCOTiF_Tek+7!*No+td<9=Yg3eAWz%K?TYhgT5(GTCb6`t8F@2` zKvsUx^w`kh2+eY;iI(mA^}IKn&81D5B_n3dwyU}V%S)yxty6xU5YVST99g;c+b{-j zA-;}dDb;4B3qxxd%~Bi;93QHoxuJurKHlJf;8JcQ`;%wGJA1Q>I9|XtaKN&m*@?o#Dq9YwuK&ant!H6 zRiUaMhgL~Bua=NfKS4UWchC6^=%r(qYbxy2erxjLs7RY5}>-Yd}SPyq1V^ zLO5xP`)I9@B`~!@)QC2Fzx0pt?C352rNqlpF;q; z3YT0PdCtMEtrv`@9DRGhuk@d{zX&yd;AK|2$e2oN-*p1t0r7{A#*wf=A_k7ak)#-b zlZVRfD=V6=GN5Oh|AV>zNl5-sxQS;4F-7>X&# zdGh=5(+)yuyJzsSCS&rFTFA6U(Ga>}EC~aaR@FsC#FMcWtIFR_2xu1!-fehXkj~9a zby_6mkp&jVGpO}$hwdmwmgEzIV>?Ec*T%N!nPIZ4U94Pn+|=YByB;n~oM7p|`4Bl? z_iN&YP~jA%R7F<4V-0a?vOZ{MRte6~pdj#tW204_I{|{E_%ZZ^jZ8>ShOJC+EFkp` zbUE0P$Ut>Q;1B2pNvZb;my#Y5dU$twSnVQN63N#W@qH@G8+=koYzr9D>aq3^{iYtR zEHMKiPZ7b-Hw!qh`g8h)a_9RcY>@+O6E3)Z6o+FQlDS0(>rC3bDUsmYHIskAQEGHh zE?Xma-vyW7KF92LL-^bY>~e4HA~s(}Qwte`|Hl3(r?bLlOI2?8C+RsiQ>!pC_J0bQ6y@tCYz8cg}}SM+XSFlhEZ6mU;=Q4p@_P^gm-Z~FH-^s`3DOqAtAk&pu0XGy6gF6TV5&u zFt&>(*e*AY36xaQ|Llj@s-%F=hX;;?OIHFs$y@-t4;ATFRAM! zqFi~X@>5*hZ&BQT&{O#f75DAdb48Aob-ft)zLJ1Afsv$T^kBC9L+%Qpl^vxO0qMHB zT+BzzY9g)46k#@mfR+R_Ey5x)%ef5>wHyx68kVM^i;Hc=K`C@bK^P~vAKMuvsTP#{L}nY6rfLOe=VM?S3;|d`{)W^Fny3?>{{ui5&3$L&lTjob&5E6&mVn zh!MDL$MKg1eUPCwaXNEY?tbagN2Yv?emr(OZ}t@m`B=!pEd|}ATQ`cvPQnp7ZZz_& z8P0^^r#M?D3^6telBwC24+nZK^a$zM#vKQiB*~fqh{0&TbP;?lxzKfrB@BERa>ttC z^S;buCOA^mpWB_`qq)V&;QkuCh2u?*X4GQL4&g0?x2&i5v8HG!B2Ng25YVnGe)BAt z;VjYhq8RGD4QEMyDAxxBzcVfMf&DJTPA9Kv~ZLM z6r3B|kfO6YE>s&^y$KnU6?vstqMTt2L!|h;caCgA!o@f4X%u-)SE)jQ^L1nZp|sDY zFNhk$3C3%n5aLuMw1Ng9(T2z<1zHglQ&UAPkF{oGS~o!neL^d;$na+Ve2LHsfmOeY z#@Nj1ZquUvo08_1jAk_^6ZvFs(@nfBtDAEy zIjM(duGxCAdYIVz2+M25|Nhs1M=x%R3>;!>$Ll;;cI?fvUeg`o1aW_N z*6%Mj+V#!1@cM&0J_&4&a9Z!c?*)h{W9Lo6tg9E81<(02&iifonCGV)-gCO(%74nK zzb>8ha4k6>$Y%P$=M51)X4ub7`D$%glqFT9=yh^6J+BStuMll`M=d9oH8hElidHty zi;{tX>q}b6+edlLbUgyfsIi2AwvK=@{5@IwEt9?H9#SY=#Li!mS}zg#c8fBsPDRh= zm)W{;uFjvbBWw8AH$Ve8;m)j9{Fm=w{RvyN_{i#|v1uYLZBgi?yF2T&ntK3_rZdJ^ znjPn!f2E$ORB1<=`NZwKyb-sISiz0(IYl5E4zk9=7fE=#7IXDL)13v=bhmgk5B6)murnCdfRF zcm-5b_1vz5dew%%55z3248 z{&w0jA zi8BkvvrzzcH%9&>IiCk^vW;I7=DTo$Y;CI&{?`zSRSXLGJXiBcL1I-!5jP(HPx#~x z!n$SIlz6cafx^;A%+ksdiICa<^CoiO{F4ai{fGfr$@is(6ikhySfP+EqR3iEIpk-T z8_#vh(@DO}!cN$DzD!ycb&Y1=XJ3V0eddgh&*%}1g3K+mu-OHTVRTcL$n3qR1@e*e zWm1NuNh)kuxG>L`$x*5*s?@ueL#A1Zrg@r{o|e@m2{YI2iX_Y=2{S)u!c39jB$G1> zG0{9nDY7X-xzuNc9!Z$_y@p3o2Yzc9JFl{eDXf#qWaW~5m-3P}WtNN>HCwOfiXzf# zwL)U}A9t7$TG>5X;bdM@7`<=^h2(=InG)cb2(uvs^jw6-ayhr*$YG-iGg&OZU)H@S z+MqOUtsEm{ZxQDFlz&fIZ{9qVv=heJkvEGho=3Ka2Y~Ni|M9?Z*3vk>8D@81a5T!Eu&6 zC;293?6@Cz^Py5$^Nb+K8vP2Efb43rtDkel@S?#|IHBN1PxlF}5DD-rB|tV?^~?Hu zS~nrl*?(akYk`v_-Y@_YLLBI1C%(+J6-}p1VVx)rLMxw~R%n?LRn1uEWVb*ouc?TH zfIbBQiL4>323PPLFq+Bnx>(3WO>7K8Kv>t=95O}VDN5x4u1G8tLTRtaI-a3e2>^;j zFCw(^GOaL@pi+FXa0}1Ss>vh(v_MP0krNAAkvLj0mZgL;w35F#X%jFjaigXap4D@IdPol)?t5?UdQ^drMS z`~u6I;#0eLp5mqF#NgL;N|qguEiYGM7rT%${{WZ8SqZ>3Y;{b5Ng~`r(kqcA0Xc)XG6Ivm(vODVRH53Z6a{Re#xn7i@C{m6Z zI+phgsv{{q6_lnHMtG#<%KO%6;_z=6{Xc#$ z4r{APt<)X+Nu9QJB(q}bn#`{Qn;_iwlS^hnW(DO5#D?QET{ftE3J6uAcwFQt%N|Tw zq%!9$gn)>+{s2;-Hn#gE&xs&q<-oypzQA&_qNFNIr_`Py;n^Pd<}z>;22dU>LBoU8 zw4o#cNMxvbh@`Ic=S6&|_JTBe zno)`*Pb%<MTBgVTp~G_zAxtzr)!L&X$6!X zq6A(M={0g{5Lvl~f|9D{8$z~mI%4;lv~d)-%JN29G2}%bz*}_tAM^qILfwALk9TBM zVig9)n4uLxHgwj&S;{kZakBjLreu2;8eiVtgn&r!)(3NxWb){|=o5N@_P1pGf4wnJ zQ1!IgP)ht-NrFUGR%DY|=lJ3~xk>&C;U+sOjznIUHFd2rLWF>bIND}*{I(=PRX+}` z1sdSO^=$`379uAfKb({V1B|Zc40CW@KsHR>xSuH@xGeRR9F(M~gtEW&zoR6jQ0WAp z$}Dgat5RP;7b!4ejhq%=OHuG1DJ@u2&;(OWk2nZxA*|(lgQEpOP$&+@m?0q6phQl@ zQH;-eLI|x8G4ye*f@e}%B;5by%oRAn#ZSpv!BK+7sKsJNyg^ffs4uzjip};DgM-Nq z{J7j2NNR&=>t$8f4XwcIf82#iC~XH_s0uGCx>}$WRxmU}=JF>b2E$XC%6(a`#4t4f zHpm^Jl@F>HY{TP%AZ}(Qxa)UZs5l*^6{r(iF>4Bb#plr&nU~g?P7(B-z=6cH0Gy9T zL6QOsF58yprI5TNWN9sPjTUK^rPj(fp4&TQSA9ATOjDZ7GExx*m8X!THQ1z(ZY+zx_7p~i9j z?O6$aE5gV1sIdVDD>3?BdOXv%?7>{C?l=?IcJOZ^0fA3p=E10-zoTbks1lkR^h;@s z>(H9LyuDPx6t{eVd?!h`zB`2YR}>?nL(APB_j+iR_e)Bt7X+Qs$U|d?u_iYlW;#FA zOQ{Ew6uNF@`0h*dk~*)pWnTQw&T|{P@7M!aPFxEHNzBNaMK99!cCF#+VW({M!UG(!cgoI7&Zs2<{DokAbc|+ zpl!t<6xaUK1k%1l`&%;p9}A@AC^|PktGS85$ckz{@h@zIn`EyLZnC4|NZ?hC70tEa zlZ1eXIND-%oDZaZCX6B&Fq+A4Wlk)ED01PcLdS{%9}X<%K^%@6J?dQ|*)xVU_Rukr#wc6UlqFm#ey6pk0IRWX91RMixu zb%JLJJ0bFDg*?(tK@sq3Wg*(Uf!a+d2eqClO=yLPo{uDY{8=BeO9P92w_FDx+cF`$ zD<#{n3fpBVnv>;X0wD0QqrIQ6+4X*5yJYWwTsZ+GwK<0^LvuW@X&@rL(_#B+AP^zH z9VS2cC!xD=C5>c(N~~_6<$T4kCOPq6C6tY0a%f&r4T>pLwG(u~kTrU_(^qVMg2{n+ zb?#q7O7aucA=_do6j2I^3{EHdJgjQ6z6nFec8u+HxZ)L|%z zhPYjpB0wDi)FD6}0@V2~pbjgT3PUjkbSkY=w8Y}pO&SpdsI!rb_o`r+3bjsI`Jdup zc#Gz~xW09o`*th3l)=+18=ZAqhTyB0=a}!!OMakqo*1;&@ zCR^lp(K(tDD9BPp2#65ScZ#Fk1nOA+44;>#N2!=OKL^&S`cdpy9Y}=I!D$OENEzi0 zlOn+BscRK6`QgZ$AqikR?!>_&U^t3rrIFQ3(xxN`nJl1Zo;)A@_Hc%?-$O^}snEkt zp|EfO-`Zb8NKlMSOM>#Tz<6YjZ;y~*7=tzirEspvu!bm5)VitX39S%$@Ui5<2SU$0 z5jVdKLBlDgWE2ewPGlJqX^Jmxb&~l0Q_2b;sZG`nH5pZ53(oI#JgGksK|{!Irw}xP zY0!fCN|8X4>gQP!!E-&|<=H(?U`0OxR>T{E%u4(lFogtGgl10^L`}xoK@h$1aX)gZAGF50sm?FV5k#EMvy!Iku+C2qL^Ocaehz|2q#2|& zaZu~6fJ70~dkKK(0|JO%ShmHL@(%-u7y=-|)V3~wXw^R5X#f!;s2q(JcnyuAAoE_c zp+2f0Y|no&l^a_JAmSBP;5cJFPzVW8`cxKfkydC*6HE!`sm#y{rAe}(o6A!gSX!Ru z6`@#dsL+@pp!^j=K);57+~lto708K}o|4nN?QQ=0biIGwh!Qw_ene^8tKR$Tz6(T{ zRwzQM8}_4*M;&Vpx51?d4lvVwSzwBcC>XR{z(CNZ!fB?SkK7@f=hJZCU$$K~bi8%e zR7#hy9q?I|WykKsSz|LGi&teebsc{b*$kgu6`?iWkd1Y~V}w>dIjyi1O{}D^Xi_S8a8Yib4xb71Da$jiWfxSDnr}8mqvIltM{xz?9icJT0n>4iSd0 zZKmg4JY+KwHTFZPu~>zLQgi$JD>eqSY%qU|rYS1Tt`|-5Ug#6Dt+o|?vf!n;18GTO zDeOf5F7ycjS`-Ln<3J11Fb$o-aORB~GoST@q&UAECkqVAz_Mm_7E0GtO3v4;dVYQ- znW9y&H$U_IV)^%z2ee_Z#?U@cJhT+P6+0SwUbHT_QR@e;?UWkM{n!ni=+7_HQG}N= zi|t5o8ZTixXqsbz^`!uh`9~ae{2t*>?J_-_Zjb z-{=MQ08ZQCElzh^^)<%>E&of&^1NVrHgQ7F8YS#=ltYrRx?oD24)hEc7Dc0ERuEZ9 zfw7Ga7SB~UxJH*oLF57eys~&)NC%848FRnn>*$`dZZ~q`zi3`&c!~Na91|~F=O2@f za@}4Px`oY&51XI#Ovw!MV#inb8yQdxBM2Da0%z@##0dO+Ohrfxh2b!;BKU6`*)#0o z<|%rb)4+F#54#y2|NPc zjlux%_^9`bzBK|!38MLfX#^}2y+K2`7~uzpPu~M}SUvx5hdM+rfE?Pr6(EN>I>Ha& zb8;D@9+o4)??81)?ru0;w7Br>_(2Lk0x3oPm`*PBt&Wp4(>$m->95bfk^UI!aET^K z`%XJp-FMPWdOw~`OstD9L-wdwzP$Jb{$<467GK6pbyWx6@|TnQ=aZC74ZMvX+7G}8 z;ok+veB!KEIGtAkOO}(VBB$sYHe;4DH7_|+gQd{;vY-`sPGq^PpoQRmToL*J5GvpW z!EzivG{zoku*Pxlg7p3Ki)MLlJ6sB>T#FqoKPFOjE?e=xh$SMakh7Jr9*AceuKoE1 zW+dSaS^o|DREW*n-eyv#leH`3T$~=A>q^teS>3xobX-grd+L;nlBS$$#)+Xn<9Wz# zO}u~8O^e>OgU$>|t}sX>T{N<>aRY|TIoiCq5or-Is1jWdjI$tp_oakXiN{s#aQ~lQ z;4dS>JcOWvME7GWbdaV}^%FHGp1%p_Z`$)W{&|r_*3A@}3Bt z90~fL0`&gN2LJqYH0oY0rt?}5lt~NA_5RMNC`|ex&y0?r1>~@{_vb`d_esHYxd0o zJNf`x{z!)U4PT`hexDmH+TvhzAngmNVG2`tz|iPzACLP$koS4?>G2!Vv7Lv5h2H(g z#Esmx>$&ml0KfH|KZa584G8-iezt>zx|3Gu_uI$`LH44DgSO-c3XS;dUhH9JI1YyC*X9%V4XuFth&X}eE$8r=8@|n{2aD_cU9h!X``J$B zmsfPL{^Z~r7ab(4m%Y7sY4Rb{bJ12fWZXaDV>X)KkQ&sbS{l|m; z2l}J@Ayaquv|GJCx)j8^(({DYF?B&{LFG^#G#`#nZVw;$=3#$w$Dc8W)J5a^GUa5$032w+wV%gK_qp7M_r)RaJUmTXBw_Iw9lAE z=QO_4_y^sTN7}eKYpE*Vc7=AGi)O(Q+mo;B)C?IFCyzb;xTD>8$0v6a`&yFOWv>^P zXZJT#|B=_jo?nTNnh$4Dy=xp-o1#9{FD^CfVJbH6eF^QQ+i2LR$qsWhJa^PnZhYUG zG~;XWZsOkcuAB`9HS>P@sMPx7J$=$TZ**@Ct?7e%*L3&psKd#q66q~>ShKFF z){N>K*xtz7B#-uglx%Txex-#eqgXVuyFSoi6Ds{6*4=gh< zI<5O&qh+hhUK>|YRJj>l-)aMB?lN#6V_AZ$2}o@5gF|@A|YbKC9fzt(b01?`y|b zTElH#pV0A*qym2iKu>Hyl*ET;HYIm&;zg z;OOk?#CEllc4e=(cRw1nsujP^4Pt4Md`CeNHZ?9^{qbp^6#L3iPP?pQ_ z`AI*jnCBPzG4<$5^0L=q`|!9qtTiWmy({oXtp{ol(e=xrb#u0NZ9Wc;j)#Llnw;!8 zRmr^_c6^l;B;!h*3P%n5_(Hr;kB_Dzb#5MMy$lV^nupR*znAVg=4iqid$i4}v8Pfs zI_`+4+~r>L;ZO=&?#X3+(hcv%M`xYmfp>kT23NLyyLZWlSGV?5KDs@&mc5E#TWgn3L7)NcXnGZ*B`>$#z{4JtPRIU=d5zBx@QkZjj`a|Mr!4XzY;o?le02^ z+Y%oi_))E&dDiJ()27w-^t^tgU)7lg_&zRO`SeQjD25ZLPz53qB ze`vUEv^|EJ|J`E_#W?k|Ws?LxRNABpmL5Yqe+!*TsP zv98`b{KKF+(gW(eeQD{F$-U6HGMYy%OPC(_`@_A=yhfTh5vTX<(>?RhXYV?rD{HFN zZftAZzc}=(qn6C{W7cp~w>fMMD@ZFaggC6;iY?Zh+}7@AeEWjo#a7U+Wn^soZX7*| z;}e=zx{v+xRUA2|&UN|Jo1ISXqpoV5Q`4a|JAPnVW_661?48()r{{j3Kh`VunK^V_ zTMcijXB9cawYkBy$|>jcsNdsiq1rkgsa~~PW{)d5$*3wWr6A^es3;%~mA-Of>1RhL zd+>p)8;YXVGOLBxsrWKu9SJDv_L`?|=mu{eUOnDi0Ox+FUrY_{q^{)F{_LFUm*rNj zSM3tk9w?^pnm~J2GPf(ID|@}xk83wRr)7IpT_k!G9Sr*QT0037XWpB2BZ>P&vB<35Z^Q{<&;Lrl{+A*i-Q5 zmucUPozj1@49)x(*f(K-J^9`F`{~^Gzt13(KSC#eFbWxUqhm zxqxh<_#m+akP!iP1hTpO$N{7IEB+5VM2PE-xbBGSZVOy@3nqZygKH(Z75iGi8ME}j zz^A7tnTr{Ib}~Qcx$Gu`=vhe@xTNN9_UMx`Wmc9|7JJCvF^HZKSw!G0lQ}O;qp{`m zUJ^wA0fXpimJ(%&<3S!3)-7|X{KH}NED58>^hUzyQ>jo?&?rgM1rx(LGYT4GG7?W~ z@=FTZ7T}dWcsx9-iHt-m>lD=ZDRCi7edXOSw~NaJbNhX`LV?yzN@3T@ZcJ!}ggtD* z7#2oc61|IyM%Z2uIh_^8%oCWc#;PnmRXsr)u1`Wlnc!4^=O%NUPwR{p6mH8&+d5=LX_ou8ww#p{E#yZ zZ5@tCaJ()dPm1P=Pm-*QfG=>#el~hN{3g(~wxF6Z$#;JlRX^;{+>v0n~gOVf_ zW8L4?s|@LbP#d3Mhem*r1zSt5(mFePo{F3YDe{=4Y16f{9b)>~1zqXpVzs2{T3 z()s&vQ`(;Y;(OR`SP%Hg1NtPX#U)AvPuJ#Bi}Q@gu#yDC3m4{YSe92=kr8DW+h$XX zbDYHg^CzShXINVPP^ra5nH6Q8l^Bv*JWDeqwfJXFEpEtYHk5)^EoiL9Yhu1!M_zKK zg7*2C__YM>=gm*FD?I7NJg|6>@F>;(P*4Co^c$JjOZjI z`p3zLzSNjO&0FR^hnSBa&3(>8O7l$eb9rA}H~BfX3`p{GlKh+`KPSo0N%HgOlbF_ZlKxWXuhGx>zzlW5ZqksJswqtSC4+vsL;XVvRCd{H21=K`D}VabKQm` zHbYwoJBQtJ7g5Y5WgTBSm6;{;q1owiJ?^0^o$Q@Wls&65Xc?XIQ9m}qnc5y{-brT1 zUfrG6+e+_Rq^9;^qZi%I^b;lK8R1-ll;De%saIp=6&+{UE8Ow)rMBygjF$0g+%e@# z=SKBxnwqElewtogzmu!o@^!vf4|0Ml(UZPUrl{SNXSdf6k0&!8|GTnRw32_Wbjn9EHnX{l=sZ%{n}n0$N7?#Q+hnqF*%EYQ2T; zQ6T~Pc|NJUK7>_4uN_E!PMnLxxk#Lg#JTu(=OW43zKPHtK~^-xiUCfMJyT|M-lUBL zO82gzJrpa^lq~Tiw1M5e}!ZX z*wH8x!2n4m7J!J9shG4TEK!G<g0xENB;e<|Fc5RE|NK;iwq+JGLEps zEhlp~`I}mIpONVEX7ij-6CXiJquaL%u!a9ojsN|x|Bgylsp)tQ(x8SVCk%sdztjrG zCEM~L3e0%`Q>GLLrJfU`TZc{*Sv{xZ`pa)k`;K2iPadM?r``R&4#QAIoe`fzU+R)6 z%IY%Ias|W4t;4*LaFNf#MSg}tPm6{w^GYGX&5y_05W3sJM2#}XFdDZ`ih<{Olq@p5 zNoa*A^uIu%Z}ySMj+}4;VNY}6K6ETULK5AIL9CZ9AXc#xI7wW1-Fo*;}8E57UOK(lU;Rw2prYC)@z zoWmxQ5F`u=e8vnD4s#5f({E%03ZGcy*(8`G*Te>qD@j(s&1{4&GBl09(~s{Wn`KI> zZXXTV&Q6B~HuFE>fXxtN8JDxu5df-aaT;MF)}ILevU41KqaWNtmlY_Z5bZjvP>_(% zM74?_<^U~o2lLUYgd~WpD1)4p`2iBbi+=y@AFs*(fv|ZHmN*}wUu%aB`x5fC zi!6WS@#I1WgH~MXm&<4^y0cJq7(8KIM7Ggbj?MO6G#6VAhyk=IuPr)jG6uM;_CCAkw=gttF_5A5QIL5j2|e~8kCYi;ZV2(62Q`-#vy6f{}22_+w8$#@aflhN1r#D1z~*@`UQp<*RxKMoh@Ka=DpTj{E$ z$)X9Sxy4q*%Gs*sQhKb|%9b=o>n8zvrmjlszThpk>OM}{%JgW*hZb8s7D=TIB&FB- zv|IK=(&`Bw)L_AZh8o4O2rhARbL(EivqVK#VLe-`tje;iDJBIp>s3}%(^@ZRO$0#| zX>F&QtK4~=s&1n?Iyn9$fhgPP?dd}yGQ)pbgnP8=nUKGF>J$KubE}7 zH`aGP^zTIAp!f_)$>-qb?%dqS@jt)#1t(V+cJ1f`uJDTCH{F2r#@^LFyKh( z>yuX!b<@-am2%$5+mf%!2DH^WWSSq8N~|e%P=f_2ByWck%fHbYWI=%@Rh*O%S!?A{ zMc$3h$r_0xV69^_sg~39-@~e-6VS!d5G_kT9Mr(W7gQoAlhq3-k0^MjHn*!;*duSAs!?afE*EGH57D`*oA4qf7z>8{hPagJ|`p7M1$y?&A&97G$4QpINop$yov1hN5I9&Cr@Bwm9x! z%Bv+>b9VSXU=LEJree~1E{*F=FVur&_oYp@S6sdA0a_e(`xn6Yn~~i5Ttc-qRdKB$ zalb!q#cw(axD|h}!A{uEn<-<1YKw>%(<(!M7&W6u+kr0jdbsH+TZeL|M^jZ`-GjZ{(gjZ_u( zjg$~<&l8%sZ={;eMhZ+*ug`OVjQcbJwf^WNHGv@Oj_Zm;5*NAQJn8N4xXd9Q{EBRU zgGoYm!1ExD7ZudB&(dzXL`P~U?xe3+P4rf1STZEt668HiUO5_WCOAN-718yGU~@Fg z(Qrq^-^FE_V1LZPa9dh*mxzk0Jrx+{(sB@k1&NSG!U*~d-BvhG7#}K@pgXn?Z*2*O zs93V3E995nTzK+w7fK^z-R2LYciPH;%DV;Gm$=w(NGT65b62@h_%-9*#0 znon?khPtNnXx5JAXr9c{oS}~w7Mdmj>{gNrALp8Es)tq^8u*7jHF%LaN?X(|Q*%X# z_265o`>}(fEL);9D2krj!IQRweEZZ(2~u50QXRg1;@c;_ed-GbVPH}6p^!coj^`~L z5ne!$ei~lW(g@_OsBy>DQD@ym@_Pk@f~ClkD(yip91u1W93VU!ny^ ziXEhA3%=+GTv#|#;+QLISjHjZTlt_DRY1g#Emu^ROtRnAgAR35(`P zt|#cg)K4KSy#5uhe{~p2?b$DX%%m|g2=9C ze|d}ML6~=Yf!;4RmNi+?!QSS4vKpoW7#nzU4E*P${ZAPP|QK`L1+R| zFcn7>xySg~gW@1bvSoqF3>s=8Z~W=ix$C1eDC4Vjvi<`CV?p&KOVZ#`4vg=~_hoyw z;0g*CZVrrZ0OJJX1;@pGT&((vWj|FJG>(foF6OxSFifZENTR0od`hz9xtdK6lep=8 zmbkctzzJeG(HQI}T4YO{zbb+&Xg2mp6|E%Kw*^btQ&ENk*O2=C6Y&U+*iGxBjRR)gE9$3LD8k& zCPVd1M{@+bBh|Z?>4sEyA3q7Hp0J;H0GUUQkHL{#2F16p%ZLXa_v_zjhGyFPw&@Qh zK^!4-gv=50L1+S9@qJg8dhkRR4aIhKxXNwmGeO9UJfmHB@pl|nG#PIhl;JGOE^iHv zhsRY|mgo2)cNgEEK#P*2$+F5T&v18fN4$THb6&u#dyHyWj%pgf(OgoVwdvyp%x(yW zruoE>sPI-U9M4)fz;inObdGWyX6ZD(tnz@O!#Je@2h;Lv6c>vmxc(Zaak&aKcsS6g z8KS6I`w$KXjm-pyNV~7trbOS$rTtk;JCSsb65FDokPVf;H}s#2#_5X&M~OFtLswK= z(j6X~_UwgYLz!FfI6Ok%16guR!`l<=#nE6h!68y@sjh1XPnBuHrTW1JJ7GWX=t6w^ z-TUN9UuB0Q#E!VQvZ@*a_ai=gBPfp4k;D;V=Y&tvJyp^iE*#HYIOJDhmSk0qBXoty zc(W8`QwkKBU1^{q#gF*aB3R%Y)vm<{Ozl@~)72cs-OZpJKQ_UWKizcdj%5hsyP41 z;b8|JN}6T4F0Yi$;o(SBMhb_AU3h4^lFECqaOrpuc(|Kq+CD_tbp>IcmgexVnc$Gb z72AT*WqZzJ+}DAQ@2clnx}!=H%C$@FZMo95Cpu|JPNp=5iK?GjxgJ=^#mP zgeKP;f;t}#R4a;a>84O$<)Hc=RDmq$y5d-SNXk{g@u`9d`+4UQLVnEQb8q{pNU{b! zSGc4+Yop1N!*2+O>KVQ%SzI`ty>Ni9_1E~7AOBz*qQRh0cYR$JEM8ag9;Mk3MAP6g zHXIb*1cgo#69yXNu;Mi)dr~8)iYECy{gnem4iIk&ho&i_!*hE$KqLUMpymVpa&hr# zjB@;+6)x`3muEOcRCG&`E#8;s{^VKkMalI0eQCKoKX-`uC529vMUY(J1VfJjJ1aR% z>~5}fOIGY5{dlM~)ub(jlv!<>@A`obc?WV?*-K zCeOs+kVW`slHBAt(RUPI?U&EiOw*8bWz9)IDofTSL+o)}?_!JNx_2nY)t6cvw-}e# z32w-65tmgXW$gZ%Y^rvXY>F{xjay%Phu0E~5fBE4)yQ%5DY(RTj)QMZ=e+rM`^(!g zvOc(I{N?RiZ+vn7@xvJX^6^)6@e%pwe?=F+c<)F5v0;5~tb{2GhNld%jHV}x&PJkl z?`$FZyldGi1rsUrFighWIzHWWs-ld`-ABodTV3jFBU2vWJp2R7! z&5%M>|M9s>$OZV0Cl;m_hbbF4j9xo1fw|3)fxoY_3eAa7%n0kCd0d1+5>`o2;)uc< zDhepfvOJ1Ya zxcr=ztSMlS6dB6lFY;x#eNkti$uhVu&?1Y|5|tT!7wkglRwK;vlzfQ1t&#ULG^t7o z>jDIljAHUXHiCNhK|i>NzvHBt<223-@~#6YzT+Zm9L=?(6NE+Y!lB`v> zMDY~CJAxdes(=;Gh(PrO9$#Uym7kFx@My{>oJ(BU4{S@Jh>T?RWJXvZQ0jIkMd+pCYBMywb8H) zQQV@eh^jXvJAo^1SY58T4^5=n_$tc5lZ6Q9WcfAK+!F$2sw5#gx1#zrM~gh8r>6h{ zvjt{wXN+?YwRx7tWtNZ7ub_@sTDXl6+4J=mo;7f(`+2}!1pv3-fBX9vkX~S!@2mg( z{@Xu5-xHg#zV`h)AhiIR!d#;yBhM2iUSmQslnH$6bV@!(upkb?*=ilu31^pDfX!i%F)7B@?C^=_YMKl~JK0=5Bg93x; z(Y$Or%q`QJT%)XnuiAW{!0&TrqX~`S?Q}G8NxyWCgB0L1Axt?V%R^UaQeBSFMMfU{ z&Yr9JD$F7<^2{DL89qQng2zL4wP90G^vy)cbjSmkQWglaf)?aUS|3@)WM$chCPDZO z_z={~oXiI@&aa0kdqtB?RofTrxk=eSUtiSyxd$b|c70LpIa*{#(F{u+ut$=0MWjI$ zH5T{1cwAJ5xtV3Voq&9hJrB6<{5>Kpi_!$ zS}ucLW>U-4@8i28B+(F^D2uM|IchIjTXihYhf+m5sIyxD9~|p82YZi-b)Q!7?+9iO zaCBRDxZd~^*{sVu_w%YnWYT;rfxMS#K?$9L`AU@cHtbWgbdm)*z*A6QfOQDCB7pX9 zI4pnv?f((D&BUwGaC9?F5mgbwLHG~~HJ6wkJ7}`KdGS6@3G7SI_|v)Xk9W<^adgY| zk81tVOL1h9g||L^VqEa?!g?*5!k_JWzCWGXa-P}(?pz;HbF_n93Zhi5;^@TIgJ@Iy zJqXL>`iNIX+%9iGMsF~;;u=C?o)86R$KJ1ko zb>{PWvv*r{Wm8ak6%`~&(iBHnIjkuKZWa2^z1!ToeFsT(viTgRG#VnS;7omAFqds; zvi)c~g9-b2^R#J@JpP{rQ8n`by>%RvEy{Qv{})CtUwo8b+;DCl)0)v3U*J81|}^DNizsm3ML>6(kmJLnVyW)2Oe~Eqb`XzD|yAT z4PT(@yrtw7$&_r#f^4L%fTgA6JyFzYiWpb&T*?2C6xl4Ei3w5@(bScgRoL9`zy0?` zmL{jI1fIIaZm$D1hmqUT>U3947g78ibGv0B=|Z#9Bt#!C}v)w~olsjr{T_qb!y&oE@Yr5j={<=U= zYyQopj{CH^*jD46$GIBkYJ30}pYMjchb@A)-R>SWto*c!)g7}~T`+s$EX(TTC~&Qj zn}iy_RF{|rg}#*E+vr2a;zHlAqCyFwM##-Ts)~#`9;sH|rHchgv2^1=8DTTUh>;17 zWY4)ZF?+FqRg(7@$|GEyP1X~ANvBy}R*+|%B-dy3iH`&vzPgy~YF2>Vr& zUEJC=4uZ{^Zn?JD%d!$c)lRJsDR+IwIKiE3gP8h_ZPQr>us{xXfYRA1CzS0gAe}=KB(w{=tFUb@SZn-cPh{+_w}8 ze32DsHjVKmrR)r%jo5)gMT_;65Rw%TQ&ipzBRZ!mg;TQ35D?1>>5$J<%q25#0y5S^ zM?neIgm#)VL(ttvGimo1y-?5Fc~wyD3AHZ?rE@6QR7Y_gFB1+iT9P41rrNJWv#}1) zcKfse4)Yz#kR6I9$+9C$L#ThtIzYTk_>b;THd6Y?rUT;ddiIyMUq5|5|8U{2D@L-S zaKuD3CD{h(3SDz0$YIGGDdR(LnXPzE?d`1>M>!x#!Ngh9a^j6EDjKt&x%(jbn4JwPj=gkQ;D zFMon~**O6xBlHgHDuSmRe-9uI3qVQZgQW4~;H?}ay1HfeDtAQQzavsGL|4;X zZsxg}e<(BGuR2S1c=JVhjb7JUtw5LYWI`S)WUpuC-aMja7%;TJxYwud0qAKl&`*une|sBRfC}k7hKF znR$^Iks~~f)4C8|rzA4q2j~MB(bUQ&CA!uSHOL__1diTE$ciHR4yYW=@C?Lx7ntFf ze!2>L?nND}|DsvoR@@SzK~3<~C3!=H%YY0zA`jBEH`Wn_Cb_}qrg1)Rilu~P9|9Ga z2k0ir_AF8F_lB2jMb_0`CNtMfTsP75)S_apY{qz#po$O_4c}I?y6@%5z^$3GC?LN~OZU&wWm!c#NxW+Ll~qPU*l%fiqsTe2i=tp9@8-w6 z!O%}-L|Ir#K)1B8&yCBf-bL0(9$&^OHG_3*e(f0_HO3G=Sfz2uJ~hGR64!m6pejWL zwztW|oW~*Ahmt|$SpsEWz^_lXvN7$Zfr>Ji#7SJR6qe#T4QDwKl7co~!^w1nXu3Y#p($S0F29wak}sOH`#-Ir1{>XoQm=jB@NYF{p~25(PTLdF z3~-v4I?2jeL+7HpBwqnWcR2k7r(m!kj0u{C#TpL65`rYimIXZ6 z=3q&e2ygF9v3T75w|uGq<4~c)wz_Uvo>iAKIHRX$7PMbqN?-xxp^eAqE;a9qpeV={ zV%!$Q5)ybp@I;j_@)&mC;3w~JW^2kYVNDlQ>(RjfzV^9qw%3q2!1ZZ$zFZQ>lR(sJ z4$-YNvUr3nL|1@CYO*fn%RDCNCat@jwQBE$!6GhUF9S}Ppol2|gAU6jJ?5Y>y0r#^ z6&?asd|g+?4I%yyVJ^9{IUZ%xI%H@?QxmXG@jF4-5Ja6`16NXo)8rf$#L_{F)gp%A zAULU8GbBL!m5HPQNg1NHl$`;#UcTxuN`shE!sql3v@2bQ3gPcKq&S_1?gvScAsQC2 zVdwJ)IN?Z%Xfe~xynu8M1UWt<^o9B$yR+Lqqa2rcjA^)k`xtN)B7Y9PQKEtCvN;8G z`XVo^Qv984oM4Bsa+$6gw1StE`X5%uI;^F7drSq{h)n4T59{>{l?cKr3D(pju-PSA-GC14kzrLa z!*qn{YQC~|m$u7WcOK`PmRl~@4Q*Ug`pBjO;tz@8t1Sx)lyF#(Xn`Bg%vBt&4v-;v zsX$3w49W{vMMY3ex9`ZeWnB=&t|Pz4taYlOp!wE1(xJ`4oyQ+1lG=Q5v;i>j*+o*< zi+q4X?gE}wRK+;H1e6msJ`poB zQGfs}Jf}_&s!a$v_t4}R7^JHQPjx}hnfkxL31$KLuzCb?&lfG3puzp{*YCgm_iLhT z%Zir$s=e+MSl347z2$&AKZlIi+R@%-kvhq?%E3tnE{v8~4GNvph%s;tub0B3TD~k> zdN)UXBXr`1hZ~+J)+=x-)eeKnaT5sB3PT+N!W2Q&O^H^oY;WQOPZd3{TONjkFfI!R zDGPujpqgR=vDA184p8u-OfZ@xS@?~X8X!BF#)*`rBV-k|(>n|ZKr5OiSwS?9Q?h-@ z0~!E31zWQ!1VPWIciD4S)C9fX{p_%5mmM>>8g{m>xxTLXBKVm0xvP8D{`vYu?$1r7 z3Yw}DQVpO!KU?Q#>$jc`h(9Fn5FI}!j1iMBtJ94k^5+tl(5APw_4xb0{QlcNR+|ob zo>tVYd6-8Y=XsV7(kp_gsh09Moc#mGV2#@3$6${!7+@Q~59uX_6LN?Og&;6?!nEq8 z2Ji&js8BYF?q^wXDL9>JcD%F%C-5jsWg}l%!a?v9n$J;wW*@6NQM1#qCI}7o$6HeI zS2_6WFgOC5$j!cJ&>a0baepO0?C+O=oW3@1`kLimf%{tlbYGwZE`joCL>?eiU_17j zEHE-UoM3ZZ0CsWJcmO;=gW_ogSriS|9AfABan$|Wd08jKQ|>^0Zs)n39~eVteg1I% z;q4#M_*=}XtB=R;&|h#KPwUX;5jy`c_M9)Dy?+{@F;qcTU3(DEdXnnW(iIPEtW|ET zA8|0iAz+4~@cf|ACq?vZP4jz)?t)?~zN)TO8q7zNBxUpYx~q%2%{k@{9P{YRv9s}1 ztrH%5P@B(SAeEv{d4K?79OPsiGfcY_w?e1tP@_CR^m8oj<3`ESX_h3}56OQ$ZfU zdB)&#XQ{14V1CD!OFau{QiRh|U^yB|R8ymtxrtsz6}j&i%er+DkQYj)b1M{SvgVLy zs$sS|ti>4`nY5Bog&LA5x+NMh;Gnw^F=rbYD>LtF|9tCVr`DoGJ6y|zD(IU~kY3z2 zi@J-<+b`C>_U*FX<<2($+bD&zhg)$>_t>?3ilzW`zaPa|VD~{H;vh`zsNzk0{~Tj_ z=z}8$hlOE$K~C$!D4-OOZ)9*5-I}B4Ug|G_$DSaZ4S|Dl4UDJ{FW4P#Uidv?%c$L=*y85=6Wm~ivSJ4eWUJi-!3lvZL%+~F zsz0g=I=J=YqD`Mkz+;`+W5^PX0fsXGKfNsDqL3=Pn_pDZeq*}GlG+@rxNPN$T_4oy zujwc^)D)1l0$HmMN^oDCHH!0@b=GV!ngy}`(n|~3E3+&`y`2?3S$^JvakYUp2!k#7 zDBF=bvdu*Gvchgny%AJ^!MGH~^LA>OKV>|39Ph8ISi(HCSTQcj8zxZ@cPd=@=N-zW zGew&5!U7G2LLz?)7?8FHLq4|a6tZ-v&E5lG2ev1K46_``3*s;E$U{zAOGw2kqA-Nz z9ycQZAlqkQ%+A`IK?3wF2?Kd-4X@WSd@M*0+?Gr#f7^&=|Bn9(lD>|^ZFh5mo_AH2 z1`pUHWmkz8k+tdWF?;_uynSAzW@8%L9jJ(oDUKS*c5v6Rf_^i+rRd#3=AdqKp%SKt z?SMPMWmVh1fHIZ`#WvwsfI6n*hRfYXCj%7BGQI{#x0?A{SL}Pk^?CDCReeq>YcE?V zF6#nL!h>1Ab~iO=mPd#UHnl=Cu zt{{eevRQplRRe7A^6TxDI7>L1KbzQ9g$+N0PAtlHmPi(QwP&`VCx(aQR8<*t&aRVC zuqA`0wLe1xQ`-|Ap9ZM~aXj&XZ&L=Bm(sVT?Lqafy+B{8dDAs`qJ&Pex#=3PPEfn~ zwPM0PtM)px7SGP<2Oj|7=jT#;&0#}4J)>7Nli664a9n#~X)Yho zpClX!qOM*%CHI{8z21|rrrYRx3Pb{ch*GgQIAIq;N(hJ~&XxPbWLw(n>Lr1L{}k`1 z&C@w4r)b2tn`^wycHxvF)1A-VmqAKGbY9BA&WjC_*+#Nq5*v9sb1E#=WOFHKP>YXn zljU(?F!V+;k%EZw#8`tPhS>(KKUN`OJ~DtIQ)HW!o#V{0kz|Tn3!fi$hg&L9H$2x- z%}$|zNMaflGe7rj5#OuNc5nMIk*HASH#NmKwEwpsMs_?F0PzWk>PrU7X7rn1;u_bRH9A>ODE?I(Y)+Zav|HGh#p#-X8$SY5m87f7E3+J zpj*sA@tMBe$8;qf6=SA-HnEBQ1gKtUq@c7q9l` zZHk$E^>DQyFG3lC`8iG}o*dZg&qy$IpZXrtrRdY-$#MGb3ekkzz#YlWh~R;dxTYe{ z+qXap=<@rnK@Zn>_e|~|dn=CT(Kf7QUq>6C; zLofz7f4FQVTPqQ2s2#B0rFX#n4yF^JkyZ+~u`HL3=jvttjfA$CXfJr6={6m&5%k22 zY9Z(XL2RTB&JbYv#O7NnkyW*(HB1bgGFhb2XI;=sd)S~y!f$r8==H)KFlNkBkW&C% z>Vw?EdL*HPmx_SEy2XBld)`A$6k2;8i+Awc|HY9J;AUhOOhHd2p_eKFDZ`?GKV4VJ z$V2OMEZcwy%SE~+aKeWBiWzi2^>j}gyz!HjE|tL1u5II)WJZeS+AJlRXrt&Pn0w-$ zj^w;8UOf1ObjyG*>DPA0JOKr~?c~|3NhGTFh2_KJF@;)W={Ftt&~jhFy@tV@+Se@U zvX;6w#oU{GQhMR~+J202R5OM3KEDjiFT01ej@#Si;}43MeyFDeu~H0SVsNRdhd zpyx#(fO>>Ii{e&RIlW>0~_Oo&vE-rc}q6%b0vY14Dsr1W~#uruFwH26`R+`aGnf?YL_Q=F7kg z#9^+#`V&Faqv17*A6AXsZGhu95Agy1c=Pm+DpnhQw}2Ox$QWu|#~!O`S;Mr(3TFZg zwixo47LNhtCgMvXux>m$CEP1y)(7l0%V<~U=&wq1XM@BlCjYEp&XZ_x2Wz4UeB_?| z{$JO9qUHlZT@B@(0gelu`!S8ouwJ{?wKjlUHkn^R=`s1R<{g!^8G>4u6ucK$8{Nq) zv;#q<70KqELo9c&aNhEf-vGH@k3i|KZr3!j3TFy#cU%;#A!gK~HNbi$4eY`)Sy35Jj}=fr-Eo9MvXxaW1=RpdWTMBL=v;&Yjttl9Pxj!obEh4oH+cz!p=xC5&0j9S}DD(wM>+6 zr}R@$)A&iXfQp9XN-&<*ruqn1)g=z5HD0sr)<`G|0JLdI1@{i}ocO_8BI_x8xswj$ z9^gZ*km!m!D|5nB9s}3oS(96eLX?uCW2+kUC23t`R^QZ*v;JjHO1+r5T`iZb$y>?@ zidk~s500Tv9ej?o>2{iH zJ%F7ofdgl$_>OS0eRy+m82YN~g8L5jYbthlYjqhK#Y zK=-${(Yp=T3@~e()9oFWONaE=6(8 zRSK31-)1Fqj&(Z0kXN)u@zLM6(2Q7RC%{kk&YjssKz9ce(>o_Ltv~k>;BJ^7Q&A&d ziK5h|xqrd1K1il*nmd$b@3#%0%vda0WRPqi?MMr&Xf9d@yLdUOYu4VN>R**~>&n=9 zNQ>I_0Ph7FCF$zBs813E2zcG~L(t{wrHw6Ersx{H8AX|!ae}YVMB$R@U|AuW|Jhoi zU9vzKFHhM&4T%wLXAzS~5qSd}U&hXLv+-b*n3t9Pi63opO=1wQITjzzc{Y<-vLDl%WTEKi*n5xhlzOh8`K!4ghC}v1uES%3a(+Q0 z>Bj?W5~N}T89;RJ6^gBwuFgSfl>|=W|D-pzIN-s6BQqgBEz8;iutByPOfoUi?$b$3 z`&dBO_;+6(&DMAbMh($!1C>g=pfVk%4@klPaCJ-ak2n z5F@2)l0`wYx%i$)$Bli74@zny(Tv}S|0bC0tNQ2da`E${UFdTDr}AjU?j9c$44CHg zPpDkD9D#9_V=0(h(z<$Vc+i)M)8OGN3vFERPe>Z0?v zzjH1&$371wo0xu&%Y4s5xRQ$6$*zZ@F{F<)V@bG9jm5&@4K&zNn|dMhW}7f%M?&HeiLM`t#qLtk^lZLuR!#4UW4=(>hE_ar&mPZM4Zp+wwZl)Ozw z%ZJ)do1bgyYhM0t&87351V*ZKI;B$Ss?~4#k&698f52$J3~3?aNn|7Lf(CG0>-RfV zP2mZ+rI2$=ni5F|=~U-o`t2uGXQGgwVMu8{BzT}kjtVSQp)o!v(-SyK%b9uaS0k|7 zr@;~r9ZvPL{ds)0<)142J>St^9zRVReOq^NOpFUaoEZBoj+RQOT^hE_w`(Tl` zbxVnJW@zrm3O%!(S%aD#){CsFc+L`#D5%G;j=&bM_i67hFeO2NWw!5d@-8c;G(Cb^J}$pIIfqq@ylY)`4jcvyq*Ey!x`^l%t4upc6qp9|ri_O$5D+Xm z+4^>EumD%yJ+CH~(^~poq$^vdK7WT*ul=8`Xo!0<-A}d|sC{R+k>U|y@f%47%n3B8 zK3IGHVdi|o+*(2P=Y-fN_ze0jPNEE=rUO}8zV~7gYLqN9M~SYNil<=OoEp#;EFOHX!LB(NFY3CRU>hg3R8j^uS3`(XAGNB% zN8*`?BGU1KjiUyo$2xbnGC<<`XbfSK`1nuD#ue8?*6^i(nS$eB`ASTTCmiB4T??oA z(uDMa^})v(%_pA;P?D2m7)PZ5g+9{XCK}T+M$!|{z!x&SI3&y!KZ4pVTI%H+LQJr% z2XQDzkTQ`nW-T+iH9?QU-C$&_;k?;7=_Ha^S!?eSYUwpGk&G0>yU`i zY;r?Hm(9OOEj}W+7O)!^=Fig4M^+a$H|x-gqT&oVo_|}}Xf?xL#=|lM5l*q*u)`i_ zU{Pz?^x#|@AJpq&YLZmdkwQw2pyEy#k(-&%oWe8&Gt@Rb&QvW=fNI8Iq%{Brsf`mlK$P;@868VNbD zh59ND^c7R67hr*fR?9BbNCUiM1n6n*$3@?MJpQ-reiC>UD`R2Hs``1X*s6XFDzKEH zX#?Dqs$^O6m=BC7y-;%p$@%&Ba?Hr{FeZR!eJ~JEM#y)SF7M+b5)SWGsL8Vg2B6R26VY4z+n_KVk?b68bDz&&GBWCTH`E>6Ny9(Ehn_iDm?mhA>I&-#% zY?dOyKx4|ezMxn@Xigoun`zeSHXpR0h3{W~C|NI}qMj|fmIq3}=zdO|f{6G@6>&P$!}6KB!2>#v{p$>6${z#Y_Rw zzz;5ex{DGMkRrlI(M92u>w|fV`4)6|O`~&qsz)cGZR6T{P4o8tkcXx&vKx%BU6oGY z-e|*VSV2crPf~7KgAIH7jfe3fy>0RxP2b0>p+j&YF1~oo2VFyhWc#CjJvJ|%Gnp0& zoDzN4@$YFc7bpAOOxnGgjb8#$IZ-W3l*W#9faR>F)0M3U?Zsu7mus~Z@`bHDZ+)g~ zxJ!i~b$;uQVFDQEDQ;vs=4QMVS$JrxMjv7SmVVX@+!qCif$Qk#cK*mR%}q=|LiIy? z0UNC^Dpa%oOTL2qvdSD%`K*mn2=sn(3Z=J{gbpy2kKJa^ea1a>?aF5-B3_FO^mA*J zVRt>&)*fXhLV_*een2s1=b9IJdXZ)UsahvcalM0OcPiL^<}_t!WE0+| zo24T{j5So}!wA6F`FRDh`&zIo;xX=zXA1yu=pic*3HqNpMsn$*iGWBPv%z$f%#ox3yk30{Y<3t1Tg{xeI`XBDe4pWkexu6*- z}g)9Fn%LVhExImyLrFsa;zdkSw8$4 zsjb{dq!xF^FN;kUw!Pzt8B=Kd=pWfOnq%3NhNYTKYb|fHIAo84BMb}RLz0CQn0iG- zM@<&XM)M&GF>X<1L*^S30F6>)MgLnDr!+sN!NWwwGoGr{WP#!JZYNeo00Uc6d#@#3)axvCyzW2{$ z0u6s=e5FoAQw_DxdKvR?3?)UhG2hkd^o3#M$RqB0ruYyv#yTe}e|?Le+OEe2AdVfL zAmXFw+&?3#c4A4X`hRg>7;!S-lR8HLaAUJMjdqK)eQ$BQLjJ$LEmhPI75|uJD;vlx zLKbTxHo&t|v?s3WU4c|C@@b}AtlsyJ(Mok$Wq;&$KKm8wnlEy;!~Ez0YASziyU`){ zBXbu5t{mG)ZJ;YCM}fRa0Z?mOG=J6rzh|7*9784M!QB$KmKLedo-@)9Q0Sy&n4 zW*DAq{$#cE7Yb9P?LhMU{ivELWA>k7jOSCGB{<{{&>-{Pu_n3wHUp&toh{1AA+}DV zWb_{9QX6ij)%M9mdRvXuOzXK1^fzHeL4G7lv+7%Dp&4%%W7Ry|DId#EtMg8?Onm$L zOlmK`UGXOCV6K7q>FRZI>PO;Fr`OMySK1HLdkWm)J08MD9HPRk^iV>kG51y2wGso$ zTD(f6?e!8pM@UtrS64`dF$Jx#{w!F_VF<}Ui#HuP{hhUqR{!=QJIy`L&I#ha3v#4% z7A#H=#+~H z%9{KD!2{?WJiKoFLs~pf;GtKag~aSCTaYt+3AvMx;Q{B%CLX}VeZismi50M^VPLO* zY6cgD-_fKPG7f^GiDK@V;ancC5T0~F?%GDT{!ULH4(VRyk_p44*LyRePQTtn3nE^l znN|**!1TSneV5$GGfW+{*fcRY#0$49ek;Vf70H8tx z03iOpakX_YqBpiNvaxkCcBFH&wyH|muqk9f2)R*PcNOTCgFTGOP+k(%esbyX23XV~CmZdSK4MZ1v@c;Nf5}Y)ha<*$Sr6OQ=Yi*n;Z%_Q9f+ z*Tapc97{H$b}~TYt?KdZphqH8D#vLABq)-Bl2M~@lqJW|%wQC}%-&t3sBFHDq4HmH znV=j9W}=K4prA2brx>pS_2m!aL5QTn;e9UrH8R(`^hcIvHo)O-jyg3NMWMedfQ|t7 z+l4$Ri^STA%FwT^0M38`@~?n1=ZbPV+A|ptw@+ok7sYawh}18V(ZM~Ru~95LJ%Xh9(G>99hAqiGGRTu z)c}Aas=c9hT5MeWURq~6F*Nh{K2$R$zi+&s30GJ>VBsyOKPBF?&22&g#N6bM!!+jAMPoHoU}Uha+;DW8X{g{lQM$v~24g#41Llut16W-wUXw{`jiG*S z9*mD#C7a`o-y*YE-<91b67_g#5_&aX)M;V)W?gsOK!X0UcL1)WDw`l`(M5hpK!nX! zoIP|WPbReGqzJf&AQ%X|2l<2u-={xH!kuvTUG~3WG~4n~0TtPo#ezsNHwaS#>r0rK zQBdA4?Q=ZS9K znCmw~=Ae)b2ns}gKQ5fxxViC!^KdZz@@x73`2E8A`hMck$nWJMQc9p6TRxqn@!0hG zx|b*6F3wVpSp&eBCkrmIOyVp>j-s7PBY2jzvq)0mb`?wRwP-m=+7n7g8PP{cQTq?T z!JxTeJV^fm81_E^?_T;d{}2yXU-YJa+RohAl~JK^aY}pA(6I8NgNia**FrA))JTl@C&f6`}7uO+Frqb z02ZYHstqA1`30EtKLE4*0vrwZ3-C|T-7mnAzRngr>U>rj>eqOUi4)b8-cxa_+M6vA zcp!;2QCMs=p&V4^%r%+U1jF-sOqGNqu|Rex?q9zn=KjUcwad+2R>IIYL_O==@w!RA z(oy|@9cPHqBM6YbwHnljaeY_)g+dFEHY{~-i+-)(>hf&2h6>E8sK5)&?YyDzG?f{S zYp64O)_R5hyubOkaJ?mTQ#J*I&RX>^q%lT=Y~k18muw0TV6JG{7-wH6P)L{N%@`qAX65f{CeJ$|0S{c@X2oelYOkxVOY45&X%im&)s3 zI^f+Sc`_$0R1`?A%YJpz$ii7n5Yl{t;Cpx_xzU$jFB@d>`fA~YMTx(MB`@^-yH*{vSB!LE;H3imPm5Z!5eRUzv=k6 ziF{eTJ<>+xw*07ksi5L_Nt_JZeE+W{`22iS%Z>m5fH(jE0O9{f*w}&bKNa}W`^@HG zH0AgQ@EsRMSI;M^Ci3IBT?4jey)3xsIbAT2o3dtKmi5^GeS~MoyBM3IBIjcz@>jv;%)Q|0YpSZwtGN6?2fj@z^jS=I*BCT! z^CLs}6?{u|_RjZ*?awp+x55s$hzoE|%)|b^w38f>9}o%gTK5vcz*xgl`!EfeLi-!4|@5Cynb#!w-z3@Vj$z>IPa^p)(8#Iw<=)-MrX5Bd@1p zp~E#qU9__Pff>6%Jf;n{os`OL6TYjm*e!U1l=GGPQ97tQ8W(e}ZzJIS;-*drQoB4SQaJ z6yfP>noEvReEA>~;{T213^?}1U%%Z)x}c+bgQ^OJbmkp?BoiYb$m(!!zS~**^kv-Z{-*MtQer89IFV2JMk$aNH2QnnV%n)YCYU51~ zXev9EEDr@v+78T{Qsm$4XBduWiQ++pY%WaIpWEt#Ow$`=e&^x#HW$GLa=)g=b$i5B zFSE(t`3B_O;`hy(IWWp04F`5U$;a#1rPQ2(W_x*pZ}I%HVexf)R>pVAg@xvheCj_= zYz2sUQ6BY#l;4iFz?bB2^sn&mmP6uoW@%^`m)zjhxgyY#>6z?%h-Bp{L415x*f-FPsBrhzPt&^G{UcII2!D542r zv<(#?7Krx1AbWxV8OqPefoezeh^xZ}mL3F2+ij0Ovsq2?#lp(^gAkyXUSoUqm8iu& zRi51ZamkXtT`F9iuVTZao6I<7aC@H{=my*fO*~j#Ci4xMSwz~%(An$B1 zN;f4IojF(KRmRjpW5RyWOYdjX8jY02%yM;SrTz8CLZN9^CotnVBm@Tk=DBfvmLC>* zWV+?OQp+BA6uhjhUilqHamT%LfH$e8(gY;ym?c6ZAhC`NwA4bkP=&ljy zv>xOiES`7Le$m>Gk)CLg2v*O4f@0@@zF?~%DP9jTX%G>J^sYPLo3D0<-nB=!@tS?; zJIA;!tVK<~(1W@2fw>`0(cO@-jh5XTmn_gk41M8p8j_@)Gj z%+?-~>?R|M^p3xJrlB~7shyz5HtAaI)y>U3ECebh5NY=;`>RvuWu_1QTd(g{5Z|rX zqY~*?H?tsPv+POmb?C_hwTjceuCo0%AME3p9yd0xrsW)lOiPl}j-2K62sPz!BS+L+ zziV|7yenT@g2OXoL#&HSSBA?@>5S=qcKa;>2M04!C8!de)buwp4fifc6^j^w$TF?K zTmB+5f=kz8f&V#iw-uvHV8CX+hOkU zjz~^uWTK~k&RgxpMGd$>ahvZy74FYTkLBnPjVkZTTOVQBkl8)mR6Z?!AzrcX{dE^n zuG;q=ZGHYE9&p`k?{5v-(mVHvKY68YM=0&$1Skwn%p9;Swm^C3d^er8b0yl+FCNOX z)iytKPT8NaKtU(Hgk-(GuF-*hARMBvH>EQhnIL98(2DI`1PH+TzK<`rUd-HTFf+O` zC)a`tA}JuxQ+#&^osGQmJ(;@MV=6DWy|5VQ6X2>YNKBA?n`qk9CP*W_D=tF(Zd*2W zwe9zdwTYMbwIk%5wOq->3}DBjnAf&59`6Lph647r*uA((!Cx0^XxBm;l-GMB)CduN zk?q(&p5w8;PqKy1v3WglfBt@YbOHlrZf){|+V`mXd<#@==E@2KWRbgW@w9QXdi&nl-?IJ(ke&ZZ_pFeLEUhU*AJ$LGy(0d{K0gUPNIJ$q+jBW)!`{z8?sx6jZTO#o) z|7aO5X`guAOgn;A!KR?DXFIpaE?jByZ_*8E?Q#SkX}OFB7?$0Zc|Nj^f}%6W1LsE8 zc)`k16RQf}&S=2)d$gqgb+|+w7FS9pC6(roeb4o^4ASib|DXoGnOeuJ5tB+#RA(n? zF;owHGnzdK5MfSn{R&Zk?6Q!XoaL)3zc6pU-VS%vXkEDsMnn<{)n_ z%0*P^3j$)Q;M7;2AuGHizzs4NWilMWy4(D-iXnp? zC;>`>Kws2o9Zi_r$jc{r*EgD$U&=u9%rOHAmw0oSv*CvhA<$tes??(nD9a=H#|Ie-(#F$A*uXD@Z?zAdU%zmJ9>29=ni{DGyC6F|$Y& zI}fU#Q(oYT_+fv6zAoKP^b7snP5 zXOAE*#ujO#-q9 zsNN;%6A65Y`2urI>$bq8U`#vIyg|5k&V^up>&5t{Gh1fnBA4f8bywnXbI zE-RhoDp=sHp(2ECAOquCM=IuL@8m;4VYI<}ml~a}TdcD9R%-9b3s6{i+UF6?_r zUjy*io!GGC&P!KZTVBFFO{SDI$Dd#!78H2;7a^W`7+c8!i~ULT35mmrBA3HC0V9*3 z*!9!D^qNaLir{rkfiz{1$F2{4NyykMej`fn-F3y%_tVs3YRw2h_B85J^~VIX<0ikg?D-Z zV;5${vv}qZT#(|Fard3O7Y-0)+H%(a+GdStY~YR$Wcpd(Qf;-JC0CIR6OX)2h83sV z%uft}312200EhxLacgLe}M|=>q0m^DJ3`x7HLU7lSKzk>=-8jnQ1(u*TIg zC%|2V224+KOCohMAS`HfK^Gd@U}@kqv5JZ!N9ETn#u0Xx@`fQ@=$hQUK+{eSwb;8y z;mmgsB1Jn-Hm)w(Be;z9Se+%}82JZVY4*I>+2A3DeCK+OXle2xNB|OCPjP=W9@4)y z9z(RE>@@GM zf+QM?6mqP|myf%8N}qjaj!nQ=+^$N%pBNY^+QAU4fz!M_$wy-Zrq2eKAdn?M;XpF@?%)odBCG$|<{r3myz zEB$iN)IDhOM5KB3kcT>5Vb6qEmZsp-=o?;5e2(Q%4M?+0;|>x3Cv^>U6XLd)P18N7 zTb0csYA<*3V1P}QPEF)nFa^lQ9xj`I)4r?`s*#;lbrTnJ-S@SQtAT0OYMqzE**C*q zZwk&wD;J53X+D6?Zce*H|G+A-ZR-FOIGiun6kM{s&un$aJ&kK~8x~H$*J&$EjhY(d z3%0DAi?_ra@+`x-r5srQ()i_bqts&uUBBM$IlMd%18%&;;5xU5b#FLkO?PMuq4#1+ zJYbx<`sW^?yOvG?L&V4dZu71>`Qb*uHnaJL{(QT>{xknpx|+>>hm=Qn{iDx!S&&(3 zeI+dTp={Sw$_1Ru7PS>~-w=ISqmyum8@N5@`TZ(of5Rf{+Bpb+u&sb{DW{&_m}GgK zy-Vr;o4{^&qnlssD0wWS^_6Z8Pz`Gm16=jZ9zsy_7G24WzwnYsW;P(I%$>{|q(mk*6{mEoprw#QDWWo!`7=9)}zB~@Py3l7I zKkI5{Z2n3(F0Xs_$n7wPHinnaJ6j?G2myRDeiA4hGy_`iO^7yGVd6Op;l;=2t2*jP zZD8Jt@8B)---?^;Ss=JVVGjK{9Ich@#c4Fw#2uwiPl>+SDp#hxe^4Zwi9h# ze=o?*_T8te8~4?iZA!6c9IXJZdHbGo^gQM2zW5-Uw~1sjl>)4-e6$0sZ%XQ7`AJr9 zW09<)m|*E3oBQGkOZ$>U=YVikt?Dp6M_gtZR8ltL)GarsacZR9TNd68HzwfSB&AIs z@Jz7K7weD7sF~7+yl{HCbB39M#{9Ybw>olSS`2OI>CjPXj5KS>ag1e}3sKWHM3rov zG8#DpZ-I@n?fezA$JQ-B=Q(29v@qZmmOtE&R!s-EHO@Y}U)=Z4`!JB4gEGTl*C-{>&e0+gvcx38TrIfHBc=|Y@grYANViFIQ)G5g> zunw}VV__d|ym9aem9bsWZ=#Zt5$kgVGNx8>xO9w(hw0{-z(my*M;I^%i)MLlqB?jB zveFV2zkG7#2Q9_huGiBg=$%JYha81Sy%{M#a33lGQahX}k`2 zSl6Cjo{kv)R%zPi8fe3u`i+yLO-UjHDOxlUYgsaIqaN!l1viYMI8=xXyh;`Qp+O$u zGM!-p71I@6**e1Re^S*-`v#B2AiwjRoTRH@TyrC-9h=>GWQI+cAKl#IYXeTj>374H ztCA#ND58+2>9!_T&|*6OgtO7=QO8*{YQ_J!G3Td#suRw|+jyX+%uU`?;Z{Ug^Jjv3 zHEhu>&T1o;$^5&(3f1=N-iUH9ej;K`qfMb?KHqTfSr-*c%VmuUeTf#;S)A~TcwNf_ zS89Z|FvC%%(F_YD)7(`aergEUpaf%Ei|?A!3s(Ue$G|C;Q3@ zd(~G_G-f)8wzwd*Z8Csgw{Lj45=_#?;Q)ld;e10H|o7^;=9 z-+;Za9jmq&LlwFFvZX+=I%}X4b^L&=vFfR{BBV7pp>HoBgKjQw*Q4s9%3C$dj?Mom z1?tbMO5;%)E*5u3Q}JWSoC^a7-2K6CzUw!Vi2h1a!~nscmYNd!fW2v^Qgr1}MuY-^ zRR58iB4g?xsD6-eqY2QpNSqFsLid6?m2umnD+im@F{o@KKF*q8B5mjz28+FKto@I3 z1N$d9xwAXA#wSTBgsU!z@xZEb@N{l{SgS$=E6#9A;fFG)Eo@=yJSgOW?HUNP#=p3S zCazj%EQTd<8^~E#p8@TvU*c#G^N9--t52oB8kqNEB(KXC@1egG3!eldiD!RN7p zaq7gJHz6KE_j=x~aV;pBEz5l`OE%?_3o=E_92c^jO3CEk_Ih0F+K{6|n7yIv$z)2p z=mmI9lygHx>th!JAd%I&QpMIZEG;B1EV3JTp0kd!{MSYE$TBAV!=)Ipv zS1W;6^0j*xuo4X0I)*0VTLJCzFdg#RcL-kEW*M7gzK)GN)%q2urXKu;La?#5;t_)- z%=2$E6_jqFBp*X17VqCs!mlOep(~RU(M^AMquslMI)8I>JU4_%{`7$ll(Jc;ZPo5S zNG!9J^>!Mq)KXPjkhQ!lN<1Fd(JkV8ozhgqmxGMGJG6$3MgDrDMkyRn&%UwLZUV;z{t67K!%U1a;aOVB(i0AD9h05hV`XLo~bkXoAcYg+jy zJ?&g>b)*G(spmHeTgCRav*-F=R#{hJ{&c3Gy!?cE{VY2_pJ?B#^6ziZ!QWUl`X@8YNBC&729`9XG*k7@Oe z#sxpP<o+RP^dUW(-7C>81nNuY=Ag}4(0MlLx^4cu@cweq4$XjjGx za?f*dym4Q-K5Sle!+H6~lSNcQQVi+GAHgqDM($%}8o?!++?<-$QlW^3 zPJ?9}2y@INEHS7-;J{C+$JepB1qS#?$dlM^ArB!M7^KQ z2d6}WE=h$k>0Es!UrEW3Dia&Xa<6q3XBVTL{V~y&Z)<952C=>H0*@*Ky21^w; zf>JA5qOxg@AZ5+LSuUR64jx7@@cL_b<6m> zpilNE+R{8L3S`Ntj#zZkOKgy6Xw{v%HpekC*Pw7Du-u_n){4b9!y$Js&)f)xt3*q_ zOCz>4h9^o+-jc-$*h!-{RaPplQGb788R8k%hEQlASg(xoh(PaQtTgm1AG|rF-IDc* zWcYboD9YmHTx@OvY3YC=-Y8?(#hL+Uk+mVxJ$^^YLT3MQQ;uBySjv8=LsD~pJCCy1 zfB)*pOd~mIekRRiHHrd?w00#Rf)vWIlUw$1R zZ(Vy_xl((Gxo8VVsU+*~ft%PdgksGGT9-%sz?E97Xrp8E3N}c16BC^1PN)dnu!?Ev zlW4(6tyWKRDhN6pt_Nby>f#FLY2};;F!q;|mw#Y)UUzWx_vtGM_?P+b^$Au{e#gWS zG4|Koodn!_z&jRpb{a&k207b1GJnrW*b2uf^f~$3>E3;!)uScI;{*OdPvYE;uxO&& z%kq6JaUr7rJ_X*_tFN{IWB>|jkQaI34~db}OJe&@Y7`k|T{yWf9X712KlGcw70VM8 z_Ecx%oUba|`#7Hu8g_JdwLce zRGFILGr}bjna=m*gLj0L%arv$i^si}pJaZFUaRu0x`-PgeZV%mkc&oqIr76iX#EFT zAx*1jI&vrEGIA`-U8sT__fR0SHnm#s)NT{F zMO~vOm}y^5k&)C+UC@x1yH_5U39AJc*E3CZ=8l5V=o3NEhZglr1vyHGRy}O^tEUj$ z^>e(+QZN-|DY)3)m#e3M4DMt8E}FSK(#ckZwnVO{ahsqjOCEL=@CU%Dm7D*Z2!D;1 zqbDh4@WNG?1P8KlY~X6*jUMrat~BKSCX9&|S@S>;fQ_Hr$J>8!6W`B5p9hgSHsC*F zHbi)6c5vc(!maDlJpt}W?XP7y6nD+Yr*v>OkBqgVGIovfj1h}j>`Q4rg{{w;TsTr{ z9HK9tl^k^`#))q2uu;o2M=Q?IM-$GVevFg)R2C~X% zd%_*V9+}cV$Nf=NP6%&0d*a?6=V~U>K+|5*L+-!{~1DHg*IiD+_Pw#U5TFhQ? z>vnP8MEl*hp?d3W4OJk)2er$zP^tOVSdNIm1D@8ndE8Sc#vGIZfogenmL&IZTae4A z2!iT!sqA=sYr?XJ9E9okyViUyr2`(0TGT5)wj=t5H7KjQ9@0qqx8r{lNsGtSTs zQ=FNos58T!V#r95=`dmr8!b*EBCiNB3(cG;lRn*;SimqlI5pp{ped(}eHPl~wBg1Z zF0~H|`XqEgqv^Y>>0Uu~TW&WqqeCegkIs_#SWG&Id(Ebk?0WTsGzJZ}6Hf{fwP_C- zv1jp9@LD5C7LHtn0WPHR47u%yiy^IRW}8uRp?x0QlT%a<32hrcmW^|o+%yPqKaf_B zmCf&$ySKT+qCZpT;=mt+V#vN2_+O7FR9QqHS3Q9Ln?TI1@F|fO3;@6x^H(JHKk5W0 zGh=IG`u{%vuS7vZCKj0;qg(CVx9(V{L4vJgEP`g8q=P27*o?hnu(m3VPXU!I%P9r%sJ2XtBC zkeKkeBr)w$ADbyb5{EW1;+_jF{A=$;mpEmPdxitVGcIPLZ0HSqA3HqTa=#!DKyQ*3 zyA{Z!h!zXhvwnt@6E|t1G;Bvi15oX~6&`;%Kig4@=%%LVzhUNwc@Uw!E^3lUlo9ET z+4kGUx5$*`;96ucEV>54o{8-~;(M|0(s_oH?b8`=98FgbO*p;Es4b>^lysnOiK3wF zW$f$GTUoh)3@SrU8(%K9ISyS+KFn8I091l*rC5W%%fAbza?$2+aU# zu>V8v!;8C^0i21L0rA`)cc*)2E;gQj-v977qgxtCGJUl4`EoCfCRg<4&*cx7JzE3m z`^#&!0CDewljSWn8b7Ou3Ym*Sm;2Ux(XQM(*Ez{LhJ#Xho<1l}U7P?})Vsi5$ke;Q zHZ~S$%@}vXPoJW8xDZMhuQk-<{W4pb7hz;s0rBbvEe90miH+#vu0rCSGlY03~5AV zWP7lVnbwgl)6!(H5^ByF#xL7B2F*oVF}#Mit!X^kbQRxm<~cYR!U_l|jxaadBPkCQ z#JkKLXEJ1;rDl z+gD`iapf>hMi|%Duh=*qo>2!ZMv zsarjo?TsQ_y`02bVkFf4i-*Jq0VNVR2mGzFw9Fje&QCA>{O(rfwyZ91HY<+WakGv+ zJ%$Axd(x;r4W!gD2w1E~^XnJ|hb>cMXU6A`;9R;vzG}lUwy+!* z#`DGINA~8Y>%(mY{1#F=h7DdW)rx!xuLbDbac65Vb|~UPG2y6uYuoN>q?XPGUu$Ao zr{iRFjWI`Gw{V8y#te(TMj9p0GL#}2Ft)*FMzsy+DP?nyHs6#p9?&U!SYbzQmQduW zc5OI2m+Djfh@M#UK`k~u8{a$pI$LLn!XJx{9jwS4tc{t(yS4FuRk4m)u2N$M`gD|J zH;vPk()B?K;m1!cnLdrx>^!`zXen%2!KVjqiE@n7z2U0wMmO;s4K^l|nF=X_x z9=c|p_0y`Y7H5xeu{dk{`tdEgS9!x_JCHT5&_)N9Hp;Dkrw1~qO--qg2!inH%zy5u zBr2t%9HqLaT9+=|GROpmq*@W0?r(sh_B{TSFDdhYJ0H_GU8G11pKy2z7B8Hn^vtR5 zw}|yqevAyIG`A_fdK_*RC6z#44kGusbv$7v$I?P^<4+Jnca{;d68#2)*GivqGoKx~ z=Y2l&5Q6iYwEoy0I%%rZ-)Q2XNhni7Tgu)!uNrDIcz$9PEytV3L+Q{@j3L)r8>3`G z-*V&6=fA%sXOH># zc@dRBF)%Q&v9L)WJRs$zqom{gzx}xHg5bd*s1QtKC_MxT4~mQjz3+p7-?f0Eg4QA$ z{67yU5;6)Z8afOE6AKh*!i69~k&%&5kWo=lP(W!v@P7yj9x6T^&vP^a4RdsQH$vW^ zq9xOm8T5OIjwgi_o;rhKZVJ0=E!Ah!Pnnf_mf@RP@`&Nfl%s&Wr7$r0ar zpdc@;2`+aX*ic{qYe9%AtF<$ub6xfEds0YmCv8AI@jcr1Yp@tyx(k@LWH{Pzj?ED!1b zEDf#817q;Nl2F7egcJAO9C*QSl{a_=X6y`NgQC1|%!WWjeM1Ev`~E7AY7Po2Ct0! z_9SCyO1d;Ik^_2F-;+lYNQl2xdMG9j$%`;6dQcLI50eg*&iqmE96u1?ODux|Y%%h=83@l2+GgJL0Xs(oEI8bxW<$K_1FM#!B*Ra5HK zao6696aOfH|9BNATuCd0~)TrAF4JGj^&r{JG0}5x$b(G>L zgjA{gFMeK{j_FUc{0WoMsTrHQ8PVVrga+AZIkO)+M|HO=UT+1US9932wA_gwbg z@(#GWEE%QcO{aG~|KaI-B)j=$#r4B|G~}2%;Kohss}}L)VB~0Wgk9y;Y6`2?d;6>m zJ{uoVpOXW@Wv^fD!o#Jb$s`y!b}i(z%*WN~+YVzQyBwI@N}{$v)j((o{e$Nnb4u-h zVXjoAy|^$8>-qj_Tr@jC^>SQBFLXW_73*1s%AsXut*r+*ZJnNrb|v1gw#MA68-%&~ zEFX+sgHPWh>#3rW3%@M-_@{N3*pJ~t$h*u>GEns7o7BcMW9%GJuwzZfS+oqz>*tZ8 z2VKa^#4jB2L~2w77y8<6&%SqjzQ6nKMKky=e@b%i{j0H`Fb=&DGBJNJRx}c=$dZO6 zTh4zMCXhSF9gRK=t~74*$QMuV^)IVu?UOd|ZM#^D5!HwEKA%Y9($jY?Mg;F@Fk{RUWNUw$A_|RtfIcGi8l7Pk(7^rO4+t ztH2~xs>6nwasEzgsh#G$Ia2uhD?$9M>(xTN)$-BCh^WTN!RFVjEz#?}25L0i`gdhL zjodn)d`|5fsA!d(RWW%ggERuI>^RXMK2NM_7!x7#_(SXR(k(%&!^hoatuN|fqx>Zi z6vrfOZqN~CQExm&#qB!Tiz2OgD6|H`Y*E#q~1y_k`c*nl!tT^JULPnJ`&0UA1w(dq+IZd$_r zC$Y`Wt=q+w4czKyxa{KZn)S5t-s8d3C5wpR+FvPETE7``l=xYy>wH-jM)QP8EEGC@ zZzjVzc!>x9hTli7=i^7$)mN|a`+s? zMF^KsS-<A7dYPKQq%BFUqjscgJ712fa8+r{N!z(tN&V z35^e)mlnp?^JZD=L~6u|)%#mN`>9D}>D5cg2YB|JQSJaF^)pv<`-v3X>&+~eb`_x? z{4(ig2q$z`v+BnWX^Fz*eYNar$PP^2BqEXF6$QJns( zlqYzv{k$@TWui~Jep8*-ooypJG7Qs+-z!1%jAg@~Y3FQGiHnuYjnV&?QVcQYG|vEK z@=K0r8aZljaQoSME5*s$NG`2t)&b?4TKYceI1_Qobv=lF zoLkfv&ee5$z9PP%pCZ1>h10q6wznkLzuYf{ktXKK*B*m@>;cY`_8+M|Sw4NG@a#9a zVt%im4rnBrdqBi?xk1IINC#1<0hVz7C!Oy~^VSQD@-0<37}0jH#T|=-=M6#l`-t)B z0%0`=ueBs!gyfZEN-qS z#O|+J-`#DOBSgXs>y&8|*0L|MIiSUHr4;0OkOkT_dsWqJjRuCxN`f{!baL+a}dy?kIwl9kJ}I zI)ql<@EzSKTLz{*zF}O^g7X_=2_|E{g8yMFY%Ml5WFUfjv6%UFKbp2ISaX&by8Dnq zA$Ivj*l$1zMTk$9f~kbEi>@&PA=M=rxR5FNp2s2_e|L@5WoAecW94?` zj=6=AX8iQKIQ2T8Jf-;kiQ2v4{S*HZ^!FjNlqR+>K00UniyW<}pLwk($xXWrP?dB& z`vVO|;z9uiSWz35?GL+NHUCvXV4AkukAhm+h;JRfo->sO4bmCPehLd5%o*WF6tlmb z4A;8CrO0-|HPdR-TN2}KxxB@1Pm-T$jYia242akiD59i$~bP-}^GFQVP0IfiXd zmB_7$Er;Fd7?5QOI_>x!bfY(a^L6C}vR_^TN$fk~hED}`R-eBaS}1;*T6^miEcQxAAV7N_NdpI!rCW-+NV_Dc{rYdVBrVz*_whzv&^kbhw3_ym5!^O3M(Nb zB^Ml6{X&Dy3kPHvug2$ubzyVKNa%az4Xc#<9xSfLFVnhTCO`HNz;Vq4OK^peMrt^5 zp6+q)XD-QZh0un$RC8aOCN^5~EVca%r*PCZ*kUDqFl-WdxgWaCofXW%R@hw}n(jz5 z*b>k+J^M1KDogQ7%O9uH=#Z|9yRV6;ST%dcsc}M3GxoYD$ES^e+)ov>hGt49;j_U^5#)Wop z@m5|ZKRUWzi{WYqI8daq(^fGuAF1FnOT(FEeE#<@jJ)vAq4a%^Ki|CU?Y}ei7#BUK zoa>6lHM>*7o*hi(d~qgTi|0?EW2RPVX0!Ch-=N@b$?yC}M}G{7oPO_gk*W6v5oWF8 z6-#lqW87eE_)5N1#J8(L1-kHU{T2y@&o-)0exl&qeZj;y_{I_5ek!{7>6Ojj)exMq zE6<}LX5VkhjZ{T{7FObqg#CvY)AY**_{N|8dS1n!ThHtK=S(nv4+@>FdLgvy)C_#P zj~8-+Nc+vv2%#A?mq-09ozF&fTIFrh-OfyflunxvYoB_?$m2GS-P_P^8M@%T>b5__ znI_FP%(Au3a(tiZ7a#Tr4V+qEwn=DMVwD18xo@JZ}yM&^w<` zju4-@lp0tV)0NZS<&^d%Z5_+pn0sRpb3~Ra)E85D(xp0$rw7!W?9OpY{v?nILV+XGzT=T6pi=z}Gw3&0f3f>A-sACL7Wf~_lf!oY2;=|TL z8fTK_TB^c~HU6*>u}c(vj5?~Lx2>AB`XMGVt3lnz)FX}+dCGbIG^zFI z%dh*(I~ttOtZ?*S!q_FWQhkZA{`&qd1aSR`nA4C@H(5Jfbx98HzftQgK6l%(-~8Q& zK`#CT;HNdY@ynv^u-p=PwX` zb504Jn~1THwc|7PZr>Bnow5?mNF9%cEnjNGNPb45Wn_9iW;OBn%R@;OZF7HPO3Tgm z{K@0`TMBafei$zcd0j&IcR2*GA0%>BlmYh#(>{zM8I)yxjmf>{1U$%Gv(t+j@8eC> zZ8FzKo5?k+1X%0SlGx`z6BD`uqn$bd62hj4IUX7aYoU7TaZ;fD@Aobadl zyK{~g&)7!=qya7gy6|Z6vv~`XLfJUU&-e9lM~+x^`YaxU6xH}zY)7#cwa+D}zxlZ7 zpCzG=nK%-ZgSmhf|5s7Et~_5lMDzCIS3*$Cqcahm1ZvS(-^K?)r#OSagQ$pl{REG<9z58O87P#l9(cyE7S=8ip zI-|!9t7}0cyL9-h)tOKfy>r+{pvJPGU%r}}O(%lHixm0z5MSjJz)Dv#M@@4kQ=K=K zmZ_d9R?!;Qi@v|&gr*OE_Uh2tt!LZikVx+k@{QMXxBf!0jF$AZqZV?0@8OzW)iP(| zTSflF)vQ^oP6X|_$6nn)xk54%YX;M(p+~^e;Q5?UpB!|BE>t8CU1Z~bmF{3vs4QTa z;8I`1l=Hhiol|Ul*(9Y~x}{g4tMYU@G`d6iXSr&&2y2~l@|yHV|Jy58o#2M=CqU+e zeUpdF2lt5@d5o)+96&;NQ~?^~0Gku)7K z>I|;}ftEe|M#~}oT{+}93!gkQJv!+@0il@~q5s=JWWa<_+J-(Mf$ofN;P-9meA0e* z`Y31~cd*lkBx|i9??0+#Lpe~g^8JfkcV+|;luoev8a_&q*bnwtT##yu7~(lj4V?s4 zo;!Nm{b+5%FZoDLcqY-4Dfd{wCzpvoE=$0nxN72Jpl>cK^NAZgnwVGn$MrC~@(phvn5{ z&yJN(0fn&r>h5q@ESbs)-iK;a<1b-yH;992vi7B4-0CEmfv2z~gA73vg-SuL`L{+h zlI4{tO?M`Afpt51O;e0T_xkE|x8(e_WFnndrL$Qk?iO9BS*h8VSTd39s^&#S! zA8FM5rheiVk0uAs-U3@9cOUK=!YN~f<+21~>9#SYn|F+BSyz&D*3taObcl1Bi18>P zrB5h5XHsbl$wM6d0eO-C?Wvw0>8{0hm(Lw{$G^<^K6CY%^)q;1eM<-#2hpOzrH3RP zP)k6kB5~m`eVeDdl@0iXe16}$#8sKe14lXjkz4ji3(B45jk*S1ks~Dx z8F+{j+LtU*?;2c@`i@<%Tutm!+V6V*Bj(+}O`rfTi+4J<_8zxFmN$YFlo*9cn04G; z?M7+#CRq=}QxSYlzD1Y3cKg{AW?z!+q4+-G3QG>IL12A_7@lT<67}4N4N9{nCkY$Z zpKK@SPk%h4S8qPdUDqrC4M+)+_YPC=FvEi$BS>h43~YC}b#pWH_Kx`HeEz{v%?cfNMpg z<-_`q!L=yZ|d2H6rNSPAA|PpLF*zF?h8a%X=J zYWlh7#RyJ+AIfUcVK+LB_JQH31kwVi#;UN#0(5&8qwCEifJV~+cgHllR_4$pMnEV# zf3LNCq~45TKU4nUD=C%NYLL}PAQ6r%;H*iRzW~mfTiUGmfspq3vTu#ZdZHBe#-QUG zuz(z6RRi_O5>a@i8inDlAiB{>du$v#<5<-+J8Z8wqz_Hk&;a%{x@RCpArPg9UcJgt zzs27n->o${nKan2kcp90k6zD&BwemX@`8*_~ z+pAM80KRHyW%)}GaXePA3&!8pGA8KSAHA zurskGLq{xXu?a@^0ap;#;}!{owY1-F`YPrV{(z#mBD7-umc$5H31%Wsc zX;PQ0*^gFtC65%y&pI%^N|hdel17ksvJ~5A-(BVyxG}j4=i{to>8!B@_~?W7P`KHG z%FiFS?Y$L6N+4E-AXS1Xv{Uo>j_pa@%T`xFve|#l6!0mEO{-WJckRN0HOo{QebRKn zby;rzRBqhXtRqbb*FEHWg?|wN;gI7FRWch*=h-QUd8`SzUYiz-G*|nNOD|){MP8To zpq-qE!)lwIzT1zm&09p=`k_<3PV@oMRGbm8J+GfWAW)tu*QuBWF>#40emS7Mk26cvz?4u)-%f^LkTSXg z09V>DF80FQK9)`#$u%IP$pH3&O{e^Knbe!B!uqd5D@JNO@C2IosXh7)D$wvnjmV9; zFR>~hKf@h#{r9tJ_Ny^rLNnCn2@~J_4+nY%wkw?-J-Jxjl{pny0@h@}mMgyP>WdOEBT~YAN)|qzB?GT954wx?Z;ycCTy5IyDD8sz&5%B%v0W>z*-uToz_TcrKT6KFug6`=TOZVDpdnvpUn zsY77wN~^7cV`?Cx8bns1a6DG{i2}$B4OyG#gJ!WY1mfufpv%(5hD_A$ZOh(@Uz+_} zQ3Dp(O{73F+w86 zh$RAB^=;hu_UMjE&v5rfQA9w`#YQ_T9Na?|%R8HM*?G&(M5{^U{( zT8whD=S&52jg}qSf|9{&6>Y!RXg7QOOurT72|oLeW~;CAd6h6T6et#cx}j0Kmz%+i zXyveKmY_<<(J=espi47dAf>=?e9ge42-9y)UE={3Kp%e|@IW&R3C{{zJ@(5x z0Xwfh+ijf>__lJ8PcgE?TZIu+J71mut>IkK^LZYM$I?e1I#L8I+9-i7KzAO~2r{Xh z>+{Xz8z}s}1+WD(fTK-rKvUoBGO0HWxYc<;`9xg+c$nA~96@JR7 zg`)9x1qs;dKCz)Ym?2sSI#Yr7In__cI>0u4*_kU=p*Tf&$HD|LLqI2ZemRPJCHv0l z<(CoSV#k`!D|^mSvFklPCjr!lyiTZ?JTKNWxG-*%AQZAZj9SBmJTRWU?O^q8u}50@ zfcm!Y3B_1ECt8Z&4wW)%_$sJ{n4b=_l^UOK&$7;rC{>3qOC;%1#raI0BZ1$-{q)l6 zw_R&0ZE?Y>JRW)IcjvaMx;6K`c@3<3iv-csW@4#=coHQ2vw5?S2ikzjl~io1wQOP1 zB^5FOm{%PFh4I1&l%+DTL0(J~=h;DExmHR1kfTK!2{wE0iFUJiyRG?jm|&=CR;x^|mNXZiI7^69&FR<$6X#BJV9Ou93TRjx{P3wMtd(NJ&YuNebQ{9_i zDR_heW++cy1lE~WE=c}52FP(jLsj&2`n~UP{Rg~$9?UwHQeG7>G%ztnGX>b`25Y@% zwSO;tYWU~k0HJqM+N0g+He@qVAhQG5I1z5FIZ zr_`D8EXh&kZZ&`dexU%{Bv6$Rb;?${nuVFJ*+-5eOR$lrO_0K#Vs=1MBGDiJq=|S$ z5s6WL_0v|4){iz%waSL{@-;wkSBB%zR0GRt&!)6>dkg!etN;rPNDC^`fqr zvxZ%rqlf7WvOSXp$T6i0i>o~kK`Q;iBuUo{rR^mo57ERCJxLVVNYTZq*!Lhhq_wmY*Sqk}In%U=zXxxA|Pa^?8p1(rzVl*0Qmr z-P@h-QwoHkBTQPw$`eudr*o!P1e?WxqiE}+=Cx(-IoEGxvfyVN&SneKcNTmm1)7!7 z^?RbQiM9=-#I$4~sWCeB3)j_w-1thlV`1FKUsWz4tF%)d0FnGa8qEa;P7;YUs{6{X z&10V}b|AT*Aka@i83)bax<{nI>DT8{o-qBx{V_sd;OUtX#n>XBwAHInb78vq8sy=! zfB!QaohspqQ*z5~<2is`od1H&(Q zj%-)};^XHyrKs)}qsqQcqkiDJ<{%ra0Bx)0DTgSdIiwfj>Z&-S56j*DjhB;(m;yx18{DYaz@;h@2LTf zu0HqQSiEln7=HIn@VuU~+SBM2Lb!&yRVLz;nWc9X$ixudaSuxdb`0^2J&|I!2I%K0 zCfgB=Gz!3LHH-lBE3-*)qXawy;E|H!*-rNw#>>mJO3HzHpcL4G?YM6MXDUTm{6Y^) zf3P!}j2LW^Otm1n|C=zm1fQ<o{9>yiu85lvqZ@rA4$M0h0jEW6Q^7YEuA(Bx z#!aiM9p}pxOlmombHg`{PH!~pdePiB6%f5egIN-26Iop!jc~E+{{-RX&M6Ee$Ud|J z(BD{(ewJV^9g(!Sx6q)|yge8_nXpC~rcbDy!Gt*N`t+*_gLx@G6Iu^`;1FR5+CHME z1X2mZeB>1b0WW$RDbNHsxiaBbo3{DkuOdIc+)#Ye1T0u(zRefJ`N0(n8W+1(PAJHG zegSCe-`L#cSAdQ@J^cImUd*O=o*+Ch?rSG^XexaV!or`&KZjBK{Lc3YAdN-t-Anm; zAb#lBKscK9pZtap34w~s54kZ=9gblG)V_|AESJ^=HyVa7i|=>>_OTr7xbI>hbep+y ztq83Jv1MnilIp;^CnisFV+IMLN7B+=ADM8f`d+KecXBI@Es|&t4Uh{tR|bfIi}eq@ zhTw?Fr)S%PIZ4kJizG$r42bPvA)R+m>@Kjv(#=;#;}MN1pyjsxMtcfi9GW6|VWU&? z0uzHX2=W>gSWDMGI?Sm$2uebFz&*CE_X>aY8b;K7bL)bl+cGA^hGJ6#wh@+P@Q=XI zMiKGY(|`RJK$S=x9y}^-1dOe8_uS+U;w#qckAl`RyGIOaj{p`PkAj*j) z%}D31^P)RcuKv3glJu)tQAgrf3Lbrtc#DbyI(o+MS|~evbG$dn06T2T7>~&5Ey{Ci z?>nK#_c?xq9RK41a4|-6#Z4U^FlA*bs!?y{8AP5|uh+i0d>PhZ3ivmNwFBTaWvE4Tmv-4hj!F!iN^WZ;*`=?MOj8P_N`NqVhAWs-_#VDMLf(1qU0 z_(3$)0Z(fC>}C%kLzq4t=cof1R`OjuNb_FUHKPZYI<|r8ip0uyo^P&tM#RIPy(N;s z{MsF?v!0$&2BOOT3RQnCP-BHT z_l;(^r07k|>D~gLRHT6Yv^*l-kmOLU0_*C`!_gjp<%x3x_#UmfXy4ZTbzQvhCaL?9 z+dvtJx0NpAk&GX6jmRQxqnPgwxfh9c=>74rUG;J`Vfq3 zqdkshG9f0QMI(}EoIBQoJ3G8R?gNbbGxErb_smRAn$FZyR_y$rtBu=y;2r}t(RXja zH0S_v_OsMe)|3#3IgQ8LsdF`+C1?dmoOp zv}l#6?f_D&@z0?^q1ijiu9L`TFy6+tbxvc^qd|u9=OJkCin^vAnI%9RDTlGruE3O@ z0l{aUrEC7&XUmhK$L$9_5~#i)!$P>n>fTSPSrKkDIenka;ZVhfE5EY{U9o{eVt61!uaVlOmliogE-$b1&wXrYI7PvH zV3zE1dA4mYfU=7(>fkaOI&Z%glHtJ48hWk`M4oz&oLjD&YEz(oY9S2Mf7t<&-EwM# zg6#xq&n7B>cUil83c{zih1-A4+*X6onbrnJLp*^D)JxCEEzA>We!S-W>n8wxcdR}~ z64FIxmo7$oTYRBv0|XV=C~x_oI2VqkbIt&A;#|jvdT1^INZgm`sR0^{-~p-uaHb! zI>il2R}3eAdh?kj{|%6cekZh~JCobf0&pfm(k_cODkT~B*n2Qjf3{5WzWvGQN%%vm zov740W)TePvrzb7=Ck;0@68PAVnSn#Is!N(0xi)G2h<_vj3JDM&TOkbg^c=C1pP4pv>(d4 z%vKusHzE7M&y)zI+iCnSx(V7!lYWQ?VJ0(Za)goY1mi7$Z;eLCq6Bl;LpRU+egAwK zNT(%u8c9tUT7V5N86)r{-AhJ2Q;6*{dpPu(g^>=;oZ*EmesTV!X+iCn7qH{raJ@Ro z(E`78^Qzv@s|z-{rzQcn?)N39pH(opKYxxTrBGs<(_8u{oKwF|3q?*;QR_iFG)d09IjsV8Kwi> z%#-pD)h*wu++RKW!^L91@Gu|7Bkxr=YF70)9l3L-yh3s}bc1Eo5rg}6CXiw>Ilt## z_{9_|m>L(Dl^a}nL}FR$VBs^YdjV9r?P7jcUS6~jGv|&NJf&TQ58>n5yALcaqPJxO z_KBx1x6Oe7SmZ%nMroMImG@2fH*vtWxIZH${&GBLohYKWJQ3X2jn)e2;yG($mO)HM zC0nWm(xChXv*|UL_t=x;M^Pa{n#zpCZ8VkNRO8A>S{epRMmGq-R4{j58T^>dO@sy| z7JT(W5_>A36f32e4HMoiHPCi4sl->%t%5cAWb6Ga-Z4g+F6)36hagY%J*fsVNxr9y zlLlE&gI-C$c)n@d^p*R?FS1d>ER;HP6J2)}942zLbGTJjL9I0Qbr1ihMq3tpw z70IHYA+QRCB)h+6yv|d$wBf*MZ=}=SbRwJG!n?V+8u)zwO%T>1&W>4Yg7ZBJ*AmxO zu(#FRCLTR(epk~Ki}twKoY~aQXYf3n!ui`}44UeP!w~@_kqS;InkSB{AFt;hBa4ee zI4ah1fpmeH`m81HclSk_3}q)a9vv%QhpnR?WE?J{=k2u88eXP>KYVtpG#>qx&g4en z7(q4&BQ&Z9=?AGag7M)KNSf5zfD#8^N(L(fJuQ%5%6`i#jjD9nxvHc#GX3{k z7%65v9jmM*B%EUIwZtz7ub9=LrjT_r8lUlFk|U{skPSQK!g$FixQTUN$@16(S zde}(!j-XmUkjBzjDLIgYcB642)qhl0yOruPFA7hSyx;(;>*%^f5(V6f4NMo*7B?qU z1EUgLrQifs6c`T=O6Ke7Q9T%U-9oW6#e{OW@Jqbj5_=GO_^>^aOBsB~1!$O`D$PqK z5%JUXklEJ#g|trw169v(^r zA}t^?*Gk$9r0skj>;VYoSw2ge6h|pMc`;p}g{#=keRKeRT>4pnGU^M4y7jB5z)1&P zQXV3Ly!Jy7QI&0sq_MMvnxUaD#y$S}h)}OL@b#NhUy0iMJ-piVSYjx&j=8k&vgoBs zU_OHT`lx#pn3`ErM+8M;vWtSCr0<1Ia(zpUHhcEM%efQK>eDCNQ$#yB{aCh}2*`)} z4pj-~0Du1_H+>%j5{x}e%}c1gHa=v<#PLENWp#}b348Z#HClUqq1y7x5l%wOYC%ot zMh~(Pc4!6A`4G9fKjXq+Akp%%-OFs^THqOkfEfCB<8krpePCr%YTuD zBWa?SuH^dcl=+l+0?O%LbT~ni{s1BDs3L-!@e9rb?+7i6@if5%-h_MMcfqg?BlUMV zJ|2MO9y@HNKnH*^BBLHLkfZDdFB4+6@To1J?NI=c5X-JS_T2NfOOPnjgC}bnzn+j$ zbmZ7sNR6K4cN-i2&Le9%Z5VrW+o!r%TekV4J9W(Ag9}k|%~HB*yYZr3hu0RSQyYsT z-RAdP$GE=Lmog@O&%DUNt#8He_qqq`VZ{<(YJVP@14?ZXgDDoZiT+uzQ% z&W}$$_I}$~?N43EkERWiCS|+N8u*AxhPU3C`+rIA0wUzHmElehlg`h=2NUUhQXvkO zlu7+1WchK-%gb?l$gkc-%j1a#2eYz>o7Gg;S+WT%aA4qcIfb|R!OU~ z@oXARFec?RF!iakv-n0fSvu`j_@4hs(oKnyQ|ii3H3Gq5>WAf%kx8>rR z)%FE>ux|x!yTa=4@6JCj(m(99sD&s|Ts*Xxu1$;nYsO?U_|D6K1-6j-!nur=)~e=1 zFr9gpBsNj4*hWa0e4P`sBiWj~1b^PM?djQTjd?$^F&x>0|CnXW6rW z2Pl?>b%&rkT)R>xeOjnjUju@9&8Dz)E_W6uGc-D5(dB#2Bl@IAvha5*6ioCbeg^Gc zbzm_>R!X~sZU4i0okp_vxNyiS#RD`~RnEmd{O;o~)F~j|vv>Nis@KoXWOSXUCYjj1 z${Ip}LfciFl!3Gtu+IZD9QzMPNDS|vCSN`<3||NxPv@~{oH!X}zY|7!4insCc6L%@1C`y+F|aOwD?NP4!!sfsHKue(*A&m^i;F@*_sp?BCm? z1HR-gkYg`3gHjM94Krec^cxr4f;_C78fuC)QN$_j+w_&oCbnAIdcB<`@~tM2V>cDZ zR!>m!Q~ivRn7*6=ik@sfu4Lx-1n|;lGk;Y)f^Lq28${cUQj!tlAr4#U5M&4b(yWy{ zM@pCE@D#X;cC|R>S)$s&mr$=8*tB%?Uk28xfeAGL-b|Tl&8glMGWKwUr%9eb2kpx* zXoJ_EPg~FG%=R4vlJ1;~904n%A_0#jCWhM5frV9b^4G-Q6C72Tqn-LB-f$DKa9QTW zE*&{jYwR5Kl~pj?pL&~8%%G~q_r3YK>%a+5S1#-pBYK+as4Fp= zmwk4<;hq|~5y$#})D{=)$xFxK8>oyr9lGsj+-(?ylL~agx`7%{2bAG=9i{hF-y8e{(qyB;oR+-SG zP2_kEPlSg)rYG~+b$maxXioMdN-&#>;1Y(h0K46i`gf-#R^u|Ly zz(h`6Tbi9k(itIXufftvazWmRZq*=@TI}jKgWvCOQaCyw2{N%_PDP_6@_?LQeO@kn z_opSnFdYywe`_Y#1q+#SQtDRf@Zhxc#HmdaW}^#C6rcEID`I(jMEa7|#1x>q3RzN# z#%}#Y_8@M#+N^#gqK5tmqDSKu1&8HAmg;GztBs#Bxc#Q1?P83f`Sua-3`85!G!fr= z_(+4leg2Z*a>b`BiR}teo*htr1^0iHm<*Ec>qE(}a<(w=xu35B|2uA1ha4@>J$(&U zh?N0RzdT8aN|qp5KO*%m#-tT>rDarC3S|7df7kpO@o20!4>-bUE5VY-wU#(85TOau z@*vWX_^#Oye$@V4(=j-_@JXr_u3@8XzEe)IT)0`X02d=Bg(AmMDNq5k!sKFG&lVlH zsHnDMsh;Yp@i>3{;V}y^*awo|7YYyekP*-RbLfj`swxo3oEXG+e9V68dA2#0UGYwE z@_y**BXbWMLpC7$w*9Q;Uoh=lMjay*SZX~NF7bWq)m8|yF{p)r6tI^F-r=P#vhMEB zZ}kQZ*21^z<|6-uPxDw&qE_5GGi6%L?lU@ijAtQDKuVA>Df0SvUaR|VDxbI(^X%JL zS{;PO1CfcKrDfom0SPr+&HAi9uyPJem*bI>Kmk5Sud}&tljB)8Uz5@m7Dr;Tk^VxY!XOw=fG%k?quA{EfBiZF`mR(io-YVm8eBu5HcRJI z=?+FT4}!6-1T;*h@L08fjbFtEOO|aigHaJ;M=1Va8qkw<_K||DC4z({1C9Uxdq*z< z9G{+R7}X2sAl8B_$f!zJOPU4$zb}C2ylB&c=z)KO?f=^Xc!B@NE`XPS{LcdT4)l3K znb|wzwu)+D3kePEbO}_(bZ&I)($YMZXyH29S<0^WulnBOax1ChY7A|L7O<4&1q;{M z`K{cI)!ey!6`JCkniAC#{pmgSsoFbd`_E4KPMgEkA1(Kul~|sjH`;_y83{aflxMUD z^A-si)S^CKr3w|1AzdrK2q$@?1L^Z%EJ)E3qV#!>bQ3&fu8R=6f%LdoP{ulaZacbv zUnUIlk(N-Xr2ZRyrU2>!Rnih8DZ=Z_CMEx;hSSKvxB8;XMElAAQy~XRN*}ztDC~a@ zzk>(r^J!;aWd5HD^-ezfE)8vLwnYS^|wlk;~;bBve@KcqpNR@+VHy|W_G`cJ!)pZY9gK$(Ry`Zr2E^y z0bc?1v_p6$ARDkLR?dJcU`fWj{d~LcvYC5-Q(|BdC!h?ZLwhzL3&n?66aG`b1136A zt9ANPsF4QL^X&jO{eN)v)?ra~QQt5n9mCKijifL%2uL>~>44LOp2)0}35JRcyQ$)gRsX-A z5RMej9bq4VCOZq9ei<)TS~CFg)wm(?WcYlv;8=P_$wlL25Ksk)(1a>K!-k?}`A9EBHcnH{oghdImB703+= z_dLg=P66lpv7cc=;%7{QJ-2%|=q!&GmjM0e;B|RqPyy$>EidyLCbRX93XDUgL)UP} z*L4ur8r=*=vXxM!**-v&7n%W0K_Hw%UvLG0p{w_R+}g4RPp_HBX<*je{1sDPnYC6%vC8Y*^Fj;Y(##}@&7~B_RR%P_4&|?gw$v4ukrUNzrddQ z;1_BjHVSDSYd&Kt;8+446c?EBbss+HmD0>E2nIyPJ)pSYUZkjC;YceUgme1|{NG1m z(14Qk#O71a`}`cEIRCNw_!@L-Q(H0Zt+4%7%VZ6vNOjuspW{Cp2?8-)=)`-s4t`AH>utk(1veYuHPR4#W+X@=n0AcT2OL=C(p(fLvu-S!9GoT=OTGLiakyr5 zVix&s&y+=`)erL0XKwF|~(hGbWCZXZ=!%BfU9&(Dqi9cS9|(rAa7 zFFWsqKiqTiF$VGx>qyqr!G)aH1*9q|OfA~SZa==Q9D#n_vkzO7)z8uMc4Q@wMgO6T z*ZY6(o`Xqxb{nXTw;F1IS0)okfuvsgf2G4fjZ4yIp>V5uC&uK$i;Wn$FR7XDx?qHzbApdXoFve`Z6wNaXW%`(83 zam5%;=MMii{XtZTCV%4=!V05jx2OB}`aI;3_K_X1V8%*`EnO#Vo#W}nhyz!fZ; z?ZcHtcO1kMe~GNTo{~V1N74$>DTpd!|Ge_j9$)0RbB{h;lI$-wUrOM;MAaK??$*8h zFgsGZf+3jYVvJBS5QlKz3~8+4cR&6FWHVyV(AYp3@f`0^75UN|l}MQhhr5;)N{(Jk zvh0q(%PI|9?FUb9;!M65#ta+Mv|w>4NrGFmU*C1dZv*A6uo9iyTc|R(T_XF1e%8=}!8)cqnF4}LKj)43BBc~! zfoVwc_+`lMla{YfS;Fi}dvE!{wBX+|SH9aPy#}O$jYV$<5dmbJ-NEbcy}xsCF*uZz zS%2cFMT?cU7D@Wn6Q*SU#4IZzw$1KL$5<)p$7pV-!dU@T zWCMJ1+N!4_^4+U$oSi7Hs;6jp@j-7J8S9?EXi+$Q62Ob0=-BMS6!pNic!AW|t|(=+ z#=HmLL1s(^d#v{@q7kCikv{v@_~Fo-`W%Fom=6itouTJ;%Fp)?fV8&Z^SfNA9X6Et z3#$yD@A#xXnxU)M6&TJMn#*^d|BCym=nWhv9DyleoLZ4&`tZ-c)L>*YM)FCfJI0)0 z&XPww7Ud?lk|j`q}uoAv`LhJA8z7#$LpW;=lmry5g!tvahY_2=(AW+(a@hiLdETegg?>C9x9F z#;G4bt3-M#+FS|c?)g} z@z2I}2i1m8&>B_!k!1;Md>iJ*gh>lAXgpz}oE@)=AGk4j!xBcuq!XcP=KR9+Vno`q z-HdPhi%}^3eMQ<&-d8WGAk*iqjQl=SKoe;=QG^>)(f;&TXrz1#esZbZmmBS z>vbxPr@p~4AMZgc1^JbYB_mJJdvLXIxNn8$R%^!3$;evAyJPt&6E|6h+4NLxV*C_|`rtzBWtl>qLj)G5;83!dL?(w1aj)z5UEE zcf+){*j%sRGH|B7`#3Rx8Kz>cfvv$EyDG$3-2D~In^C4=he5sBRG+FELS8!izI0v9 z9GT{Q{JLJ#XIJ+C3pGaaRm2O`{`=~zRV_Q2VhkVe3;X@P&i0iO#?{!Ztxj-OVLe`N zmo)DVY3BqzYFZQTeq3g9x;KO~koA+>h1Pw7)>0BGBC`B6THu1eKyAHb!U`<5ZGhWm zz8-$d@olc}%P&kqT3hiq-yMORP>$xuPmntEvtvinX;JVe=n8k2MIye=wX)@{Ih+xr z;jtLDHsh2Cilc$p23H0hh!B;MU7Tr^3T+0>-KAjkAGOiX(#7NsQke8WP7!sQYV_Q* z^MU6c7LtSQbE7De7A%sEd5BAQR`&x$0gQrMwr8Xu(S1>e)fsGxuMC6=COlzwdjua6 zg;-;$r%dzvka{};-WfJyZ<+QJ)5SI9C=a8#>y)YWmTI(@ z(`sJ-_$K*M@}UvixVwfjzJS+#LObsJ{VldU$%JSS105XV{&;F;LX$>aYAn=TOM8KrZ032>&uNKLu?AnDAb%Zj zQ1mi5MK0$96}cEBIKSN? z0rKkGk2TOY(<&2+{1|y8ao7ZejO`9)i*s|@Q1$dVX~Wws4at9m=PF8N%^wKFW-W|` zf41wZhw}6)o&7J#put}ITKfr+tL1YA1SCMcW&6TEMNc26_hw;);4S-EAf*dN{%1_6 zJtxHB^BQpBpJ|JvC>u>mYj(iB!=3%pGP3YK;6DF#Uq za%Sc4V#1|)B1S19okNix=&sQKX638DgUs~(i8m}ToL@9YAj!&8 z9;H@guQKZUF;{hak`3yDmPY!^C9S)O*&bPj2Q?I$SxlFocYwiGrJM~m6ed~ z{HgZduo4=4d*UA;0f~PQTBiE#_W_ja6{CZw`Gh@dXi%GV{L;~nbC~y|+qP;8l>?kK zt4G}D#Qu-E-SwVl%e@99$Qa16DqrzYIED#hMbXazTcNspojN1VBa>Q$k@s=Kh`pQ< zH0lpq=rsWjSI?xxhA_)R5#dbLW{E$x9Ur9%RS^=TNUcPs0V5&3)G~_owbFgeMlr`= z)W_BconqoVaa_5KUo{v}7T%wTsW9*Yk=72aw1h?2DHea4kxS%y-WH2@``L<9+uye% z-%K5sj^lqmenK_pcis7D?%3uLH!X7wkCrA<;&rk<-BfGHV#_C!^|?J!zIe5wKyp~R z5u$kt$~k}j4OJCyDL3#}T`m~yiA1_twqPLjby+}w##Q|Y&O%7ZmwV*(lXG-2@x$3r zZPZmHm9NHJ*VBF01gpNeb@XVjG7B)y;j?7cOX!sGLPeYQ&J`;8plIb%kiTIa85@B|yL0QNk=T_Y>45kQ(w=z!*L%_8Z8W;*2%j zKTj4YVL`8I89FEv3K`FiO0sLZ-ONG<^UW(Q0cja%OLH#}|EfXkMYO--31~lOw=T^@ zwRm@~sRJBrTW@su6~d~1l+r!V2(g0YCy)gVa4(& ziC;8P9rR)pCcDsZs>uP=OB8wN1p+QALoM=P8Z_I}R3AvbzBh&TL=>c2pYw;p&lPVw zW)-Vmf*zcZr9mzmw($v{I-??f`iK>sWEJ#a6Sr=Cl_x*~M`X$Q!FtY=Xwx0o7R$sE zi$MEA9trE<+evWi3$nl}e;ip&`G(SZSS7^A`@Wn1^?G>5opUE>i|Idu>0H0w)S;qQ z(cq%r$+Z9DV`zB;)hCZIu0Yo290=7EX#*spVm^LyHywX2lxzdElSa{MjZVX8zBM3b zgTe(F+o(Mdyye@K*;Z+jcB(>{T6^VwH)g(o8dhh2_%yw@E} z)09P5eq#!`SO8w2)ELC)2>XU-@t!s+>TTrA* z+N_&kk(Yx|Lxg#d=Eqz6B+AV+XYRP=+I~u%1mFcQ`O@@qb?x`h2_hhpvX^@<^Wr7& zj`D%*pYj%B{os0zdZi#4UUVZq3Zg3C<6GHw1!gk>hq@{&Yn209$AcXDx#D<*OUhgA@su{XCe!M-^y9usY%%tS3hr+k7D(64h z#Eyz2n)i<^nbv|oMsK4@Yvzl`Yj98w|3>KqRB8;RN4~2``4>X>pso~3?hdpmwYU}i zFL5j5rq!U(5x2a9zuV#?G`0)7ddam4c585V@5_lOjf{E4{1JSKMeM66t z^np@g6i*_OVw+Cp=WPpO%lKDDu3xCK?D$nv@)~>X7olc4Q7)-AO)k36n`6=JcNiY- zeQ(9ROFJxeta0{hP*(q7!`b;v<+}*AL6N-TRw@X>@chfj+7c&fWk6z%+NMnf;{Rg3 zARjb%NF?9G6ifQ25jrd|k+@nkYxShod!6krz5=lKuKkQ42{5y~I?-hiC{#Gv@asPxWWLT!;?zxiPR?x%;UunHBXEyL~eN zqd^7R;N!P)*ys8>?$$`8}+@?n2aLlRkibf1Elq-}O;uR`vG3oGWU8L?eVk>Fl>;OWuHfu@@Rg56IFIScb)^y5iRRgBxcWpmkW4D8ds2zaYMf(S(s)q!KDr6mL@|+Q}9lR=e zC6_>nQa(+Ndg==cr*(-)6uV5KW3+*=%$6`^c8)z_jh1S;`2AS}kxAc}xKD`e3}W00))2mA6s5}rQY0g{%6Q)Yu`9u`{%q?RhN zFntFA15Jq{xGCjnzUR-neLRojlG2}vHt_!gs(v#_e>nyrQZ&EGK-lJkpFp*+tsAox zUMR|sbT7MI?EwgI1yhx6{schrjtzalO0#XGR79hSNMS13+3KlFMC^q?oALF zbw+Y)04=e|@pK6PC3c}k-8?V@j3P1Q41TFj_Q)G~ox^|BM;8eikeJqE(mkYp;{LuG zsZkN0zZBceP9}LpqjMW8@@-y+Nc9=|B%(gBqWx@mXH;N95CjSc03bSZW%sOWaJrUQfY`Qusi(`#sQ{g!%zpzz$$U1Xg{1YM2-= zJo5Xs|3EGGZKeF)67p~q`UtcZBhrmdi}j_2!|kpqy=M%Q|3R(O_fhd#-~0dZZ1Z~! zn&r%3LUHyFI_kIYfagZv!O%7@v_g|S^Z8oIGN*990p0kh!~m4?hh-tt+;$3@rWiz3qod{eueAhL@|~%w|nE z$?z^tKb!Ro0Sd}8PW*uVCr|;k7-zWEIIh-@e*QvnAPzEX$AE&$?!%)uz))J=rxjBw zC;ODnWsuQbGUm_&q~*v7={A-+AX3&p*!;Ieana&z`JVk9c>ITW0h5|gdsuTcQM<8W z9rRc)CwQh6-Nl}lbkUEV@&bT%G!ZCa2O;M4l|QzUHH86*h1j9&XHt*-Mal}xv9&k; z_X9j+b3t4IsH!&|zt7ZkMhDTlUrj}fQ-9H+P}Tnl&X!D|sTfRU*2YS_fHnAo%Hd?` zi!YY0Xas^h2+T{AmluGlAnAgQBbOx=gNNt8{htDX1ELV09$y@LH{=KTc;5nA;5*QW z3iodyX-H(Q^HGmNX92O8v()p2NwK=lHkZ&pf5FcXb{PaO$_d`&0PMbE*K5H9inJlw z-I+;UomnqhOU+jv5@H{sH*7#L^^>e(e>EaeT-|{0!4b=lhJTF~VAGQ$7_L z<{eTN{rF2?L12!xzJXN=ypq3fx0oU0k6g(ifGQhSHw{^#f1>8&Fz%ZmB3X}GqInwO zVU9T3G1Uf{`7Ehyt%gltg?h*Ygj>0ij_x4+v{__Su@wm!lFeo<5dzK}jD@5wATDW9 z)7_Ic<;F6aE9X=7mp8MEbqylQslMi8wO?9NzUx5CNo6EW!4qpMpqLgQ^NAJ}Kk3I! z_7R9In-!Q#OH}xp563}RgJ~_~`xy>DW|7CVlGn3z8}z~E1G=&s$@Ly!GG6DA%-vu1u`p2kzWYf?m$|DInJ%eI|l1^kvYCw9$?p6R#V${)Teqw5Z%=P-2oWVeHK8R1_Fz(MD7;=HvrOm-WO z&M#%8)w?xb^rXH5tiqY&;oErE3lOs6pyCXoriLpbx5?Cha}*mp6RT= zl;66v$1zl)9V;}v8+!3zS!8aahB$mF$M;3vk6sITi)gMQ!E!LeEMi_4bpUMFBZo6) zN|Uu#l--UByaQ!ARJ0yKYQe#CV8gp;tfN_z(UADO!(jVtp$;&}&x477kEB~~HFNd& z&u*wjP91DO?MiA32O(v}}|2U_HaEkeLhvy|*nqhnqD4+B+zg z;6$3yk`~6knXG+GCLV|PMj;0zvg-XxegD+I$anfDSKB~T&PG~4C4`45fur~Q{(WMh z9FSg9D)B6YlF2aEU%9?V8e2+>9*7U9I|Ki6aajKjr2L8j4iy`QLaQYb1TKs1%U6K1 zQ<@d=zC4mv|3z}4g|EhRsP6St2zFythU^tDh}Q_-&wI&xl{6v^>y5|uO<9GKC(cvh z&J&y2g|f?XL6^|h126*B?(2NH2G%)iIUOYQm8gfiKX1z@UmIT#*%$kRa=~_1hP9TP z@4Ot@h-0DNZ$!r;6a-bw%Z+-}KJ@o9`OxY&;A}82W{7Ooj$;-mH5vS_{+fVa9K61( zMlqjB}Z9M6#M8Tcmwg=CD^`Q)@Z5w?Pbi)pl}Of1ft>_QW|PgGff4g z)*#dM+k`JcmpN}8ff>|EQA-KpW|XD?0G~AWfN>!yB}EJL>iA#INx_<9rw;^K9Aoz8 z+v>h4t7R}`G~vweOb2xpN7kp)7ra}#UW$EicS%Xyqtd+2sh)uOy=1>?xh26yiz4TtO<$I6=-{RO9NdDMn{OGpG#2?Q(5#G^Zhr%HJZ1GI_P2KSK*=3$S$qq$_7hIQLvua=bwO z&hr0zyIT8U^WZoLo`t)+*$UnQ0VWKzhS3_S87nsZPeqFnm(Cp)DL8DQ%3MamPkaF; z8?BK>A|+x^qvOX~%N}x`4px|;HwOGx?0fU(DEMLvHE?M`b8Q!D(!V_e8%FGYMh`>u zvd@Z!69h@)KJz+%Qxy@p z_O%iXp8tk zWLzvE5*O1tvtnXLNr5fD4IL`2Mo52s1T`)T>;aOt|^VF9@!S`5WF zS}Ntyj`m$`#)|UViD#s@z_ibEDx@MG=fc2!n+^J7$po|E4CPBp)`aX=fz7CvVDu%Z zdz^v(zN3VVt-w$LY%ppPR6(eEV<&jL{`P+ zfvGH`^s$!F*^Bt+G@Fz;ujJ!SaNtm+ej7}##0Smw2)GO8xz`sumS-$jggYJkxic9gOFlb8bg4#3RtH3`dvRV&re|g zcyl7AwR9bshqL)$=NGl!``cM@Ma$nM;@typd%Gj{8o|R&OQI#6&LcH1v(16I4H|ms z#gBl`Z47XWPUy$bggG2)$mAms-r-0RjUb~;%Pyg)EKP9VJ=moroJk*~NVZBf=vTJ> zjtDQWGgYbJd|CDxF@KRzRyf4E@aflHSs8dj<`ocd@`kcTW>%v znPVmuZSoMDPKlYRcuS5*@~r?FWrvw^(#g}RyOUF|1$}6F+M~QXq&B1%TiUXh;^^C_ zHX*pOkqljqbO-P6D##$7>xH9%V{KoByW;zLfE=va%U6h0*7j2`^x^t_c##I8t^@xr z8Q8}HAj0pXc@g#xvT%tZmVgO(qaxLeU$%uR!ujbx8R63=@F#4^0L2&{dt%Z=r!ilP z6!ML}do)+kyb(3K%h}F`X(w&DMT;EEKV1S7EH8N^@vq1VoT9H&Z=(>%2%jwADoh6> zHRJ3IOd+xsck;$JGAW&xrQtrP0VPyul)@4q);D!f`Po;}UaHE9)`K$Z(xOyOFO~F$ z%{BEX@)(JYh-(*v-4jtOwGY{Rl$DO?bjbynJ@+dQ=W%qmim05Disg0J1MV?#o)F6hZyHL`$J!nz8vZJHx`R zyzjIBZ8hW=!BkI^4#IMJ&ktrskjg~@aLKhz2Acx9g&{FsFZeQoM!hdAmV+*sc7Do7 z#U}v_cm9M!F+yvXT)Yv;*(mv{i`XM)puSGe!Sl5<|I;A>vCe$vsz{w;zu*RPI!=D_ z9t@C*-A@hFMnThUz>JG80D_Rrb@CuM1pwQ&K5m$c>rDqY$`q0)E zgD+nHG#o_{kJ1}(K~f;$O6(736+$BhM^=1YO1gyo_r^5?rJLoghk2s%tc_p+dmze< zAgdPCLG_JJbrB=+nt5-&#FR`?MIZGUTG5mdv-2HXt~B-a!SoP5jqoVcfY$ZQ{(?*8 zk*#`&bGK=Xowm)rJ?t1EKBlQ;M}AH(-y~t0%8Dd-!3ym7WwKmApSw>$W}R@qT-rWN z{d0Ls7)Ue8qRb94U`7VQ(6}50EP>VbqQI4}C}Kg<<4iW7e}CyIlSYDvN{{lrXjRjE zmK{7509=%ypk^y(wL*;1_!D(mG1a>5hma#E5}yZZLpz?kvYDzM?t_zkAKqg;t_Arv zhE6rQoe?iIv3dGY9DF;respkt{SUZc5A6chUv=PKDgXYq9W0OMc%9m%s;U>J@w-gY zdt7KJIl$DENY#+>@PPy+@wsu*#B%2Fsy391{*feddK;ETaXkSNlZni@G-t1c4@Y3s zp8d)@?A&}boV6bbE>8!!^TMJ}{ecnMQ(5BYr~u{>D1V+bPv=Gcs3JTQ4hfO1H4Q4$ zgq$T3zg^VWp6&!aPX=&8jBtabJF#200tpOwS{o3`65vQ=u=S6c*1cUCh97(f=>7Xrb)>s+;gcTLOF&SYY9rPI!QIhbjrvO|8 z+CZr+AEW!8>x_^0t9{)HzaE8prXYt0(A=WKB9z@-Qq(lFMPYyxs_fGVy2VWL5lArW zrSh>N5KL(JsO!bL*>OhSnFQaa{MAfk82&9>kro{(S!75JE|plz=On9SfN-^p2G3Hs zcPJkLmJql1mx1j8kD6lg=)19Zz&Clm2}W1PUyhDBujyRc4^d&E?tr zMZzqysx=^meP?~B1Ay!);-8K-T~;~&u5(4|#pT7{=DO|q+D^l2Kvv*A38QizAR2hi za47Cc^iA~@pyW5UXq7qNnr){%yHrFZVGAT+Uj~W>VgUhM zNmigLja0PY1Z!N~;D;&~CQ5U^B$-L9ugRPrvDE{DwZKItz8A})4wL~LzoBZ}S`Fg~ z{?QFtK#;PKaNPVYWRQ02+y#>~<&r4eE+fDGlq9sdV(1T$qnN({T8rlws$7+pcN6m> zR>P!ie}O@hYmuAn5&(wTV^9s#Q@38@-Wv%&&`Vga`d*ERo|4>;UbX=R@u8v3S9Dc` z3h~q#a)`r4Lss~mMT|B#;$cHMoTnXuF7^t7GJk~WjC9fBku0RnguZ+ekY z#@>2YG3H9`(O=t_miQ(A=Oo2t>RO~kO$0>UY#Fh^=eTK)2fZOXXF%ohw)b=5 z6Wz3Tsh2=yO1Yt$f0I-dCe##1_sIGQ2)?hl8>gmP)Td=+L*%jlQrCkvdw?j}7#)ob z{)3}zN`6Thu;t4FQ8FoOFMYx}$`paQHBdN2pY$S6y_7>zdukMDaR8MG({Jl(4!)>( zXxy4kNGA?IjxM>upjCWj@{l#*!4qVg;LFzY`cf<;lj-TH0)??9XddE^p5(7AvK%gCYuR$q#= z)c*zyZ!v(Ug#)ci-TP`65*&4C-;d?W1iM5{y-`klr3=Cc8ik-k9BX#W6OW}2H0m|) zK=?!osVPtOweS^8T0Wv)zCKu*Y2|^}j=~C&sUPBcjQA#KkI8&@OSQHu(NKFDgZ~|6 zM2623H~tF>WxqP)$<_7EC>uW&sSkE2o5rzrJXdRRe5#CBC>bb0Rp-v71q+s2A(=G3&M#-^383BLH<;M8D; zpk9O5eYk%fBf|$2X-K6DqM=OVn(2Ibw!~?9RL2Py_3W!s*hJ2|q?Ll}z!4D=VCM`L zK3GhlU0s3bPU-9s4gi5`^lV9gZ$VRe0OGO)>a4A?Nst%O&G+VL`57nZ3p?jAnwt=z znr{)Omb9`*FG$eWb1_vSui!8WT}f5`EgVC3hkQYJsT^-UB*9w-_dUVO2IzD|0LET} zPK3m@iZ}=6Yfr)nLyVo&J`It_No)Y344T=4S6F5=XcihVcIvb1APZ2p-hcak$vmf0CCQA}6HL>- zP36O<_|dVbI1uiM>DPrOl_Y(i7yc9*HrSIvd^^&y_c68((b}|A6XlCK!T&KBB)nh& zsj%aY2$zEc>V$KJbSZCSLXg4+kM%(kM_)iTA|Hk+8&P|=*)h!ZMqIGptUJE@P8~rgi{T3Z^8BgD4&s?#|FIhZ0a?Sh;OOJYAjSI| zB6pfC=IR)&j?-fa(din-^nRCfCXMjGc*N;j^wq2m~#aR z-I~cg*NqW^Py7g(XX)TKF>S%o0_5_Jf}XPrkYW_p7llH}s{rtU-oBc|`aQ}3Q}VdZ zg3(cpj~@??rf|*7H4mipZZH*X|NGJg6Yw)o^rcdz_6aq0(=@7QI0 zW10CL_RRz`V$McF3a3u4pTx)&^Czncm$FKV*m<(n7Dm{4{@c^`0VtOJAE3?{+XrSE zF%k5A7|gNFEMfZLmJUYWAKm&om`z8rN8UZAJ+J=vbKF8v4mIGoz#mb;#_JSP-_K|~0^TDMql{U8C5i0khaf9kyZVZ{e0pN3OUUYlRmvaH&X$o6JJNPZz?y&wJ*M2-A-?~K(& z37%w|y6%eS#1%;5zUX-}A=Km@j@6Xt$YFV)o^NNCfmKZN~7rnS;VL0TdNkJX-`lbyUCu4D6|CaAQ~d z;$V!=qyj|-P_!*sh$`fOi!FumUW+C2Ax&1a8^g2TRYPmLIjA4(7)B+*c_!x?K?@^I z91)39d~qF}7bqimZ9}XTOv(;1fO>+%wjx#O={JDuNj_K-xY#&p2V$snkQgGY(jdf9 z&Z18;-=OvHb8awp39f?hFh^jE_Q~qY_!xmZAv_zVf^mEd>@Xk2I_d~`7-WihRqBvN zsw{BhP5*G$sNe?3fq=pnU1tVvy#_8qOiy9A&gN~#p$O7AFcWZR5CTPFAy7MT;|XZ@(b6O-e&c-|aHQmyy8ZjSYdC>O zX9bv*d39(K*Hs44R7goiH-H{V`>1ASi|er@h`P_P~+hs*sItn)cw4bd z^-^S_CY?dZzU1iTO~Q^9a4=!wDfsjlp{dWd7`@=9eWwZfghBBhEV@bYGXnanPn9e? zG+LFKph%OV5@FZ4>%J)75gjA3Am&m6D61@&H<2EK1)d0t#2m-$e|E9+t6+;BHr|??Aefz5leB^3(}rD5mgi zZpJ626OlF`=ShIap#&oDL%_UXbtIdL=-Vp&@V@Skox0tIlD>LPx&+AL8v|kJNzb-G zVQhRdvyP4|UcjUBPM2*NedV9i25@J}7&Rs=oLGxbL1LU!NA(dNxZLKABfcX3qd~M- zYckgBck85Mr1`hG+b!`+X?Lqvf(7;ntvAX@E(X-J2iVfmVBiu4jCbrY@n_FkMQ#Pb zg_Xxhna591h#xyuft>TU@5n6b=N}G$U~6?5fT!*nF|M!b?}Pi6F84iGPkDM6SRz@O zo-9czsEj_y9BZy(O@()NM7GewbpnD!`d!Eyv$`7&g{FznES1B|0KiPxHolcVO0s=F zrvgN%&eH<%A|Z`Q9lx_JWwv>3#%D$V}bH!z{)Dz{xMIX*Pm9yp-2o{qbYF zzw}#5HtC*CDzy)8vocEN{ZYLIS2wxG7o0o?kXevcf#SUlL8`&{JeB40_mbY28xZQj z=N8G$?@Mmyum^g(7#gr*EEx$KmtE9eUS&9Ms3fm zamig#47T+Tj*>gxtsMPT-l7|ju78%{ z(5j=+XWmre{;clmr;Wt$ca#jBVj4dEy;`!5W5JwMmf}@I0q#9)7B|)LX3Ndp9REf` z!cF=7R~WX>w3r;8eFpIe=tC5#jJ(#GyHu7 zc2DabOuZG`9n`gD&^mNl-7AnECjugXk!=2y7s{Vf9tWiKat?eM@GY^Xt1F?6p@ik{ zT_^Ji6DV1#Gl~;%`a;4 zyj^}t!5zW&vAk4?1wm zV3fyTOcz$>Ej~l4ldi*ofY=ywlaQP7B~TKS9K_h_30uw}afnK)XtMq&7tkLxggZB1 zauCQM>=}1{rasfBc+9?0sz99Xfcij1;gsay;UU$N{sR}~m(}BmLC6U7=%dc;n!gY6T!VO%3nGV!s z86c6mNAc>_0PfwJt9zX_+Qok!##7F1=}>p~zJI;I*`S0{iHjC}wnlUXCBTY3Lb~Mk zX6PT99v_23Kd_^lRGJRgc-gpMEv(mG@y;rVtY2IUFC`Xbyq?9xu?h{A_em6rz1ihl ztB(KUVY4s5cY25C)%Q5~mD5}@>?ZR=D>aLyV%62G>nmSvVo;JF%C~tV4IA`T9*+dD zIE7L!B#(t)TK*Op8L3PDlGW$F19i4rgNfVf21~B;!9$~cb9mptaP@2`^aMd6;dU?` zAQbG?l3Kh-6hqLfR5tH)QrBssal}dxZA@hGDe?mDd5yJ^tasAWN@Wq?OvMVed;&}Q zXJDM;$CuZuK|vwML1qE;flv(^<=$V}7iO~zux`<{0CfIsTwi3FM<04*z0|L*jfRB< zXR*dRG;c=v@;FAB1@LX_QJrd^is;RXhJj7lh_#E>_k8l#my=hWsw)#G&e-ZZ!(8_r z;Sa^|N?y^-eCuBYxWznA-EJXyo z4Yrco_iZEgDVz*lf`pT3NE>U^^JE#PUY5DRkqBd>s^)Hf zE(Rzn-fUlt=!X6hxDqqVKayhzlp&Vyc7_iz(bRt+%ovDzD2uYJiJ8oiTuW_!e{(~n z&@7x8ia$F6$)6Pc{6$WX^LFX=?eecwt{;~azb4Mm?pTJ{aD;|%>BwhCL6EMfTm;uD z(8KnJe%$i_>h*=bC(=496sS9WzQpN=NR^kZ|J#t(8vs2oe=oZmi0HuzY#|&WjiLf{ z#R4F@W7V^oSAKP(VKCHy)<(zy4P8oBhWL=r$r)qsPukRds$8W1%7KBEy6^^Iy^azJ z?-}9xXK2xVF4VxaiHXuK6Hy)95W)yAQWeMMyJq1GpdjF0mP33pcm7rFe>c*B8W#Vd zAr^-D^2)OQf}^k=LQfT}s7T0~az-4`O5N(=9q)9U9RJyog?|~h-aSH2`{{*Q3Skx zEBUB1k{=SHs;!*As^youk~2eww7o%d^>qYS>j-teoGOl8D*8*pv{npB=}JPyGG7KU zYr?s_^5jZi-g>Mf@B6#>xseST=F#sK{>xst4fpI~L4v0J)J&#z6Q0Z0jJm%g5;iRk zE@bbNlu5b^bicll6uIiS<==?#w%8s>Ga!9(XaZ4HW%3_5)>hcAVJA`2qD#ifc|eH~ zA>gSnpXSYW#z&uo*+C9(|8#>bSBrFdYQndzu86aKDHRcMWP!+K$gi%uAFs6fNK5w`RI zCMR&q0wNj1CzZsQdTlkMEhx30+%4>S7?4<;=D4AfAD8n4gw$dYCT7buiNbC#r7nFm9@H7hzNkj#;h!;U38AUD+f^4#zeYfPI5`fBZB(d|8wX$J@}CV$ z<#-<3ziy>uuj`@$*#@h(xuYHZ#h1nv5C=swkMGg5Nx$xrsDkR4T}f#ioUcZ@JsEUj zN=+>aV%26%eI$=IzeOLpK;VWGxTbU9@&LiCw`6s^7l}nFtxPadT&4}Rn1083otuXi ztMrjt6x12&M1@}$L{nrfq4etX)UfYd7?+@X90;88&LEPy&gI0|=@&77S!T6NjEPsL zAA9uIe;fefAtfo&X2?7~`w47Q7X2r^aU43ux@7v+UD?HhADhTGtTgc1UU$pp!n@`b z+#=hy-Jcylj=rggJBfu5-1@b+}9wuywFQE#9HALS9EfWodwrg^+< zk4MCn{hjYu*Fj_!jSWP%EvLa&^V{2sJoLDY1_nNSx*E!CDPOM{-kjH5@cIoM9d0HM z!*?$7ih}+sM)ODg%$tOGTHIO=DrO;)_84duv`|J9!T$QN!Za_1@&@8d&z-Yuw;-7m zmL#D{)_AyF5+wy%B5_m*-1GM6v4miJ!jyHjS$oQVF#=7>;J8mAJXVYn}h40*|oW5HdaZ%&rZU5v%sd+(bT zHcX(NcIwZyCwq-Pz%txxJMCpG&kJ;=)#skwe^_ZFe#;p-iS1wsp+b+0$>SU& zLXAY2<5avy+u|P^m0JUXp|W4oh@Uj54Q+_oMxJk(T*_eDo+{-Ufn z->uFA@tG*U2vcC7ghdkfAoma{)S4usLZ+8sXvSvX3{;r+UR^7%Og*S9Zz6QLE4=wb zBTmV?M>asWTM6wE9-(3v=wMzfw6^E;9WQ-;pAz`Q(z2?w6)^aSQ}>s%VUYVI7d0!@ zrkw%35u6%WsH1zxnKd&;(vZ{i><&4YLzwf{0F_fW$KkNz{^;Q024(DsQfWv{ z`j|zPX8$gGB1&hZK;vT|IMvc)lS=*dI$xrYAMLq?UwoO$AJ&xOXcTjw!4w3d*zsFU=M6vIYon zmz86~30XY=UHyx}*d{RSFZ#-wU0$_;o4wKjkhAC;`p2w`Q7SX+x%b|TjOG)%rt zs;G=bao}SmIZ{HXw6WoQV?GX(tDmo&!`hUQ&Vy_X;aBekJ^OUAFbj_ zTzoQX=)j|f0KA#;mQ{3^Rq$_XEQzo$Cx=We<*t!vO2r&%_fWztf#TbVpoobkHTe6R zZEgy+lz8v<1Mue<_>-FQ5@&|(VGpGZA5sB-12yGK_gFUWn1aaD#sj}svF-$8Eu9rj zW{RuX*fFa%+$Ul!h(r=RF zpklei-WogTT@xjmH+TTRNk31>DW4i!`D8MTl`ot~CrSdlwph=O7Ngk|&X{!ZsT5o1 zr4fapRxQyBb#Sw0-2&7D^*PYKA6}k;@Iwc>oQz-R972=5%lC52hVxr}Z)b$~!&NQ* zywQn>EeQ-Iwy{s-pe{D3TYb{A{klyGvL>U+Liqi;4zzfa(HgrV{r|D|R$){&b~Oe z`#Be0j4;E@thL_te}8Ek8iy+ytQnaCly;%%NY<|z*EaX)8{fTV&E9L#xW5qFds(5F zUjU=h4zF^!zg@*6j>59Ey`7!g%sPtom&f8B2PbCwQaHm;$n{`n$Po}!Z2r$_lQT8>1^s@kB zKP7!Nk9Lc`>nQK_(=HF~-MmmtjKaP!*~c#K9<3`Z*(3T4vg9`)3)TjIXY7)7fK z#yo7lYSAOa+H5)>Pp{yu){}{Uhh5+>svS0KH*6%4UFOfPd4)Mm(FCBIyvDg7e3NHF znk!Z#25rz^7iH9H74(vk-7#gkwMfMuQXY}_~z2V6Ej5>1;Oz}jFI9w2C&do@gxLDoy$h7V$ z5(VX7d;)uc(n;r*i@|lAl=$zV*vxm!Jn0)bx!2%&W+Izu7L$gO&7>10i2`CPQZ-Pf zKO^g>*7bH`ehd8>z0d1yn*D8!XFxd$1FxTyWI^4=?RVqad(fqmF!%VN}RHm%`U=`5eodHV+uhR|4O z;EDgtR_Zmuj=>BGY_r05P2V9piVz7m8bAy;fhRXtnaS@oR(n3d21=XU#NbF$xxPDJ zAf7IJZ}DuT%E@ zH2(lg<)GL*t@y>hpW)SQ(CCE+{vTo_(96QOKtXuv%Fg#JFCJWNc1m@ui0Ooywo%fK zx4*Tb6;&KzDzeRokQhESr7Yo;_Q*30pZ30=rYdT6K9;bL0b*8aZXihn#RTbJE#Bek zB<7rUPcQrEUin?#ch^M~(Qi(KJNENZXs+49o{7{^SUCO#F6QZn)DwN(Z7R;Kq$18E zOXtB4%n2J~h4{;?6ybl&V<+oCt}&~q2y|=0eO?8yKiF5g);nf?DxI*G6yNZtBOPS) z>|-+ajk(}4wC5o4myB+{(W22Uf;BW0&J~?Q{43ZWWA$72;4(v)iuBQe;nvmhjmR}2AVzZ?VaZIa|6F3`#-Q9guF46v@y^q&E5*4asF@3v7 zJNo772mV0yPqM7+H*y{pJOouWmAX!N`SmzdN_JY&st|NzS95c@+D-bX)V>b#uq{&7 z70rtH2+3BJI#t>6uadUEyW7b8;gDRr21Zb=;hX%Zm1Q46j^fNnPJIzjy_xzK^J6Je zvUB=Rm0R78Rz;b<8!wrGeQ!+JlNo1%3jy7t8FcBzvp|3hK|K0e4ROTgT}qj`C%W%{ zf4k7CmeRvN=fO?8@~k%eFAqc-hcR}q@vg0gUc5EuY|W4mb#TBZ`rl>*ttM*85t$zc z0-yGL?&HbynA>gqGqT)gtNi>!?!&4sv0s3R4Fxv|d|sn%_+51OioL=5y4XJ|DjZ{$ z#w^Xui^qnIA)}^7eC%QsXD!)DcL7sPv)*_d7+)PH^C8rat}<5r8Y9YBMTr2d*5h)a zo!>4d$_d}FLn#=kull8Q3x`jG{hgs%;j7tj*#d6bkXY7#F>yTvZos&O>fb4APCSqM ziZC2c)8R4}{yNASE*OjSMl(2kgZl6wC*rFSs__Qg8kg8rekV1_SbRVebsIai{jd1H z5)px|3_-?jv6|=^#iz>Y>&XIwm=tc}hT(%(wKcBCdYhEIFWQe{si{A`tN%w34+%_L zr!Vp#IoYG4`r1SEyXs`1|3dc1lpjwZPzYB%hE5(l?-~9>Uy0ELPmTYZ%~vS4n1l`` zVX)`AwUd>q)FyMrt-%uLc(4AL^u`L%H>=DdwaV)yyDPnEBzo7^A=H7gZUspp04cq3 zeDFZAgdcb-3j<3VSOsD2_Ix zUWv#OUn1SDAw_eFH3H?*74~j{_f{CrIWn|>m=S)0GB<@1`;R`iM`}16C4Hbt6L<3S zH$WMo#-u!ucsF?n2;}AsWezkw#r?~I6Y@kU?%x>BVX1W)>0D5)&EZEBuWn7S*_SLa z-FBcTE;aI-7N4Dj0to{Torq5s7&52HZC&<={sJLU4?{4{8CQPp+Aymv%gs)b4$;UR z`nZDPZ*-9%lU^aF!xE_Wh<=*)lmXhAUpK%6C25Gi`V-YPk`uFErxRhm?|=63^0#w= zF%IL*ZQiN6fF(Yo$x06Rs6g0oACu51v&gzfPi*Fr|KGmXuc{ zRN%<6bVelmw`~gOh5-D()8=(Pqc9R39qRHDcnNCrlu-lHL2V4r4OKGXB%@bS8||KUtn#CCAlsVOp-uoL zPUQfRmICF2*!i6uO|3!faPyGA-$N@UyE)$b!9>n(q{;_T6N@4};Jl;qyC}pq%`~(E z?@h|S*abp;=t`LqA9wfIMvv}6C>Uj-t0Th78pslegiswZLMRfbsc({xg>qfLpk6Bx zT*Tg*zlfD}A@`I9`#&Ll%-F3Ya-xsv6?|)l^4D{EL7?JW36n7n{pEOD!vf~7zdDw8 zUWTzQCtsEUmge>k*Yc*GRer94yW{v>G5j5a&(Y5g;@;js46Ol8mpQpQe$iZ`k{=$ z-}{dmHZj5}opNJFzb;nj1+;%H8rPwWtd~D;EF!4vKRSy@B@jy9_OL3$$S_YPc~@Vm z^QCIF_OFN_uA8!efYPR^tEd!utGy$QvZ`*g+m6uw^|YPD)w<8mLLSh(IgdDx0At4d z_pRYid7Sjth;$tBi(q5rMlcKxZ5gn4zzro6G0oOOEzl#nh?l1Pc4DsfYE^m;3OX0X zzBd>MUPGSpLXk3loi$X?+%UY|g}ANu0zvefi5Uj!|K^@DqCjR7`u6th&A;ajH712V zYRvO*=qZ@7D+%}`E^fabi~Va!g#V4$p#S?$fb=qj1XISN$(y}@X*qp(bdTh(o&rSa zLSR29eY91(@}G<7ioGn}U*!NWZnVfBY`H)CPuN3^$s@*s{hwbWjRKE&*MjWV#=oar zWI$qiEW%AA675j+#Xs0~boc0n?jD~0pCfYxhkh@Z%3)w2|7hUX9^AR>D017$@ur=~ z&D(Z2oFxCRjm(w3{h!F(Y{I!~V}E+%gp2ua&uV4npvx&n_BRI_gAgYHLtQBR zb*DH|oCtZ&oJy2l!4V1n;+%sn2XNA&jqNi2J!GbQ5iZk-zWgr;TA5pklGwhqQs>{p zSOR@CvzGTo*Vyna9SC!ppQvW?{r^Jj*=hBH*`S|@bBSbIEMNlC9ekO-vns_ zPRvMC3X2e@e-Ay>0ytL*sJQ-puK$Za=Aw&c6&7tVNYXYTujhKI6Ke#@XppX2^!ap4~05cVIWS?L#)ncaenkcZNlg^rAYwNzCge2T68d2F zGr%Wf{xGt?He9i@bALI4uLO}qH*jO^`Rku%e%b2~lvEK(CsO_{MX(U6s7sI@QrJi5zDpB%eyl^99U<1#{s-X{ zCqcY^jw_s`fB*@HN|jH*{XI+Y?obfRc_>R}?ApGgn&K!|&F9_=ugg0iJ{hOvcItVn zTZo@rz_`qGlsVtTx&LW!$b}%r7fD(sg9kD|C^O*>77Dt6#fMrP|2SN}+Z;k_kBU<| zvtJ*um%(ORYNyTU=)1kXnj36@Qlkq@#dXrfn_)xresi|2w9fZ%v)#%qkWMTE8xgZq zvF&3xV0YWCwHl5_zAU7c<1{%I<;GVuOJO?WkH~ z3^L_DaPJo}i@5XY-Q8d^xbxRzNb$OnS#BC_0eo1)%7vD2dTB~xL#YYkMZ3#X4$Hcsf}>VN)qzfmzt)von(Gg$ylBL!17LT$-_ieKO(%)6gsa7JrcWE>FOch*@v)PVdC< zC$TZkBe*Wi5Qv`{-_z2TlwP!*rc3&uKF4pbKlqiX=n;j;rKb8c6G|*DdwP{Tnp~5i z?W=Dp%?I=DJBnWKnUx7$qzI_egiCtmal3>%+Lk9=rhNLRN;|qHVT<%42u9#lOv6^w zy6xH3qMZ-QZCra$%nH8uGzb`Q2EW@;ImA43X22afTX57vYLpt#ac)`R^FWs6)Nw{D z+N)EM*Fe$4j?i!x>c|SsZp*APSR4`b$7(u+S4#AY`tygO^(!CVS~U`NoBd;1 zj1xzB^+HNxk)i!#wxHRwCp2j72$Z%Cj~Cg?Vxx3HPF8{1u|+&m#^9!B32#7d^yrGO zWx}wJ(JKwo`@mn_kXh{xgY(EZ8{#v}5<@lp7z_vR4x;gG)N}^d596N7e|c8KwJ)lM zp%TjGe|A#%NQniFWpqa?>D&GOygk)E^wUVx{^60aCsdsvSYNRNuyT zV6lZ{Fw37k>N>{Bf>j=Ns2U3Enm?K+g`qeMImk$Uhb%T z?p_@zu=xd)P+f-c#j1pkU~Zd*jbMcy@B}DSRkCGBlj?rD@>&0`Sh>D9Un&pY zX0-pb4(@JU5t{09>b9fZy*Y{-sRXQkqP+I@=$Ggat)f*Od6&2k+~+<@uD|TQhY}xL zQvmM|lz3aeycwobPVji#=|P}A5reP&bcT$ql71wuFr$Cp*l}N}PKLPI9)-#ETfMO? zX0Z={b%cj2x7(sSSktG57|ITs?{5{bS&l0AvD?zCBwrNm2OD|75z$RuV~lE-|0PUZeRUh}dXBQb3L^BQfMIU~s5j*3z zecT};s5axS)c-SINXn0SmqaFjjdE^q{dPL@T@34kK98}Nnymg~xR?q!v{W|8jrk=MLDdPbZiQs5d8HGo9A0 zJ-6Ey16BG&!Br;Q)eTm5Y9DrKk42?Cfz#vfQ_puRZ3PxN?n7QCQCBzta*Ko>m5V9< z+|PxgzI-kce7+R3pr^-d>cMYiWwN9t}*hWj!0R6Wp&cG}~&zdB?LwMhz2?)Fs@n}IDIxlfELcOF7jP0viOf>Z4f z;^O4Vy(Ry|ZZXzHy^u>ayp?DgF^+28;nK#|OcNRV1i5}+Xf1nBC>MWO=Wt?=NKQZL zuK<4#n@_dBpRDCak0?mA6=?flF>Q_>_|>NqPLJj^U;$U~XC{+2@l@9ZE6S&W=PtF3 zIP@A8TDUb^9pAh19mH-ml^fY?mKU(<6jd;~a=ulZ_J@spF>2H0!|J9_Yvt5DmX}}MeU}?xjA~HpNCFG#;GPNmJ zAYeFJy}SR@D=}3k)B?#i&41r_%@UVq?zCTPri-=^=B&xhiBf-8;)*Q1OqAHR5bL9> zS&)D;`953D-(gb|UYZ47nnm_rU!3f^{Mt~aCgy;u1=N3cLM}^dZRUx2bTi@n8`c`_ zLcQmTt>ZKqD(x__xW9crQ$^6}>7zs0PJ$}VG}h*0WX+r_lq)QwZ3A5EP0;A?7QbDDan(k_jk`Ye1&8P7PXAX)+av5v>O z(&}{N@{w{GtlX1uRXA=x>vj(8j-=Ut-P*sm%k}$aVfN}r+T(PnB@H6BbY(N*3?=q~ zpQlQ%#0bi1^z1QKs@6#FO&;@W+_EJ|U9SL&q}BY{>|xT@#X~lwHeM=FsA*w(z5KQ9 z`U1*)a)=pl%AhC0Q!3jE�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 Settings *and at the top of the opened Settings window add the created folder path. +. Make sure all the required libraries from the „link:20-libraries.adoc[Libraries and their use]“ list are installed. To do so, in your Arduino IDE, go to *Arduino > Add library > Manage libraries*. In the opened window of the libraries manager you may find all the installed libraries as well as all the available libraries on the Internet. +It is recommended to install the libraries versions stated in the list even though they might be outdated. + +. Set the compilation target. The compiler has to be told what exact model of an ESP32 board to compile for. In case of this project it is „*XIAO_ESP32C3*“. To do so, in your Arduino IDE, go to *Tools > Boards > ESP32 Arduino > XIAO_ESP32C3*. + +== Opening the project + +. Open the folder for Arduino IDE projects (the one created in step 2 above) in your terminal and use the following command to get yourself a copy of the project: ++ +[source,bash] +---- +git clone https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign.git +---- + +. Open your Arduino IDE and go to *File > Projects > 42-Smart-Cluster-Sign > src*. Your project will open. +. The project comes without any security-sensitive credentials. They may be found printed on the back of the Sign or obtained from the Bocal team. Rename the „*credentials-example.h*“ file included in the project into „*credentials.h*“ and fill-in the credentials from the Sign. +WARNING: DO NOT COMPROMISE THE CONFIDENTIALITY OF THE CREDENTIALS !!! + +WARNING: REPORT ALL THE OCCURED LEAKS TO THE BOCAL TEAM IMMEDIATELY !!! + +== Uploading the changes + +There are 3 ways how to update the device: + +* using Arduino IDE and a USB-C data cable (described here), +* wirelessly using OTA update (described in link:08-cloud-pull-ota-updates.adoc[Updating the Program Using Cloud-Pull OTA]), +* using compiled binary, Terminal and a USB-C data cable (described in link:09-uploading-compiled-binary.adoc[Uploading the Program as Compiled Binary]). + +. Connect the Sign to your computer if you have not done so by this time. +. Activate the software update mode. To do that, on the back of the Sign locate button *B* and button *R*. First, press and hold button B. While holding button B, press and release button R once. Then release button B. Software update mode is now active. +. In Arduino IDE, go to *Tools* and set the following settings as follows: + +* Upload speed: 115200 +* CPU Frequency: 160 Mhz +* Flash Frequency: 80 Mhz +* Flash Mode: "QIO" +the fastest mode for the flash memory +* Partition Scheme: "Minimal SPIFFS" +do not use partition schemes marked with "No OTA" +* Core Debug Level: "Verbose" +the most detailed debugging output into the Serial monitor +* Erase All Flash Before Sketch Upload: "Disabled" +* Port: choose the development board port. + +. In Arduino IDE, click the Upload button to start uploading. diff --git a/docs/tech_documentation/08-cloud-pull-ota-updates.adoc b/docs/tech_documentation/08-cloud-pull-ota-updates.adoc new file mode 100644 index 0000000..51f4b27 --- /dev/null +++ b/docs/tech_documentation/08-cloud-pull-ota-updates.adoc @@ -0,0 +1,318 @@ += Updating the Program Using Cloud-Pull OTA +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +This instruction explains how to update the program running on the device using the cloud-pull OTA update system. + +First of all, just so you know, if you have physical access to the device, updating the Sign using Arduino IDE and a USB-C data cable (as described in link:07-development-environment.adoc[Getting ready to maintain and develop the project]) would be much faster than via OTA! + +Second of all, to use the cloud-pull OTA update described here, you have to be registered as a Collaborator in this GitHub repository: link:https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign[https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign] + +Ask your Bocal to contact the GitHub repository owner and request to register you. Add your GitHub public profile name to the request. Requests other than via your campus Bocal will be ignored due to the security reasons. + +OTA means “Over-The-Air”, in other words, that the device can update its own firmware without being connected to the computer with a USB cable. In this project we are using cloud-pull OTA system that works like that: with your computer you upload the new firmware file to the cloud (in our case the cloud is GitHub Releases), and the device downloads it by itself from the cloud. It is pretty much just like your phone or computer does it when it gets a software update. + +Before it downloads anything, the device receives update information from the manifest file stored in the GitHub repository. The manifest is a simple JSON file that tells the device which firmware version is available, where the firmware file is located, how large the file is and what SHA-256 hash the file must have. The firmware binary itself is stored in GitHub Releases. + +The device can start the OTA update check in three different ways: + +* by sending the OTA command through Telegram. +* by pressing the physical OTA button on the device. +* automatically, once a week, on predefined days of the month. +== Step-by-step update workflow — Ultra-short instructions version + +. Finish developing the new feature or bug fix. +. Increase the *SOFTWARE_VERSION* number in the *config.h* file. +. Compile the project in Arduino IDE into a firmware binary file. +. Open the OTA manifest file and find the correct device entry. +. Update the firmware version in the manifest. +. Find the firmware binary file in the *src* folder. Give it a clear name, including board name and version. Get the its exact size in bytes from the file Properties or *ls -la* command. +. Update the firmware file size in the manifest. +. Create a new GitHub Release with the matching version tag. +. Copy the firmware binary SHA-256 hash and update it in the manifest +. Copy the firmware binary download URL and update the manifest. +. Make sure „enabled“ is set to „true“. +. Commit and push the manifest changes. +. Trigger the OTA check through Telegram, the physical OTA button, or wait for the automatic scheduled check. +. Wait for the device to download the manifest and verify the data. +. Wait for the device to download the firmware from GitHub Releases. +. Wait for the device to install the firmware and reboot. +. Confirm that the device is running the new firmware version. +*Detailed update workflow – Full instructions version* + +The update process starts when you have just finished developing a new feature or fixing a bug and now want to upload those changes to the device. + +IMPORTANT: First thing first. Before compiling the project, go to the *config.h* file and make sure the program version number in the *SOFTWARE_VERSION* macro has been increased. Do not change the X.XX format of the version number! + +For example, if the device is currently running version 4.34, the new firmware should be version 4.35. The version number is important because the device uses it to decide whether it should update or not. If the version in the OTA manifest is the same as the version already running on the device, the device will not download the firmware again. If the version in the manifest is older than the version already running on the device, the device will also refuse to update. This protects the device from reinstalling the same firmware or accidentally downgrading itself. + +After increasing the version number, compile the project in Arduino IDE -- go to „Project“ and click on „Export compiled binary“. + +When the project compiles successfully, export the compiled binary file. This binary file is the actual firmware image that the device will download and install. + +Most likely you will find it in the *src* folder of the project on your computer. It will have a name something like *_src.ino.XIAO_ESP32C3.bin_*. + +The firmware file should have a clear name that includes the board and the version number. So, rename the firmware file into something nicer like firmware-xiao-esp32c3-v4.35.bin. This makes it easier to understand later which file belongs to which release. + +After exporting the binary file, check and write down its file size. It will be used in the manifest. + +WARNING: Do not use the project size that Arduino IDE says after the compilation is finished!!! Arduino IDE rounds up that number! + +Instead, go the the file properties of the compiled firmware binary file and get the exact size in bytes from there. OR use classic *ls -la* in the Terminal and you will see the file size will be in the middle column. + +The file size is needed because the device checks the size before downloading and flashing the firmware. If the firmware file is larger than the available OTA partition, the device refuses to update. This is done before downloading the whole file, so the device does not waste time, battery power, or network traffic on an update that cannot fit into flash memory. + +Create a new GitHub Release. Go to *https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign/releases* and click on „Draft a new release“. + +The release tag should match the firmware version. For example: v4.35. + +Describe the release by writing what is new in this version. + +Drag and drop the firmware file to the „Attach binary“ field. + +Click „Publish release“. + +Get the SHA-256 hash of the firmware file from GitHub Release. You will see it in GitHub Release next to the firmware binary file name. Copy it. + +The SHA-256 hash is a long hexadecimal value that uniquely identifies the exact content of the file. The device calculates the SHA-256 hash while downloading the firmware. After the download is complete, it compares the calculated hash with the hash you put in the manifest. If the hashes do not match, the device refuses to install the update. This protects the device from corrupted downloads and from accidentally installing a wrong firmware file. + +Get firmware binary file download link from GitHub Release. This link will be used in the manifest. + +Hover over the firmware binary file name with your mouse and click the Right mouse button. In the poped-up menu click on „Copy the link“. + +Edit the OTA manifest. Open the OTA manifest file in the repository. + +The manifest contains the update information used by the device. The manifest has a default section and a devices section. The default section is used when there is no special update entry for a specific device. The devices section is used to target individual devices. Each device can have its own firmware version, URL, size, SHA-256 hash, and enabled flag. The device checks its own device name or device ID and searches for a matching entry in the devices section. If it finds one, it uses that device-specific entry. If it does not find one, it uses the default entry. + +To update a specific device, change the entry for that device in the devices section. + +The device entry should contain the new version number, the GitHub Releases download URL, the SHA-256 hash, the firmware file size, and the enabled flag. + +The enabled flag must be set to true if the device is allowed to install this firmware. + +If enabled is false, the device will read the manifest but refuse to install that firmware. + +Before committing the manifest change, carefully check the following things. + +The version in the manifest must be higher than the version currently running on the device. + +The URL must point to the correct firmware binary in GitHub Releases. + +The SHA-256 hash must belong to that exact firmware binary. + +The size must match the exact size in bytes of that firmware binary. + +The enabled flag must be true for the device that should update. + +The device name or device ID in the manifest must match the device name or device ID used by the firmware. + +After checking the manifest, commit and push the manifest change to GitHub. + +At this point, the update is prepared. + +The new firmware file is available in GitHub Releases. + +The manifest points to the new firmware file. + +The device can now discover and install the update. + +Triggering the update with Telegram + +The first way to trigger the OTA update is through Telegram. This is the manual remote update method. Use this method when you want the device to check for updates immediately and you are not physically near the device. + +Send the */ota* command to the device in the Telegram chat. After receiving the command, the device sets the com_g.ota flag. The com_g.ota flag tells the main program that an OTA update check has been requested. The device then enters the normal OTA handling logic. The important detail is that Telegram itself does not directly download or install the firmware. Telegram only tells the device to start the update check. + +*_(OTA program logic description)_* + +Once the update check starts, the device connects to Wi-Fi if needed. Then it downloads the manifest from GitHub. After downloading the manifest, the device searches for its own device entry. If a device-specific entry exists, the device uses that entry. If no device-specific entry exists, the device uses the default entry. + +Then the device checks whether the selected entry is enabled. If enabled is false, the device stops the update process. If enabled is true, the device compares the version from the manifest with the version currently running on the device. If the manifest version is the same as the current version, the device does not download the firmware. If the manifest version is older than the current version, the device also does not download the firmware. If the manifest version is newer than the current version, the device continues. + +Next, the device checks the firmware size from the manifest. If the firmware is too large for the OTA partition, the device stops the update. If the firmware fits, the device starts downloading the binary file from GitHub Releases. + +While downloading the firmware, the device also calculates the SHA-256 hash. After the download is finished, the device compares the calculated SHA-256 hash with the SHA-256 hash from the manifest. If the hashes do not match, the device refuses to install the update. If the hashes match, the device finalizes the OTA update and prepares the new firmware for boot. + +Then the device reboots. After rebooting, the device should be running the new firmware version. + +To confirm the update, you may send /status command in Telegram or find the firmware version in the Serial output. If the device reports the new version number, the OTA update was successful. + +Triggering the update with the physical OTA button + +The second way to trigger the OTA update is by pressing the physical OTA button on the device. + +Use this method when you are physically near the device and want to force an update check without using Telegram. + +The physical OTA button does not contain a separate update system. Pressing the button simply changes the state of the com_g.ota flag. This is the same flag that is used when the OTA update is requested through Telegram. When the program later reaches the OTA handling logic, it sees that com_g.ota is active. Then it starts the same cloud-pull OTA update check. From this point onward, the process is identical to the Telegram-triggered update. + +The device connects to Wi-Fi if needed, downloads the manifest from GitHub, selects the correct manifest entry, checks whether the update is enabled, compares the manifest version with the current firmware version, checks whether the new firmware file fits into the OTA partition, downloads the firmware file from GitHub Releases, calculates and verifies the SHA-256 hash, installs the firmware, reboots. + +After the reboot, the device should be running the new firmware version. + +The physical OTA button is useful as a local manual fallback. If Telegram is unavailable, blocked, unstable, or temporarily not working, the update can still be triggered directly on the device. + +Triggering the update automatically once a week + +The third way to trigger the OTA update is automatic. The device checks for updates on specific predefined days of the month. The current logic is based on fixed days rather than storing the date of the last update check. In its current configuration, the device checks for updates automatically on the 3rd, 11th, 19th, and 27th day of each month. The exact days can be changed directly in the ota_handling() function in the ota.cpp file. + +The purpose of the automatic update check is to make sure the device can still update even if Telegram is not working and nobody presses the physical OTA button. This makes the update system more reliable. + +The automatic update check does not mean that the device will always download firmware on those days. It only means that the device will check the manifest. If there is no newer firmware version, the device does nothing. If the manifest points to the same version already running on the device, the device does nothing. If the manifest points to an older version, the device does nothing. + +Only if the manifest contains a newer enabled firmware entry for that device will the device continue with the update. When the automatic update condition is true, the device starts the same OTA handling logic used by Telegram and by the physical OTA button. + +The automatic update check may include a short random delay before connecting to GitHub. This prevents multiple devices from all checking the server at exactly the same moment. The delay should be short, for example less than one minute, because the device is battery-powered and should not waste energy. + +NOTE: The original document marked this section `// TO-DO: FIX THE TEXT FORMATTING`. + +What happens inside the device during the update + +When the update process starts, the first important file is the manifest. + +The manifest is a small text file in JSON format. + +The device downloads it from GitHub and reads it. + +The manifest does not contain the firmware itself. + +It only contains information about the firmware. + +The most important fields are the firmware version, the firmware download URL, the file size, the SHA-256 hash, and the enabled flag. + +The device uses the manifest to decide whether it should update. + +This is safer and more flexible than hardcoding the firmware URL directly into the device. + +If the firmware URL was hardcoded, the already-installed firmware would need to know the future firmware URL in advance. That would be inconvenient and fragile. + +With the manifest, the device only needs to know the manifest URL. The manifest can then be changed whenever a new release is created. + +After selecting the correct manifest entry, the device compares versions. + +The current firmware version is stored in the program itself. + +The target firmware version comes from the manifest. + +If the target version is not newer, the update stops. + +If the target version is newer, the device checks the firmware size. + +The ESP32-C3 uses two OTA application partitions. The currently running firmware is in one partition. The new firmware is written into the other partition. After the update is completed, the device reboots into the new firmware. + +This is why the firmware file must fit into the available OTA partition. + +If the size check passes, the device downloads the firmware binary from GitHub Releases. + +During the download, the device writes the firmware into the inactive OTA partition. + +At the same time, the device calculates the SHA-256 hash of the downloaded data. + +After the download is complete, the device compares the calculated hash with the hash from the manifest. + +If the hash is wrong, the update is aborted. + +If the hash is correct, the update is finalized. + +Then the device reboots. + +After rebooting, the ESP32 bootloader starts the newly installed firmware. + +How to confirm that the update worked + +After the device reboots, check the firmware version. + +The exact confirmation method depends on the current program features. + +If the device reports its version through Telegram, send the appropriate status or version command. + +If the device prints the version to the serial monitor during boot, open the serial monitor and check the boot message. + +If the device shows the version on the display, check the display. + +If the new firmware has a visible behavior change, confirm that the new behavior is present. + +A successful update means that the version reported by the device matches the version uploaded to GitHub Releases and written in the manifest. + +For example, if the device was running version 4.34, and the manifest pointed it to version 4.35, then after reboot the device should report version 4.35. + +If the device still reports version 4.34, the update did not complete or the manifest did not actually point to a newer firmware. + +Recommended release procedure + +First, finish the new feature or bug fix. + +Second, increase the firmware version number in the source code. + +Third, compile the project. + +Fourth, export the compiled binary. + +Fifth, check the binary file size. + +Sixth, calculate the SHA-256 hash of the binary. + +Seventh, create a new GitHub Release with the matching version tag. + +Eighth, upload the binary file to the GitHub Release. + +Ninth, copy the firmware download URL. + +Tenth, update the manifest with the new version, URL, file size, SHA-256 hash, and enabled flag. + +Eleventh, commit and push the manifest change. + +Twelfth, trigger the update using Telegram, the physical OTA button, or wait for the automatic weekly check. + +Thirteenth, wait for the device to download, verify, install, and reboot. + +Fourteenth, confirm that the device reports the new firmware version. + +Common reasons why the device may refuse to update + +The manifest version is the same as the current firmware version. + +The manifest version is older than the current firmware version. + +The enabled flag is false. + +The device name or device ID does not match the entry in the manifest. + +The firmware URL is wrong. + +The firmware file was not uploaded to GitHub Releases. + +The firmware size in the manifest is wrong. + +The firmware is too large for the OTA partition. + +The SHA-256 hash in the manifest does not match the downloaded file. + +The device has no Wi-Fi connection. + +The device has unstable power or low battery. + +GitHub is temporarily unreachable. + +The Telegram command was received, but the OTA check found no newer firmware. + +Important notes + +The device does not update just because a file exists in GitHub Releases. + +The device updates only when the manifest tells it to update. + +The manifest is the control point of the OTA system. + +GitHub Releases is only the storage location for firmware binaries. + +Telegram is only one of the ways to request an update check. + +The physical OTA button is another way to request the same update check. + +The automatic weekly update is a fallback way to request the same update check. + +All three methods use the same cloud-pull OTA logic. + +A successful OTA update is confirmed only after the device reboots and reports that it is running the new firmware version. diff --git a/docs/tech_documentation/09-uploading-compiled-binary.adoc b/docs/tech_documentation/09-uploading-compiled-binary.adoc new file mode 100644 index 0000000..56593b8 --- /dev/null +++ b/docs/tech_documentation/09-uploading-compiled-binary.adoc @@ -0,0 +1,45 @@ += Uploading the Program as Compiled Binary +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +There is a third way of how you can upload your program into the memory of the device — compile the program into a .bin file and then upload it manually in the Terminal. This method is overly complicated, so do not use it unless necessary. In 99,9% of cases the first method – described above in the *Uploading the changes* topic of link:07-development-environment.adoc[Getting ready to maintain and develop the project] – is the best way to go. This third method is good in two cases: for some reason you cannot compile the project on this computer but it compiled on another computer; you want to show off your cool skill of flashing microcontrollers with a bare command line in your Terminal. + +== The Uploading Process + +So, you have got your .bin file. Let’s flash it into the Sign’s memory. Read all the steps first, before working on them. + +. For this process you will need a CLI software tool called *esptool.py*. If you have already installed Arduino IDE and its ESP-IDF extension, you probably already have esptool.py as well. To confirm that, let’s find esptool.py on your computer. On macOS, esptool.py is usually located here: +*~/Library/Arduino15/packages/esp32/tools/esptool_py/ > Version-numbered folder > esptool* +In my case the full path looked like this: +*MacintoshHD/Users/romanalexandrov/Library/Arduino15/packages/esp32/tools/esptool_py/4.6/esptool* + +If you see esptool on your computer, that’s great. Note down the path to the esptool executable and go from here straight to the step 2. + +If you cannot find esptool, Install Arduino IDE and add the ESP-IDF extension. This way esptool will get installed as well. User-friendly instructions on how to do it may be found here if you scroll down to the topic „*Installing Arduino IDE*“: +link:https://randomnerdtutorials.com/getting-started-with-esp32/[https://randomnerdtutorials.com/getting-started-with-esp32/#esp32-arduino-ide] + +The online instruction suggests to download and install the latest version, but the project was built using Arduino IDE version *1.8.19* and the „esp32“ board version *3.0.7*. Compatibility with the later versions was not tested, this is why it is recomended to use these, even though outdated, versions of the tools. + +Once you are done installing Arduino IDE and its ESP-IDF extension, go and find esptool on your computer. + +. Connect the Sign to your computer if you have not done so by this time. +. Activate the software update mode. To do that, on the back of the Sign locate button *B* and button *R*. First, press and hold button B. While holding button B, press and release button R once. Then release button B. Software update mode is now active. +. Open your Terminal and run the command *ls /dev/cu.** to find wich port the Sign is connected to. In the results, look for somethig like /dev/cu.usbmodemXXXX or /dev/cu.usbserial-XXXX or /dev/cu.esp32c3. Once you found the port name, note it down as we will need it later. +. In the Terminal, navigate your way into the folder where your .bin file is located. To start uploading the .bin file into the Sign, you will need the following command: + +~/Library/Arduino15/packages/esp32/tools/esptool_py/*/esptool \\ +--chip esp32c3 \\ +--port YOUR_PORT_NAME \\ +--baud 115200 \\ +write_flash 0x10000 YOUR_BIN_FILE_NAME.bin + +In the command you should change YOUR_PORT_NAME to the port name you acquired from the step 4. For example: +--port /dev/cu.usbmodem1101 +You should change YOUR_BIN_FILE_NAME.bin to the name of the .bin file. For example: +write_flash 0x10000 42-Smart-Cluster-Sign.ino.XIAO_ESP32C3.bin +. Once you hit „Enter“, the upload will begin. Do not worry if you encounter errors. esptool usually gives very discriptive explanations to errors. In the worst case scenario, ChatGPT may help you. +. When the upload is finished, press the *R* button on the back of the Sign once — that will reboot the Sign and start the execution of the uploaded program. + Done. You are amazing. diff --git a/docs/tech_documentation/10-firmware-rollback.adoc b/docs/tech_documentation/10-firmware-rollback.adoc new file mode 100644 index 0000000..1e80ce9 --- /dev/null +++ b/docs/tech_documentation/10-firmware-rollback.adoc @@ -0,0 +1,544 @@ += Everything about the Firmware Rollback Functionality +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +. *Overview* +The firmware rollback functionality is a safety mechanism designed to protect the device from becoming unusable after a faulty OTA update. + +The project already supports Cloud-pull OTA updates. This means the device can download a new firmware binary from GitHub Releases, verify it, write it to the inactive OTA partition, and reboot into it. + +However, OTA updates introduce an important risk. + +If the newly installed firmware contains a serious bug, the device may crash, stall, or enter a reboot loop before it becomes possible to send another OTA update. If the device is physically inaccessible, this could make recovery impossible. + +The firmware rollback functionality reduces this risk. + +Its purpose is to detect that a newly installed firmware did not complete a normal execution cycle and automatically switch the device back to the previous OTA partition which contains last stable firmware version. + +In simple terms: + +The device installs a new firmware. + +The new firmware is given one chance to run correctly. + +If the new firmware successfully reaches the normal sleep stage, it is considered safe. + +If the new firmware crashes or stalls before completing the cycle, the next boot switches back to the previous firmware partition. + +This functionality acts as a custom software rollback system. + +It was implemented because the native ESP-IDF bootloader rollback mechanism was not active in the Arduino IDE environment used by this project. After OTA updates, the newly installed firmware was observed to boot as ESP_OTA_IMG_VALID instead of ESP_OTA_IMG_PENDING_VERIFY. Because of that, the standard ESP-IDF rollback confirmation mechanism could not be used as expected. + +. *Why Firmware Rollback Is Needed* +OTA updates are powerful, but they are dangerous if there is no recovery mechanism. + +A normal OTA update can successfully install a broken firmware. The installation process may be completely correct: the file may download correctly, the SHA-256 hash may match, the firmware may be written to flash correctly, and the device may reboot successfully. + +The problem appears after the reboot. + +For example, the new firmware may contain a bug that causes: + +a CPU panic, + +an illegal instruction fault, + +a watchdog reset, + +an infinite loop, + +a crash before Telegram starts, + +a crash before Wi-Fi connects, + +a crash before the OTA logic can run again. + +In such a situation, the device may repeatedly reboot into the same broken firmware. + +Without rollback, the device could be permanently stuck until someone physically connects it to a computer and flashes healthy firmware through USB. + +This is exactly the situation rollback is meant to prevent. + +. *Native ESP32 Rollback Limitation* +The ESP32 OTA system normally supports bootloader-level rollback. + +In the native ESP-IDF rollback model, a newly installed firmware is first booted in a pending verification state. The firmware must then confirm that it works. If it crashes before confirming itself, the bootloader can automatically return to the previous firmware. + +This project investigated that mechanism. + +The device has a correct OTA partition layout with two OTA application partitions: + +app0 + +app1 + +It also has the OTA data partition required for switching between OTA slots. + +However, in the Arduino IDE environment used by the project, the newly installed firmware booted directly as valid. It did not boot in pending verification mode. + +The observed state after OTA was: + +ESP_OTA_IMG_VALID + +The expected state for native bootloader rollback would have been: + +ESP_OTA_IMG_PENDING_VERIFY + +Because the firmware was already marked valid before the application code started, functions such as esp_ota_mark_app_valid_cancel_rollback() and esp_ota_mark_app_invalid_rollback_and_reboot() could not provide the expected automatic rollback behaviour. + +For this reason, the project implements its own software rollback mechanism. + +. *High-Level Rollback Idea* +The custom rollback system is based on three main ideas: + +a persistent rollback flag stored in LittleFS, + +reset reason detection, + +manual switching between OTA partitions. + +The rollback flag is stored in a LittleFS file. It survives resets that erase RTC memory as well as firmware updates. The reset reason is used to decide whether the previous reset looked like a real firmware failure. + +The OTA partition switching is done with ESP-IDF partition APIs. If the current firmware appears to be faulty, the device sets the other OTA application partition as the next boot partition and restarts. + +The simplified logic is: + +If the firmware is marked verified, it is allowed to start a test run. + +At the beginning of the run, the firmware marks itself untrustworthy. + +If the firmware reaches normal sleep, it marks itself verified again. + +If the firmware crashes before normal sleep, it remains marked untrustworthy. + +On the next boot, if the firmware is untrustworthy and the reset reason indicates a crash or watchdog reset, the device switches to the other OTA partition. + +. *Meaning of the Rollback States* +The rollback flag uses the FIRMWARE_t enum: + +[source,c] +---- +typedef enum { +VERIFIED = false, +UNTRUSTWORTHY = true +} FIRMWARE_t; +---- + +The names describe the current trust state of the firmware. + +VERIFIED means that the firmware is allowed to run. + +UNTRUSTWORTHY means that the previous run did not complete successfully, or that the rollback state could not be safely read. + +The logic intentionally uses a negative state name. + +This is important because boolean and RTC-style globals are false by default on the first run after USB flashing. By making false mean VERIFIED, the first wired firmware upload does not immediately trigger rollback. + +. *Persistent Rollback Flag in LittleFS* +The rollback flag is stored in a LittleFS file: + +/defective_firmware.txt + +The file contains one character: + +0 means VERIFIED. + +1 means UNTRUSTWORTHY. + +LittleFS is used because RTC memory did not survive all relevant reset types on the tested device. Manual reset, core panic, and ESP.restart() were observed to reset RTC globals. Therefore, RTC memory was not reliable enough for rollback state storage. + +LittleFS is more suitable because it stores the rollback state in flash memory. Reads do not meaningfully wear flash memory. Writes do wear flash memory, but the rollback flag is written only rarely: + +when the firmware starts a verification run, + +when the firmware successfully completes the run, + +when rollback is about to switch partitions, + +before OTA reboot. + +This is a very small number of writes compared with the lifetime of the flash memory. + +LittleFS also provides wear-leveling behaviour, which reduces the risk of repeatedly wearing the same physical flash sector. + +. *Aggressive Fallback on LittleFS Failure* +The rollback flag reading function is intentionally conservative. + +If the flag file cannot be found or opened, the function returns UNTRUSTWORTHY. + +This is intentional. + +The rollback system treats an unavailable rollback flag as a potentially unsafe state. + +The reasoning is: + +If the firmware is broken and LittleFS also fails, the rollback mechanism should not silently trust the firmware. + +Instead, the reset reason detection is allowed to make the final decision. + +This creates a second layer of protection. LittleFS state is the primary rollback state, but reset reason detection acts as an additional safety check. + +. *Reset Reason Detection* +Not every reset means that the firmware is defective. + +The device can reset for normal or harmless reasons. + +For example: + +manual reset, + +software restart, + +power-on reset, + +deep sleep wake-up, + +brownout or power instability. + +Rollback should not happen for all of these. + +The rollback system checks the reset reason using esp_reset_reason(). + +Only suspicious reset reasons are considered rollback candidates. + +The suspicious reset reasons are: + +ESP_RST_PANIC + +ESP_RST_TASK_WDT + +ESP_RST_INT_WDT + +ESP_RST_WDT + +These reset reasons indicate that the previous firmware run likely crashed, stalled, or failed to feed the watchdog. + +Non-suspicious reset reasons do not immediately cause rollback. + +This prevents normal behaviour from being mistaken for firmware failure. + +. *OTA Partition Switching* +The ESP32-C3 uses two OTA application partitions: + +app0 + +app1 + +At any given time, the device is running from one of them. + +When a rollback is required, the firmware selects the other OTA partition as the next boot partition. + +For example: + +If the device is currently running from app0, rollback selects app1. + +If the device is currently running from app1, rollback selects app0. + +The switching is performed using ESP-IDF APIs: + +esp_ota_get_running_partition() is used to find the currently running application partition. + +esp_partition_find_first() is used to find the other OTA application partition. + +esp_ota_set_boot_partition() is used to tell the bootloader which application partition should boot next. + +After the boot partition is changed, the device restarts. + +On the next boot, the bootloader starts the selected partition. + +. *Rollback Function Behaviour* +The main rollback function runs early during boot, after LittleFS has been initialized. + +This timing is important. + +It must run early enough to catch a faulty firmware before the device reaches dangerous or unstable code. + +It cannot run before LittleFS is initialized, because the rollback flag is stored in LittleFS. + +The function first checks whether the firmware has already been verified during the current run. + +If the firmware has already been verified, the function returns immediately. + +Then the function reads the rollback flag from LittleFS. + +If the flag says VERIFIED, the firmware is allowed to run. The function changes the flag to UNTRUSTWORTHY and returns. + +This gives the firmware one full run cycle to prove itself. + +If the firmware reaches the end of the normal cycle and enters sleep, it will change the flag back to VERIFIED. + +If the firmware crashes before reaching sleep, the flag remains UNTRUSTWORTHY. + +On the next boot, the function reads the flag again. + +If the flag says UNTRUSTWORTHY, the function checks the reset reason. + +If the reset reason is not suspicious, rollback is skipped. + +If the reset reason is suspicious, the function switches to the other OTA partition and restarts the device. + +. *Successful Firmware Run* +A firmware run is considered successful only when the device reaches the end of its normal execution cycle. + +For this project, that means the firmware reaches the final stage before deep sleep. + +At that point, the device has already completed the important parts of its runtime logic. + +The firmware has booted. + +The filesystem has initialized. + +The device state has been restored. + +The battery logic has run. + +The main program logic has run. + +The display logic has had a chance to run. + +The device has reached the point where it is ready to sleep normally. + +Only then is the firmware marked VERIFIED again. + +This is done near the end of the sleep function, before the device enters deep sleep. + +This placement is important. + +If the firmware were marked verified too early, a later crash in the same cycle would not trigger rollback. The whole purpose of the rollback mechanism is to make sure the firmware proves that the entire execution cycle can complete. + +. *Failed Firmware Run* +A firmware run is considered failed if it does not reach the normal sleep stage. + +For example, the firmware may: + +crash with a CPU panic, + +execute an illegal instruction, + +stall until the watchdog resets it, + +enter a reboot loop, + +fail before reaching the end of the cycle. + +If the firmware fails before normal sleep, the rollback flag remains UNTRUSTWORTHY. + +After reboot, the rollback function runs again. + +If the previous reset reason was suspicious, the function assumes that the current firmware is defective. + +Then it switches the boot partition to the other OTA application partition and restarts the device. + +This restores the previous firmware version, assuming the previous partition still contains a working firmware. + +. Interaction with OTA Updates +The rollback system works together with the Cloud-pull OTA update system. + +When a new firmware is installed through OTA, it is written to the inactive OTA partition. + +For example: + +If the device is running from app0, the new firmware is written to app1. + +If the device is running from app1, the new firmware is written to app0. + +After the OTA update completes successfully, the device reboots into the new firmware. + +The rollback flag is prepared so that the new firmware gets one chance to run. + +If the new firmware completes the full cycle, it is marked verified. + +If the new firmware crashes or stalls, the next boot switches back to the previous partition. + +After rollback, the broken firmware remains in the inactive partition. + +A later OTA update can overwrite that broken partition with a corrected firmware version. + +. What Rollback Protects Against +The rollback system protects against bugs that happen after the rollback check is able to run. + +It can protect against: + +crashes in the main firmware logic, + +watchdog resets, + +illegal instruction crashes after startup, + +logic bugs that prevent reaching sleep, + +firmware versions that stall before completing the run, + +broken OTA versions that cannot reach the next update check. + +This is the main risk the system is designed to reduce. + +. What Rollback Does Not Protect Against +This is a software rollback mechanism, not true bootloader-level rollback. + +It cannot protect against every possible failure. + +It does not protect against failures that happen before the rollback logic can run. + +For example, it may not protect against: + +a crash before setup starts, + +a crash in global/static object initialization, + +a crash before LittleFS initialization, + +a bootloader problem, + +a corrupted partition table, + +both OTA partitions containing broken firmware, + +physical flash failure, + +power loss during critical flash operations. + +Native bootloader rollback would provide stronger protection, but it was not active in the Arduino IDE environment used by this project. + +The implemented rollback system is therefore a practical Arduino-compatible fallback. + +. Why the Other Partition Is Used +The ESP32 OTA layout stores two firmware images. + +Only one is currently running. + +The other one usually contains the previous firmware or the next firmware being written. + +When the device updates successfully, the new firmware becomes the running firmware, and the old firmware remains in the other partition. + +This makes rollback possible. + +If the new firmware fails, the device can switch back to the other partition. + +The bootloader then starts the previous firmware again. + +This is why the project does not erase the previous firmware immediately after an OTA update. + +. Behaviour After Rollback +After rollback, the device restarts into the other OTA partition. + +This should normally be the previous stable firmware. + +The rollback state is cleared so that the device does not bounce endlessly between app0 and app1. + +The recovered firmware can then continue normal operation. + +If a corrected firmware version is later uploaded to GitHub Releases and written into the manifest, the device can update again. + +The next OTA update will normally overwrite the inactive partition, which may currently contain the broken firmware. + +. Difference Between Verification and SHA-256 +The project uses two different safety checks: + +SHA-256 verification, + +firmware rollback verification. + +These checks solve different problems. + +SHA-256 verification checks that the downloaded firmware file is exactly the expected file. + +It protects against corrupted downloads, wrong files, or mismatched release assets. + +Rollback verification checks that the firmware actually works after it has been installed. + +A firmware file can pass SHA-256 verification and still contain a serious bug. + +Therefore, SHA-256 verification is not enough by itself. + +SHA-256 proves that the file is correct. + +Rollback proves that the firmware can run successfully. + +. Difference Between Version Checking and Rollback +Version checking prevents unnecessary or incorrect updates. + +The device compares the currently running firmware version with the version listed in the manifest. + +If the manifest version is not newer, the device does not update. + +Rollback solves a different problem. + +Rollback deals with what happens after a newer firmware was successfully installed but turned out to be defective. + +Version checking decides whether to install. + +Rollback decides whether the installed firmware is safe to keep. + +. Testing Performed +The rollback system was tested using intentionally defective firmware. + +A healthy firmware version containing the rollback functionality was installed on the device. + +Then a new firmware version was built with an intentional critical bug. + +The defective firmware was uploaded to GitHub Releases and installed through the Cloud-pull OTA system. + +After the OTA update, the device booted into the defective firmware. + +The defective firmware crashed. + +The rollback mechanism detected that the previous run did not complete successfully. + +The rollback mechanism switched the boot partition to the other OTA application partition. + +The device restarted. + +The previous healthy firmware booted successfully. + +This confirmed that the custom rollback system works as intended. + +. Safety Notes +The rollback code is safety-critical. + +A bug in this code could prevent future OTA updates or cause the device to boot the wrong partition. + +For this reason, the rollback implementation should not be modified casually. + +Any change to this file should be tested with physical USB access to the device. + +The most important rules are: + +Do not mark firmware verified too early. + +Do not switch partitions unless the reset reason is suspicious. + +Do not erase the other OTA partition during normal operation. + +Do not assume RTC memory survives all reset types. + +Do not rely on native ESP-IDF rollback unless the bootloader actually boots new OTA images as pending verification. + +Do not test rollback only with successful firmware. + +Always test rollback with intentionally defective firmware before trusting changes. + +. Summary +The firmware rollback functionality provides an additional safety layer for the Cloud-pull OTA update system. + +It prevents a faulty OTA firmware update from permanently trapping the device in a crash loop. + +Because native ESP-IDF bootloader rollback was not active in the Arduino IDE environment, the project implements its own software rollback system. + +The custom rollback system uses: + +a LittleFS rollback flag, + +reset reason detection, + +manual OTA partition switching, + +full-cycle firmware verification. + +A new firmware is trusted only after it completes a normal execution cycle and reaches the final sleep stage. + +If it crashes or stalls before that, the next boot switches back to the previous OTA partition. + +This makes the OTA update system significantly safer and reduces the risk of remotely bricking the device. diff --git a/docs/tech_documentation/11-hardware-maintenance.adoc b/docs/tech_documentation/11-hardware-maintenance.adoc new file mode 100644 index 0000000..b9c0476 --- /dev/null +++ b/docs/tech_documentation/11-hardware-maintenance.adoc @@ -0,0 +1,26 @@ += Hardware Maintenance +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +The Sign generally does not require any assistance, but it needs to be charged once every so often. If you have not ever charged the Sign before, it is OK, since its high-capacity inner battery allows the Sign to operate up to half a year on a single charge. + +If the Sign needs to be recharged, it will indicate it by displaying the „LOW BATTERY“ note next to the cluster number as well as sending a notification into its Telegram chat. + +Needed hardware: + +* *5V* power adapter, +* USB-C cable, compatible with the power adapter. +To charge the Sign: + +. locate a round opening on the side of the wooden frame; +. look inside the opening - there you should see a USB-C female connector; +. find a cable with a USB-C male connector that fits the round opening; +. if the cable is too short to reach the power socket, carefully take the Sign off the wall. +To do that use both of your hands! Grab the wooden frame from its top and its bottom – that will prevent it from falling. Do not pull the Sign from the wall with your arms. Instead start pushing your fingers deeper between the frame and the wall – at some point the Sign will simply detach from the wall and stay in your hands; +. connect the Sign to the 5V power adapter with the cable; +. plug the 5V power adapter into a power socket; +. look at the opening in the frame again - you should see red light comming out of it, which means that the Sign is now charging. If after a few seconds there is no red light, that may indicate a poor connection or lack of electricity. +. wait for the red light to turn off – typically about 10 hours – that indicates that the Sign is fully charged. diff --git a/docs/tech_documentation/12-functions-reference.adoc b/docs/tech_documentation/12-functions-reference.adoc new file mode 100644 index 0000000..ec25dca --- /dev/null +++ b/docs/tech_documentation/12-functions-reference.adoc @@ -0,0 +1,291 @@ += Functions Reference +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +[#program-files-description] + +== Program Files Description + +[cols="1,2"] +|=== +|src.ino +|Main file. Despite being written in C, it has to have the .ino extention as it is the Arduino IDE file format. Other source files may have other extentions. The file name has to be the same as the folder name it is contained in – as you may see in this project. + +|42-Smart-Cluster-Sign.h +a| +Main header file that includes all necessary libraries and declares functions used across the project. + +IMPORTANT: Including ota.h at the bottom of the file is not coinsidential – it has to be kept below the OTA functions declarations for the OTA update to work. + +|battery_management.cpp +|Initialize inner ADC module, measure battery voltage level, assign the results to a battery state, act upon the battery state. + +|bitmap_library.h +|Contains all the images to be displayed on the device screen in bit-map form. The complete images list can be found in the file. + +|buttons_handling.cpp +|Buttons initialisation and interrupt service routines. + +|cluster_number_mode.cpp +|Everything that the Sign does outside of the exam time: gets exact time, checks exams, displays system warnings if there are any, displays cluster number. + +|config.h +|Constants to adjust and tune the program behaviour. E.g. software version number, device name, DEBUG macro, Serial port baud rate, the Sign’s wake-up hours, Wi-Fi connection time limit, etc. More about it in the *link:12-functions-reference.adoc#the-config-file[The config file] *chapter. + +|constants.h +|Constants that are not expected to be ever changed. General constants, buttons and display SPI port configurations, display driver coniguration, images and errors enumerators. + +|credentials.h +|Contains project confidential information, such as Intra API authorisation data, Telegram bot token, Wi-Fi access point SSID and password. If instead of credentials.h there is only credentials-example.h, then in the *link:07-development-environment.adoc[Getting ready to maintain and develop the project]* chapter, please, navigate to „Opening the project“, point 3. + +|display_handling.cpp +|Functions for outputting images and text onto the display, cluster number drawing logic, display initialization. Using display.powerOff() in the drawing functions may trigger the watchdog with high probability. + +|exam_mode.cpp +|Everything to handle informing students about an exam and the pre-exam time. + +|file_system.cpp +|Manages file system operations, including reading from and writing to files. + +|globals.h +|Declares global variables and includes necessary libraries. + +|globals.cpp +|Defines global variables used across the project. + +|intra_interaction.cpp +|Handles interactions with the 42 Intra API, including fetching exam schedules. + +|ota.h +|Manages OTA updates, including initializing and handling OTA update processes. + +|utils.cpp +|Contains functions like sleep, delay, Wi-Fi connection, serial initialisation and exam simulation. + +|power_down_recovery.cpp +|Handles power-down recovery, including reporting reboot reasons and calling for viable variables check. + +|telegram_bot.cpp +|Manages interactions with the Telegram bot, including checking and responding to messages. + +|telegram_compose_message.cpp +|Composes messages to be sent via the Telegram bot. + +|time_utilities.cpp +|Contains time-related utilities, including fetching and calculating time. + +|watchdog.cpp +|Manages the watchdog timer, including starting, stopping, and resetting the watchdog. +|=== + +[#the-config-file] + +== The Config File + +The config.h file contains configurable parameters for tuning the software behavior of the 42 Smart Cluster Sign project. This file allows you to adjust various settings, including software version, device name, debugging options, and time-related configurations. To customize the behavior of the 42 Smart Cluster Sign project, modify the values in the config.h file according to your requirements. Ensure that the changes you make are consistent with the overall project requirements and do not conflict with other configurations. + +*SOFTWARE_VERSION*: Defines the current version of the software. The software version number can be seen in the debugging output in the Serial monitor as well as in the Telegram chat message when the Sign receives the „/status“ command. The software version number is an essential tool for tracking bugs and the program installed on the physical device. + +[source,c] +---- +#define SOFTWARE_VERSION 4.32 +---- + +*DEVICE_NAME*: Specifies the name of the device, that can be seen in the Ports list when updating via OTA. + +[source,c] +---- +#define DEVICE_NAME "42 Prague C3 Smart Sign" +---- + +*DEBUG* macro: Enables or disables serial output for debugging. Comment out the „#define DEBUG“ line to turn off serial output or uncomment it to turn it on again. The macro does not affect the Core Debug Level, which you set in the Arduino IDE Tools. Changing the DEBUG macro and/or the Core Debug Level will change the dynamic of the whole program execution which might introduce new bugs or solve existing ones. + +[source,c] +---- +#define DEBUG +#ifdef DEBUG +#define DEBUG_PRINTF(...) Serial.printf(__VA_ARGS__) +#define WD_RESET_INFO true +#else +#define DEBUG_PRINTF(...) +#define WD_RESET_INFO false +#endif +---- + +*EXAM_SIMULATION* macro: Uncomment this line to simulate an exam starting at specified time. Useful for testing exam mode execution when there are no actual exams. The macro injects fictitious information about an exam (by default, scheduled for today from 18:00 till 21:00, 4 students attending) into the message from Intra, which causes the Sign to believe that there is an actual exam that day. If needed, the fictitious exam information may be changed in the exam_simulation() function, located in the utils.cpp file. + +CAUTION: *_When you are finished with the tests, do not forget to comment out this line and flash the software onto the Sign again to turn off the simulation. Otherwise the Sign will be showing the fictional exam every day._* + +[source,c] +---- +#define EXAM_SIMULATION +---- + +*GCC Optimization* macro: Lets you expicitly tell the compiler how to optimise the program code. Be adviced that different levels of optimisation may influence the dynamic of the whole program execution in different ways. In practice, it means that one level of optimisation may introduce new bugs to the project; another level of optimisation may solve those bugs, but introduce completely new ones. Settle on one level of optimisation before starting debugging the project. + +* O0 — no optimization (default for the project); +* O1 — basic optimization; +* O2 — moderate optimization: slight program performance increase; +* Os — optimize for size: O2 level + optimizations to reduce program size; +* O3 — high-level optimization: better performance, but bigger program size; +* Ofast — optimize for speed: highest possible performance but may break standards compliance; +* Og — optimize for debugging. +[source,c] +---- +#pragma GCC optimize ("O0") +---- + +*BAUD_RATE*: Sets the speed of the serial communication. + +[source,c] +---- +#define BAUD_RATE 115200 +---- + +*WAKE_UP_HOURS*: Defines the hours at which the Sign should wake up and check if there are any new exams. The format is a comma-separated list of hours (24-hour format), e.g. 9 means „at 9:00“ (9AM), 18 means „at 18:00“ (6PM), and so on. Note, that every hour is separated by a comma, but there is no comma after the last wake-up hour. Adhere to this format when removing or adding wake-up hours. You may change the existing wake-up hours, delete them or add new wake-up hours. There always should be at least one wake-up hour. Maximum number of wake-up hours is 24. Please, keep in mind that there is no such time as 24:00, instead use 0 (for 0:00) if you want the Sign to wake up at midnights. + +[source,c] +---- +#define WAKE_UP_HOURS 6, 9, 12, 15, 18, 21 +---- + +*RETRIES_LIMIT*: Sets the maximum number of retries for getting time and exam information. Be adviced, that every next retry is 5 minutes longer than the previous one. E.g. the 1st retry will occur 5 minutes after the default try, the 2nd retry will occur 10 minutes after the 1st retry, the 3rd retry will occur 15 minutes after the 2nd retry, the 4th retry will occur 20 minutes after the 3rd retry, the 5th retry will occur 25 minutes after the 4th retry, and so forth. It is recomended not to exceed the number of 5 retries. + +[source,c] +---- +#define RETRIES_LIMIT 3 +---- + +*TIME_ZONE*: Specifies the campus time zone according to the GMT / UTC standard. *_IMPORTANT:_* If in the country of the campus location it is common to switch between winter time and summer time, use the WINTER TIME time zone only! Include "-" sign if it applies to the time zone of your cluster. Do not include "+" sign. + +[source,c] +---- +#define TIME_ZONE 1 +---- + +*CONNECT_TIMEOUT_S*: Sets the timeout for Wi-Fi connection attempts (in seconds). + +[source,c] +---- +#define CONNECT_TIMEOUT_S 5 +---- + +*DEBOUNCE_DELAY_MS*: Defines the debounce delay for button presses (in milliseconds). The lower the number, the faster the button responds, but the probability of errors to occur grows. + +[source,c] +---- +#define DEBOUNCE_DELAY_MS 1000ul +---- + +*WD_TIMEOUT_MS*: Sets the timeout for the watchdog timer (in milliseconds). Limited to a maximum timeout of 8 seconds (8000 milliseconds). + +[source,c] +---- +#define WD_TIMEOUT_MS 8000 +---- + +*OTA_WAIT_LIMIT_S*: Defines the maximum wait time for OTA updates (in seconds). + +[source,c] +---- +#define OTA_WAIT_LIMIT_S 600 +---- + +[#functions-description] + +== Functions Description + +== main file functions + +setup(): initializes various components, including the watchdog timer, display, file system, buttons, battery, power-down recovery, battery check, Telegram bot, and OTA updates. + +loop(): handles the OTA update waiting loop and calls the pathfinder() function to determine the next action based on the current status. + +pathfinder(): the function determines the next action based on the current status, including handling exam mode and cluster number mode, and then puts the device to sleep for the calculated time. The function deliberately uses two if-statements since the exam_status may change its value inside the first if-statement. + +== Display Handling + +draw_text(String output, uint16_t x, uint16_t y): Draws text on the display at the specified coordinates. + +draw_exam_start_time(): Draws the exam start time on the display. + +draw_bitmap_partial_update(const unsigned char* image, uint16_t width, uint16_t height): Draws a partial bitmap image on the display. + +draw_colour_bitmap(const unsigned char* black_image, const unsigned char* red_image): Draws a full-color bitmap image on the display. + +draw_bitmap_full_update(const unsigned char* image, uint16_t width, uint16_t height): Draws a full bitmap image on the display. + +display_cluster_number(IMAGE_t mode): makes decisions of whether to draw something on the display or not to draw; calls drawing functions when necessary. REFACTORING RECOMENDED. If you refactor the function, please, do not forget to change the documentation accordingly. + +clear_display(): Clears the display. + +display_init(): Initializes the display. + +== Exam Mode + +exam_mode(): Handles the exam mode, including displaying exam-related messages and images. + +== File System + +secret_verification(String input): Verifies the secret token. + +data_restore(const char* file_name): Restores data from the specified file. + +data_integrity_check(): Checks the integrity of the file system and restores necessary data. + +write_to_file(const char* file_name, char* input): Writes data to the specified file in the FS. + +read_from_file(const char* file_name, char* output): Reads data from the specified file in the FS. + +file_sys_init(): Initializes the File System. + +== Intra Interaction + +fetch_exams(): Fetches exam schedules from the 42 Intra API. + +== Telegram Bot + +telegram_check(): Checks for new messages from the Telegram bot and handles them. + +compose_message(int32_t subject, int16_t days_left): Composes messages to be sent via the Telegram bot. + +== Time Utilities + +expiration_counter(): Calculates the number of days left until the secret token expires. + +unix_timestamp_decoder(uint8_t* p_day, uint8_t* p_month, uint16_t* p_year): Decodes a UNIX timestamp into day, month, and year. + +get_time(): Fetches the current time from an NTP server. + +time_till_wakeup(): Calculates the time until the next wake-up. + +time_till_event(int8_t hours, uint8_t minutes): Calculates the time until a specified event. + +time_sync(unsigned int preexam_time): Synchronizes time before an exam. + +== Watchdog + +watchdog_start(): Starts the watchdog timer. + +watchdog_reset(): Resets the watchdog timer. + +watchdog_stop(): Stops the watchdog timer. + +watchdog_init(): Initializes the watchdog timer. + +== Other Functions + +go_to_sleep(uint64_t time_in_millis): Puts the device to sleep for the specified time. + +ft_delay(uint64_t time_in_millis): Delays execution and puts the device into light sleep. This function helps saving battery power by turning off the Wi-Fi and the Bluetooth modules of the device. Do not use it there where you need to maintain wireless connection. + +wifi_connect(): Connects to Wi-Fi. + +serial_init(): Initializes the serial communication. + +power_down_recovery(): Handles power-down recovery, including reporting reboot reasons. + +exam_simulation(): Creates a fictitious exam information for the EXAM_SIMULATION macro. diff --git a/docs/tech_documentation/13-architectural-decisions.adoc b/docs/tech_documentation/13-architectural-decisions.adoc new file mode 100644 index 0000000..7716365 --- /dev/null +++ b/docs/tech_documentation/13-architectural-decisions.adoc @@ -0,0 +1,143 @@ += Architectural Decisions Explained +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +Even though the program code of the Sign is pretty straight forward, there are some architectural solutions that are not that clearly obvious. Here we will try to address these uncertainties and make sure the program code is fully understandable. Be adviced, that the article assumes that you have already seen the source code as well as read some previous articles here, namely link:04-program-run-overview.adoc[General description of the program run], link:05-program-run-step-by-step.adoc[Program run step-by-step], link:12-functions-reference.adoc#program-files-description[Program files description], link:12-functions-reference.adoc#the-config-file[The config file], link:12-functions-reference.adoc#functions-description[Functions description], link:14-intra-api.adoc[How to get exams info from Intra]. + +== src.ino file + +If you are new to Arduino IDE, setup() and loop() functions are standart for this workframe. Treat them as you would treat main() in a .c file, it’s just here there are 2 functions instead of 1. Do not swap these two functions places, do not place anything between them, do not rename them. + +WARNING: First, *setup()*. I have been told that the order of functions inside setup() seems somewhat random, that you can change the order and nothig would happen. It was just one opinion, but I must address it, since this misconception may cause big problems. The placement of every single function inside setup() was achieved through hours of testing and debugging, so the order is in fact very much intentional and strict. Misplacing them may cause a whole variety of bugs. + +* watchdog_init() shall be the first as it makes sure the whole program runs or resets after fail; +* display_init() has to be called before serial_init(). Otherwise the SPI initialisation inside display_init() will interfere with the start of the serial communication and some debugging messages in the beginning of the program run will not be shown correctly in the Serial monitor; +* generally, in projects, the serial communication shall be established as soon in the runtime as possible, to show even the earliest runtime bugs. This is why some people would expect serial_init() to be called as the very first. Yet, watchdog_init() has a priority because not only watchdog detects problems, but also can solve them by restarting the device. The serial_init() function itself is not imune to problems at all. Then there is display_init() which is explained in the previous bullet; +* file_sys_init() does not have to be exactly in this place, but it surely should be called after serial_init() since it may output some Serial debugging messages. Also, file_sys_init() shall be called before power_down_recovery() since this function may initiate the process of lost variables recovery from the file system – and for that, as you may imagine, it needs the file system to be already initialised; +* buttons_init() placing is not strictly dependant on other functions, but still has some logic to it. From one side, it is nice to give the user control over the device as soon as possible, hence the function gets called relatively early in the runtime. From the other side, this function initialises Interrupt Service Routines (meaning that pushing the buttons interrupts the normal program execution), that is why it was decided to allow all the communication ports and the file system to initialise before ISRs do – without interrupts. I am not saying that an interrupt happening during e.g. the file system initialisation may necessarily cause fails, but there is a chance. And since ISR bugs are also tricky to debug, it is better to simply avoid this risks no matter how small they are. +* battery_init() has a somewhat similar logic to it: it has to be called before battery_check() for obvious reasons, but other than that it could be moved around. Inside of it, battery_init() calls for ADC initialization. It has been rumoured that in certain cases the actual ADC hardware initialization, which happens behind the scenes, may take longer than the initialization function execution, which in turn may ruine ADC measurements made exactly after ADC initialization call. This claim was not tested in this particular project. But, just to be safe, it was decided to separate battery_init() (which makes the ADC initialization call) and battery_check() (which makes ADC measurements) with another function – in this case power_down_recovery() – in order to create an artificial time delay; +* power_down_recovery() can detect and handle brown-outs. Since brown-outs limit the program runtime to a split of a second, power_down_recovery() has to be called as early as possible. On the other hand, in reality, a brown-out would be an extremely rare occurance. In the software, there are other mechanics implemented to prevent the battery from discharging down to the level where brown-outs may start happening. +In any case, power_down_recovery() shall be called before battery_check(), because if there is a brown-out, it is way too late to measure the battery charge. Also, since power_down_recovery() triggers recovery of lost variables from the file system after device hard reset, it shall be called after file_sys_init(); +* battery_check() can put the device into extensive sleep if the battery charge is too low. This is why this function should be called before any serious work, like connecting to Wi-Fi and checking the Telegram chat, starts being executed. On the other hand, it should not be put before power_down_recovery() – explained in the previous bullet; +* telegram_check() uses Wi-Fi connection, which is power-demanding – this is why the function shall be called after battery_check(), so we already know that the device has enough battery charge for a wireless connection. telegram_check() works with the file system, so it shall be called after file_sys_init(), too. telegram_check() can change the state of the OTA flag (essentially, activation or deactivating OTA), so the function shall be called before ota_init(); +* ota_init() has to be as close to ota_waiting_loop() as possible and it has to be inside setup(). The position of this function is so optimal, that I would not consider moving it under any circumstances. +Now, about *loop()*. + +In a typical Arduino program, execution starts when the device is powered on. First, the code inside setup() runs once, and then the code inside loop() runs repeatedly, over and over, until the device is powered off. In other words, in most Arduino projects, the program cycles endlessly inside loop(). + +In this project, things work differently. The device uses a power-saving mode called Deep Sleep, which allows it to turn itself off and back on automatically. Each time the device wakes up, it starts fresh: first running setup(), then running loop() once, and finally going back to sleep again. This means the program cycle includes both setup() and loop(), instead of looping only inside loop(). + +It is important to note that the name loop() is required by the Arduino framework. Even though in this project loop() executes only once per cycle, the function must still be called loop(). + +Inside loop() you may find ota_waiting_loop() and pathfinder(). ota_waiting_loop() has to be as close to ota_init() as possible while still remaining inside loop(). I do not have a better explanation for this arrangement other than this is how it is required to be by the ArduinoOTA library. Since pathfinder() also puts the device into Deep Sleep, it shall be the last function to be called. Anything put after pathfinder() will not ever be executed. + +Finally, *pathfinder()*. It uses rtc_g.exam_status boolian variable as a flag to decide if to run exam mode that program cycle or not. Cluster number mode gets to run always since it is the default mode. Exam mode fully handles all that related to an exam including calculating how long to sleep for to wake up from Deep Sleep exactly after the exam. If the Exam mode runs, it will put the device to sleep itself, meaning that the program cycle would end in the Exam mode. There are a few points in the program where a program cycle ends and the device goes into Deep Sleep – here, in pathfinder() it is one of them. + +== 42-smart-cluster-sign.h file + +IMPORTANT: One thing in the file that stands out is the "ota.h" inclusion command being at the very bottom. It is not a mistake. It is the result of a workaround that allowed to use the basic Arduino Over-The-Air functionality with Deep Sleep. There might be a separate chapter on this workaround in this documentation. But here and now, it is important to say only that if the inclusion command was moved elsewhere, OTA functionality would not work any more. + +== battery_management.cpp file + +— + +== bitmap_library.h file + +Every unsigned char array is an image. In the head of the file you may see the table with the images information. Location represents the number of the row the image array starts from. + +== buttons_handling.cpp file + +The pins D3 and D9 are the only two pins which are not physically connected to anything, in other words they are floating. Untreated floating pins may cause hardware related bugs. Usually, such pins would be physically connected to the ground with resistors. Luckly, ESP32 has internal resistors that can be programmed to connect the pins to the ground with one line of code per pin. This is why in the buttons_init() function these two particular pins are set to be pulled down to the ground. Like this, these pins are much less likely to cause any troubles. If at some point you decide to use one of the pins, you absolutely can do so, just reprogram them the way you need it. + +== cluster_number_mode.cpp + +— + +== config.h + +— + +== constants.h + +— + +== credentials-example.h + +— + +== display_handling.cpp + +The display_cluster_number() is a big and complicated state machine. It is one of the paramount functions in the project. In order to understand how the project works, it is crucial to understand how this function works. + +The function manages states of the two parts of the cluster number display: the cluster number image on the left and the side notes area on the right. In order to achieve that, the function not only accepts input with information what to draw on the display, but also always remembers what is currently drawn on the display. + +The display_cluster flag is how the function remembers whether the cluster number image is on the display or not. The displaying_now variable is how the function remembers what is currently drawn in the side notes area. Both variables are static and employ the RTC_DATA_ATTR attribute – that allows them to keep their data even over Deep Sleep. + +At the very top, the function decides if anything needs to be drawn at all. It is possible that the function is asked to draw something that is already drawn on the display. In such case, drawing will be simply skipped. + +Then, for the cluster number image, the function checks if the image is currently on the display. If not, the image gets drawn and the event gets remembered. If the cluster number image was not on the display until now, then nothing is currently drawn on the side notes area either. So, with the next line of code, the function unblocks drawing of all of the side notes. + +Finally, the function decides what side note to draw and records what has been drawn into the displaying_now variable. + +The clear_display() function does not actually get used, as there always should be something drawn on the display. + +== exam_mode.cpp + +The exam_mode() function contains three time comparisons, that may be confusing at the first glance. We need them just to be sure that the device displays correct image at correct time even if the Exam mode was accidentally entered at an unusual time, e.g. mere minutes before the exam starts. + +Drawing on colored E-ink displays takes substential time (around 25 seconds), so if there is less that 10 minutes (600.000 milliseconds) before an exam, there is no point in showing the pre-exam warning sign just to replace it with the exam sign a couple of minutes later. Because when the people standing around see the display flashing for 25 seconds and then flashing for 25 seconds again after a couple of minutes, they will be thinking the Sign is broken. + +This is why we check if there is more than 10 minutes left till an exam. If so, the pre-exam warning sign gets drawn onto the display. If it is less than 10 minutes, the device simply waits till 25 seconds before the exam with whatever is already on the display. If it is even less than 25 seconds, it means that the device is already late and it needs to draw the exam sign as soon as it is physically possible. + +The call for an exam to start is in the very last line of the function. The call returns the exact time the device shall sleep for in order to wake up precisely at the end of the exam. + +== file_system.cpp + +— + +== globals.h + +The relations between the globals.h and globals.cpp files might not be completely obvious, so here is the description of what is going on there. Global objects and configuration structures are declared as extern in the header (globals.h) file to make them accessible across multiple translation units. Their definitions and initial values are provided in the corresponding globals.cpp file. + +== globals.cpp + +The relations between the globals.h and globals.cpp files might not be completely obvious, so here is the description of what is going on there. Global objects and configuration structures are declared as extern in the header (globals.h) file to make them accessible across multiple translation units. Their definitions and initial values are provided in the corresponding globals.cpp file. + +== intra_interaction.cpp + +In the request_exams_info() function, the time section in hours is hardcoded (currently, from 05:00:00 in the morning till 21:00:00 in the evening) in the request message to the server. It should be kept in mind that these hours refer to the Intra server time zone (which is Paris, France – GMT+1 in winter and GMT+2 in summer), not to the time zone the Sign is located in. This is not a problem if the Sign is in an European campus, but it would completely mess everything up for campuses in Asia and Australia. E.g. 05:00 in Paris is 13:00 in Seoul, South Korea and 21:00 in Paris is 4:00 in the morning of the next day for Seoul, South Korea. If you ever decide to refactor that part into an actual logic, do not forget that some countries do not switch between winter and summer time, but France surely does. + +== ota.h + +Despite containing function bodies instead of what you usually expect to find in a header file, ota.h has to be a header file format. In short, it is made this way, so this file can be included in the project from the main header file 42-Smart-Cluster-Sign.h, and so it is possible to use include guards to prevent the OTA code to be copied into every single cpp file in the project. + +In detail, because of the intricacies of how the OTA library works, the functions of the OTA functionality (the ones you may see in the ota.h file) must be placed right above the setup() function. That would have absolutely bloated the src.ino file, so it was decided to alocate the functions of the OTA functionality into a separate file and include it from the src.ino file. Unfortunately, despite multiple tries it did not work this way, probably due to how Arduino IDE works. Through trial and error the solution you see now in the project was found. It is not the most elegant one, but it checks the main boxes: the functions of the OTA functionality are located in a separate file for readability, during compilation those functions get included right above the setup() function, the solution does not cause compilation issues, OTA functionality actually works (when not blocked by a firewall). + +== power_down_recovery.cpp + +The functionality mostly relies on the ESP-IDF API functions. More on that exact functionality here: link:https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/system/misc_system_api.html[https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/system/misc_system_api.html#_CPPv418esp_reset_reason_t] — under esp_reset_reason() and Enumerations. + +== telegram_bot.cpp + +You might see the following call _bot.sendMessage(String(rtc_g.chat_id), message, "")_ throughout the file a lot, less elsewhere in the project files. That may make you think why not refactor the _rtc_g.chat_id_ variable into a _String_ type and remove all of those explicit casts into String objects. + +WARNING: Do not do that! The _rtc_g.chat_id_ variable is stored in the RTC memory that has got extremely limited space. String objects take simply too much space to be stored there. RTC memory overflow will inevitably cause a wide range of issues throughout the whole project! + +== telegram_compose_message.cpp + +— + +== time_utilities.cpp + +— + +== utils.cpp + +— + +== watchdog.cpp + +All the functions here are wraps around ESP-IDF watchdog API with added debugging messages and improved readability. More on ESP-IDF watchdog here under “Task Watchdog Timer (TWDT)” and “API Reference”: link:https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/system/wdts.html[https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/system/wdts.html] diff --git a/docs/tech_documentation/14-intra-api.adoc b/docs/tech_documentation/14-intra-api.adoc new file mode 100644 index 0000000..ffc2dde --- /dev/null +++ b/docs/tech_documentation/14-intra-api.adoc @@ -0,0 +1,129 @@ += How to Get Exams Info from Intra +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +The Smart Sign does it in the following 6 steps: + +. connects to Wi-Fi, +. connects to the 42 Intra server, +. asks the server for a temporary access token using the UID and the Secret, +. retreives the temporary access token from the server response, +. asks the server for exam information for a particular campus, a particular cluster, on a particalar date, using the obtained temporary access token, +. retreives the exam information from the server response. + +For testing purposes, this process can be recreated on a computer, in Terminal using Curl: + +. enter these variables into the Terminal ++ +[source,bash] +---- +CLIENT_ID=put_your_42_API_app_UID_number_here +SECRET_ID=put_your_42_API_app_Secret_token_here +---- + +. ask the 42 Intra server for a temporary access token ++ +[source,bash] +---- +curl -X POST --data "grant_type=client_credentials&client_id=${CLIENT_ID}&client_secret=${SECRET_ID}" https://api.intra.42.fr/oauth/token +---- + +. copy the access token from the server response and enter it as a variable into the Terminal ++ +[source,bash] +---- +TKN=put_received_access_token_here +---- + +. ask the server to send you the information about exams in the cluster C3 and put it into a .json file. 56 is the ID of the 42 Prague campus. Curl does not like square brackets [ ] in its calls, so they need to be escaped with a backslash \. ++ +[source,bash] +---- +curl -H "Authorization: Bearer $TKN" "https://api.intra.42.fr/v2/campus/56/exams&filter\[location\]=C3" > c3_exams.json +---- + +If you want to filter the results down to an exact date, as the Smart Sign does, use the following call instead. + +[source,bash] +---- +curl -H "Authorization: Bearer $TKN" "https://api.intra.42.fr/v2/campus/56/exams?filter\[location\]=C3&range\[begin_at\]=2024-07-12T05:00:00.000Z,2024-07-12T22:00:00.000Z" > c3_exams1.json +---- + +. this command opens the .json file in the Terminal ++ +[source,bash] +---- +python -m json.tool < prague_exams.json | grep "begin_at" | tr -d " ," | awk -F '"begin_at":' '{print("["++count"]:", $2)}' +---- + +== Example of the 42 server Temporary access token response as the smart sign sees it + +[source,http] +---- +HTTP/2 200 +date: Thu, 11 Jul 2024 13:19:37 GMT +content-type: application/json; charset=utf-8 +cache-control: no-store +etag: W/"77a2df7a4e20f5f76e6364d36bc76e8a" +pragma: no-cache +set-cookie: _mkra_stck=15e20a8020c702e70007eb1e185a06fb%3A1720703982.2018037; path=/; max-age=10; expires=Thu, 11 Jul 2024 13:19:47 -0000; HttpOnly +status: 200 OK +vary: Origin,Accept-Encoding +x-rack-cors: preflight-hit; no-origin +x-request-id: 3d153728-82b5-48a0-84e7-7c1f1efe598a +x-runtime: 0.076367 +cf-cache-status: DYNAMIC +report-to: {"endpoints":[{"url":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=5%2Bb21KLqrzLETXPtKW2gerMAMrEPjiLAWT6eRUKeyuOVy3b5pvEr6Tc7D%2BMB%2BB4gqUHrTyXWaYy01CmZjQqUGReP7COyDKfBhKpl75Kwd%2FWrMWCVZD%2FkWhvM1iHF0V43hw%3D%3D"}],"group":"cf-nel","max_age":604800} +nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800} +server: cloudflare +cf-ray: 8a191610cec6bc03-FRA +---- + +[source,json] +---- +{"access_token":"03e4cb9b861dad6c49f2267cf97bd18a942507efa7840dc971008d264596cf89","token_type":"bearer","expires_in":6564,"scope":"public","created_at":1720703340,"secret_valid_until":1722585613} +---- + +== Example of the 42 server exam information response as the smart sign sees it + +[source,http] +---- +HTTP/1.1 200 OK +Date: Thu, 28 Nov 2024 06:10:13 GMT +Content-Type: application/json; charset=utf-8 +Transfer-Encoding: chunked +Connection: close +Cache-Control: max-age=0, private, must-revalidate +etag: W/"4dc462b36f78c9e055076113bae0d605" +status: 200 OK +vary: Origin,Accept-Encoding +x-application-id: 67990 +x-application-name: 42PRAGUEAPI SCREEN +x-application-roles: None +x-content-type-options: nosniff +x-fast: false +x-frame-options: SAMEORIGIN +x-hourly-ratelimit-limit: 1200 +x-hourly-ratelimit-remaining: 1199 +x-page: 1 +x-per-page: 30 +x-rack-cors: preflight-hit; no-origin +x-request-id: 1d409b60-b763-4e10-af5a-8fe35593b80d +x-runtime: 0.196901 +x-secondly-ratelimit-limit: 2 +x-secondly-ratelimit-remaining: 1 +x-total: 1 +x-xss-protection: 1; mode=block +cf-cache-status: DYNAMIC +Server: cloudflare +CF-RAY: 8e9831883e36b353-PRG +9fa +---- + +[source,json] +---- +[{"id":21213,"ip_range":"10.11.0.0/16,10.12.0.0/16,10.13.0.0/16","begin_at":"2024-11-28T14:00:00.000Z","end_at":"2024-11-28T17:00:00.000Z","location":"C3","max_people":25,"nbr_subscribers":4,"name":"EXAM STUD","created_at":"2024-11-22T08:20:02.386Z","updated_at":"2024-11-27T23:40:57.806Z","campus":{"id":56,"name":"Prague","time_zone":"Europe/Prague","language":{"id":2,"name":"English","identifier":"en","created_at":"2015-04-14T16:07:38.122Z","updated_at":"2024-11-18T11:22:47.733Z"},"users_count":1335,"vogsphere_id":52,"country":"Czech Republic","address":"AFI CITY TOWER Kolbenova 1021/9 Praha 9 - Vysočany","zip":"19000","city":"Prague","website":"https://42prague.com","facebook":"https://www.facebook.com/42Prague","twitter":"","active":true,"public":true,"email_extension":"42prague.com","default_hidden_phone":false},"cursus":[{"id":21,"created_at":"2019-07-29T08:45:17.896Z","name":"42cursus","slug":"42cursus","kind":"main"},{"id":21,"created_at":"2019-07-29T08:45:17.896Z","name":"42cursus","slug":"42cursus","kind":"main"},{"id":21,"created_at":"2019-07-29T08:45:17.896Z","name":"42cursus","slug":"42cursus","kind":"main"},{"id":21,"created_at":"2019-07-29T08:45:17.896Z","name":"42cursus","slug":"42cursus","kind":"main"},{"id":21,"created_at":"2019-07-29T08:45:17.896Z","name":"42cursus","slug":"42cursus","kind":"main"}],"projects":[{"id":1320,"name":"Exam Rank 02","slug":"exam-rank-02","difficulty":0,"parent":null,"children":[],"attachments":[],"created_at":"2019-07-29T09:05:05.890Z","updated_at":"2024-11-25T08:53:45.680Z","exam":true,"git_id":null,"repository":null},{"id":1321,"name":"Exam Rank 03","slug":"exam-rank-03","difficulty":0,"parent":null,"children":[],"attachments":[],"created_at":"2019-07-29T09:05:15.263Z","updated_at":"2024-11-25T08:56:10.466Z","exam":true,"git_id":null,"repository":null},{"id":1322,"name":"Exam Rank 04","slug":"exam-rank-04","difficulty":0,"parent":null,"children":[],"attachments":[],"created_at":"2019-07-29T09:05:24.256Z","updated_at":"2024-11-25T08:56:32.456Z","exam":true,"git_id":null,"repository":null},{"id":1323,"name":"Exam Rank 05","slug":"exam-rank-05","difficulty":0,"parent":null,"children":[],"attachments":[],"created_at":"2019-07-29T09:05:32.360Z","updated_at":"2024-11-25T08:56:53.071Z","exam":true,"git_id":null,"repository":null},{"id":1324,"name":"Exam Rank 06","slug":"exam-rank-06","difficulty":0,"parent":null,"children":[],"attachments":[],"created_at":"2019-07-29T09:05:39.838Z","updated_at":"2024-11-25T08:57:29.269Z","exam":true,"git_id":null,"repository":null}]}] +---- diff --git a/docs/tech_documentation/15-exam-simulation.adoc b/docs/tech_documentation/15-exam-simulation.adoc new file mode 100644 index 0000000..302072b --- /dev/null +++ b/docs/tech_documentation/15-exam-simulation.adoc @@ -0,0 +1,50 @@ += Exam Simulation and How to Use It +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +The project code contains a so-called Exam Simulation logic, so it is possible to test how the device behaves during exams without the necessity to wait for an actual exam. The Exam Simulation injects fictitious information about an exam (by default, scheduled for today from 18:00 till 21:00, 4 students attending) into the message from the Intra server, which causes the Sign to believe that there is an actual exam that day. Here is how to do it. + +. In the project files go to config.h and uncomment the following line ++ +[source,c] +---- +# define EXAM_SIMULATION +---- + +. Now, go to the utils.cpp file and scroll all the way down. There you will find the exam_simulation() function. + +. In the function, manually change the fictitious exam beginning and ending time the way you want it. + +When changing time, mind the time zone difference between your campus location and the Intra server location. The exam beginning and ending time must be stated in the time of the Intra server location. Let’s demonstrate it on an example: + +- Your are testing a Sign for the 42 SEOUL campus, located in Seoul, South Korea; + +- By googling, you discover that Seoul, South Korea has a time zone UTC+9. Also, South Korea does not switch between summer and winter time; + +- By this moment, you already know that the Intra server is located in France. France DOES switch between summer and winter time and you should account for that. In winter, France uses UTC+1 time zone, and in summer France uses UTC+2 time zone. When exactly this change happens may be looked up online. Let’s assume that at the time of this example the summer time applies. So, we will use UTC+2 for the Intra server; + +- Simple math operation shows that the time difference between the 42 SEOUL campus and the Intra server location is (9 – 2 =) 7 hours. It means, that at the time of this example, the Intra server clock is 7 hours behind the 42 SEOUL campus clock; + +- Let’s assume that you decided to test the Sign for a simulated exam starting at 14:00 (Seoul time) and ending at 15:30 (again, Seoul time). Since we already know that the Intra server time is 7 hours behind the Seoul time, we need to deduct these 7 hours from the time of our simulated exam: + +14:00 - 7 = 7:00 and 15:30 - 7 = 8:30 + +- So, now you know that to simulate an exam starting at 14:00 and ending at 15:30 Seoul time, in the exam_simulation() function you need to state 07:00 as the exam begin time and to state 08:30 as the exam end time. + +Of course, you need to go through this kind of analysis only for the first time you decide to use the Exam Simulation — next time you will already know how many hours to adjust for. For the Seoul campus it is slightly more complicated, since South Korea does not switch between summer and winter time but France does, the time difference will be constanty shifting there and back, and the Sign developer from the South Korea will always have to keep track of that. But if you are from a country that, like France, switches between summer and winter time, you do not even have to worry about that, as the switch happens roughly at the same time worldwide. + +. Compile the project and flash the device. Observe the device behaviour. If you need to do more tests, repeat the process. + +The flashing process is well described in the article link:07-development-environment.adoc[Getting ready to maintain and develop the project] earlier in this document, under “Uploading the changes”. + +. After you are finished testing, go to config.h and comment out the following line ++ +[source,c] +---- +//# define EXAM_SIMULATION +---- + +. Compile the project and flash the device one last time — now the Exam Simulation is off. Do not skip this step, as without it the device will keep showing your fictitious exam every single day. diff --git a/docs/tech_documentation/16-create-your-own-graphics.adoc b/docs/tech_documentation/16-create-your-own-graphics.adoc new file mode 100644 index 0000000..a1dab4c --- /dev/null +++ b/docs/tech_documentation/16-create-your-own-graphics.adoc @@ -0,0 +1,68 @@ += Create Your Own Graphics +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +You can create your own graphics to be displayed on the Sign. It may look complicated at first, but once you do it at least once, it will all become easy. + +Why is it complicated? Well, you cannot just drop an image into the Sign’s memory and display it. First, you have to convert your image into a C code and then put that C code into the Sign’s memory. The C code that represents an image is nothing else but a simple unsigned char array. In this array, each element represents the colour of each pixel in a bit format. Since there are a lot of pixels in an 800 x 480 image, the array will be very big, yet it will be just a simple array. Usually, they call this arrays bitmaps. If you would like to learn more, „bitmaps“ is the term you should google. + +So, here is the simple instruction: + +*get an image* > *convert into bitmap* > *put the bitmap into the project code* > *upload to the Sign*. + +Here are the steps in details: + +. *Create your image* + +- it has to be 800 x 480 pixels or smaller, + +- JPEG/JPG format only, + +- it can be only Black-and-White or Red-Black-and-White. + +. *Convert your image into a bitmap*. To do that, you may use the tool located in this repository: + +tools > epd_image_converter + +- download the tool from GitHub onto your local machine, + +- put all the images you want to convert into the epd_image_converter folder, + +- open the epd_image_converter folder in the Terminal, + +- use the following command to create Black-and-White image bitmap: + +`./epd_image --BW --DITHER Your_Image_Name.jpg Any_Name.h` + +- use the following command to create Red-Black-and-White image bitmap: + +`./epd_image --BWR --DITHER Your_Image_Name.jpg Any_Name.h` + +- Your_Image_Name.jpg is the image you want to convert into a bitmap, + +- Any_Name.h is the file where the bitmap array will be generated, + +- Black-and-White images get converted into 1 bitmap, + +- Red-Black-and-White images get converted into 2 bitmaps: Red-White and Black-White. + +. *Put your image bitmap into the project code* + +- open all the Any_Name.h files that you generated in the previous step, + +- give the arrays apropriate names, + +- open the project code files and find the bitmap_library.h file, + +- copy-paste the arrays from the the Any_Name.h files into the bitmap_library.h file of the project. + +. *Use your bitmap to be displayed on the Sign* + +- go to the display_handling.cpp file of the project and find the apropriate function to display your image, + +- implement when and how your image shall be displayed. + +. *Upload the new software to the Sign and watch it run.* diff --git a/docs/tech_documentation/17-how-to-draw-on-the-display.adoc b/docs/tech_documentation/17-how-to-draw-on-the-display.adoc new file mode 100644 index 0000000..8f85b46 --- /dev/null +++ b/docs/tech_documentation/17-how-to-draw-on-the-display.adoc @@ -0,0 +1,56 @@ += How to Draw on the Display +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +COORDINATES, SIZES IN PIXELS AND ROTATION + +In the *setRotation(uint8)* function you may set how the window you want to output on the display will be turned compared to the display physical orientation. All the displays have their default physical orientation, but it may vary from display to display, so finding out the display's default physical orientation is the starting point for any work with display graphics. It is easy to do: take a look at the display's physical appearence, note the side where a ribbon of wires sticks out of it — that's the bottom side of this display's default physical orientation. Knowing that, we now can set the rotation: + +setRotation(0) — for the default rotation, it is equal to the display default physical orientation + +setRotation(1) — will rotate the window 90 degrees clockwise comparing to the display default physical orientation + +setRotation(2) — will rotate the window 180 degrees (or simply flips it up-side-down) comparing to the display default physical orientation + +setRotation(3) — will rotate the window 270 degrees clockwise comparing to the display default physical orientation + +Keep in mind that however you rotate the window, its system of coordinates always rotates with it. So, the 0,0 coordinates are always in the TOP LEFT corner of your window, but not necessarily in the top left corner of your display. + +When dealing with the Partial Update windows, it is important to remember about one unobvious limitation of the e-paper controller: partial update window size and position are on byte boundary with physical x direction. Meaning that the controller may set the horisontal window boundaries only on every 8th pixel comparing to its default physical orientation. Let's summ it up with a simple rule that is easy to follow: + +The value of x and the value of width should be multiple of 8, for rotation 0 or 2, + +the value of y and the value of hight should be multiple of 8, for rotation 1 or 3. + +The function *setPartialWindow(x, y, width, height)* allows us to create a window of any size and, instead of the whole display, update only the content of this window. It is very useful feature since it is much faster than the conventional full display update with the setFullWindow() function. Moreover, this type of an update does not flicker. So, if you need to get rid off of the flickers between the slides, with setPartialWindow(x, y, width, height) you may set the whole display as a Partial Update window. But be careful as THE FIRST UPDATE AFTER TURNING ON OR RESET SHALL ALWAYS BE THE FULL DISPLAY UPDATE with the setFullWindow() function. Otherwise the display may be irrevertably stuck on the last image for ever. + +It may be useful to note the relationship between the setPartialWindow(x, y, width, height) and the setRotation(uint8) functions. Some may think that setRotation(uint8) may turn a Partial Update window created with the setPartialWindow(x, y, width, height) function. And it is true, but only to some extent. setRotation(uint8) does not turn Partial Update windows, but it actually turns the whole display window orientation with Partial Update windows inside of it. That is why when we change the display orientation with the setRotation(uint8) function, we also need to remember that the system of coordinates for x and y in the setPartialWindow(x, y, width, height) also changes. And when the system of coordinates changes, the understanding of width and height changes with it. E.g. if while setRotation(0) the window's width is 800 and the window's height is 480, then while setRotation(1) the window's width becomes 480 and the window's height becomes 800. + +For some unexplainable reason when it comes to the text body coordinates, their logic is very different from windows and images. The x and y coordinates point to the bottom left corner of the first line of text even if there are multiple lines of text. In comparison, the common logic for the windows and bitmaps coordinates are that their x and y point to the top left corner of the image. So, if you used display.setCursor(x, y) command to output the word HELLO onto the display, the x and the y there would point to the very bottom left pixel of the letter H. + +The coordinates logic is also tricky when it comes to the command + +*display.getTextBounds(output, 0, 0, &text_box_x, &text_box_y, &text_width, &text_height)* + +This command can view any text as the smallest box that can accomodate the given text and give you all the needed information to create such a box on the screen. It is very useful when you want to update a piece of text or a single character on your display instead of the whole display. The function takes a few parameters: the text in the form of a String varible (here it is "output"), x and y coordinates of the area you want to place the text (here they are "0, 0" - the top left corner of the display), pointers to x and y coordinates (this is how you will get x and y coordinates for the top left corner of the box for the text), pointers to the width and height (this is how you will get width and height values of the box for the text). It is not required to change the "0, 0" coordinates because this function does not place anything anywhere - it uses this values only for calculations. Though, it is important to remember, that when you use the default "0, 0" coordinates, the value in the text_box_y variable will be NEGATIVE. Why does this happen? Exactly because of the difference in the coordinates logic between texts and windows/bitmaps/boxes. If you remember, x and y for texts point to the BOTTOM left pixel of the text; but x and y for windows/bitmaps/boxes point to their TOP left pixel. The display.getTextBounds tries to compensate this logic difference. E.g. if you were to place the word HELLO with the 10 size font into the top left corner (0, 0) of the display, you would need to call setCursor(0, 10); but if you were to creare a partial update window in the the top left corner (0, 0) of the display to update that text, you would need to call setPartialWindow(0, 0, text_width, 10). + +But noone has time to deal with different coordinates logic! We want to give the function the text and just one set of x,y coordinates and the text shall simply aline with my partial update window automatically! That's where the getTextBounds may help. In our example our target display coordinates are x = 0, y = 0 (the top left corner), so let's place HELLO in there with a partial display update: + +display.setTextSize(10); + +display.getTextBounds("HELLO", 0, 0, &text_box_x, &text_box_y, &text_width, &text_height); + +// now text_box_x has value 0, text_box_y == -10, text_width == HELLO-width value (I don't know it), text_height == 10 + +display.setPartialWindow(x, y, text_width, text_height); + +// that creates a window in the top left corner of the display, HELLO-width pixels wide and 10 pixels high + +display.setCursor(x - text_box_x, y - text_box_y); + +// this is how we compensate for the text coordinates logic: for x (0 - 0 = 0) and for y (0 - (-10) = 10) coordinates + +display.print("HELLO"); diff --git a/docs/tech_documentation/18-time-keeping.adoc b/docs/tech_documentation/18-time-keeping.adoc new file mode 100644 index 0000000..fdbae10 --- /dev/null +++ b/docs/tech_documentation/18-time-keeping.adoc @@ -0,0 +1,28 @@ += The Intricacies of Time Keeping +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +The project has one source of time-related data – the Intra server. It provides both the actual time for the system and the exam time. + +Actual time data gets updated every time the device checks the exam by calling the fetch_exams() function. The actual time data gets stored in 5 global variables: com_g.hour, com_g.minute, com_g.day, com_g.month, com_g.year. The values in those global variables are already adjusted to the time zone of the Sign and to the summer/winter time. + +Exam time from the Intra server gets updated when the fetch_exams() function is called. The exam time is then stored in the following 4 global variables: rtc_g.exam_start_hour, rtc_g.exam_start_minutes, com_g.exam_end_hour, com_g.exam_end_minutes. There is no exam date variable, because the exam time is searched only for the current day. The values in those global variables are already adjusted to the time zone of the Sign and to the summer/winter time. + +It is worth noting that all of the time-related data does not simply come nicely adjusted for this particular device to use. All the adjustments happen on the device. To understand how it works, it is important to have information about the sources of the raw data. + +The Intra server provides only standart UTC time. It never adjusts for Summer or Winter time. It does not care about time zones. All of that – both summer/winter time change and time zone adjustment – is handled on the device by the get_and_ensure_current_time() function and its helper functions: winter_summer_time_offset(), last_sunday() and is_weekday(). + +It is important to mention that the winter_summer_time_offset() function calculates when to switch between summer and winter time based on the pattern of the European Union DST system. *_It may not be suitable for the countries outside of the EU!_* The pattern that the function obeys is the following: + +* last Sunday of March — switch to summer time, +* last Sunday of October — switch back to winter time. +Located in the config.h file, there is a very important time-related macro TIME_ZONE. This macro is the place where you have to manually write the time zone of the campus where you use the Sign. + +Be aware, that if your country switches between winter/summer time (DST system), it means that your country basically has two different time zones – one in winter and a different one in summer. Winter time zone is universally considered as the default one. This is why the winter time zone is what you need to write in the TIME_ZONE macro. + +E.g.: in winter, France uses Central European Time and has the UTC+1 time zone; but in summer France uses Central European Summer Time and has the UTC+2 time zone. Winter time zone is the default one, this is why for any French campus TIME_ZONE is 1. + +Include "-" sign if it applies to the time zone of your campus. Do not include "+" sign at all. diff --git a/docs/tech_documentation/19-service-messages.adoc b/docs/tech_documentation/19-service-messages.adoc new file mode 100644 index 0000000..4a3f5de --- /dev/null +++ b/docs/tech_documentation/19-service-messages.adoc @@ -0,0 +1,162 @@ += Service Messages Meaning +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +During its operation, there are some messages that the Sign may output. Some of those messages appear on the display as well as in the Telegram chat, but some appear only in the chat. The messages are designed to be naturally understandable on their own. In this article you may find all such messages, when they occure, and additional explanation to their meaning. + +You may notice that for quite a handful of issues the Sign simply says that it could not check the exam time and suggests students to check whether the classroom is reserved themselves. However, it is often possible to find out exactly what happened from the message the Sign sends to the Telegram chat or from the debugging output the Sign transmits into the Serial Monitor (if the DEBUG macro was not deactivated). + +[cols="1,1,1",options="header"] +|=== +|What You See on the Display +|What You Receive in the Telegram Chat +|What to Do about It + +a| +image::low-battery-note.jpeg[low battery note] +|Dear User, I need your assistance! My battery is low. I am currently sitting on 3% and it keeps on draining! Please, charge me as soon as possible. +a| +You need to charge the Sign as soon as possible. It may probably run for 3-4 more days, but then it will become non-operational. +Everything about charging the Sign can be found in the article link:11-hardware-maintenance.adoc[Hardware maintenance] here in the document. + +a| +image::battery-empty.jpeg[battery empty] +|Dear User, I need your assistance! My battery is dead, so I am stopping all the processes and turning off. Please, charge me and I will turn back on again. +a| +At this moment the Sign is completely off. It will not work again untill you charge its battery. +Everything about charging the Sign can be found in the article link:11-hardware-maintenance.adoc[Hardware maintenance] here in the document. + +a| +image::intra-token-expires.png[intra token expires] +a| +Dear User, I need your assistance! My SECRET token expires in X days / expires tomorrow! / has already expired!!! And without it I would not be able to do my job. Please, retreive a new SECRET token from the Intra API page and send it to me in this chat. Your message should start with a forward slash (/), so I could recognise it. + +Here is an example: +/s-xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + +After it is done, I will leave you in pease for another month =) +a| +The message is pretty descriptive. + +If you did not build the Sign yourself, your Bocal IT team may have a special Secret token for the Sign, so it would be a wise first step to go and ask them. + +If you did, get a new Secret token the way you did it the first time. Here are the instructions: https://api.intra.42.fr/apidoc/guides/getting_started + +a| +image::could-not-check-exams.png[could not check exams] +a| +Dear User, I am writing to report an exceptional situation! Code: GET_TIME 102 + +After several retries, I was unable to connect to Wi-Fi to get current time. If you see this message, the problem has been probably solved already. Unfortunatelly, because of this issue I am displaying an Intra error and I cannot inform students about exams. So, if there is one today, you probably should notify them yourself. + +I will try to restore my work in a few hours. If you do not receive this message again, it means that I was successful. +a| +There are some issues with the Wi-Fi connection. If you see the error message on the display, but there is not a single new message from the Sign in the Telegram chat at all, then that’s exactly because of this problem and it is still ongoing. If there IS the message you can see on the left in the Telegram chat, probably the issue has already been solved. + +Plausible causes: +- Internet is not accessible due to issues on the provider’s side or due to the unpaid bills; + +- Wi-Fi router issues: power outage, Firewall blockage, poor signal, change of the Wi-Fi network name and/or password; + +- the Sign issues: located too far away from the router, the battery is at the end of its lifespan and cannot supply enough power for Wi-Fi connection; + +- human factor: the name and/or the password of your Wi-Fi network you entered into the credentials.h file have a typo or some other kind of a mistake. + +a| +image::could-not-check-exams.png[could not check exams] +a| +Dear User, I am writing to report an exceptional situation! Code: GET_TIME 103 + +After several retries, I was unable to connect to the NTP server and I do not know what time it is now. The issue is on the server side. + +I understand that you can hardly do anything about it. I just wanted to let you know that now I cannot inform students about exams. So, if there is one today, you probably should notify them yourself. + +I will try to connect to the NTP server and to get time in a few hours. If you do not receive this message again, it means that I was successful. +a| +The NTP server is probably offline. + +An NTP server is where the Sign gets the actual current time and date from. Without this data the Sign cannot operate. + +When an NTP server fails, you cannot really do anything about it but to wait. If this happens too often (more than two occasions a year), it might be the time to change the NTP server. It’s in the get_time() function. + +Much less likely this was caused by a bug in the program. The chances of that are low, but never zero. + +a| +image::could-not-check-exams.png[could not check exams] +a| +Dear User, I am writing to report an exceptional situation! Code: INTRA 503 + +After several retries, I was unable to connect to the Intra server. Since you see this message, the problem is probably not with the Wi-Fi connection, but on the Intra server's side. Likely, you can hardly do anything but wait. I cannot inform students about exams, so if there is one today, you probably should notify them yourself. + +I will try to connect to Intra in a few hours. If you do not get this message again, it means that I was successful. +a| +This message indicates issues with Intra server, namely that the server does not respond to the calls of the Sign. + +If waiting it out did not help, try and test obtaining exams data manually on your computer as it is described in the link:14-intra-api.adoc[How to get exams info from Intra] article here in the document. If you had no issues doing so on your computer, reboot the Sign by pressing the R button on the back of the device. If nothing happens within 20 minutes, you may need to start debugging. A good place to start is connecting the Sign to a computer and checking what it says in the Serial Monitor. Another place to look at is the intra_connect() function. + +a| +image::could-not-check-exams.png[could not check exams] +a| +Dear User, I am writing to report an exceptional situation! Code: INTRA 401 + +After several tries, I was unable to get the access token from the Intra server. From the experience, it has been probably caused by a faulty or expired SECRET token. Another possible reason is that they changed the Intra server response layout and I cannot see the access token, because now it is located somewhere else. + +Anyhow, now I cannot inform students about exams, so if there is one today, you probably should notify them yourself. I will try to get the access token in a few hours. If you do not get this message again, it means that I was successful. +| + +a| +image::could-not-check-exams.png[could not check exams] +a| +Dear User, I am writing to report an exceptional situation! Code: INTRA 404 + +After several tries, I was unable to get any exam information from the Intra server. Instead of dates and times of exams, I simply receive an empty page. If it is caused by a problem on my side, I am unaware of it. + +Anyhow, now I cannot inform students about exams, so if there is one today, you probably should notify them yourself. I will try to get the exam information in a few hours. If you do not get this message again, it means that I was successful. +| + +a| +image::ota-waiting-update.png[ota waiting update] +a| +_While waiting for the updating to start:_ + +OTA Update is active + +_When the updating has just started:_ + +Updating... +| + +a| +image::ota-update-canceled.png[OTA update was canceled] +|OTA Update port closed +| + +a| +image::ota-update-successful.png[ota update successful] +|Successfully updated! +| + +a| +image::ota-update-failed.png[ota update failed] +|Something went wrong. Updating was not completed. Try again later +| + +a| +image::telegram-bot-error.png[Telegram bot error] +a| +— + +_(It’s a Telegram error. You cannot expect to get a message in Telegram when there is a Telegram error)_ +a| +This service message means that the Sign does not have access to the Telegram chat because it does not have the chat ID. + +This issue may have occurred because the memory has got corrupted. In this case, the Secret token has probably been lost too. To fix this, go to the Telegram chat with the Sign that you already have and write any message to it starting with the ”/” character. When the Sign responds, send it the Secret token again just to be safe. +If you do not have a chat with the Sign, go to credentials.h, copy the Telegram bot name of the Sign from the BOT_NAME definition and search for it on Telegram. When you find the bot, just start a chat with it and the chat ID will get restored automatically. + +| +| +| +|=== diff --git a/docs/tech_documentation/20-libraries.adoc b/docs/tech_documentation/20-libraries.adoc new file mode 100644 index 0000000..cdcddc3 --- /dev/null +++ b/docs/tech_documentation/20-libraries.adoc @@ -0,0 +1,115 @@ += Libraries and Their Use +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +The project was built in Arduino IDE 1.8.19. + +It uses board 'esp32' version 3.0.7 + +The libraries in bold are explicitly included in the project. + +[cols="1,1,2",options="header"] +|=== +|Library +|Version +|Purpose + +|*Arduino.h* +| +|String variables manipulations + +|*LittleFS* +|2.0.0 +|stores data even without electricity (Telegram chat number, Secret, OTA flag value) + +|FS +|2.0.0 +|dependency for the LittleFS library + +|*ArduinoOTA* +|2.0.0 +|for the Over The Air update functionality + +|*WiFiUdp* +|2.0.0 +|dependency for the ArduinoOTA library + +|*ESPmDNS* +|2.0.0 +|dependency for the ArduinoOTA library + +|Update +|2.0.0 +|dependency for the ArduinoOTA library + +|*stdio.h* +| +|provides printf() function for the DEBUG macro + +|*stdint.h* +| +|provides fixed-width integer types + +|*esp_system.h* +| +|allows to use ESP-IDF native functions + +|*esp_sleep.h* +| +|allows to use the Deep Sleep power-saving functionality + +|*driver/adc.h* +| +|for battery charge measurements + +|*esp_task_wdt.h* +| +|program execution watchdog + +|*Wire* +|2.0.0 +|for SPI reconfiguration in the ft_display_init function + +|SPI +|2.0.0 +|dependency for the Wire library + +|*GxEPD2_3C* +|1.5.2 +|3-coloured version of the GxEPD2 library for e-paper displays + +|*GxEPD2_BW* +|1.5.2 +|dependency for the GxEPD2_3C library + +|Adafruit_GFX_Library +|1.11.8 +|dependency for the GxEPD2_3C library + +|Adafruit_BusIO +|1.14.4 +|dependency for the GxEPD2_3C library + +|*Fonts/FreeSansBold24pt7b.h* +| +|the fonts come from the Adafruit GFX library which gets called by the GxEPD2 library + +|*WiFi* +|2.0.0 +|for Wi-Fi functionality + +|*WiFiClientSecure* +|2.0.0 +|for secure HTTPS requests + +|*UniversalTelegramBot* +|1.3.0 +|Telegram bot; for wireless SECRET update and low battery notifications + +|ArduinoJson +|6.21.3 +|dependency for the UniversalTelegramBot library +|=== diff --git a/docs/tech_documentation/21-known-bugs-and-fixes.adoc b/docs/tech_documentation/21-known-bugs-and-fixes.adoc new file mode 100644 index 0000000..ce5dd2d --- /dev/null +++ b/docs/tech_documentation/21-known-bugs-and-fixes.adoc @@ -0,0 +1,81 @@ += Bugs and Suggestions How to Fix Them +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +*_Display does not work / does not draw an image._* + +* you may have miscalculated the image coordinates and the image gets drawn outside of the display field of coordinates. Remember that setRotation also rotates the display field of coordinates. Remember that coordinates always point to the top left corner of an image, but for a text it is the bottom left pixel of the first character in the first line. +* you may have misaligned the image with the partial update window if you are using one. Remember that even when you draw an image in a partial update window, you use the whole display field of coordinates to place it; a partial update window does not have its own field of coordinates. +* the display driver memory may be full. Run your program and open the Serial monitor. When an image gets drawn on the display, in the Serial monitor it says “Updating xxxxxxxxxx” where xxxxxxxxxxxx is a very long number that can be different each program run. Among all the outputted messages find the “Updating” message that corresponds to your image being drawn. Now look higher and find the “Power on” message. Keep looking higher and find the “Power off” message, it should not be separated from your “Updating” message by other “Updating” messages. If you cannot find it, it means that this is a bug. To fix it, in your code use the function to force the display to power off before drawing the image. The display will power back on automatically. +*_Flash memory became too small to accomodate the software._* + +* ESP32C3 comes with 4MB of onboard memory. This project‘s default memory partition scheme "Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS)" provides exactly 1 966 080 Bytes for the software program, another 1 966 080 Bytes as an OTA buffer and 194 560 Bytes for the file system files storage space. +* Commenting out the *#pragma GCC optimize ("O3")* line in config.h will make the compiler optimize the code for lower software image size instead of faster program performance. That may win over about 2-3 KB of memory space. +* Before compiling the software image, in the „Tools“ menu of Arduino IDE, go to the Core Debug Level and switch it from „Verbose“ to „None“ — this simple step can free up to 3% of the memory space. +* Downgrade the project from the esp32 board version 3.0.7 to the esp32 board version 2.0.16. This step may require to refactor the watchdog and the battery management functionalities, but it may free up to 10% of the memory space. +* In the „Tools“ menu of Arduino IDE, go to the Partition Scheme and choose the option „Huge APP (3MB No OTA/1MB SPIFFS)“. Doing so will free up a whopping 30% of the memory space. Unfortunatelly, the Over-The-Air update functionality will not have a buffer for its work and so will no longer be available. At this point the OTA functionality code may well be removed from the project. +*_Some RTC variables loose thier values over the Deep Sleep._* + +* There could be more than one reason to it, but most likely it is caused by the RTC memory overflow. Try removing some less important variables from the RTC domain. The String Object type variables (or simply String variables) are known to have a big overhead and thus to take a lot of memory space. It is encouraged not to use them in the RTC domain at all and to use C-style char arrays instead. +*_DEBUG_PRINTF does not output a message._* + +* the DEBUG_PRINTF macro cannot output String type variables natively. To do that, you need to explicitly cast the String variable into the C-style string with c_str() command. Look for examples in the program code. +*_Serial monitor is empty / outputs gibberish._* + +* check the DEBUG macro in the config.h file. The DEBUG definition should not be commented out for the Serial output to work. Additionally, you can set the Core Debug Level to "Verbose" in the Arduino IDE Tools to get detailed information about the firmware processes. +* make sure that the baud rate in the Serial monitor is set to the same baud rate as in the config.h file. +* you may encounter such behaviour right after the software update. It is normal. Try closing and opening again the Serial monitor window. If that does not help, push the Reset ("R") button on the module. +*_Serial monitor skips some messages / does not show some messages._* + +* it is a common situation at the beginning of the program. Serial communication between the computer and the microcontroller needs time to stabilise and synchronise itself. ESP32-C3 USB Serial is especially prone to this issue. To overcome it, increase the delay inside of ft_serial_init() or add a few empty messages to be outputted after the Serial.begin() command. You may well try to implement both of the suggested solutions at the same time. +*_Wi-Fi does not connect / reconnect without apparent reason._* + +* thoroughly check your network SSID and password spelling. Surprisingly, it is a very widely spread cause. A single character written small instead of capital may easily prevent you from connecting. +* make sure not to use ft_delay() in any of your functions responsible for connecting or reconnecting to Wi-Fi. The ft_delay() function not only delays the program execution but also puts the microcontroller's inner Wi-Fi module to sleep. Using ft_delay() in functions responsible for retrieving information from the Internet may result in unexpected behaviour. If you are not sure that using ft_delay() is safe in your particular function, use delay() instead. +*_OTA does not work. Cannot see the device in the ports list._* + +* make sure that the Sign and your computer are connected to the same Wi-Fi network and to the same Wi-Fi modem within that network. In the Telegram chat prompt the Sign with the „/status“ command to see the MAC address of the Wi-Fi modem it is currently connected to. +* try closing and reopening Arduino IDE. +* the school firewall may be blocking OTA connection. Ask your campus system administrator if it could be overcome. +*_Adding multiple Strings together with the “+” command causes compilation error._* + +* strangely, sometimes the compiler may not like it in one part of the code and be completely fine with it in another. The solution is to explicitly cast the variable after the first “+” command into String with the String(your_variable_or_text) command. Understandably, it is strange to cast a String variable into String, but it works. +*_WARNING: Skipping SSL Verification. INSECURE!_* + +* not a bug. +* this message appears when connecting to the Intra server and is caused by the following line in the intra_interaction.cpp file: „client1.setInsecure();“. +* on one hand, it can be solved by getting and setting up a certificate for this connection. On the other hand, it does not affect the program run at all and can be ignored. +*_setSocketOption(): fail on 0, errno: 9, "Bad file number"_* + +* a minor issue and does not necessarily indicate a problem with the program. +* this message may appear when the Smart Sign fails the first attempt to get a server response from the Intra server and goes for the second or third attempt. + +* this error can occur when you try to set a socket option on a socket that has already been closed or is in the process of being closed. This can happen during the transition between closing the previous connection and opening a new one. As long as the SSL/TLS communication with the Intra server is functioning correctly after the reconnection, this error can generally be ignored. +*_spiAttachMISO(): SPI Does not have default pins on ESP32C3!_* + +* not a bug. +* This message appears when the microcontroller assigns pins for the display SPI port. In this project we do not use the MISO pin (thus the „-1“ value defined for the SPI_MISO_PIN in the constants.h file). +*_401 Unauthorized. Error! Server response came without the Access Token._* + +* often happens when something is wrong with the Secret token authentication, commonly with the Secret token itself. Most likely, an extra character was added to your Secret token somewhere along the way. The character may even not to be visible in the Serial monitor. It may happen when you write to or read from the filesystem files. Try using trim() on the variable (e.g. your_string_variable.trim();), it will remove spaces and/or new line signs at the beginning and at the end of the string. +* rarely may happen due to the Intra server maintenance. There is no solution to it but to wait. +*_Compilation error: “Section .dram0.bs 'Will Not Fit In Region Dram0_0_seg' Region.`Dram0_0_seg 'Overflowed by 9648 Bytes. Collect2: Error: LD Returned 1 Exit Status”_* + +* it means that the program takes more RAM space than it is available. DRAM stands for Data Random Access Memory and is used for data. +* This error may be caused for example by excessive use of global variables, large arrays, big buffers, etc. +* The most likely reason for this error in this project is the display buffer being too big. The ESP32 and the ESP32-S2 are especially prone to this issue. To overcome this problem the display buffer size should be reduced. It can be done in the display instantiation. +Here is the default display buffer instantiation: +GxEPD2_3C display(GxEPD2_750c_Z08(SPI_SS_PIN, DC_PIN, RST_PIN, BUSY_PIN)); +And here is a reduced display buffer instantiation: GxEPD2_3C display(GxEPD2_750c_Z08(SPI_SS_PIN, DC_PIN, RST_PIN, BUSY_PIN)); +* Less likely reason for this error is an excessive use of the global scope for data. To solve it reduce the number of global variables, use the file system to store the data instead of arrays. +*_Software update fails while trying to connect to the microcontroller board_* + +* Go into the "Tools" menu of the Arduino IDE and change the Upload Speed to 115200. Sometimes the IDE automatically sets the Upload Speed to the highest value and your board may happen not to support it. +*_[INTRA] Error! Server response to the Access Token request was not received._* + +*_[INTRA] Error! Server response to the Exam Time request was not received._* + +* If any of these error messages keep appearing in the Serial monitor, it is likely that it is not enough time for the Intra server to proceed the request from the Sign. Try going into the config.h file and incrementally increasing the value of the SERVER_WAIT_MS macro by 500 milliseconds each time. diff --git a/docs/tech_documentation/22-reporting-and-suggestions.adoc b/docs/tech_documentation/22-reporting-and-suggestions.adoc new file mode 100644 index 0000000..1fede34 --- /dev/null +++ b/docs/tech_documentation/22-reporting-and-suggestions.adoc @@ -0,0 +1,10 @@ += New Bugs and Future Development Suggestions +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +All newly discovered bugs should be documented in the "Issues" tab of the project's GitHub repository. This helps keep track of problems and facilitates community engagement in resolving them. + +Any suggestions for future development or enhancements can be added to the "Suggestions for Contributions" section in the README file of the project's GitHub repository. This allows everyone to see potential improvements and participate in developing them. diff --git a/docs/tech_documentation/23-confidential-information.adoc b/docs/tech_documentation/23-confidential-information.adoc new file mode 100644 index 0000000..b4e65d5 --- /dev/null +++ b/docs/tech_documentation/23-confidential-information.adoc @@ -0,0 +1,8 @@ += Suggestions for Dealing with Confidential Information +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +NOTE: This chapter is a stub — see issue #71. diff --git a/docs/tech_documentation/24-external-sources.adoc b/docs/tech_documentation/24-external-sources.adoc new file mode 100644 index 0000000..cca7e22 --- /dev/null +++ b/docs/tech_documentation/24-external-sources.adoc @@ -0,0 +1,56 @@ += External Information Sources +:imagesdir: media +ifndef::backend-pdf[] +:toc: auto +:sectnums: +endif::[] + +NTP (time) server API documentation + +link:https://cplusplus.com/reference/ctime/tm/[https://cplusplus.com/reference/ctime/tm/] + +How to Get Date and Time with the Time.h library — article + +link:https://randomnerdtutorials.com/esp32-date-time-ntp-client-server-arduino/[https://randomnerdtutorials.com/esp32-date-time-ntp-client-server-arduino/] + +GDEY075Z08 display data sheet + +link:https://www.laskakit.cz/user/related_files/gdey075z08.pdf[https://www.laskakit.cz/user/related_files/gdey075z08.pdf] + +GDEY075Z08 display code example + +link:https://github.com/LaskaKit/Testcode_examples/blob/main/Displays/E-Paper/7-50/GDEY075Z08_GxEPD2/GDEY075Z08_GxEPD2.ino[https://github.com/LaskaKit/Testcode_examples/blob/main/Displays/E-Paper/7-50/GDEY075Z08_GxEPD2/GDEY075Z08_GxEPD2.ino] + +UC8179 - the display hardware driver - data sheet link:https://www.laskakit.cz/user/related_files/uc8179.pdf[https://www.laskakit.cz/user/related_files/uc8179.pdf] + +GxEPD2 library - the display software driver - online page + +link:https://github.com/ZinggJM/GxEPD2[https://github.com/ZinggJM/GxEPD2] + +Online forum for GxEPD2 library troubleshooting discussions + +link:https://forum.arduino.cc/t/good-display-epaper-for-arduino/419657[https://forum.arduino.cc/t/good-display-epaper-for-arduino/419657] + +ESP32 RAM issue discussion page + +link:https://github.com/espressif/arduino-esp32/issues/1163[https://github.com/espressif/arduino-esp32/issues/1163] + +XIAO ESP32C3 development board instruction page + +link:https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/[https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/] + +Getting started with 42 API guide + +link:https://api.intra.42.fr/apidoc/guides/getting_started[https://api.intra.42.fr/apidoc/guides/getting_started] + +42 API Documentation + +link:https://api.intra.42.fr/apidoc[https://api.intra.42.fr/apidoc] + +Video tutorial about troubleshooting the ArduinoOTA library + +link:https://www.youtube.com/watch?v=z_btZfxrS48[https://www.youtube.com/watch?v=z_btZfxrS48] + +The best instruction ever on the buttons implementation with ESP32 + +link:https://esp32io.com/tutorials/esp32-button[https://esp32io.com/tutorials/esp32-button] diff --git a/docs/tech_documentation/README.md b/docs/tech_documentation/README.md new file mode 100644 index 0000000..8660c60 --- /dev/null +++ b/docs/tech_documentation/README.md @@ -0,0 +1,44 @@ +# Technical documentation + +Readable, searchable chapters for the 42 Smart Cluster Sign. This index replaces the old hand-typed table of contents. + +To build a single PDF of the whole book, run `make docs` from the repository root (requires `asciidoctor-pdf`). The PDF gets created in `build/Technical_Documentation.pdf` and is automatically gitignored. + +## Chapters + +1. [Vocabulary of Terms](01-vocabulary-of-terms.adoc) — names used throughout the project: Sign, Intra, Secret, token, Deep Sleep, OTA, SPIFFS. +2. [About the Project](02-about-the-project.adoc) — what the Sign displays and which services it talks to. +3. [Contractor's Requirements](03-contractors-requirements.adoc) — the original requirements and how the finished device matches them. +4. [General Description of the Program Run](04-program-run-overview.adoc) — one exam day, from night sleep through reservation, exam, and back to the cluster number. +5. [Program Run Step-by-Step](05-program-run-step-by-step.adoc) — boot, battery check, cluster-number mode, and where the cycle can end. +6. [How to Build the Sign Yourself](06-how-to-build-the-sign.adoc) — parts list, display pinout, build steps, and hardware alternatives. +7. [Getting Ready to Maintain and Develop the Project](07-development-environment.adoc) — Arduino IDE, libraries, credentials, and USB upload. +8. [Updating the Program Using Cloud-Pull OTA](08-cloud-pull-ota-updates.adoc) — manifest, GitHub Releases, Telegram / button / weekly triggers. +9. [Uploading the Program as Compiled Binary](09-uploading-compiled-binary.adoc) — flashing a `.bin` with `esptool` when USB Arduino upload is not an option. +10. [Firmware Rollback](10-firmware-rollback.adoc) — how a bad OTA image is detected and the previous partition is restored. +11. [Hardware Maintenance](11-hardware-maintenance.adoc) — charging the Sign and taking it off the wall. +12. [Functions Reference](12-functions-reference.adoc) — program files, `config.h`, and function descriptions. +13. [Architectural Decisions Explained](13-architectural-decisions.adoc) — why `setup()` order, `ota.h` placement, display state, and related choices exist. +14. [How to Get Exams Info from Intra](14-intra-api.adoc) — API steps, curl examples, and example server responses. +15. [Exam Simulation](15-exam-simulation.adoc) — the `EXAM_SIMULATION` macro for testing exam mode without a real exam. +16. [Create Your Own Graphics](16-create-your-own-graphics.adoc) — turning artwork into bitmaps the display can draw. +17. [How to Draw on the Display](17-how-to-draw-on-the-display.adoc) — GxEPD2 coordinates, partial windows, and text bounds. +18. [The Intricacies of Time Keeping](18-time-keeping.adoc) — UTC from Intra, time zones, and EU daylight-saving rules. +19. [Service Messages Meaning](19-service-messages.adoc) — what the display and Telegram chat show, and what to do about it. +20. [Libraries and Their Use](20-libraries.adoc) — Arduino IDE / board versions and every library the project depends on. +21. [Bugs and Suggestions How to Fix Them](21-known-bugs-and-fixes.adoc) — known display, flash, and related problems. +22. [New Bugs and Future Development Suggestions](22-reporting-and-suggestions.adoc) — where to file issues and ideas. +23. [Suggestions for Dealing with Confidential Information](23-confidential-information.adoc) — stub; not yet written (see issue #71). +24. [External Information Sources](24-external-sources.adoc) — datasheets, APIs, and other references. + +## Chapters not yet written + +These topics were listed as `//TO-DO` in the original Word document and are tracked as follow-up issues: + +- [Hardware description](https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign/issues/65) +- [Circuit diagrams and schematics](https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign/issues/66) +- [Description of the program constants](https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign/issues/67) +- [Power management](https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign/issues/68) +- [Safety considerations](https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign/issues/69) +- [The Don'ts of changing the program](https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign/issues/70) +- [Suggestions for dealing with confidential information](https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign/issues/71) (chapter 23 above) diff --git a/docs/tech_documentation/book.adoc b/docs/tech_documentation/book.adoc new file mode 100644 index 0000000..22d19d9 --- /dev/null +++ b/docs/tech_documentation/book.adoc @@ -0,0 +1,65 @@ +// GitHub's web view does not process include:: directives, so this file +// looks empty-ish on GitHub. That is expected. Browse the documentation +// from README.md instead. This file exists only for the PDF build +// (`make docs`). += 42 Smart Cluster Sign +Technical Documentation +:doctype: book +:revdate: July 2026 +:toc: +:toclevels: 2 +:sectnums: +:imagesdir: media +:pdf-page-size: A4 +:title-page: +:icons: font + +This document contains detailed information about the project and was created as the go-to place to find answers to all of your HOWs and WHYs, so the software support and further project development are easier. + +include::01-vocabulary-of-terms.adoc[leveloffset=+1] + +include::02-about-the-project.adoc[leveloffset=+1] + +include::03-contractors-requirements.adoc[leveloffset=+1] + +include::04-program-run-overview.adoc[leveloffset=+1] + +include::05-program-run-step-by-step.adoc[leveloffset=+1] + +include::06-how-to-build-the-sign.adoc[leveloffset=+1] + +include::07-development-environment.adoc[leveloffset=+1] + +include::08-cloud-pull-ota-updates.adoc[leveloffset=+1] + +include::09-uploading-compiled-binary.adoc[leveloffset=+1] + +include::10-firmware-rollback.adoc[leveloffset=+1] + +include::11-hardware-maintenance.adoc[leveloffset=+1] + +include::12-functions-reference.adoc[leveloffset=+1] + +include::13-architectural-decisions.adoc[leveloffset=+1] + +include::14-intra-api.adoc[leveloffset=+1] + +include::15-exam-simulation.adoc[leveloffset=+1] + +include::16-create-your-own-graphics.adoc[leveloffset=+1] + +include::17-how-to-draw-on-the-display.adoc[leveloffset=+1] + +include::18-time-keeping.adoc[leveloffset=+1] + +include::19-service-messages.adoc[leveloffset=+1] + +include::20-libraries.adoc[leveloffset=+1] + +include::21-known-bugs-and-fixes.adoc[leveloffset=+1] + +include::22-reporting-and-suggestions.adoc[leveloffset=+1] + +include::23-confidential-information.adoc[leveloffset=+1] + +include::24-external-sources.adoc[leveloffset=+1] diff --git a/docs/tech_documentation/media/battery-empty.jpeg b/docs/tech_documentation/media/battery-empty.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..ed5fcf2c4b9e71665aab777be7c4490b982a4602 GIT binary patch literal 18057 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 S#`(vZ_5V}b|E_zSvHt-H5lKV< literal 0 HcmV?d00001 diff --git a/docs/tech_documentation/media/could-not-check-exams.png b/docs/tech_documentation/media/could-not-check-exams.png new file mode 100644 index 0000000000000000000000000000000000000000..380fc2c4c861f55c4159d54ab5dd969856df8d0d GIT binary patch literal 22272 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 literal 0 HcmV?d00001 diff --git a/docs/tech_documentation/media/cover-shadow.jpeg b/docs/tech_documentation/media/cover-shadow.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..ffdd89dce34349e1274be406cfcc0884bfb8389d GIT binary patch literal 655 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<ECr+Na zbot8FYu9hwy!G(W<0ns_J%91?)yGetzkL1n{m0K=Ab&A3Fhjfr_ZgbM1cClyVqsxs zVF&q(k*OSrnFU!`6%E;h90S=C3x$=88aYIqCNA7~kW<+>=!0ld(M2vX6_bamA3witD|FrZ!!>twn8QNz3XISa}pFu1B L@2V~h=KnVV;n3Vm literal 0 HcmV?d00001 diff --git a/docs/tech_documentation/media/intra-token-expires.png b/docs/tech_documentation/media/intra-token-expires.png new file mode 100644 index 0000000000000000000000000000000000000000..0199af154fbfeddca467bd86c4e3def792b7f215 GIT binary patch literal 22025 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 literal 0 HcmV?d00001 diff --git a/docs/tech_documentation/media/low-battery-note.jpeg b/docs/tech_documentation/media/low-battery-note.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..730c51399551160b80dce8c40d1956a239501394 GIT binary patch literal 18447 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 literal 0 HcmV?d00001 diff --git a/docs/tech_documentation/media/ota-update-failed.png b/docs/tech_documentation/media/ota-update-failed.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a15124ce2f2c037588d888f59026cb1c8137cc GIT binary patch literal 14552 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 literal 0 HcmV?d00001 diff --git a/docs/tech_documentation/media/ota-update-successful.png b/docs/tech_documentation/media/ota-update-successful.png new file mode 100644 index 0000000000000000000000000000000000000000..3e016b8e8d69dbe90f9205774605e00af3f27a02 GIT binary patch literal 16078 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 literal 0 HcmV?d00001 diff --git a/docs/tech_documentation/media/ota-waiting-update-full.png b/docs/tech_documentation/media/ota-waiting-update-full.png new file mode 100644 index 0000000000000000000000000000000000000000..29256814fbf9927075b9bd8162c7abbfa6ddfd13 GIT binary patch literal 21570 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

    &}VnZ5qZHs2~zUvwe%lRIkEDK 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 UD{c|Rh;)Z^3DPOjAl)5935aw^cS?tZK5P8_ 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 literal 0 HcmV?d00001 diff --git a/docs/tech_documentation/media/telegram-bot-error.png b/docs/tech_documentation/media/telegram-bot-error.png new file mode 100644 index 0000000000000000000000000000000000000000..0146ffaba6cb71889edcfb83dca4f7c0add388f0 GIT binary patch literal 20180 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 literal 0 HcmV?d00001 From c61692613272a9a6854ef30d16cbd463e21627aa Mon Sep 17 00:00:00 2001 From: RomanAlexandroff Date: Tue, 25 Aug 2026 14:08:01 +0200 Subject: [PATCH 2/4] Remove unnecessary source annotations from JSON examples --- docs/tech_documentation/14-intra-api.adoc | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/tech_documentation/14-intra-api.adoc b/docs/tech_documentation/14-intra-api.adoc index ffc2dde..0e53e47 100644 --- a/docs/tech_documentation/14-intra-api.adoc +++ b/docs/tech_documentation/14-intra-api.adoc @@ -80,10 +80,8 @@ report-to: {"endpoints":[{"url":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4? nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800} server: cloudflare cf-ray: 8a191610cec6bc03-FRA ----- -[source,json] ----- + {"access_token":"03e4cb9b861dad6c49f2267cf97bd18a942507efa7840dc971008d264596cf89","token_type":"bearer","expires_in":6564,"scope":"public","created_at":1720703340,"secret_valid_until":1722585613} ---- @@ -121,9 +119,7 @@ cf-cache-status: DYNAMIC Server: cloudflare CF-RAY: 8e9831883e36b353-PRG 9fa ----- -[source,json] ----- + [{"id":21213,"ip_range":"10.11.0.0/16,10.12.0.0/16,10.13.0.0/16","begin_at":"2024-11-28T14:00:00.000Z","end_at":"2024-11-28T17:00:00.000Z","location":"C3","max_people":25,"nbr_subscribers":4,"name":"EXAM STUD","created_at":"2024-11-22T08:20:02.386Z","updated_at":"2024-11-27T23:40:57.806Z","campus":{"id":56,"name":"Prague","time_zone":"Europe/Prague","language":{"id":2,"name":"English","identifier":"en","created_at":"2015-04-14T16:07:38.122Z","updated_at":"2024-11-18T11:22:47.733Z"},"users_count":1335,"vogsphere_id":52,"country":"Czech Republic","address":"AFI CITY TOWER Kolbenova 1021/9 Praha 9 - Vysočany","zip":"19000","city":"Prague","website":"https://42prague.com","facebook":"https://www.facebook.com/42Prague","twitter":"","active":true,"public":true,"email_extension":"42prague.com","default_hidden_phone":false},"cursus":[{"id":21,"created_at":"2019-07-29T08:45:17.896Z","name":"42cursus","slug":"42cursus","kind":"main"},{"id":21,"created_at":"2019-07-29T08:45:17.896Z","name":"42cursus","slug":"42cursus","kind":"main"},{"id":21,"created_at":"2019-07-29T08:45:17.896Z","name":"42cursus","slug":"42cursus","kind":"main"},{"id":21,"created_at":"2019-07-29T08:45:17.896Z","name":"42cursus","slug":"42cursus","kind":"main"},{"id":21,"created_at":"2019-07-29T08:45:17.896Z","name":"42cursus","slug":"42cursus","kind":"main"}],"projects":[{"id":1320,"name":"Exam Rank 02","slug":"exam-rank-02","difficulty":0,"parent":null,"children":[],"attachments":[],"created_at":"2019-07-29T09:05:05.890Z","updated_at":"2024-11-25T08:53:45.680Z","exam":true,"git_id":null,"repository":null},{"id":1321,"name":"Exam Rank 03","slug":"exam-rank-03","difficulty":0,"parent":null,"children":[],"attachments":[],"created_at":"2019-07-29T09:05:15.263Z","updated_at":"2024-11-25T08:56:10.466Z","exam":true,"git_id":null,"repository":null},{"id":1322,"name":"Exam Rank 04","slug":"exam-rank-04","difficulty":0,"parent":null,"children":[],"attachments":[],"created_at":"2019-07-29T09:05:24.256Z","updated_at":"2024-11-25T08:56:32.456Z","exam":true,"git_id":null,"repository":null},{"id":1323,"name":"Exam Rank 05","slug":"exam-rank-05","difficulty":0,"parent":null,"children":[],"attachments":[],"created_at":"2019-07-29T09:05:32.360Z","updated_at":"2024-11-25T08:56:53.071Z","exam":true,"git_id":null,"repository":null},{"id":1324,"name":"Exam Rank 06","slug":"exam-rank-06","difficulty":0,"parent":null,"children":[],"attachments":[],"created_at":"2019-07-29T09:05:39.838Z","updated_at":"2024-11-25T08:57:29.269Z","exam":true,"git_id":null,"repository":null}]}] ---- From 8151f5bd4d2e0e0911537a264d3eae88830eef01 Mon Sep 17 00:00:00 2001 From: RomanAlexandroff Date: Tue, 25 Aug 2026 14:13:23 +0200 Subject: [PATCH 3/4] Revise technical documentation reference in README Updated README to enhance clarity of technical documentation reference. --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 536e9b2..ca03699 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ ![Repository Banner](docs/graphic_materials/github_repo_animation.gif) # 42 Smart Cluster Sign -**[Full technical documentation](docs/tech_documentation/README.md) — architecture, build guide, function reference.** ## Table of Contents @@ -20,7 +19,7 @@ Welcome to the README for the 42 Smart Cluster Sign — a self-sufficient information display designed to be installed on a cluster door. Its purpose is to notify students when the cluster is reserved for an exam and prevent them from accidental entering. The device automatically retrieves exam dates from Intra and displays appropriate warnings and information on its e-paper screen. In the spare time it simply displays the cluster number. -For more information, please refer to the [full technical documentation](docs/tech_documentation/README.md). +For more information, such as maintenance and development, device build guide, architecture and function reference, please refer to the **[Technical Documentation](docs/tech_documentation/README.md)**. ## Usage @@ -97,4 +96,4 @@ Please note that while the project strives to provide accurate information, it i ## Conclusion -Thank you for your interest in the 42 Smart Cluster Sign project! We hope this README provides you with the necessary information to understand the project's purpose, features, installation process, usage, and maintenance. If you did not find the information you need, please refer to the [full technical documentation](docs/tech_documentation/README.md). If you have any further questions or need assistance, please don't hesitate to reach out. Happy coding! \ No newline at end of file +Thank you for your interest in the 42 Smart Cluster Sign project! We hope this README provides you with the necessary information to understand the project's purpose, features, installation process, usage, and maintenance. If you did not find the information you need, please refer to the [full technical documentation](docs/tech_documentation/README.md). If you have any further questions or need assistance, please don't hesitate to reach out. Happy coding! From 6e7d9b56edf2be8997a66b0d45f0c6d8042a80a1 Mon Sep 17 00:00:00 2001 From: RomanAlexandroff Date: Tue, 25 Aug 2026 14:35:55 +0200 Subject: [PATCH 4/4] Refactor README for clarity and consistency Updated section headings and links for clarity and consistency. Added a detailed description for the Bill of Materials and improved the formatting of the Contributing section. --- README.md | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index ca03699..f78c179 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - [Usage](#usage) - [Features](#features) - [Components](#components) -- [The Team behind the Sign](#the-team-behind-the-sign) +- [Team behind the Sign](#team-behind-the-sign) - [Regards](#regards) - [Contributing to the Project](#contributing-to-the-project) - [License](#license) @@ -19,7 +19,7 @@ Welcome to the README for the 42 Smart Cluster Sign — a self-sufficient information display designed to be installed on a cluster door. Its purpose is to notify students when the cluster is reserved for an exam and prevent them from accidental entering. The device automatically retrieves exam dates from Intra and displays appropriate warnings and information on its e-paper screen. In the spare time it simply displays the cluster number. -For more information, such as maintenance and development, device build guide, architecture and function reference, please refer to the **[Technical Documentation](docs/tech_documentation/README.md)**. +For more information, such as maintenance and development, device build guide, architecture and function reference, please refer to the [Technical Documentation](docs/tech_documentation/README.md). ## Usage @@ -56,19 +56,10 @@ The following components are used in the 42 Smart Cluster Sign: 5. **IKEA RÖDALM photo frame, black, 13x18 cm**: made a good enclosure. 6. **Custom 3D-printed board**: to hold all the electronics in place. -For more information, please, refer to the bill of materials in the docs folder of this repository. +For more information, please, refer to the [Bill of Materials](docs/Bill_of_Materials.xlsx) in the docs folder of this repository (Excel file, not viewable on GitHub -- download to view). -## Contributing to the Project - -Contributions to the 42 Smart Cluster Sign project are very welcome! Contact the repository admin [HERE](https://www.linkedin.com/in/roman-alexandrov-a75b89195/) to be added as a Collaborator*. The best place to start would be the [**Issues**](https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign/issues) tab of this repository. It most likely already contains a list of features we'd appreciate your help with and you can start working on them right away. If you have your own ideas, bug fixes, or improvements, feel free to open an issue or submit a pull request. - -When contributing, please adhere to the existing code style and follow the established guidelines. Clearly describe your changes and provide any necessary documentation or tests. - -*Since the device is intended for use within the 42 network of schools, its development requires personal access to the internal information system. For this reason, only a student or a member of the Bocal staff at a 42 school can become a Collaborator on this project. - - -## The Team behind the Sign +## Team behind the Sign This project is a group effort of various 42 students with support from the 42 Prague Bocal team. Here they are: - **roaleksa**, 42 Roma, [linkedin](https://www.linkedin.com/in/roman-alexandrov-a75b89195/) — software and electronic hardware developer. Made the idea reality, @@ -82,11 +73,19 @@ This project is a group effort of various 42 students with support from the 42 P ## Regards -The project is based on Jean-Marc Zingg's [GxEPD2](https://github.com/ZinggJM/GxEPD2) library for e-paper displays. -The project uses the [ArduinoOTA](https://github.com/jandrassy/ArduinoOTA) library by Juraj Andrassy for the Over-The-Air software update functionality. +The project uses Jean-Marc Zingg's [GxEPD2](https://github.com/ZinggJM/GxEPD2) advanced library of drivers for e-paper displays. The Sign's Telegram Bot functionality is provided by Brian Lough's [UniversalTelegramBot](https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot) library. +## Contributing to the Project + +Contributions to the 42 Smart Cluster Sign project are very welcome! Contact the repository admin [HERE](https://www.linkedin.com/in/roman-alexandrov-a75b89195/) to be added as a Collaborator*. The best place to start would be the [**Issues**](https://github.com/RomanAlexandroff/42-Smart-Cluster-Sign/issues) tab of this repository. It most likely already contains a list of features we'd appreciate your help with and you can start working on them right away. If you have your own ideas, bug fixes, or improvements, feel free to open an issue or submit a pull request. + +When contributing, please adhere to the existing code style and follow the established guidelines. Clearly describe your changes and provide any necessary documentation or tests. + +*Since the device is intended for use within the 42 network of schools, its development requires personal access to the internal information system. For this reason, only a student or a member of the Bocal staff at a 42 school can become a Collaborator on this project. + + ## License The 42 Smart Cluster Sign project is licensed. Please, familiarise yourself with the license before using the software or working on it. The text of the license can be found in this repository. @@ -96,4 +95,4 @@ Please note that while the project strives to provide accurate information, it i ## Conclusion -Thank you for your interest in the 42 Smart Cluster Sign project! We hope this README provides you with the necessary information to understand the project's purpose, features, installation process, usage, and maintenance. If you did not find the information you need, please refer to the [full technical documentation](docs/tech_documentation/README.md). If you have any further questions or need assistance, please don't hesitate to reach out. Happy coding! +Thank you for your interest in the 42 Smart Cluster Sign project! We hope this README provides you with the necessary information to understand the project's purpose, features, installation process, usage and maintenance. If you did not find the information you need, please refer to the [Technical Documentation](docs/tech_documentation/README.md). If you have any further questions or need assistance, please don't hesitate to reach out to the author on [LinkedIn](https://www.linkedin.com/in/roman-alexandrov-a75b89195/). Happy coding!