From 6463fd0bf16cec0023708c58f32a4727587633cc Mon Sep 17 00:00:00 2001
From: Aaron John Sabu <aaronjohnsabu1999@gmail.com>
Date: Tue, 12 Oct 2021 22:18:51 -0700
Subject: [PATCH] added integrated altitude code

---
 .../Barometer Code/Barometer Readings 02.xlsx | Bin 0 -> 30024 bytes
 Code/Barometer Code/Barometer Readings 03.png | Bin 0 -> 28637 bytes
 .../Barometer_Code/Barometer_Code.ino         |  16 +-
 .../Altitude_Control/.gitkeep                 |   0
 .../Altitude_Control/Altitude_Control.ino     | 430 ++++++++++++++++++
 .../Altitude_Control/Camera.cpp               |  91 ++++
 .../Altitude_Control/Camera.h                 |  19 +
 .../Altitude_Control/LedPanel.cpp             |  65 +++
 .../Altitude_Control/LedPanel.h               |  28 ++
 .../Altitude_Control/utilities.cpp            |  83 ++++
 .../Altitude_Control/utilities.h              |   8 +
 .../PID_Test/PID_Test.ino                     |  40 +-
 12 files changed, 756 insertions(+), 24 deletions(-)
 create mode 100644 Code/Barometer Code/Barometer Readings 02.xlsx
 create mode 100644 Code/Barometer Code/Barometer Readings 03.png
 create mode 100644 Code/Control/Feather Code - Aaron/Altitude_Control/.gitkeep
 create mode 100644 Code/Control/Feather Code - Aaron/Altitude_Control/Altitude_Control.ino
 create mode 100644 Code/Control/Feather Code - Aaron/Altitude_Control/Camera.cpp
 create mode 100644 Code/Control/Feather Code - Aaron/Altitude_Control/Camera.h
 create mode 100644 Code/Control/Feather Code - Aaron/Altitude_Control/LedPanel.cpp
 create mode 100644 Code/Control/Feather Code - Aaron/Altitude_Control/LedPanel.h
 create mode 100644 Code/Control/Feather Code - Aaron/Altitude_Control/utilities.cpp
 create mode 100644 Code/Control/Feather Code - Aaron/Altitude_Control/utilities.h

diff --git a/Code/Barometer Code/Barometer Readings 02.xlsx b/Code/Barometer Code/Barometer Readings 02.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..307bbc8f8032c1495a58829c0711cc851156b012
GIT binary patch
literal 30024
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
NXs}@B*yj7ue*q+qM27$X

literal 0
HcmV?d00001

diff --git a/Code/Barometer Code/Barometer Readings 03.png b/Code/Barometer Code/Barometer Readings 03.png
new file mode 100644
index 0000000000000000000000000000000000000000..14707799fbf8fc5ca6f81f7a08da62caa2a10616
GIT binary patch
literal 28637
zcma&Oc|6qX`#(;K&IzRwWh*MFY{$N*EJetcosfMQvM+;jifogUvM*&H*}~XO9m|w$
zLdG%}OAIr{7>r@Y%zR&+Q=Rwc_t$S84-b#I-LKbut<U?quj{%!zh|t^_4~QsSy))O
z?%dWfV`1S)U}0f>ca$9%nfvhO6Yz^Q$V~qxOU<z08t~<?hqjS63rjuZ*n#sA;QMa@
zw{3!0Sh%~t|F9xJ6%SchK#%U|Xj_Ck5@vtPyJQ)0Wpiw{p)TcoQrx-b1kw3VxHG5Z
zd$@FEKRVotCoXjBU-V9VZg(=QxCL=(q@~9}O#4Jn;$;IF?ZdphUs~ckGcNtjx%A=s
zEQLG~(l6nSLv=QnN0n94nAosZ?ETqR@Pv8!aM*BIpYTo*2f3{D#6)0rPEJm%ebg*@
z&BKZr>@EV(`Ta8+y!nx%oMi9+HTUY1zJJG9g6(_)!d>2mDE;^@G;)qU>xFfA^xMA!
zaU17+j&nm&Q<qQvn31ob_+VwTFI6Du=aiZxuaDIq7b+_&?GODssc6799uUbtpX=;w
zC_!NnC-r()yg1vxV}@3>8p<8MQ#w+t{|<by?3{~h9L-hq8!lzMGvxetwC)R6mP$v&
zcA5S3bT6M%p0Nh`Ya_NGYDLn{K6J`$?ax!jx3ArQm(`jVwb2@3vamB|Qg~-uFq7@L
zx(vuK?Bfx>l2az?vIIDjkqY@i?TuL1<B?zDBgfqRdqV786a(!2yWCvc4&D=o*YV<q
zI+o$mLJ{B6*Mx}S`nH{s<hv&*S*~e!1eE;qrYNmQuoQT=p)h|6K4z>o<SWp3Awlr3
zF6ww~*=#6U(jk1|sa&ipol1@%J}^R_`j?9b63Tn?x2EH}y?jL-9+7nAXw<W(gEg23
z+hd=_3-hEpcSf_(vc-FBB6}b1Mx2f!c80aB<oIk=@4^LW(=*{qsjY{9$U}zEMcZg?
zB(Sq5Owg$-JMly(&4$`S*m(lfvTF2}@Yai+H^;$OW*4}_vLXh}ja4qq29Fu7y(~O<
zI9=y_E0RgWXq}P~E@6bRA1TG_b!xF3L*yv<tn9EH{jggq%&{sJqI{#d62aQ$SA!?T
zAJ=RF4=o&>^G|N_nJ9Z{tm@@nJ%6GhL5sd-QjXAKkmMxZh*`H+$No@j+($s|fI>c%
zj^st+D%YS@H3mydOLCCFVHND4FXU{uY_2luSQ@yVn{+&OuR9wYf8D7o+P!+=g!W43
z?zB(Y55<2t?@IW%0BeeJb!vs%awB7Q8^%Zok;2!KcCXV^R<eTo&Uy^`YAq&;xuZn7
z5E>ilq0?UFjgOZ5gFmox46a`j3Y~P8%WRWFst2uL^y~Iliy_A4g)xzHKPdfhzS@Ty
z6R<SB^HSuvQbX9A<oS?&Ro2xr_$8L$+(^Nq_OA;pvt@upV69F;doOmg|1;;#-T8o$
zr{56*_!Q9qmS5&7VSl=Z1L~aM93bmomhJGJl~-!jgO~n&f<@KG_ru_VL+F%3=8ut8
zX#JWY;D^^Yez?Pp@>B?<nIj>p)BeYlqK3Xc_QMH7f<M+>?E>6QK4$(gM_G$tzz0^j
zOgaUlHA|bL7}E&Nm>mb5gdgu}^S`WoKp@6wIZ$UsN(|vv_FX|!v86-@MtATOC00F%
z<Hr(hwF=cc-@dK<A14-2^!-J6o42p;jR0#~uYVti>wTl}|8-(V(3iml$6vg=0kB|{
ztN05$9NdSTe>{AtNI^L-a@635Laws|Q~y^=Z9eY+h}a%(|MtI<Ey$b6GyFksuni!x
zZTF8q-#9EFa6+&k2lwA<3X0&fz)=5B$+ulCJ93Qs=Zc}7j!^+EO5k7on*{Lx`|1ZH
z0^dOo(!B9g%WVHh->Sww{nzT_ALaw@O8%Vi-3$Qq`fn+3Z*QoEvY>hL4>hd99($FF
zU%vbcSZmIShycXp<^3mLs1n$ViyJiO`%6m0crpMSW3-<yX-TAWALUN|$wRP1PmEoB
z_tH{z`_CDPs8!<Rr1k$%L1pFVUrKFfFMXvL^pjCjPcCj^$F|f@gt?K~gcK~u`t(a;
z?*J8hjg|d+{5!Clo16cdZ<U(*kD-n+e-QA+Z^_jaK>UKPA97}yoj4~bEZ{TC^{;Sm
zaOe!L0z|G1<^I}1hH>B7%vJRNPZr+ug9{HoJO8j2-H$mx9nkQG&rX<&i|8-sd8h3I
z=<4&eAMgJX!Zsl|r{1daYXUTjf94!u8F~L{$LB^sc%;@3L&~2pT=MbXv$PHBX5Mv*
zd4=j*?pqtk5g0WZ;~V)&!3Lgeb`Ah5U0axon{Ah9O}X@dm9f)er0zKpP@(k?;JTrd
zVshQ?^=l)i%a@bzZUdJ`->+@;^z4wg-1hx{EEjAkJ!*h`RGfc*BjcAf-3I{_MbG@=
za#jf?EV$7N?fLo8^yFmRJh1KN{xTpbAHY^7>n{A_vxe1&+whkdz-(hbovZFB=kMIa
z_XETKsf}F5Uh>MZ^-=jR%~rYGSpZ&O@;~kqFtjj~EB;GMHRl8j0W7og@A^-+?@{xc
z-%5U=<E+y8>Yb!l*ZvQY`a3_&Ev^RN#F3!nH~k;qmLTdVpc`w&{~XKmTZ%tmm5u*P
zTVG!vU?Aq^FaL*wNH%wF&~)Q}v_Jt!+@0UFzF6?nE75)Iga6m|QjC~N=aqeNGXKi;
z#ss;H3CIxw$yNEG!Y>h>tX`#Iz<%;eGy~IP29W<G8&Y2q;1jS{rr`5GqWSL3UCXcS
z{txHkHl;t@LbZ0{JMUKS?6VE&Mn*=zq<qZu9|<@%;i3Qkq8tN{yuiLe7erts(I@DC
zLmV->+P_T2mHJ<2*nz(+@LVj&))OQxwrm)YM=d~CtL<B_gK4>$JsVx3pX?6Ml4<H&
zpLWv1I>f3SJ0mYAMh(g$N>T-shS%+yye(DfJ7Z&FBKx1Jcbincy|^`M1*eWTqW#-T
zk4bj~tbpD*!8M7UP2t9V{vD*gpTe@v3dMja_S2yWA~E4n0pYz{&x6;R;b+@v-oJBO
z<;ODi*S@_pG0t?1^qPC$JKf|nX5*3nDot&prK1$yNtsh~2pUq@N6o|SlyG!bYh~0s
z8@Y0h8!Rwsvht0v%5K&+BMt5^enAcp43j|tnOy61?tW&Ulb?0zplza43cP0M)Nco~
zZuWP`$;%VGDkE3}1QtJudvF@SF2ICyL4XOni@UQI29Ms6^EqPG8`*2+7~wYU3eng)
z^TXv<23Ce%0+ZbaUN4V&evdta$1SZ&NhDIEOK(yz5Yl|pkjM|4i|}%BadFpJH2oRN
zNI)smKDF6@{CH3Nj=P9pnnLuFnRJ4O7Hw*6ZwXSkPeBL<-Bn#mk=rWBNYmJz3|@Vc
zz*xapFddZF>$=^gLOcp0+*Q9vI8TQ3MZm$|wXrSy<CW}ZzpJ<N%1&h9cy8+t?an?L
zs2zKy#V}pp=s0?lua+mSCL6CyVV&&yy2LVD%FVH=2#BzGC`2RX(}e^Wfb%oz*}nkD
z@?tRHb^5=1{8$2r29(t`=h_7R{T|1i$Qy1~3<u(Y|27Ax65R>dgT4EI!B)PK=gMYJ
z&-<SO2f`L0YWd*<)`Gz1k*oASn<TKi%;3qtTxR%O<4VA{{GZ;7j|8M&FKc-6$4(NA
zu?7q(+WzM@U4-xJ<2am9{nK;nlsU7`U041eKmNGz{JGnIkfDoOWd(+Q5!VjT_J7c5
zd~ff&&3b!Z{ROJf`uchRRNlLxeuZ9bm6ZTOxO&U}5Y;RS&vlgB#MpS{-%!PHBxGXw
z5X%>@p9owR492QS%&r+rfESKMumOMh5%<)+s;tZ~)>J9QYATg_sEd`>MqeVbu&8=H
zuw83mV<~P0{ObE6t94-=#Vs*tv>A1$+&psh<>5ruqJcgHN6D)Va@nKb;+zlGJtPRN
z9tK*>h`H}i)Ui0kf~9sy-6CZ>IIHrV$H#l9e@bZVys<mfV|EwRuHf^Cl?7J(>D=r&
zLC1O*Hz`(`6bf9cG-|f0<-7c?6JrjRGIpoLOJnylJKkI#y#rXTMCZY>1fd-?r!0A>
zM}!ez00H|NSlOp5{qdf;Uzp(^)}A5NdJ)7DN4WS%ubDl;s^+vHJ3s0fmqaIRRw6&t
z)_@pk6&O|j^5%D|Y7-yT6^ZgSK!{-SE>n#_S8EC>9gA%^Q;5M@skG7BCF#!s-l$sS
z(|0lLMu&|upAe(POQYr*vYyhboR(8r>V$U6-l=fPcxdj{XK-uCmli{$YL<3gLWdM2
zW*NH@`Hu_?;0JDVM}f7jdj@hdA<V2%G^UHJ`nRm>UMlGNA-L?O#^@cT2vV{+btBAN
zl`_+Dfi}-!J{>Z#h<TOSA|wIj*r!gIPe&0&&v#DJ&NAp2^T>lG^T@wXnMLBv&2#bw
z)mR=B=&nxy9uV|R5_D(nsr2=J>2U49C|TMfpLt}Dn3*l?dMRzDJbXxN|IXahhuhWw
zJ(DEH3dk%H)sWOUIv(<;>kAr@?q~o2;iwWkdlWamFCw4#=Sv>@G}fhb6-jpv=7<RI
z<7FaPn)<5QevXO~)eS+bm#oT#Pmh^JV%5xTyP^%XZk51=QM>*Ap|c^abzGv#2kr3O
zQM{woOxgoA7T@DMG{1iW2H8v&&r^>_H#ZabCV1qzu=!T@nQbqGy(Y2z;t*uGo&hK(
zC~%Rl*xt2snP0^|Z26T0p~=dCNp_036<_+7>i29(XvQPdX0l_3(%owlJZW(xS;Xmv
zMD(HV(&DtM8+?!uCXKJ*PwBQRrEJFs!#;_|35sUTT%?|I*<C+Xm^I3z!|kYN6+y;p
zbCeCZ)T13S9r(b2<Ll9Q5&MTqwB6?I;fSrL(j~#=YJO<jkFshsEv8&4W<NjU@?|q>
zkGL6i&?5=S!U9VGqK_5jLu@kl@>+TlQP374v|->Mr`FPIx>P~daV{$$bwn8pXneX!
zf{uol?zA9yn_U|N^S*U5$P#oovzhEU-`rWPY<hr)4-0rN5_>Uzxe?z1#5WiBZUJho
zzsCo^z4q0dR{od&*7U@gwemvdL5Ak$<BZU$OT>yqL==-|9!ajs9Wz9{n`$vpzb{eX
z^e#Dicgn6dS&(((s50XG4xC!Gi0Q&v{^JE2^tIyZK=q_mj_2B2B;j7NFLSsw^9<|C
zQTGJ&Y|YUVg#k}ucvxT%fHh+^LWZH?Ky7UPu`xye?r&Za7S1G3nub%TjRA&wKk$$l
zZ?hQJ*m5SH_=&(jwpaD}@I+rwciH_U79x+nJV$uduzJI7g(kFr#I4=(SX+B5eYVWv
zzr-}gt>CsPY1K(Q4J67UvF|yMBAN-fCB-7+k>k!~1>lHO$^#}n8KFVy>39SA?sE%v
zCelI;Zmy_xgqGvr+v=!qV$CI;3~a0v`=WmTn)Tw<_ZbcW+C2O*lig;K!$C=p*MQsx
zll0=*n%wi4d~vPTaH;g)BNb!IgBkm}BDXEo=Yk5WoDRdri!j?c3au=LQ<LA({q0&}
z$I-@AToM}{YT29E(9%OaThF*9?<i{Yxz5WZmOAFLV_R~Ab^1HJUB9<X-0vg~33wZ;
zRUh@&1DgWsjmistC4K@FeoOYPB5G;MQB+x|*i@|7%qCNz6FYw1e>HPMqQ~d?gasej
z9V{Q9a&=#ra>cmFMLv+MQ>RXP4yV02&WkMGD9bGq;b)0^6AUhT^l-YhTga>p2km&Q
z$6kU=GhT4Vqm~aP+vdGg8ag+3f0=VqyMJeNL}@D>QnE9NIMd*!wg1^=*H<fjS9L>#
zb@8^g5WPCRk{}iKIjka4GqX0fbJeK=Hz6YERe=XzCe!Y-b(8FG?uSvyyiF1l0yR-<
zhBQhtOZ+Q1HU|F$v0LG@B34!WI5qh5WYPSlWb@2lhRNDQC02|>m|sDwmGJ74>LI?s
z=Y1cpIhr1{-!?zV`quLkr|NCQlGf(q-o#qiR9M~DUR%jPv-dB?R(gp0ldk5Gcsp}y
zvDWmXzfQ<GipdDFj!({AG;Y&m?q_IHM-~q+#<7{H?tGDCo!mczlttm6pQ`1*V~27}
z|GTxIzmjutj+91NE5J#V;-STl#V%QfSZoC%ctcz|L@o$xF^o$JlHjyKk2A=os|5qI
z8!+^jhC)`B*Y7=Jdn52lUFk}}_ZqoeJNvD3{&Zi)9&}Nbxi~MW#uuAgKcJ%)1*PBL
zRKeQLEJiV#W82ApS)<K&?sQ-^bWg~SUeO|WNzf0l60^jZeQrq?c9O!xX|^f!6LdOC
z^-0T!iTUmkL}{g#GBr#TZ>L`V9(j@ac&TeVHtJh?GdE|#o|-IP<?@ketXjm<3+j=C
zr4R-3zq0=1zA3^?S3>pdVyM*_b6c-FoVj)KRwIzt*cH!BYJ2Per>26GH`d90lb}Og
zvTf_BppK9i<z9!aCnK<;l6T}!h#K7~x%RyAQhL|LbLN5VQtpTQ&hagOs{gKlj9#J?
z%5%S4%hx2gp;OOM!HxY&EHdy>z=&?|9qkgT3S~yL`ca8hT9ZqTUe&YqIfYW6TB9`{
z$R~j^-C5bp)EA1&H0s}cb8S+|EP)EC7V?fz?U|Uhf}8M+QOjk|dF7F+G=nsX^po}a
zf_o`<A&A)h0rTlFj0>}nx&PYqy{VSI2E9zF_uW!uAN34NoSoWIN`~-eTt>lGhClm<
z{#}Y1W{NOn9`s7660_8U6@2`ca&5(~Ut@Od*#^2h_PUPjn9Q(|%f1LKQM)}|SK9sV
z`*1L&UH1gciP^h*GCub0+};c}iS?UoIM}*-_+A>EXMp`R_#>SfFIFdj7`*-5VK-Z+
zAFF)ElIf>@zX{$FJn7u4`Z?WEbwep7OOOXFmhMn}r^)FszvF&XT326I#n?p{g3-E{
z+6!vE8w8JzsLz<U@mS7RC~o}B^}w|~OOv~aJs}g(9LbZ!epBJosaM+O4_fZX7cD*%
zJ$IT%4Z>oe@qkC}kgNNHgM2^<e$&Pm6O8;iPlrqEDHRf@u0Vw3o(*6e4$IJlGF&w<
z{1LpB&qSZzOF5Z;Jn*m6;upzh2bYN|?gxDpU$S~nc%=gn2%M63Ue%t4lNHHdZ@U$R
zXPqMY{gz_ov8)HS;uRMl<%oR}>bL10A8B@rYu5a5NwZ;ZeYyveeA-a<oT47mlD-Qn
z-+7TxveP4ern!nXVEUeP@HQq5@tjJn>%Q#qWRv9s>J0UykVE|!^N(BtamhBOKolmS
zvGALO2DuXOo+~RpEAw?i4sJ9xl#5{K?pI&65ghBd^PzX$do;N8`$hXlcjjbnz_Cu6
z#$zdsdwIp3js&zPElO5Sdf0GL-Tmt}RKR}~6LK0!Fb=yqOk6?3*xxKg%dz+9*-rCU
z%<!Vkl(=Y73{-Q{Faa5(2zp?e^mvgR;vbfwvHR(1#A&dyC7CgQ6xT=KPqAor(Up2g
zMnF}`Ul-dj--;rgYz`OZx^rdr$E1hH$T+pVIMkZ+HT2#SbXJKKqd;Uk3rL~vcyXiq
z)+Z)}{A!|R@hGni*B5slo~lUR)qfb}h37~MwaNC5{Q`ED8vOJ3`y#>N(o&RGqVrhh
zttgHf&62PWk2xqC;1A#^%AON#_e}CyW{zR=ZdmLDUeXSQ&yVt-lX<JfSaKvDk^ZFg
zo;KG!0mNh5sa_zkPi<HaPv_iMi#eGOu?!DVo>YensG?;t$r0r8cCQ`2r#si81E5Q9
zlqtB@i}F<ZG;s<U^IB=}jR><Pe0?ts_MAxgEY61^g=>~#wPNv@(Qgk)=>1&y8d>vT
z!I8LH9Mwr8IT9m~xoBeSepn2V!p<x(oN&lI*095%P$D5Q!CfPWD2!c4`GoyTrIey*
zBT$sx+?V<7LLzx1q}GuLt%~dfqJe!4dMy*0_G<Q#O~Yl3a~vLshI5Fq@ICHmN_)gD
z-F*it4UQBj>s;hjqB!pT9nBUu44fGRf}XdY!O8~Cq%4UyP{_5&uGuCHz?=Qb4W)+!
zs4eU79f`(aII<#0N(vILQ%muPeI3TVFztga@1(yhJWT}IA2;)hMFg!*7)$oH8maFJ
zV3ZG3!dkZaS3)<M;rT?FV{k@DE#;jDIg&$o65qL^&>Q0GvyEXos58fm(OU;qkZr!$
z`jFV0<RB?sbZfO#c<;5yPAzKj2(qdl7IC15>kmo`&r_RuGeK*P9Z*~O7<+(#k!Szh
z%9HDIg45a~mJab1nshJ&hZUiFN+cBoG4jP8CzDzm)d|G#6X-?>(8H1E7{*#TR>08y
zYqn{*eRSYlUFuunL!?GB9=aM<GchDy0MNE1w67-;n35FB2QCcKw#$Qh68k840n8_X
zGerXalWnQHTFjSWs0_c4hEkse%4P}vx>1$5D9kljg0|n_q%bKnd}dF`N>@#C+H*W+
zpf1pLL>Sr}R!ktP!N=g$7Q0M6A$mGwC(@%(gGspB<^hyWZgFcgPN)WjFFi|bZ4B4I
zs`T1wKq3K)duuILthz)>cDi08!q{9?l^^QDD~YP;aq9aY+}1z2W{nq1WG+gZQ5&?b
znek>+R>vMJbp$<Ep{=|0xOO<nM!gJ`{e!x<WKN}Hq}^kNoAzQ5s_1m7mOBdLdMO_c
zJ|0h!_be@IRB<!-wl|Cjf@ItxDUW~MAW!uPc$oUViWPU4;G}9~?#{^Zxl434r}wXK
z4QxM4st^$!GA&6=rpUWv6uojQg(|adfl>bBruwCgkz`b5VU?)bO$}c26qJvlgu}S>
z@>mRwmlzbC7Lsl&p*Pr@*ggv0kjw6(6QbEzvSim!3N<DN)nqvf5dNBKY+o@mpT=wj
zX|9!g^t$G%=rt4O^0uWXGOcj`uB_c7e%V}!KROzlnmLAMJWu*?h(vGBU&_Q0h|caN
zfb|W&Pb@VNJ!P%oV+9W)equju6AC5Fgu@pp^10ccWaCS6_E#=ROZX!^P?v`T7dx)F
z`}S=^1~tbK5>8R%&Z?N<QcpE4O6yRFb~aS)^^3JI$MIUH3yh6!VVKv7l3A=%Kb*G^
z6wNIw7M5|gM+uX6%*IaZPDw#3Mc$F(JIq{)vX?5}p6B3`bHm5R>f<t57YmuK)=$J=
zubj2aGwJ(7zq`YU6w?FJ8t$cz$2a7=xeF~ly?|?}1y}De%)e%j0Ab!6>`ky&&3h+t
z9HIga4GDsipH*#yHoJr_m219I8Z6efIjgr%7;qos3bbz_f|H4pzSHXHTT?Yx(4HeP
zYZC>MM1gD%gY?B#%_wDm#O^(qEWRP3xbxnwlm5Z-fRj`Vf<8K8)k}A^$;@K4=S50S
zdoFKZhYXA}Fra8xLnu9K-yTk^J78~j)kn@1YL0srszf8yW>paB?I3FD%IHkhaJV|I
z!bR_a!`OQJ@#yo!!T$7F=}6N+HN9{I;Smrk4-jA5C83v(zNT^xD$?CaA*Lz!G`9y`
zP8+3^oeeom^5w7_#6D<uqF?1(vF=b>PAsmCX_`=*kLz$v%P6jPdH5(=f2rNpGA%<;
z{*O+o-Bo=D#%4k<p)EYG1w;?y&E!udk7k|``@2evJON-`5*2fHg`#fdxZm&6<7t`V
zl04!e3)L!!O1Yf+$U)@^Tr*NKL(Z^kJHO+NZg%Q}EE_?!QC_Qe+56mVUyR(Z4R(6d
zYJ8KMni@RsYjETmwfjiXcglOO!!Znkq~8<{D=4SGBzWZybA{&<CmZfa!_`5bM8zx{
zxe_86Br0<kl>EppO3gipv+5wGFJ(p>Ggh`sDY8KX`Uf%gdugYLMq}I6g;5j8>M9&|
zp*xYHIJZRQ{3}Mz5Zb>z9nJtwA=^t99wlU2-Ys}rk))65OtTaG=6*PkyUeMc%PiY&
z+ETw*!|@y;ywU(==-rB7X!(lVt}Lj$I(!zXCXK1!UvAg<R0pw)iOu<gO?{rVa}J@2
zVxYbHy)9!x)1Tt^mbUve7u%a@8@(y-tU96LwK$hEu3t^)1-G=^6rW`AHg!stF=|^+
z*tBm%Afw|WOohwEmTomUl^<yIg+xm)QO;!Zu}{5bv_~>s;IMET5M|)*Nw7sAXWH3R
zSsE!5KB#u?U{${ttY2N2-5De2#qoUU?{<tvyCQPe3<fdqgD1R~v?fm>cO#F-hIgfF
ztUEWy4DJ~zHtD|Yyr(hOOH__QlG=qc&R(9Lr4cegcasN`+X=8sY_3yj`|}(i2NU_T
zO+%;P*gdY@0nzR>z7WssUUAJT(`o%6O`!C8E3*3Ig4*o9)PBvZQsKvit@F%RwL6it
z^|9zDXQ5g<f3TdceA`bjy`Z&~Zg=(D*2OC@gsYxdjd1WWQ|$~PcE80x#kzu%FI)-<
z=IrrF3+8&`J1Aee=zo&ywX*hE1%-eaErvtz%wXxBdcOs45PeE#vo_`}Ciu(DnekHu
zZ+*k)=7C_(?h>3ttYNyM_&HWTiF8A99B3x(<w0iWyW70?wLTz%Br!{6Uk8?h_;;cT
zj*-AnEqIF#+ndwk3sHn7^7C6AX&#zE_{eWg%%(j*&an&TIexB>qLSDibky8#=eR*R
z%8jfp+jY>`{1^bmJ}8E@uh<^s^WU|BxryBt#0rmJGKOmZ-4-;wMi$=t5M6wEdNIBr
zwqqllPSUg(N25(53`X84zr%$!5TeduKhdW#fi+)uh;NH!9IY(r<Z)ytdbs))Sv~qi
zc!xGtt-jMq-+|ttxTB^onOT)&5l`2|e%TSG*j+7$Ryw_jepk_5MKm0Xu#gzOg@cTh
ztVM8-nVei~)f3`39Oo=nM^qK~AXrlN@-1II9$b~4ydOAs5;7jjFrza#4MgUM&E`^u
z_eHMXo6{Pu<|s`{n~0idKeK%F#O#u=ZtGQH;v7Yo&@8e@JIA^~#i|xA21#+K%a`7A
zg1$A8(PUe(I(W9&ZYA=~oN*bcT+Dw|;oZ~@#sM4>I8!N%%$;6zW11c~;>adf@Kl@`
zh}1&A9N6O%J^J#Q8hf2zf25QqMC9N+NYG61cz@S~DS)Ep=CmvFbm5%oC(g5Njzq;~
ziJERBrCDldWu;SV;hqD67<Er1>~O*WzwSY3no8M~%zkA(^!&%sI=_M~%0Z8~Vl&?)
z>Fq`e#y4A2y-TdP5wg-|vRo9;?R}gZL)c(m!!*%W<dg*$S@^~6WlsfIlip+&8@qr@
zm<sgJiFo-yH5iZ&=$sQ_IL}QM3EmkE-mESN(D`ufYNGPdo}djSs_Ni!;uN%XPZ;5e
zQa*Ygyn1Vh==`!=qk5v9Hk*9vm1z&1_$afr>fsU{g1n#!2_Hmg#q7MS)?RGt`gUnw
zZ})XGr?7_Lv$J04;I~4UadTsdt{^|LqMRNYj}KE(;jV`(P$tPbgRH00AsC-AO!g2l
z0tQs__}-UMt`-=+tG9%9VaFpcKIu<x;t}Tfz`vkm@I@f*sjCD>Lb2G}!YNpD?sS-u
z-}_M+ywUK}r+c!^O}Bs+kZPpJGrut16II?ByZ+_^?HKIDj*vwBpJYYfVD_ebLyN*#
z^K#Tg*ZmHLwrIulnY?#Ucuh>LTwcIU=581~mJcgWcQ>=Lbc#AW|J_I<gc;9GzHxE&
z-&m2ss?ndIjj&Dh9;{Fy?M(tKc9=}TIWgQ?kO~$wUMR#IwXjS(Nk8U?_3@*hdczQ`
zf)-lBWB%G)<fBBI#71_>-Wa1{8aFmQG{^8j;+nR^t@c5ExK-@axd|f|haMcI{2;mt
zgUynpV`CjNa_1Vhwi8(e#)-l7E=s%8h}Vos$A&i|M4gDc{`VHig?+mYP9H5ixKm4M
zo8YR6UAf7*Si4&bq$TKZt@uXr)096x7imtGO0LRaTwaXHJU$9@7z-;o5YnKucFt8f
z<tuSJPcqt}6J4;0b|l!}fjEv{9Dl5CL^kpC2K9W%DN}uKOWaXo=TyBfrL+BNArR(L
zWYbg-wQwv!>&)w}gJnk|gMw5ldxiMxsLQTgW;Q>RUPSLYMW5C;f+xUW4|c@*I2XUj
zzYJG=ros-$UeHPGgtbzC{lj~?<<zJe#+fO`^t50gx06VgvH{I=Bfgsh=rbWUVHn@x
z74va{Kb1F~$)B$Pef0GX+@`i(V^^s(73!_Jx2xuy`n#xc(vphOkwn)&y;B}lm&sRI
zO*UkkPGwy6Q{>3P9nFLCugPB#(hH8%iKFn=UNN@N<Do#(T3Ra}E`cEwc#d~OM%ruV
zjM^r~lrE6MM#HSE-KZVfVt&P@W?Ca@L|mO%5w0IDAOTr1B-1cEVX$S2y2zrM6@kS+
z5;<V;Fj*n|9LERGoxViN$@DYRpDzUWn*GkLe_nCAWdsG@jF0N9uMek3c<7d7B!vcE
zACOIoA+&$_s+TxSB8=#@tmG_`8%qW9s!df*pk3r@I}Z=9HXY~^)Op%L_I&MHJx<O)
zH^Xl>i|#PK6GoL#3luvNxbJYy<17Lza~r;mr1}uWhnuLS3N^?+&qxO&^rA{HZS?h<
zN(Qk%D91EyXxT?3*k5R|ePl<)N_sp+%Wv_Zcunv<Cc;lEaN{I#tjJe&oZ|hp^ihAz
zQ{3Q7Zz0EB6HeQ|%cAqVpT&>LU?|%3i>4e56lgY5M*n3va!I3VqKQPbs%{IZlcE~U
z9jq`QcEh7WD{{$GM(J-gYVeEO$=IFm*|VvlorQ5qbsmA2_1kK0r4-R3HkMYJBn4D$
zI_Chd>5`S)u;X%k1)11I6U7~4n;IGp?3WHgq;xe-ggn@pvWWHQ-r*VV4O7!BESq91
zzxxs+5q>NCk3S9_G9v4B3a^$|`{xeLzvth(Co<Wy%L^}6n<Js<uz1d~SS#L!o5lJ3
zHn*XOd~XfM7)X_0cclAYTcP0B0r0kFM`DkUFO@NYc0i-A_&r-ap4wJ)w^Cyr6xNk7
z@V6x`okQqYE_J53;N9_iSDbvzX>Wbox$QvBP3R@{N=E(_c#tJv;$%#B5p3S8oE#~h
zZ;`R|y=K(EU7fctNQ_k|-SKS#57$>SqH37JRnMvo`5mUZ+E?Fpym?Cy)a3N0JZs%B
zSJ|5fDtAN@{0!3N^tO;7cd_6D9D7JOr@#$A)je2#onmT{<k&NvBh#-7l%)LRF68Je
zpXR9F3M}rver~h4#4qX8``aF0OVqV-ncQNkW}>C0f?wgJRM7y<q^+K^>c52U?>kxy
ztvswM#QFH06sw}9x^R;Ygn@)dI&6f0jqeKPwW%9=3#31?`;Tc)KpT{&=eDOp^Fp-+
zS&F5;m%&*><F@|v%1R5HN4+)(P(Bng0!vl&Zwx6O63}jMsYzC}ZEVo<GUxWjSfYOm
zT(ogNJ}o?@yQng|KO9te!~=$((4{HNVPM&XM&j6RSUZlXs5-?yq{lVVmqye_Uxzzq
z#79(NnoOS@F|x_THI$)yeES~hxk|WSR?L?}Ia!g(_u=KTFW(!{!8t>|P?`Q#JvevX
z7g+5by5M_42W&_NE3q7<fCg;%^fR}Bca90iqvm)Zr{I{?uq#^4RP3bt7tHfWads;!
zkEZcXyn}90`<;;41#eq&8A1}Dv1$QQ)8`&PooOT?gDx;vF|U;XhXV(-a<o)tSkn1$
zIz9EqJ#*;l=#uaRK0gLP@oLqocZ>)H`Y!GHM^xZ?Wvu2%`AH(O&g*nS;Kw7KbIu9N
z0=)6mL|i|k?vp#Jwsw8eH5p$<bWq4TE!T@<ee6v8OVs)#<dl~a-u)#*{Sb<z0;Av0
zie3IQ8%8buTm)dUNo?Ch)TdiXkAP%6YH69G{D<7vS7eg|e;}o01|qAzcQnbs!HJ$P
zxu9BDbCnme)A;y|keGMzBDKwcDG$Q)rDHca07s)+cA1V4t*wRQ@u!>?!@tOXsB&V@
z*%Rh!?=U!gWeKFnRr8yyDP9HnS*c86$XMj7CX^w}-gKn6GrGB*cey1EjW+D4$@*qy
zBB5dD=l9Zc!ir2Y(o@Xdi{9}Xf_P$jTVp#5l9BHSf?e`gu5E-K=VqcDwrV|iCWSvP
zJbi0>=eW10lI0mA-k^#yELWiD$+d)M<Fzih%)d$sUz$kib?utpPhsvsfCN&LXsTh#
z6Q3NR>EM&L8ue=w+h^muL|VRY>Ny$0gz}Xp$!|{J7(X$;Ty{Pg3RH-<yWp;rVj#=G
zic(bPc-1!h<Z!?1fHp^J=sMf)h8L9WYql+j@<}j%4X{OG+LN%Zphm^zqFslI(0Pjn
zj;5i-svN@k&TtLcc*z2cebR&+jvC@7bG`ss;f~&bB4>QeVD)0*V~PVHYjhjuy{3GT
zS|!J@4u-SE#7(Yc3Y>A4Z1`rH7^Qlf-0A&$o8-gspm#E>9ieu;QM|0on94SeO4Jdw
zS%N-CV6;1FdPyZed~qfpspFtr(IB}?p*h^gV{so|P?u2n3|P>&6GG!|NdskRco_C{
ztQysoT6!Epsl%M#;152@rk68^iG;2~vp$;<K0&e*>Wu>rU#^0;-eVG)_Y-1Q$pzG}
zKqwxw-CbfT7<&F@2a=TQZ3bJy=VOfkJItb+YiVZE`sZ!;&t~?+$9BQ*CfMjYxX;Q&
z&)<)7zhrbsF^mp3Pm<i_;_IrJHBw!<Jm<N`iFP&+3Vxf*jeaWR4xIL9q>xRm_;llV
z;kL%Y1@>8;S=9<7o7!!|kv@@94b{wk)*D9gow!2%D`>aCj>NBwQrO3vBqbbS4;SWn
zuhW4s<h_y(4d0M`P<^gQ5*{>84ZcUKphoeRN%CtiGz?Flyg29Ra@kW*I@inqsYegm
zplC>r$7U{LPsPK(o7;P^RV{W=P9T`u$-7Dn3xvHdZUJo*lum365HU1oJn1fm-akVh
zeI_4)P)mycyN;@GW^w+HyQ&o@j*aN+qG0zQUD5ZsuYW~}p08|LSw4Antm>;t9!^}b
zSUv_f&F~xhe7|I)0$!ll-BnKKemjn}683%j=xT3JBK9QG>x;+7nM923I{~@D=igjT
z16%*?jgD;;o8^NpOM%&9VOreZF2}hk$5NiI-iFrtoE3_9OR9H9XLQ4e{a-;N7fdJQ
zlWQ&fFsV5k4bd91#ep^N=l={hc0-HLp<{@F4vltIayUH&bf}db!l5DtwG7U6-}jRq
z4~-GTxC~)Tb;R{M(qP0`EkDed;&Rwxid@q0=Nbt(TX(^PfAY~iMAVEtf22i_X#&E-
zN{S$tS*!M>%~VNG$VTbP3!Cafyw`XY#IDvH3eRsldg8vh{p;p|8yhko$6-4QB=mDe
z(&~1_HS;vZPB>}S#}+GJFtO1Nnsq+QO0XU+uZ+1GON*B$H-FU?I)QABu}@<0Eg1&k
za=lK*R!Q#Jl^q7zxxASZxnJFYr}d))h5Cs-GVy=03sIKZ`B-UL3*)Cxq_|qxQMWJ4
zMoFgm1W(9l*YV#I!Q^|>&0;Wbg+<Dc&FiOx8iQ}x=<DUn8>p34GE!m%SU>Ky$Fs}&
zCx1FP@px3*uOAlr?FwO}^(3Jms0DY<RSP#j3Gb<4Z~d|#x0rMaVJw_pt$~Wuq##1$
z@Uw*;V_~9c9N&}Nrl!><34S8I#0#(ezgyf|iP$Z@Y{$qbiOds8zQ=<~tNqNZ=z`Ef
zh-US^sUN1d^d0t@MuId@9GbPKR0^tJQI00k)xu%p3G)H5Zf-oqH(eWz;f)tU{E7$g
z#gjB4egnGRy|3o(y^AE0U;+<UhH_jlCN<t>Oq3q@0LmUcz*A)8^#rgsy5m@pyi@#K
z^1T9I-6LjYHpv+e#wW&LnzMBc^{%JA=`lvgT0vF;A5<?UjZU&Z{H(c<f1I~?2ABH2
z^sPEe-{6Ah%-_2fe!<N`G`+KH>URx3jb5QVed?`$I6+^92lM)??TEV%{$kRuJ=kHu
zllEGokJ`kA_i65ne9=98(mR)K2NFX}gT{9q8dZu3Dh6#x9R950vM0G7U)yvVSv9@;
zoYF$*<Q8FuZ>O}G`Wm)hb4SaU9{5o6(BEy+O)XY2Th`_NQo24j<1RIuaGkv8s8jv`
zjB@15z{KAsYpzESU|Cg)J@%*t^cH$u9M{JOSH@H%-f*x3TT~b3jzSSjnhU=Tg&6Fk
zD>*Lay8jNO_1IU7uom95_30Qj`W(g^06b~1m*MZz(5#4XO1sj82?-5J;r4qgeMyy;
za5nFrmXt0w>_Btzq+B~5ENA3$*&ZxOX*<eEsjBVoD)NrC-j5<oSl!QmtWxo^3%VA5
zF9`u1=B(m4ycE&bdOPoB${(jBgyqtR!B*z8W|VagOyq0ND{xSzQ&$-&YUbhO_H>2V
zlA5x&TG=}-JUAtNE@o1(*Vp|lf>@bHnyxicxvTd6pjkG~H7YSE4)^FHa5&_#vBA||
z)1*97+^26?9sZqG30p$rp!_-~AOe|LXYH7|WX0&jC0}^sj2rk|JaZ8!C1~h$YTdPy
zarup;I;<`SnoM(lDe>S140gvMnw!jdH)y=PDMO*tguLrugY5O-Eu6a2A8Y3%?A6Wz
zG@Nw=>$vgwKy{9&-|c??HTV#(*d>>TcfVOf&bwJ0$o}3~U4IY6lCT#>Mm&#Sh{EI&
zWlEG2Ux{VJZpL@W0;hRpX9=gE2$`!Uoc-~4*FmcF&nc3^Y6W)c2o4R;O)9Su$EP;s
zsiYB$5m~<C2xz_sDbiS_bWbh)%$2zY{!|OigmAbEMh1`Uapj`fylSXlA}cCzW;rdl
z-K^IeGP4k7S&CD=t16RqZ6v}D6s#mf>*qoFH4xs`q^Y*s*H#e1@570duFNn_nbmJV
zGY>&XkkO~ajy!QyHy~`1hT@`us_?eYj+WdvPZ>uijCh?YmnIL`!`PsH-y&&J(*+~!
zsW4BwHl!Ju%qe$G3I(cy!y>Wv>V;+8l`T$m3`&}3bM6d!bR%i%j1eNfEGQ0U6N4Vp
z<>N)Ve$_t7BlA3VB6LGer2lNaQNz{t^IgYeeWJf^PYZeJb8epPrNH52q7<%(%2{#Q
zR4aC;cu1&pc}a0-l*_2WG}oQ-N<t<9Y`py@=V}`cI0R7naQ#gxxwwyyoSH=52-l@8
zZOX{CL7|A!G2?4g=S4FDfS4h>!co3!6JDnfFUsQXP4QX8rtEd@;;&sRv^(tjY^|gg
zHz93td=JI;gh!c}$>_MM33(5>!hRt&b;#t!6M}e`laXHmwbX0#b~Gl25~idO18LUX
zsUL<3jnzWx4^m-G)dN99=jn>lRb(onx{DFx*Y7-?zC2yMJ*#ikg>p_47^z92p*);2
z@%NbP9=(C*(>UlBXc8S)Y1WbH_AG&lwFDs$G)t6&(PI4~En@RycN63-7eC?+HR9$=
zeqUaS!}a(LjwU0hsN$EM{4Br1GrctP*g|R(aZxUb*5{!Jtw?Zr;izy~eu4m$pi~+)
zl%prw$#-sIw4ZbnTuR&pzlwrKuHY&&`-{BgzZJ7x*Nf1*6`VEvs_ZnsX~ejQ2W*X>
zs_=E`qNK4sZp{+vB}vVn?D0v$o<>R*xT;Tt4;zUKyom`|7w3LNis&GMfsU|00yZZR
z{&Yb-6^ZBZOLc|gzWNk7r8D7$gB@3o$E8nSf6ww^_g?6pL%8$Y3$og7Z_2B(sZdia
z;tuF*Ezf!?i-Gz|9R*Cs=c<+97E7XG;#e6B%;Uj@7;_ShnhamXT)y_oZ#YX=cC{;H
z87_3WLNLE!1oiuP#%QUxKz;NKHE69l6c6+EQBo{Tt@4S~a66ONw&&abPI+8gnq-Tw
zZLPiqwFRM?2m-yZXt&~q_qGTtEliu~G-2BdhUX(zq`{=ZHeY=tC>P?Bo(c<clQFX@
z*wY~+=S{V=aHjMz=y6q!G}jw8vAQRe3vRt!4GUiqNQg4tzVsx89FkH<N?}wMqBVCb
z<Z$$(<L6CEWYQv|6>-FfCQ#X(cbCpKgeLG7T59m0&MdQNkEizc5ARU-|2}Voc)B--
zGB@dyeVg;TBSzSapnr@MzTB$Q1iAenJg{Yd#eTII!<gFL=XSN5mZjq+Dy(Sqn*JbS
zmhuTQp^nfM<5M)jq}M_C7F$UDHZ^#y6mJn)UC!LtQFeXrHRU<39I)`BGPxeYH4!UB
z9a5}@EkjhjH~(N;{_FSdgCQ9MG`TGIk#jnKX>8Y8SMjcwX@|&igzw-@5!jGQzlWt2
zlM@yduvb873+wWs{KkD;F<06r<g3f7()6QAqCfmJe`%9XkTZ90&Z)q~lgM_boT7=2
zGUjumF&`h?{O|F44wk8-3$mF+LylpZ&69q%2f^}M>&|kzo(cxHU=sOWdEfdt<I1ve
zeu%EU_GRDp+p}lLF?klcvrbOj4<>1^i#^fqcmLd@BnT-U1iD)!yOl_)^+g{!lcRcM
z@nW^Tex+0H^`4X*To;UnA|IRIJr!GJKk)}UfDc(!i%Rw;w5Ag}h_J8PfzKZ~jNzZp
zcbgad1$xNCnMSQC;4QZRGjmmk+RJPai2b4H@uA=`-*}Rm0pFAEH`MmzwAIM-jd#8x
zd7=drsv|9JVtda8(x-i7+2lvZk8kI#7!C?o)l&HVrh%%l5=@&@1`;WS+fXjheXzCO
zusy8urM6Z=hh=A38maWmLW^5LDANGYy?gF6xw&#&{Ts{{&v@fEqlV5!Ob-hV*V+?}
zbT5gD*?JkVdM{r;P<T#W3~tM3fj)@mY+$EWxV$E4(oXvvLMFf>K^7xKA+|d}!<pZr
zauX&7Jr^p8-X58dU8j{GooW0q6Q3waypmI4R8uYJd)D{qqtORs^-$n)rJn+T4Bzkd
z0mx8GKb+vjCuS&0H%p1BL3ZS)#z@GlnCI2$*w&V@`Ol;g>NlAc;);P!tc9N1I=0Px
zKB8t2!IEM_9w8m_%Nc#e-Dbfin||`LD#c~!#pP~6nhVS!C9=Bwv-cl^V2+`zD<&PH
z<iY5}7NSk&>ImE;c9|p~w%JfCS&TX>=L&#}Sf_bjk)>M1fH5uW>Af=R_2$#J$z5~{
zkLO(13QSsS+%!sqE1jlmpPrxYp^x?{bQT<qRv2$ehr*5a8Cs<0$>LeI!(C}MYF{iJ
ze&f#U4;_%HL=@lp!)(KUV7>WX8Gm)TpA@iHggq3v%Kl1ed?@JbWTK*HD<{gn#=&}b
zsHeU{YMM|;v+o+YKyn<{N-it%&wky3QB8OA#yAhFS+}*_ha^}JsKsCcV}x<oxsk54
z(AdVNX&pKbQ_9Q`*~A|pH=&J{;RCN*2Kt_ZIi^Kk#AQ(Dcc&7yukrkuhdhf)@z2t%
z{^V{;V1s%TWmUbqA2^c?KZSIY>V2?5l~sIwQi8_y%&#~jo0B>&SKO%5JZ?X+#32-X
z59m+su1w79V|vs?nRm*M=NjN+!RFL8OReX#`AUk4ubsq#2!Eb3Q$5(s&?Hx86zuh6
z02e-qS*8E<V#m^=UDaAP+WzU`1{#M;=@g{EH7U4y>3Eenby?cHty^fT??Sax;iy#m
zH-Ryr6i}KUHmnr)rW)uq`F_t-Zn<;UU=58iUP}whYyAz*6SBdi#Y#8?n;H}{f(<x?
zv%)wxU)7fEl!)^(SKb^qTGN%j+U1JPdpX*p(`7y+gXl6%^XQ(T_<;=9<O(GUh`|jj
z_Z>H%xS(?}(fBPGw5wcX?}mZap0+{Zo{m8wGui;?867orG!wk_X6Pwj+0OR{W*?{A
z(aLgvI$g+;9JRl2ygay@>)&qPW$E&rLT2{prOXoGYV-c^R0Otkr$WCJxCmXkLxUHN
ze($MH5F9;dr~S=m7P;=4jA$i-xBGw=R%0(XJ&C%I4jB|kI8FRm$czBm&<jV$t;&H5
zE)n{@yZ#)It8=*?>aK?1)=)o#uvWuu{8ZhA(pT4j9wKsRpcZpWT0#gMY>Js#5{__1
zNbVqc*(+ha?V@R1QS0d-&N_bwgR1+>0_b@wxWQUz^MKO1yYSR8qH9-uyzflbXcF&!
zU*k}&InW)B$-1>ovW0KwXK<@sFFhu8dyVz@6_~D)QwKJ1kiQA;exYKQr-{th8)4Mw
zx(Eg{Y1@5C+8B*h7Y$97?9pNohsG%<CiN}dQHzqcOJx(u8dbw&j|LUIR6+qwF$TzJ
z_YtDnMAu$#24ly>ylrO`=xV%cqyR_x@e+2+wjr05=CVfpK)E2_c;Lpa7Y1zJw$+~z
zgKyr_JM*VAwXvqPY%dMbiplm^N##Yx#stQ+OM-9KM!Oj>cYq|-!9vhj0`FVU{AZK7
zN5kh9`DsnHvu&7pB15W_xgDECH|j?`*Gy1mr^p%P2H6b)7f?1oCX@gT&TYA<l0pX!
z`ZdSHhZC^Kwes>Ep#0B8D&xjW@dtm&t%?_wQ5$D_AkWWOM@}CfydFb7-|d#k%R0Au
zCFxYR^Pv-#ZgG39NTW3|5s4?penQvP7AN_JvOFglA4N)b{^nar9dp?PI#bN^*7b@z
zV%iI}ALqa*JLOtNYt<m5wOb-rjT@JAT<Q-8X4#F{L@;Uk9z#QG>kY}m$UV*R_!>*u
zfLbRGP%w*bz<Ug+vwBF;AZjBOba(At1B?Mi%qOo_MAFdP&v-i4-6ViU$X?KXL*bBs
zTE#o*rH5)y{tncbsMVL@J@Z<Mo!2^#K@u^K?7aqS9EUUMqT#3Go6j_OhQSvAdnRDY
zg4gRK#8Qf?$l(!EfjvCE#E!L@c6F^p8jwM?D-`M22$67z@-qNM7|zKcxK%5Tdh0rk
z+pmTRk6NOy1@w995r9DDAT_33S?U$|=J<J1UHp?JSz-)D^o9`KKAu|lY~(b*|H)G~
z3m7{LvL2@tgdQ*K5tXw&zj+~{1o*!I@|s;oz0a>W3_jVbWg4sznO*H1)!IT&4|UfC
z^!U~(CpHArHxncXZ9aj664E@Jsb}G`?IBruo(}T6F7giseGm2!9FPtS53rl7$-b9m
z*H_>Bs9Pj)?p<w!kpVIi^;$33UVlmb9FDFt-^>t3N&6Ak9Ei4gEc#0thukP_RwPHx
zB`QAXvF@cO5h0}6aGZH^`X}-H#=w=5?Lf#iclr*kt0(LLXjycxK=s0(XS2%QZ2hSh
zDR<=r?-R<#amD7U?t@6ZK^A4^!Q#WFfwx^LFTWi<0mo`=Z$}<}#_D;}Z$@1Gji-~2
zn%Mi7I_L-WQT^sgXYG$i+@51G)XB?4?C<Mq*&Ys9RBw_RmUQ`Wdp-GvNgn>b?)@Bn
zbx}+fhirIojk~(uvp<z5Rw=gaK)B|7uF0h896$F6(PH<vUN~euEl?<P)rUIIu`Og5
zz3wU@6zM6u=Xy^BCG+;UbJmA|#I9xUPM-L?Z(}8?Q!%vW<lpX)4$c@n2-oa+I1Lmj
zCdvvOL)_Lk)a4Senb}PrqM>PNNv2-usEh7l?{{_#>*d!!^=OL*v|<bP`&iU)lYH7O
zATS=a79eV5UJ@$VG$foxxq1%HvzJ=*NUOM`JYLTyvp+b_&kMd<kkxbw)0`C{QVba&
z+AHYN+CuDbq%xvmG^XETghX^Xp%Y<dHOm*Tyr|Zw(Q_k1S@r<JyuDUHnc2-C$a-ty
zGFNAWU<Edx7QgLR6q`}^k>BsgbnsYb3<|nms4UB&lWUW;lVk&Y>jf@dy8bn!Q&?nI
zU4xp;ScPn*CRuBqKXiZlO&*;eyTT#(LTUKs)I{K*tQ|Y_@93NX&1&4}QP~?}>?e=o
zM4-cMB8qH|FZY^jV?t!V9IQ9!J2BQo7;jb!&$<5w74rJ0+3x#E=Kvq#GdiyI>i)Sn
zp{huhlp^bQ6a1AbHj&e)SqErYtne5d5?w5M$R_Z~S)z?)-gQJ2pPV$-?C_?G&?3-}
zuM%ffu-<oc{I<5*s?Ot$y>6|$UceoQwDdo!zjhKGN_4J`X`)OXLNS@vx7MW@i>S)C
zOG?7x86<w$C*d%OrDjVTZ1mPk3E(Ovp|ZxmO`;S%a~WfOxa4_!sdhlt)3Un?0xn+y
zI9Co)?F`7_;1@yQYV!Uj)T(snWubiSZ<^P^Lf0?HQxkGf_%zLTz}66nP}_RO>eAY9
zn@?n_(`B)HyFiJyJlrNj3Iw=*4EzIw#@)W1?Ls5?Kyuu?%#AS1<8dSP!o6!o$<X-x
zkNq~$vgW{L%xyhtQqv9B!$Bp}*YvgeRE+{h&$71f|Ng#{(%E|*d3)PRgS7%+y<!x0
z>WE%LC(6T*s)jAF8(f6gETns1)g$Od0+o8T(ps>eA;J%SDtn7|lI@7Gx-4i=RPw8<
z2)Y9l^?WQLt5aRmG1>%s)lKk5=27m36S|lG^7OC|o1MSp{Gietf~+m1zf-0#Mj&Qw
z=-I74o>lyV`m0C^eridS?RH6==E9#H&bB*Nz2~=KQ}Fbs*A5N*3=4qXP>IgHUbJFd
z`?ZxeVG-q^a6*n#DU-1uOn@Cd%FPyRMQ7PlgTEZT=9E3!E&N)kZk22(Zq%M-Ng4vp
zsU8UlF6pIS-IhRASF*pM<*&aM|DES<%2yk`+YqTk>-Fp*8l~Iz$w+z4Djeo{_TRF(
zih8?xkqgks^Q{D(GD)MEE0uFt!-vqsMzi|MW4`*LY{A(@hmMW!SOrnrvq3E2N(9zv
z(AK^ydgo&aRn>YOH(>Dp>N@j4s<!CypV07q!fQgAiWezdk|AUD8jUZKYZlLx;S!Qr
zdL?sSGG-`Uk~uPuPuyO{XS!xxWzG;TGJe;&_tNuz-{1MGj(g78XP>p#T6^uiKC9-f
z<v$4=MDn{J)8Ls8tX+9_Gb{a(E!PANd9tXx>xPB62@2!R5Xnm~{J3Lk9S<WipFi*g
z8f!ltJ(|d25}bYOnU&e#AAzJAp#V##D=}$|A}8qX&T+9bi}9X0vMweot#&tI?Q6K<
z`fSFP^8}k_>Fd%H=`TqbgH=o3B_4rGVn0dA@R|h2U#&Tq>!KXin5z0p{q}(k1&y#P
z*^0Z^Z)`NeQkBwT*>uN!lITa3;rvh27qGEXbf3g7=oqsjtgJaA#xEZ4$jf=JM%K4s
z4`Y==KUlzCeKCil{PY(Uug~+nubgu;mVO^Z+OwCiUo*^EB;0fVH@)w*QX0#>BN{SO
zh4@44@jRx!)rgaN&>Nedm^W5OE{T5aww~L?n!dDpGvnkDziR#Xja8H2-V@^PJ&sJz
z*!LaD)iwRYa@6H5M^%mGJddMFkiN>;Zp9C>mJ;CYXeQ_eiEcpZ7W)hC2~sWYONdMF
zY)_Xn(Pa4U(>e^sw@_?u$qb`BRyt?LrBeR&?cf(-ZUMDnV510o3#_kOrQqj_i9@oO
zJ3V~1QV7zl8m2QA-J~+cg!{np=x0xD*zg#Jzh<;MQ0MpXK!q~)-`ATq^cmb&{Qc?8
ze57~j-&pyDH;K(L1z;J)v34qoCEbww_Z3TSJG`&-@jjD(p7gtplsf3Xit(bRh6SGa
zMMz~Id&s*>F)i=s4<vl|$Ox-j_1CG&8FqM;AJP^1p!CaeK?7$kC7w0Q{&PnE_|Ht@
zQXsupP*vqiuul4zen)WoyZAINX0zqD1jTacs(=AAeaJ+d<9f^DC5pF@KQ-{$Kf10u
z^P9jkuFVwba?khaqz`WoKCtrBnHrgI)pT1d36!{TE0sN;hs0=fbu1@Tn4kM%M-ko*
zbP3k6(0O>KGs?dP5t7^YOHf;((TZ-rsBlMl&}HXW{Qil2jGAYrE;H@jeV=3(Fn_*c
zsmA_3>E~QDBizJxkRRRJ&eXlY)UtpxZRmM8T+JgwSI)Ds1d{a|*BQ-BJ@P^U8xen6
zYlYFM@Hlzt`v{w}RZvQh@++@tHg@LfU5_9|n6>22!pwwGg4Euh>rSmz@qFRPzPPt1
zbmsMyLu=RQs^^l3u}2PaMl>Nl4^!iHmrZ$2X|%*UY2<iLc9)uRytkAbZX8%M5F5wP
z=_N5d8q2@l5fpqL2}_o4c}zS|{=U*zwlDQ+krpu@_hiYiwj!ADIxxB^?B#dafxkKK
zCSvCnz=!nuRp9xP76HYxz1OtPjMN4FWac&o3$m)I-P-9N9$M`(gVeyim|X+4=XyDC
z^&HEORn)?ELjHu0dD6Uqn2hFw9iy+@?3aXbf=5UtlQ+N0&efNiMwoyFSvYw)HOH3s
zxKp~oesMNTX*T=X?ln#q{eA42$q^v~Zs`V)0d>gg&(AA2GJ|{avsB6Mhc_g-`7|(*
zCf+uI(Nh8mrOw%I?*47Ri>*k}b)u>fv`9|*^4e77wCEpblHRkmuNG|9I|<}EqxhEc
zm0^?zkliqKCo-H_P883xA&nd5TfS^klvmOxj6*sbVI9xqHw-(ncjnXXl=%$YA#3Z1
ziCno=QVscOe4cG8-n7=9!5GaCQdsFKbqI^jx=}<%y3Hc-PH2MX0Zj4htKxfY2TNu<
z3X<ms+1Pe;?^%yX{lHh_;1N2g@U3jQ*>8C|aN1CjJZ-kxb1&$%>_^1m)$351qvjKj
z+;oR;wLNGHOD;-S_T)RU>dSV}`X&H=TGYM%Y#C9|W@t(}aO(zqfP29tNWjVj5s8xZ
z<B3O8WO4KRM(&2X>zD7yrqA2uC%_*8Km{S8c4xnV)nVSp8ZyIC>#6v(9Z`FPh&AcO
zDGCyJ0R=I9#cEx+!ctXflKHXBUuDv-hH<3cv3TlRpvv%wkfO)B&;Ar<U#HtYfdTXH
zG}=z5!!F@)&>P|LE4>-S*CEr_JrdTxsB0`MZj5wTeXR5R76<P}F2R<a@x*)<gI8ln
z=CfRFbYWf0N-^WU-0MO#fL+b7b%*@*iv~m5#A5J(rM~yH`z0<HV#%;<lZM>Q(s(R!
z++g~o9pt!+7BHXv-QHfhv5vv-KG*SxgOHG)rC)S95-}$E&;J8+t(v`qDT?yA=N*`L
z^92>26Nn1KL*Cb%;`2)T4hDFFeO7{W4kc})IM@XJB~ItnMs(<>@r9o!x-SOwDz4=I
zqcOwG$1Tu5uxEc{WR&3H+|##ih)MHx><^7DQMJCIICAz<_hRyyp{@6tUoos5@Hd{b
zN;yO{`&1Ycadv&}=r`HGm0Dc-vWsc6lJng=j|Wt30`H$_U#VT#^V4*$diiHgbpQII
z4SBp2KAF#1=g}9C#}5<Bu^8(B6)i;eucf6z3BMhqnR}1~hs$B>?-b$%eTBssvtc7|
zsC+&)H+OIO#V5beRfz?P`o5obRab&M0VN0>{oZs!Bxl&tdBI*zjo~Fsd5c&w?N|WR
z<**h*?3LL$eLV7DPr)UIUS4T^tzAUp8;j*GV)mcWS^kl)kkop{a%Jk>WT3HQ8x#59
zsG06CcEIDwtjkUHKK-~jeRU%PmYdV1jw1Cr`HPSP>|=XC+>g&xZ|@Pi{ke}q6^cKU
z?#edZ3q&%9&w#t|c_`p3MKp|U*;pTdofH!9oFug7A-*^*Ds29xroQxQ&yhv{b7~Bs
zIF}L+KdXJ&{)hj_saTfwUQTi3(T~H04NGc#zI?Lp&ahKBnp6xMd&A4u$sPn90A*C?
z7p_e@-jcQcDX|teJiVS7<;-IpPf!`0YwVG!@mO=YNyK<c!0_&ao!^4M`&x@UzWmif
z6M`IbOg>yMiQJs=L5B7SHj($SJH$(XJ+RqEr>A@NSFBCe2-WPFzsY5P4vlRn8LbX>
zgle*6cC@Nveld&biG(<j=VAj#?g4cb@V1ZPVJB+TVR=2@YN5N=dEWbk!&dXxjO*iB
z8sPVvK;jmk<w~3uS=k66Jm(h4dM-=e>jHR;chP7TUFUVTGQcjRdKIxC#`hl|wO14q
zpU%LQIlmc&90I}1<D=T;Z#O<)v?p(7{j(-Ym8BMDrW6Uw&qbqYZ#DI!T_H?*1#0$D
zHJEXKKl$`MKO5PfR~lHe3+q>)E8i!?yyj)0wbr5y!>HMIt%EDX@xz|I+TtBMY;c;I
z^uE<OC&Un^c0TT~mV)wUpx}#anWn**UM=cfkQPgm_Psa~A1fvFvsmK<3I-qor@%3$
z2Th*WCs;=_iTmjUm`FOL^Q=M!xpf%Ja-5dV1{;DHfAfb#wkz$P>vJ`3)rf2x7B&Q{
ztAIn=Y!Eg@E}qaR9$1@wq*MHvYqw(K$7h#rk87%3v#Nen>JXoy^OVt3-^*2umz<s(
zurDo5dxXpLeb6Y@vFQ0R`8Ru*vvi-~D);ZN`h*RXHm8GU!f47aB*&iRtRh`elo>!e
z&({LHCV1VB0*orQ4VAxhi-T!S`U;m8!=wJ0M-b(i*P~w=PYcwkXYsOE!no@wjl@N^
zkcn(W*pW<dgiKT+a|vdS>;OX0rx^zVKJTt=zw|Hgw&V2-K!NzA<`N(wuem(E(a4c(
za978Ht1AV$n+JiLFE(sk3_izCYDfbXfF-_NHYn<0A<<CK^D~F*uQjm)&s!itZX&)m
zy=E!aVE`;>4usA%-KrP^dXl8SJQ=(=T+1={=-B^IKvp*L?w#qkj9-kZZU8DOe^?X=
zGKUycxA#Uk#KTK(ad=EQ3ifTR3(5}(7Q~-ltusoV58c3~^Q~t49lHO?dt=cg8K+N}
z?DSgc8SxfnbScpjlXX1^UMC!SS+dYy1UY`_uP_uD1OTwgQIp|GeB>|((<4>lDv5<{
z$0q?fkZ}cx({2ZQHmGC<jc$vC!Mj!>#Fer-1C8Y|^|@eLdwbo6XNsK#VaZBxZGD=p
zU<Y)`C@xFtnKDwD&8#4e$9c;Rye=X=GFclupL-{(^fdld=7|n5ufB-@Ta4GY2%Tzh
zGIMOpd&!yRlpd(RtipNXLABBP9VHfzM1=#!FW8^lbhD|izlE^3pWjVpVZKu7(j>3x
zR;M@nNI_vXj5lt6b_g8ASM&brujZqhUd>l*xXh)KiX>yBtHt(r_%oxXzpZb=kP<Vp
z?!e;Mv6d)9>6CURK(>srVvdDIx?_PNC)M^S%)c;UwO0(&SU%kJK`Oa#>h2|<C8PD@
z_z`&w?)ep36V=i?4?o>)(s!%smhmzF;}3y521pd2fBL?K)Q~Y=*Y&k)j)+$*x(lLX
zwv5E&Y6>CT%L^fBesSrs5|~Q+%mSznQk}Xo&&owkaKlhVoV3zqJ*J8-efOacu=aVF
zD6w2()rzu&F7HeFHP)QvioLXNx%c|Wngt6Xo%A`hN$R$p_lka$1+7traCyJ0ITJl&
z-3=V@)_NxZydwJNRbc}om!(G>8URuZUl^#siWgcf%p|J{dX8(ZJ*e(cP7f^g@^m;H
z@d@QXojYdEY~*lBDb!V^AHXR=OuCNuD1b4a>t`A`L&%R<WYe)O{AVDd;%v!#4^l5j
zm}Hw@r{Z@~$TmN%Olr?RllyYamA;ZrR8sON5NPVvTI)%tVfDgl!Twcvh%MuJ*d%gI
zSeOE*`K_?QRztTy1mEY<#DTCrhVj(ab_0lQNz$Ku!oB8`!X<A;OlR%(`?a3it4`14
z{Y{7ODc(wB*VI4Cx@2QrIzcSJJau)MMd~A1QIwJsrMnjivK#sszR)LyuM?@`NS4^?
zXS!gYKEW}uN&qYsYvbdV>lVxeODvU_=kxIPr<m%uYV?&hT12jp!-ZnQC+RYsWv8Dr
zw(`C%{jJ`7c;=1PcPfg9QEC2q!DVkLo7Z3dVn8ly7`QCG49t(0C~dxEf3GvTdMJJ5
zb|M87<nu6z%CPG#1TLA+^&02}>E3V+w-<prjn$2uA#I)e*z<XJLi>?Qx^@8e83IyG
zge)Z?0i)-fRz0UktC9<lhrZU6t_s?gp)U&lewx(U0MO57|6f8Du&@qW+1S_&zeSl$
zQ$-`g@`9d25C!OBT|t?UK${pDk)ISP{N(F2=r52Altk||0)x-P(GVA*Oz-tMlvsmb
z>B}nYI|Pf-U6n+bfaLv5W&L0~DVFQoxAhVh#nl-nxF4RwuJ9PHYY-St>PAa{v6-(|
zMq9*3qfp9H0lWZYd5p2a?5MsxEvsBc{+qvgy?b|@$L!x@syH{z;=zDZ=5!wkun_@3
zl#JT1A{17>hA;HX;vuP;L-zMhXFsY)A*_XlnBWYB(HX4!J$|gLc=WyHVySjz&9c-p
z5&QuB@Wk9*JS6TD=-p#8+5HZp(Tz$3E|=c=$p_3bC%_sdsJlQ?Tq`j4TIpf@IbBmp
zIbu9rwx~wbcT_EJUw1JzisitS0t&|1t85-Gi-*M*xeRPr%fQCka_Ku+*xG2&BA!qr
zC_gL~I~!rnW^g9VaCI=Q)paDJP7nPkNaxLx>2h}w+Y;(>qMTTK%VK#foATEr;j1Nf
zeZ_fz4a~b@_NFZbaG~?@i=_ep<tb2yd?;<V(O-FD;$hursBEo$qcJhjsqgjTZetQQ
z*Sz65H&T!S3{yO@lphZX+~}GX?(36#{VUT(`UT%xA~oD5tplxnibaT@5#=};&cq%R
zZzV}2-(&F8YgJMQwpz=miR$2~tkT(=_eu621yf$-HYv!$&`(gpd9U=e&VjpCx*K6l
z7&En9?rPF-tE8WO6jHRQ<ypgSy0yQ7G*&o#cBTRV@m95P(V3XJMp=xiipr~Yu++kO
zH<EgQ39C}VTy%~!J5<;Dkj+q9vwXfq*}|NQzVd=glY6pL-8?Ce^rZ8Da)xKJt8Q6S
zR6QbO1Nm%!|Gf^rrK+R;_>leA976K1Eb{YGJ!va|_9;M7vbN@WV9?%FGt1fxYq$(Y
zTO{*^Nb_c3b9lKt=l>Z4&~1}D%nAa!@(kj&IK=%x*aj?*QPEe~&A~vLBh(f!I8T^&
z@Mjt*SraoSOQv5Zg~UXQarO)@i=moMv+&EG%D@>LstBxWhbe>Ch>MrN^bVhgwj*(l
zFCNs>h5#q;LeCNScSOEye-2jMb#A!y1q)4w?92q*pHuG+1X~<|!DyHeivPBy(Y{#o
zKYXP?7so5Wo@bxw9hMaAbJB#g_hM(NVMZ9c0BM-lLWTMXX;p90O|hN8w{_Q?Ridxd
zkg~CtZc(Rvi)>Mp)d!nB;St8E;#7uZ;))xE=oWXkTM!fuUWp0^Gj;&5CB`U6?!V^%
zm<U3@{dekWc8y>XQ}=JaGGNM3iY<EX2)}fxT^z+sAe9%uJu%F$hj>qR8<VW#y=_t=
zCzd0G-ud=#_Ju^{u?RhlZU_W{&xT6T-*C;jwDVOY@<d?eOedDY=t3%e+u(*gWo1a^
zpOPn}IR)_<QWSbw_6*9jz!X5&32k;)AFTQIb944<sbdf!*R-2d-wAQ*TUtWFIjza6
z06G)WdSK3+r6;f{31qjj^AINnW@@Fz@r*NQW6muCeh>tN&uuRvWDC8{N2Z)d7%87a
z5bj&4QBWr$XbY>9Uw-fZ%@kSzN9A8q3eZLrXli0^U(r>)`56b=5+(fb&vqdf^ln?x
zB!hVrf8GjDn3X`X!#5k+)0vppf}%`mA|fMVQURX%OX!(>oQ4G=5XG9@yk}2mCkkTg
zdW+KAgv_Yc9&tixb3-5F02qh;xNE1McE(4D;K6}?lAN3j&W#|M^2BH=5w6+cK?lm>
zH3ieE98LX(=L&*ZbU}2Ef{%_~=>$(gyN_z`@hVjDNn8Q27_#>lYBx69mKg%CT8?6)
zDm6M-p|xr>IeRfdMj!n2DN3dkGDCYG+;;TNNcK@CeMc<(ZqJ%8VDD1$ygZdoX%AB|
zr9xNfA5<SWP)B(cK+t4WDB#N$LnMFQl#GMQKLJ6FK+tochc&5+PcwkHp`mVB^Y2&P
zvcm81K|KvPnmv<u(IfPm{fu@}O~4^ad(561f36)Yo(GpXuSsFkoOe@fDIF3~oZMBt
z*|#-lH_$rV`G<J5Q@Ep@QOEsv`1sN|pMCtxjL2TRpfn9s>tjcC-TU*bD19Bb`8x@P
z6B+Zu1t>DmI5lmzpMZd7G3ik_zz3*ZWLyOhTpSA^Z%ZkoH<O#Q9JVZ=AUS^iS*r8F
znr?_Yr#tp{)P4p;G=rNnLgNVf(uuOk$q>IH)YhV1I8KwPV(=8;{iSEs=n)2*EZV^o
zX$s|L!v}JvN?O#y_73R*33fr<Dd-a!aVoE{I733(<8!bSK>f1YHv1N(rLQ%hwC5k^
zy3mgMK08FYKlxKOgf`Fy7Mt350MpgRhN2Z3DLxzGGZpXw2lt?jR_At@O8u@R)%&C+
z-kr68avkb)#6t&G+P|qHO=K#=-T`GRz$H-Rrt&Xf4MGIsFI1nfR*{@10^WwVppQfP
zT7jebJO&uI#;Jiie~H<B9gd}W6UDE=h&jMcAUdS;PhDM_j9c$YKT9P%Vog4Nn!$KS
zw<xT938vi4=>kA@sls4P9sWQD&N?e+)o=?jX58%9n5ZcBgPi>+k(oAd4J1TSB=jsi
zDVuhkwyK(1K2_cPcABQNV}UgbUhi-N%0bk-Xn(IECLH`Ky!>K42elJsb|pWHkBNb)
zicdH!6PPm%Ox^wG$%oCq*47eW)Rh@xfYTTdT}?DRg{LYv;yenr-G#gk_%uT%(qPX{
zsw#USmPV!6gR)s~&)Sq1^V_!pX?@cQNj&LWZQbz-MhO5K(Su9u1PpobN@4APDLIyA
z4@X}@yWhV@!Sx5LNJbl*of!x=qfT3>3EImm?NKMZ*&l7(oQ5JWOl|g|By3cxz|njO
z{#@D2D_!cEOB*T%U<shr5L*p*D+`A?4$X2jf*o6YxyXhbjg2~C&WzEEplZD4!{9~4
z0wVz)cmZgT=xs;ip>6*L^HbRU({Cp-K{P4HIql$3mOWq?%fT>G4`7eyKy)S+S9E;q
zR3@DGyWt0GH<Ib<sWK2_+7&4C_eNIa4|Hf25zI1<)1=|wH2{o{1r*xBP<%;P)A#sR
z0}wrRRlxLH0QL2-#q%&A`kIS?mAwi)f4lzN8q{@;UaKzt<jdINFAyKKFyOsWz6tHG
z>{#fsm_C!goLFtaTY2edp_F4^>^MHP|AwwhYs`FZT2?@x=Ov#4?u&;12G>R(of0E(
zK9#iVjap20BE#+;)E6BCA9p~HzFEtU^Ul@faqWs2@V5$_NU-6EFI4Vyh7n+Gxzfj6
z>6)3WJJPSAUT*o$bHvv`#aHG6^z68Uk6rA9n@7cf{3}3|TYVNDyP~*y{_B+WZ_UpC
z^2YW1|AeK;h3xtKf->R0#qvci8RL@0e)kmX%p(4Q+Z!bh%zqi!M)$WRf^02em-}5R
zxPX_-*pjJNAY$8{Cpeiy;C5A3%5rN@GdFxMnDYFzXtusq#q@~{$sjjxgq1l-pUTBG
z7`OMa(+s6|>hY-Ov@>wLr}sYQJ&<jOGU%#F!N37oeyaHWX|%EJy^h>?2}i0eLMm4Q
zJKl6RdD0caL;U>w0H92pixB2*aFVn8-pK<|eDloRI^`bU>vgM1Ey@^GaN>z7hpFN~
zf&M>z8tZ6fEjCy1d`(Z-4=B2lTyCQ;D!L5&v`-eaFaE&si*v!&7Ar7MWB(_TAJ<)Y
zY;DwUAha)z?fht0;~%?>32zmcsWl0<dcSANnr1R+5}EFw18&X;t@;EK*UkYnW>|+q
zJq60)gTk^ygWqid-T8F?!?Fbwt=!pvLBm1F?Xw~osh1;8x}dbb&;DS^MuLN;osRv%
z&u#C#f!4GDJn|OWIZop2QE88!o_@(~Lx&7g%&oBl4ErU31vmT~xc*!NV?@<KNHa>%
zkME?>sw-bMgN~147tPrOYO7hYpgLjec3L=!HKLk-O54v_1OuElbjX_aCKR()_lRjr
zC7^F2An=3ojrNqfipqBE{=eDj>GB!#!>F@Ky+3-rd)YST|1H|HSW!Ob5=B{3&NQ1r
zsKSBf#UMVJvbV_(P{)ySV1EJ?YHDh_?Z(@Q`?X9Qp!Mq_F`)IRNAc}Q18toxoV_4>
z_HcG5jmukUa+K=vg73Ot)cCgj_FmmqmjEr=Q0nRkTAgw<o6+<)f+)ijh4wII*knQd
zXC<#o|KfTsd~b+4fUTn(iD}$k3A>qoV$S+Ou?MLF9lv#lz$);(e*f_l__#UWa<*<z
z2XBWimQ#<w^VU>L4HJl(^PB%P{vXsLB)k3py9q6e&~9t@bW14E6Row|zZfyoAa?5q
z?aM}4=)}scY^y10H`DdIxS?(fPu*5u!^=GXbE^wXM2|`fZFR5-Napq)gm+8*`$ydY
z3Pb(JmlA`w2n|)=CS|}OcHP!DLv=I<1{Q}OQ0(pxurykT;J<Y@3@g@&+xkWGNF9;Z
zo0Mu1-vdxDjdFlLv&%2#Km90$qc}5^AD|Z$5@UbV41jtRa>uD2H#qm~u<Y0hbrxv1
zrwmlFEz!PIMfLaK)1iefz$Mz=@`9oU+wHn3w7_Bue9ZyMX@X+gsdq1?D5tYOlnwet
z|6KwBwaD0V+CWO|fv%ytMwH7((Z5myjFkUVn)>&(t+v)AdN$nJDk&lK6Ln5TeRAOa
zt?#`*y8*ta;KU}4TgVB%aDL_Ve+u)U0XgyeLxt%OtB9kN<xyhOw?8lQ?frq)^_A(0
z_HxPGH5bHbz!vA;qfeI@xE)S@MP325^6uA1$%AjUtbBJNX?XrK&zknvsZ(^7H5Gj(
z?QgWuD2RHf#}_^e-$E3o-d*VMxxO6IUViZ;rx~dNV@R)f<}b$9uq)ir9a%<-xmgW1
z8wRNq!@g-IBmWgYTAGVrBurM3#x4{O&Q8}(mG6>IMeE+=Hp-lW*qVcQ0T}OTrv?dP
zeRy>?=61L@+X}UpkYbxC>G5ocS`b=pKq;ZF-G0Ojy+}zYbg<BA8d_>LvBJW^89!NZ
zDwtxeH;e3S88mPw<b12qk~DYf9_b%3NWbPW^h~?|q$tH*1pO8A4?4W8G)01kp(cv*
zfddDu$m8v<b*!Ka6LiF-_1(tsR#{~WF@h|od%S5CO)5dzw6*;%Vk?|1M!*{~qj5*z
zx&G>%TUI<>FW#hbh121pZjQ+%ndQ->RzMraFCJu;{hA%E+?Tj{k8|G8sw_QsQwWrK
z9VwB;(6x2kL`M1luUGJZh%!2*O<mzce)vjL8h-SYk~%%ZN!&Py%IKBfqv^P2XG$rN
zb8PS0Kldbsz(f!;p=K}LaWo{g-Qny^CH-8-g$mC|Sb35m{c*s&LoB2YwmZfyBH3l(
zWJg#3<w7Mc=Im@ryf@V^DZbw-C9dWBNJ7HmL69m&;@OesbFngVBHnXS-cR8i31O`J
zkGSgFSM3~o538IYn%<^;>1w+>zjcp)%Lne{#5Wi>$*Qq;tZuFJjwnO|7q=+|DhIfl
zyE&Kc!{>VnBzW9eZdF`s&4UGDCp1WB8giC@dWW%l!17rUa56XIro3RWAOoaL<lgMl
zgy&uW{;O|m)i&~Ub{hl|_98fyti_5;4-}(PA0&l9F&Gt8Gt6>3OIKcSS|a(SK$$7w
zKKp7W_|(^>Dj<psymg0~dY=Z=$C|#LLN9dCmVB?LyeN~v2J;kgSSfd#b{~)x*L;y_
zJ5aGcQIQPs%BFCaK4)U|buGlk$U*d!C$vQc;>G&qXjK4TwCVyB4-gg~f;t3zfRS*C
z7u=0jTR^31>@zI9Q+^l2o?Qg)O+z@;soLGh@Uzmm6U7lO1^s4H^HE>7kazKJX{Uw!
zgpN2)NhM{ya<_u0y%CJmG+0PoES|?>JOyz(jIS(xxT5f9{6bzzLwGw>S(=%J)n-^U
zYI+`hesy(3Q4x0fVdA?oxp!liK1S~h^O|~=<uO$6laL6FjknG!lZ>=ejRQw~?s{lJ
z*4a`IQr1~cKE17?R8~-bOI*BJ(xwxAI$B}knn2u{Tz+~)_VO!vSgk1-sDB6Jo<r^I
zP`DFJEK<}VHas>7v0)V-Y4nSfCxyt|=3mp-H(|;hs*7y0(e|Sk;-<WAs2jYlezKq5
z2fO02<Y>z!RJ+s?2o`FVUQ5+H%)M+Tw?@)3i*K771^p>M^4xKj8_6#Sg+(2->_bxl
z$e=;a%2dgSMoem&=^5+aLg|G(u1iH4&czT{%{@=UxLSOVB%l>Gk~#1HK`Dv_LOGiM
z{WSqr+|W2vo;~VAiw6R7jC(OETCI#$_G)i0TRdz4YGUApGFg(2bZC*RFY<^DZez7+
zV>LFs<vh$@m|%~vo<)abVBTd1u7U?{oW>+~h{nr2Rgy9P`HH+jJ^?-nqh?+aTCD<m
z^62>Vp1qt9auz>)%vXlXm}HqoSec9sb@Q+xpZ8mQ`E%=&lnuqr$yj%(tLZWc2$Tsl
zz39|R(W&Bo+F#z8)6R|Nqn4Z!*rS}G7~=mL-X$XNMYs6^*JxoGa0MQ2cg?X%8$9NN
WYjH>GM_kc6Uc01rG4q14@Bac<O8Ra9

literal 0
HcmV?d00001

diff --git a/Code/Barometer Code/Barometer_Code/Barometer_Code.ino b/Code/Barometer Code/Barometer_Code/Barometer_Code.ino
index 8a42d27..7b0cb6e 100644
--- a/Code/Barometer Code/Barometer_Code/Barometer_Code.ino	
+++ b/Code/Barometer Code/Barometer_Code/Barometer_Code.ino	
@@ -20,14 +20,14 @@ void setup() {
 }
 
 void loop() {
-  float pressure = baro.getPressure();
+//  float pressure = baro.getPressure();
   float altitude = baro.getAltitude();
-  float temperature = baro.getTemperature();
+//  float temperature = baro.getTemperature();
 
-  Serial.println("-----------------");
-  Serial.print("pressure = "); Serial.print(pressure); Serial.println(" hPa");
-  Serial.print("altitude = "); Serial.print(altitude); Serial.println(" m");
-  Serial.print("temperature = "); Serial.print(temperature); Serial.println(" C");
-
-  delay(100);
+  // Serial.println("-----------------");
+  // Serial.print("pressure = "); Serial.print(pressure); Serial.println(" hPa");
+  // Serial.print("altitude = "); Serial.print(altitude); Serial.println(" m");
+  // Serial.print("temperature = "); Serial.print(temperature); Serial.println(" C");
+  Serial.println(altitude);
+  delay(10);
 }
diff --git a/Code/Control/Feather Code - Aaron/Altitude_Control/.gitkeep b/Code/Control/Feather Code - Aaron/Altitude_Control/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/Code/Control/Feather Code - Aaron/Altitude_Control/Altitude_Control.ino b/Code/Control/Feather Code - Aaron/Altitude_Control/Altitude_Control.ino
new file mode 100644
index 0000000..70711e5
--- /dev/null
+++ b/Code/Control/Feather Code - Aaron/Altitude_Control/Altitude_Control.ino	
@@ -0,0 +1,430 @@
+#include <string>
+#include <vector>
+#include <Wire.h>
+#include "Camera.h"
+#include <PID_v1.h>
+#include <Arduino.h>
+#include "LedPanel.h"
+#include "utilities.h"
+#include <Adafruit_MPL3115A2.h>
+#include <Adafruit_MotorShield.h>
+// #include "Adafruit_VL53L0X.h"
+// #include "ArnholdMesh.h"
+
+double Setpointx, Inputx, Outputx;
+double Setpointy, Inputy, Outputy;
+
+//Identify all the global constants that will be used by the robot
+const int BAUD_RATE = 115200;
+const int MAX_SPEED = 255;
+const int SEEKING_SPEED = 70;
+const double RESOLUTION_W = 320.0;
+const double RESOLUTION_H = 240.0;
+const int ENDDEMO_TAG = 0;
+const uint32_t THISNODE_ID = 88789821;
+float groundLevel = 120;
+float lowHeightBarrier  = 4;
+float highHeightBarrier = 4;
+float ceilingHeight = 20;
+
+//Identify all the variables that will be used by the robot
+int findcolor = 1; //based on the same code from openMV. Determine the color you want to find
+char newPTCL = '1';
+int pau = 0;
+int displayTracking = 0;
+int8_t threshold[6] = {0, 0, 0, 0, 0, 0};
+int BASE_SPEED = 50; //125;
+int ball_capture = 0;
+
+//The debug LEDs that we will be using. Description at:
+const int DEBUG_STATE = 31;
+const int DEBUG_KP = 30;
+const int DEBUG_KI = 29;
+const int DEBUG_KD = 28;
+const int DEBUG_BASESPEED = 27;
+const int DEBUG_THRESHOLD_MIN = 26;
+const int DEBUG_THRESHOLD_MAX = 25;
+const int DEBUG_VERTICALSPEED = 17;
+const int DEBUG_RSPEED = 16;
+const int DEBUG_LSPEED = 24;
+
+//Create the interface that will be used by the camera
+openmv::rpc_scratch_buffer<256> scratch_buffer; // All RPC objects share this buffer.
+openmv::rpc_i2c_master interface(0x12, 100000); //to make this more robust, consider making address and rate as constructor argument
+
+// Create the motor shield object with the default I2C address
+Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 
+Adafruit_DCMotor *motor_VL = AFMS.getMotor(2); 
+Adafruit_DCMotor *motor_VR = AFMS.getMotor(1);
+Adafruit_DCMotor *motor_HL = AFMS.getMotor(3);
+Adafruit_DCMotor *motor_HR = AFMS.getMotor(4);
+
+Camera cam(&interface);
+LedPanel panel(NUMPIXELS,PIN_PIXELS);
+// ArnholdMesh thisNode;
+Adafruit_MPL3115A2 baro;
+
+//Specify the links and initial tuning parameters
+double Kpx=2, Kix=0.05, Kdx=0.25;
+double Kpy=2, Kiy=0.1,  Kdy=0.25;
+PID PID_x(&Inputx, &Outputx, &Setpointx, Kpx, Kix, Kdx, DIRECT);
+PID PID_y(&Inputy, &Outputy, &Setpointy, Kpy, Kiy, Kdy, DIRECT);
+
+void setup() {
+  Serial.begin(BAUD_RATE);
+  translateCodetoThreshold(findcolor);
+  Wire.begin();
+  AFMS.begin();  // create with the default frequency 1.6KHz
+  interface.begin(); //communication between ESP and OpenMV
+  panel.beginPanel();
+  
+  Setpointx = 160.0; 
+  Setpointy = 120.0; //the values that the PID will try to reach
+  PID_y.SetOutputLimits(-255, 255); //up positive
+  PID_x.SetOutputLimits(-255, 255); //left positive
+  PID_x.SetMode(AUTOMATIC);
+  PID_y.SetMode(AUTOMATIC);
+
+  if (!baro.begin()) {
+    Serial.println("Barometer not found");
+    while(1);
+  }
+  baro.setSeaPressure(1016);
+}
+
+void loop() {  
+  //
+  panel.singleLED(DEBUG_BASESPEED, BASE_SPEED, BASE_SPEED, BASE_SPEED);
+
+  while(pau == 1){
+    // thisNode.update();
+    int zero = 0;
+    moveVertical(zero);
+    moveHorizontal(zero,zero);
+    panel.singleLED(DEBUG_STATE, 10, 10, 0);
+    Serial.println("pause");
+  }
+  
+  //Check to see if we want to end the demo
+  int xtemp = 0;
+  int ytemp = 0;
+  int angletemp = 0;
+  int x = 0;
+  int y = 0;
+  panel.singleLED(DEBUG_STATE, 10, 0, 0); //standby
+  int id = -1;
+  int tx = 0;
+  int ty = 0;
+  int tz = 0;
+  int rx = 0;
+  int ry = 0;
+  int rz = 0;
+  int8_t goal[3] = {0,1,2};
+  float altitude = altitudeCalc() - groundLevel;
+  
+  if(altitude < lowHeightBarrier){
+    moveVertical((lowHeightBarrier - altitude)*255/lowHeightBarrier)
+  }
+  else if(altitude > ceilingHeight - highHeightBarrier){
+    moveVertical(((ceilingHeight - highHeightBarrier) - altitude)*255/highHeightBarrier)
+  }
+
+  if(insideWindyArea){
+    // leave windy area
+    // flip horizontal inputs
+  }
+  
+  // Have we captured the ball?
+  // ball_capture = lidar_output()
+  
+  if(ball_capture){
+	  if(cam.exe_goalfinder(goal[0], goal[1], goal[2], id, x, y, tz, rx, ry, rz)){
+      if (displayTracking > 0){
+		    displayTrackedObject(x, y, RESOLUTION_W, RESOLUTION_H); //THIS NEEDS WORK
+      }
+      panel.singleLED(DEBUG_STATE, 0, 10, 0);
+      Serial.println("blob detected");
+      Serial.print("x value: ");
+      Serial.println(x);
+      Serial.print("y value: ");
+      Serial.println(y);
+      Inputx = x/1.00;
+      Inputy = y/1.00;
+      PID_x.Compute();
+      PID_y.Compute();
+  
+      Serial.print("Outputx: ");
+      Serial.println(Outputx);
+      Serial.print("Outputy: ");
+      Serial.println(Outputy);
+      
+	    moveVertical(Outputy);
+      moveHorizontal(Outputx, BASE_SPEED);
+    } else { //seeking algorithm
+      //panel.resetPanel();
+      panel.singleLED(DEBUG_STATE, 10, 10, 10);
+      Serial.println("seeking...");
+      int zero = 0;
+      moveVertical(zero);
+      moveHorizontal(SEEKING_SPEED, zero);
+    }
+  }
+  else {
+	  ball_detect = cam.exe_color_detection_biggestblob(threshold[0], threshold[1], threshold[2], threshold[3], threshold[4], threshold[5], x, y);
+    if(ball_detect) {
+      // move towards ball
+      
+    }
+    else {
+      // seek the ball
+      // add seeking algorithm - turn around for 360 degrees?
+    }
+  }
+}
+
+//vel value should be between -255 to 255 with positive values moving the blimp upward.
+void moveVertical(int vel){
+    if (vel > 0) { //up
+      panel.singleLED(DEBUG_VERTICALSPEED, abs(vel), 0, 0);
+      motor_VL->setSpeed(abs((int) vel));
+      motor_VR->setSpeed(abs((int) vel)); 
+      motor_VL->run(BACKWARD);
+      motor_VR->run(BACKWARD);
+    } else if(vel < 0) { //down
+      panel.singleLED(DEBUG_VERTICALSPEED, 0, 0, abs(vel));
+      motor_VL->setSpeed(abs((int) Outputy));  
+      motor_VR->setSpeed(abs((int) Outputy)); 
+      motor_VL->run(FORWARD);
+      motor_VR->run(FORWARD);
+    } else {
+      panel.singleLED(DEBUG_VERTICALSPEED, 0, 0, 0);
+      motor_VL->setSpeed(0);
+      motor_VR->setSpeed(0);
+    }
+}
+
+void moveHorizontal(int vel_hori,int base_speed){
+  int lspeed = vel_hori + base_speed;
+  int rspeed = vel_hori + base_speed;
+
+  if (lspeed > 0){
+    motor_HL->run(FORWARD);
+  } else {
+    motor_HL->run(BACKWARD);
+  }
+
+  if (rspeed > 0){
+    motor_HR->run(FORWARD);
+  } else {
+    motor_HR->run(BACKWARD);
+  }
+  displaySpeed(lspeed, rspeed);
+  motor_HL->setSpeed(min(MAX_SPEED, abs(rspeed)));
+  motor_HR->setSpeed(min(MAX_SPEED, abs(lspeed)));
+}
+
+void displaySpeed(int lspeed, int rspeed){
+  //Serial.println("display speed");
+  if (lspeed < 0){
+    panel.singleLED(DEBUG_LSPEED, 0, 0, abs(lspeed));
+  } else {
+    panel.singleLED(DEBUG_LSPEED, abs(lspeed), 0, 0);
+  }
+
+  if (rspeed < 0){
+    panel.singleLED(DEBUG_RSPEED, 0, 0, abs(rspeed));
+  } else {
+    panel.singleLED(DEBUG_RSPEED, abs(rspeed), 0, 0);
+  }
+}
+
+//When using the camera to detect objects such as colored blobs or april tags. This function is
+//useful when only a single object is the target. The approximate position will be marked with an
+//led turning white in the 8*4 panel of the NeoPixel LED Panel. Therefore, this function can be 
+//called assuming that you have created the LED panel object, which in this code is named "panel".
+//If the LED panel is called something else, just edit the code here
+void displayTrackedObject(int cx, int cy, int w_res, int h_res){
+  int lednum = 0;
+  int vertshift = 0;
+  panel.resetPanel();
+  lednum = cx/(w_res/8); //because lednum is an int, it will handle flooring the value
+  vertshift = cy/(h_res/4);
+  lednum = lednum + 8*vertshift;
+  panel.singleLED(lednum, 10, 10 , 10);
+}
+
+//Interpret a message to change what color the camera is detecting
+void setColor(String msg) {
+  if (msg.length() < 3){
+    int val = msg.toInt();
+    translateCodetoThreshold(val);
+    Serial.println("code detected");
+  } else {
+    Serial.println("new threshold detected");
+    setColorThreshold(msg, threshold, 6);
+  }
+  for (int j = 0; j < 6; j++){
+    Serial.print(threshold[j]);
+    Serial.print(" ");
+  }
+  Serial.println("");
+}
+
+//in case we don't want to maually set each LAB threshold, we can send over an int to
+//use preset threshold values instead
+void translateCodetoThreshold(int code){
+  switch(code){
+    case 1: //green old = (30, 100, -68, -13, 30, 127)
+      //(30,100,-68,2,6,127) - detect the yellow wall as well
+      threshold[0] = 30;
+      threshold[1] = 100;
+      threshold[2] = -93;
+      threshold[3] = -5;
+      threshold[4] = 13;
+      threshold[5] = 127;
+    break;
+    case 2: //blue
+      threshold[0] = 30;
+      threshold[1] = 100;
+      threshold[2] = -108;
+      threshold[3] = -9;
+      threshold[4] = 0;
+      threshold[5] = -42;
+    break;
+    case 5: //red (30, 100, 127, 41, 127, 13)
+      threshold[0] = 30;
+      threshold[1] = 100;
+      threshold[2] = 127;
+      threshold[3] = 41;
+      threshold[4] = 127;
+      threshold[5] = 13;
+  }
+}
+
+
+//threshold array must have at least six elements. This function helps 
+//translating a message with threshold values to ints. Example msg that would
+//be received by this function are "1 2 3 4 5 6" or "-100 70 9 -9 -50 128". 
+//NOTE: - the threshold value should be between -128 to 128
+//      - the message should not include the command character used by the mesh  
+//      - suggested command character: 'C'[olor]
+void setColorThreshold(String msg, int8_t thres[], int arraySize){
+  int len = msg.length();
+  int temp = 0;
+  int startpoint = 0;
+  for (int i = 0; i < len; i++){
+    if (msg[i] == ' '){
+      thres[temp] = msg.substring(startpoint,i).toInt();
+      startpoint = i + 1;
+      temp++;
+    }
+    if (temp == 5){
+      thres[temp] = msg.substring(startpoint).toInt();
+      break; 
+    }
+  }
+}
+
+//This function translate a string of message into the constants for a PID controller. Ignoring the 
+//first command character, user can input any one, two, or all three parameter to be changed by identifying
+//the new parameter with the capital letter of that specific parameter, each separated with a space. 
+//Some of the valid msg examples are:
+//  - "P0.02"
+//  - "D1.23"
+//  - "P0.14 D9.5"
+//  - "P0.1 I0.1 D0.1"
+//
+//NOTE:
+//  - the parameter doesn't have to be in order. You can do DI or IP in whichever order as long as it follows a valid double value
+//  - while the function works if you passed a negative double, the PID controller will not and will produce error.
+//  - suggested command character: 'T'[uning]
+void setPIDConstants(String msg, double &p_constant, double &i_constant, double &d_constant){
+  double new_p = Kpx;
+  double new_i = Kix;
+  double new_d = Kdx;
+  
+  int len = msg.length();
+  int startpoint = 0;
+  int endpoint = 0;
+  for (int i = 0; i < len; i++){
+    if (msg[i] == 'P'){
+      startpoint = i + 1;
+      for (int j = i + 1; j < len; j++){
+        if (msg[j] == ' '){
+          endpoint = j;
+          break;
+        } else {
+          endpoint = len;
+        }
+      }
+      if (endpoint > startpoint){ //check to see if it is a valid value
+        //Serial.println(msg.substring(startpoint, endpoint));
+        new_p = msg.substring(startpoint, endpoint).toDouble();
+      }
+    }
+
+    if (msg[i] == 'I'){
+      startpoint = i + 1;
+      for (int j = i + 1; j < len; j++){
+        if (msg[j] == ' '){
+          endpoint = j;
+          break;
+        } else {
+          endpoint = len;
+        }
+      }
+      if (endpoint > startpoint){ //check to see if it is a valid value
+        //Serial.println(msg.substring(startpoint, endpoint));
+        //i_constant = msg.substring(startpoint, endpoint).toDouble();
+        new_i = msg.substring(startpoint, endpoint).toDouble();
+      }
+    }
+
+    if (msg[i] == 'D'){
+      startpoint = i + 1;
+      for (int j = i + 1; j <= len; j++){
+        if (msg[j] == ' ' || msg[j] == '\0'){
+          endpoint = j;
+          break;
+        } else {
+          endpoint = len;
+        }
+      }
+      if (endpoint > startpoint){ //check to see if it is a valid value
+        //Serial.println(msg.substring(startpoint, endpoint));
+        //d_constant = msg.substring(startpoint, endpoint).toDouble();
+        new_d = msg.substring(startpoint, endpoint).toDouble();
+      }
+    }
+  }
+
+  //DEBUGGING SECTION
+  unsigned long t = millis();
+  debugPIDConstants(DEBUG_KP, p_constant, new_p);
+  debugPIDConstants(DEBUG_KI, i_constant, new_i);
+  debugPIDConstants(DEBUG_KD, d_constant, new_d);
+
+  p_constant = new_p;
+  i_constant = new_i;
+  d_constant = new_d;
+  
+  while(millis() < t+2000); //debugging LED will light up for 2 seconds
+  panel.singleLED(DEBUG_KP, 0, 0, 0);
+  panel.singleLED(DEBUG_KI, 0, 0, 0);
+  panel.singleLED(DEBUG_KD, 0, 0, 0);
+}
+
+void debugPIDConstants(int lednum, double oldval, double newval){
+  int r, g, b;
+  if (newval > oldval){
+    panel.singleLED(lednum, 0, 10, 0);
+  } else if (newval < oldval){
+    panel.singleLED(lednum, 10, 0, 0);
+  } else { //equal
+    panel.singleLED(lednum, 10, 10, 10);
+  }
+}
+
+float altitudeCalc(){
+  return baro.getAltitude();
+}
diff --git a/Code/Control/Feather Code - Aaron/Altitude_Control/Camera.cpp b/Code/Control/Feather Code - Aaron/Altitude_Control/Camera.cpp
new file mode 100644
index 0000000..fb27cf8
--- /dev/null
+++ b/Code/Control/Feather Code - Aaron/Altitude_Control/Camera.cpp	
@@ -0,0 +1,91 @@
+#include "Camera.h"
+#include <Wire.h>
+#include <Arduino.h>
+#include <openmvrpc.h>
+
+Camera::Camera(openmv::rpc_i2c_master *intface){
+  interface = intface;
+}
+
+void Camera::exe_face_detection(){
+    struct { uint16_t x, y, w, h; } face_detection_result;
+    if (interface->call_no_args(F("face_detection"), &face_detection_result, sizeof(face_detection_result))) {
+        Serial.print(F("Largest Face Detected [x="));
+        Serial.print(face_detection_result.x);
+        Serial.print(F(", y="));
+        Serial.print(face_detection_result.y);
+        Serial.print(F(", w="));
+        Serial.print(face_detection_result.w);
+        Serial.print(F(", h="));
+        Serial.print(face_detection_result.h);
+        Serial.println(F("]"));
+    }
+}
+
+bool Camera::exe_apriltag_detection(int ID,int *x_temp,int *y_temp,int *angle_temp){
+    struct { uint16_t cx, cy, rot; } result;
+    if (interface->call(F("apriltags"), &ID, sizeof(ID), &result, sizeof(result))) {
+    }
+    if (result.cx == 0 && result.cy == 0 && result.rot == 0){
+      return false;
+    } else {
+      *x_temp = result.cx;
+      *y_temp = result.cy;
+      *angle_temp = result.rot;
+      return true;
+    }
+}
+  
+bool Camera::exe_color_detection(int8_t l_min, int8_t l_max, int8_t a_min, int8_t a_max, int8_t b_min, int8_t b_max){
+    int8_t color_thresholds[6] = {l_min, l_max, a_min, a_max, b_min, b_max};
+    short buff[128 + 1] = {};
+    if (interface->call(F("color_detection"), color_thresholds, sizeof(color_thresholds), buff, sizeof(buff)-1)) {
+          int i = 0;
+          while (buff[i] != '\0' && i<100) {
+            Serial.print(buff[i]);
+            i++;  
+          }
+          Serial.println("");
+    }
+    if (buff[0] == 0){ //no blob detected
+      return false;
+    } else {
+      return true;
+    }
+}
+
+bool Camera::exe_color_detection_biggestblob(int8_t l_min, int8_t l_max, int8_t a_min, int8_t a_max, int8_t b_min, int8_t b_max, int& x, int&y){
+  int8_t color_thresholds[6] = {l_min, l_max, a_min, a_max, b_min, b_max};
+  struct { uint16_t cx, cy; } color_detection_result;
+  if (interface->call(F("color_detection_single"), color_thresholds, sizeof(color_thresholds), &color_detection_result, sizeof(color_detection_result))) {
+    
+  }
+  x = color_detection_result.cx;
+  y = color_detection_result.cy;
+  if (x == 0 && y == 0){
+    return false;
+  } else {
+    return true;
+  }
+}
+
+
+bool Camera::exe_goalfinder(int8_t goal1, int8_t goal2, int8_t goal3, int&id, int&tx, int&ty, int&tz, int&rx, int&ry, int&rz){
+  int8_t goalid[3] = {goal1, goal2, goal3};
+  struct { uint16_t cid, ctx, cty, ctz, crx, cry, crz; } goalfinder_result;
+  if(interface->call(F("goalfinder"), goalid, sizeof(goalid), &goalfinder_result, sizeof(goalfinder_result))){
+    
+  }
+  if (goalfinder_result.crx == 0 && goalfinder_result.cry == 0){
+    return false;
+  } else {
+    id = goalfinder_result.cid;
+    tx = goalfinder_result.ctx;
+    ty = goalfinder_result.cty;
+    tz = goalfinder_result.ctz;
+    rx = goalfinder_result.crx;
+    ry = goalfinder_result.cry;
+    rz = goalfinder_result.crz;
+    return true;
+  }
+}
diff --git a/Code/Control/Feather Code - Aaron/Altitude_Control/Camera.h b/Code/Control/Feather Code - Aaron/Altitude_Control/Camera.h
new file mode 100644
index 0000000..5a4536e
--- /dev/null
+++ b/Code/Control/Feather Code - Aaron/Altitude_Control/Camera.h	
@@ -0,0 +1,19 @@
+#ifndef CAMERA_H
+#define CAMERA_H
+#include <openmvrpc.h>
+
+class Camera 
+{
+  private:
+  openmv::rpc_i2c_master *interface;
+  
+  public:
+  Camera(openmv::rpc_i2c_master *intface);
+  void exe_face_detection(); // Face should be about 2ft away.
+  bool exe_apriltag_detection(int ID,int *x_temp,int *y_temp,int *angle_temp);
+  bool exe_color_detection(int8_t l_min, int8_t l_max, int8_t a_min, int8_t a_max, int8_t b_min, int8_t b_max);
+  bool exe_color_detection_biggestblob(int8_t l_min, int8_t l_max, int8_t a_min, int8_t a_max, int8_t b_min, int8_t b_max, int& x, int&y);
+  bool exe_goalfinder(int8_t goal1, int8_t goal2, int8_t goal3, int&id, int&tx, int&ty, int&tz, int&rx, int&ry, int&rz); //optional to add tag size as parameter?
+
+};
+#endif
diff --git a/Code/Control/Feather Code - Aaron/Altitude_Control/LedPanel.cpp b/Code/Control/Feather Code - Aaron/Altitude_Control/LedPanel.cpp
new file mode 100644
index 0000000..eb4ee53
--- /dev/null
+++ b/Code/Control/Feather Code - Aaron/Altitude_Control/LedPanel.cpp	
@@ -0,0 +1,65 @@
+#include "LedPanel.h"
+
+LedPanel::LedPanel(int pixelnum, int pixelpin){
+  led_num = pixelnum;
+  //pixels = Adafruit_NeoPixel(pixelnum, pixelpin, NEO_GRB + NEO_KHZ800);
+}
+
+void LedPanel::fullPanelLight(int r, int g, int b){
+  for (int i=0 ; i<led_num ; i++){
+    pixels.setPixelColor(i, r,g,b);
+  }
+  pixels.show();
+}
+
+void LedPanel::beginPanel(){
+  pixels.begin();
+}
+
+void LedPanel::resetPanel(){
+  for (int i=0 ; i<led_num ; i++){
+    pixels.setPixelColor(i, 0,0,0);
+  }
+  pixels.show();
+}
+
+void LedPanel::topLeftQuadrant(int r, int g, int b){
+  for (int i = 0; i<HORIZONTAL_SIZE/2; i++){
+      for (int j=0; j<VERTICAL_SIZE/2;j++){
+        pixels.setPixelColor(i+j*HORIZONTAL_SIZE, r, g, b);
+      }
+  }
+  pixels.show();
+}
+
+void LedPanel::bottomLeftQuadrant(int r, int g, int b){
+    for (int i = 0; i<HORIZONTAL_SIZE/2; i++){
+      for (int j=VERTICAL_SIZE/2; j<VERTICAL_SIZE;j++){
+        pixels.setPixelColor(i+j*HORIZONTAL_SIZE, r, g, b);
+      }
+  }
+  pixels.show();
+}
+
+void LedPanel::topRightQuadrant(int r, int g, int b){
+  for (int i = HORIZONTAL_SIZE/2; i<HORIZONTAL_SIZE; i++){
+    for (int j=0; j<VERTICAL_SIZE/2;j++){
+      pixels.setPixelColor(i+j*HORIZONTAL_SIZE, r, g, b);
+    }
+  }
+  pixels.show();
+}
+
+void LedPanel::bottomRightQuadrant(int r, int g, int b){
+  for (int i = HORIZONTAL_SIZE/2; i<HORIZONTAL_SIZE; i++){
+    for (int j=VERTICAL_SIZE/2; j<VERTICAL_SIZE;j++){
+      pixels.setPixelColor(i+j*HORIZONTAL_SIZE, r, g, b);
+    }
+  }
+  pixels.show();  
+}
+
+void LedPanel::singleLED(int num, int r, int g, int b) {
+    pixels.setPixelColor(num, r, g, b);
+    pixels.show();
+}
diff --git a/Code/Control/Feather Code - Aaron/Altitude_Control/LedPanel.h b/Code/Control/Feather Code - Aaron/Altitude_Control/LedPanel.h
new file mode 100644
index 0000000..41721cc
--- /dev/null
+++ b/Code/Control/Feather Code - Aaron/Altitude_Control/LedPanel.h	
@@ -0,0 +1,28 @@
+#ifndef LEDPANEL_H
+#define LEDPANEL_H
+
+#include <Adafruit_NeoPixel.h>
+#define NUMPIXELS 32
+#define PIN_PIXELS 32 // Use pin 32 for NeoPixels
+const int HORIZONTAL_SIZE = 8;
+const int VERTICAL_SIZE = 4;
+
+class LedPanel {
+  private:
+  int led_num;
+  Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN_PIXELS, NEO_GRB + NEO_KHZ800);
+  
+  public:
+  LedPanel(int pixelnum, int pixelpin);
+  void fullPanelLight(int r, int b, int g);
+  void resetPanel();
+  void topLeftQuadrant(int r, int g, int b);
+  void bottomLeftQuadrant(int r, int g, int b);
+  void topRightQuadrant(int r, int g, int b);
+  void bottomRightQuadrant(int r, int g, int b);
+  void beginPanel();
+  void singleLED(int num, int r, int g, int b);
+  
+};
+
+#endif
diff --git a/Code/Control/Feather Code - Aaron/Altitude_Control/utilities.cpp b/Code/Control/Feather Code - Aaron/Altitude_Control/utilities.cpp
new file mode 100644
index 0000000..7a90e33
--- /dev/null
+++ b/Code/Control/Feather Code - Aaron/Altitude_Control/utilities.cpp	
@@ -0,0 +1,83 @@
+#include <math.h>
+
+//Source: http://www.easyrgb.com/index.php?X=MATH&H=01#text1
+void lab2rgb( float l_s, float a_s, float b_s, float& R, float& G, float& B )
+{
+    float var_Y = ( l_s + 16. ) / 116.;
+    float var_X = a_s / 500. + var_Y;
+    float var_Z = var_Y - b_s / 200.;
+
+    if ( pow(var_Y,3) > 0.008856 ) var_Y = pow(var_Y,3);
+    else                      var_Y = ( var_Y - 16. / 116. ) / 7.787;
+    if ( pow(var_X,3) > 0.008856 ) var_X = pow(var_X,3);
+    else                      var_X = ( var_X - 16. / 116. ) / 7.787;
+    if ( pow(var_Z,3) > 0.008856 ) var_Z = pow(var_Z,3);
+    else                      var_Z = ( var_Z - 16. / 116. ) / 7.787;
+
+    float X = 95.047 * var_X ;    //ref_X =  95.047     Observer= 2°, Illuminant= D65
+    float Y = 100.000 * var_Y  ;   //ref_Y = 100.000
+    float Z = 108.883 * var_Z ;    //ref_Z = 108.883
+
+
+    var_X = X / 100. ;       //X from 0 to  95.047      (Observer = 2°, Illuminant = D65)
+    var_Y = Y / 100. ;       //Y from 0 to 100.000
+    var_Z = Z / 100. ;      //Z from 0 to 108.883
+
+    float var_R = var_X *  3.2406 + var_Y * -1.5372 + var_Z * -0.4986;
+    float var_G = var_X * -0.9689 + var_Y *  1.8758 + var_Z *  0.0415;
+    float var_B = var_X *  0.0557 + var_Y * -0.2040 + var_Z *  1.0570;
+
+    if ( var_R > 0.0031308 ) var_R = 1.055 * pow(var_R , ( 1 / 2.4 ))  - 0.055;
+    else                     var_R = 12.92 * var_R;
+    if ( var_G > 0.0031308 ) var_G = 1.055 * pow(var_G , ( 1 / 2.4 ) )  - 0.055;
+    else                     var_G = 12.92 * var_G;
+    if ( var_B > 0.0031308 ) var_B = 1.055 * pow( var_B , ( 1 / 2.4 ) ) - 0.055;
+    else                     var_B = 12.92 * var_B;
+
+    R = var_R * 255.;
+    G = var_G * 255.;
+    B = var_B * 255.;
+
+}
+
+
+
+
+
+//old codes
+
+//      motorVertical->setSpeed(0);
+//      motorVertical->run(FORWARD);
+//      // turn on motor
+//      motorVertical->run(RELEASE);
+//      Serial.println(SEEKING_SPEED);
+//      motorLeft->setSpeed(SEEKING_SPEED);
+//      motorLeft->run(FORWARD); 
+//      motorRight->setSpeed(SEEKING_SPEED);
+
+//    if (abs(Outputx) < 125){
+//      motorRight->setSpeed(BASE_SPEED - Outputx); 
+//      motorRight->run(BACKWARD);
+//      motorLeft->setSpeed(BASE_SPEED + Outputx); //this need to be higher
+//      motorLeft->run(BACKWARD);
+//    } else if (Outputx >= 125) { //propeller push in opposite direction, moving to the right
+//      motorRight->setSpeed(Outputx); 
+//      motorRight->run(FORWARD);
+//      motorLeft->setSpeed(255); //this need to be higher
+//      motorLeft->run(BACKWARD);
+//    } else {
+//      motorRight->setSpeed(255); 
+//      motorRight->run(BACKWARD);
+//      motorLeft->setSpeed(Outputx); //this need to be higher
+//      motorLeft->run(FORWARD);
+//    }
+
+//    motorVertical->setSpeed(0);
+//    motorVertical->run(FORWARD);
+//    // turn on motor
+//    motorVertical->run(RELEASE);
+//    motorLeft->setSpeed(0);
+//    motorLeft->run(FORWARD);
+//    motorRight->setSpeed(0);
+//    motorRight->run(BACKWARD);
+//      motorRight->run(BACKWARD);
diff --git a/Code/Control/Feather Code - Aaron/Altitude_Control/utilities.h b/Code/Control/Feather Code - Aaron/Altitude_Control/utilities.h
new file mode 100644
index 0000000..a1ad9ad
--- /dev/null
+++ b/Code/Control/Feather Code - Aaron/Altitude_Control/utilities.h	
@@ -0,0 +1,8 @@
+#ifndef UTI_H
+#define UTI_H
+
+void lab2rgb( float l_s, float a_s, float b_s, float& R, float& G, float& B );
+void translateCodetoThreshold(int code);
+
+
+#endif
diff --git a/Code/Control/Feather Code - Aaron/PID_Test/PID_Test.ino b/Code/Control/Feather Code - Aaron/PID_Test/PID_Test.ino
index 2e12cb8..80961fc 100644
--- a/Code/Control/Feather Code - Aaron/PID_Test/PID_Test.ino	
+++ b/Code/Control/Feather Code - Aaron/PID_Test/PID_Test.ino	
@@ -6,6 +6,7 @@
 #include <Arduino.h>
 #include "LedPanel.h"
 #include "utilities.h"
+#include <Adafruit_MPL3115A2.h>
 #include <Adafruit_MotorShield.h>
 // #include "Adafruit_VL53L0X.h"
 // #include "ArnholdMesh.h"
@@ -57,6 +58,7 @@ Adafruit_DCMotor *motor_HR = AFMS.getMotor(4);
 Camera cam(&interface);
 LedPanel panel(NUMPIXELS,PIN_PIXELS);
 // ArnholdMesh thisNode;
+Adafruit_MPL3115A2 baro;
 
 //Specify the links and initial tuning parameters
 double Kpx=2, Kix=0.05, Kdx=0.25;
@@ -78,6 +80,12 @@ void setup() {
   PID_x.SetOutputLimits(-255, 255); //left positive
   PID_x.SetMode(AUTOMATIC);
   PID_y.SetMode(AUTOMATIC);
+
+  if (!baro.begin()) {
+    Serial.println("Barometer not found");
+    while(1);
+  }
+  baro.setSeaPressure(1016);
 }
 
 void loop() {  
@@ -108,22 +116,16 @@ void loop() {
   int ry = 0;
   int rz = 0;
   int8_t goal[3] = {0,1,2};
+  float altitude = baro.getAltitude();
+
   
-  ball_capture = cam.exe_color_detection_biggestblob(threshold[0], threshold[1], threshold[2], threshold[3], threshold[4], threshold[5], x, y)
+  // Have we captured the ball?
+  // ball_capture = lidar_output()
   
   if(ball_capture){
-	if(cam.exe_apriltag_detection(ENDDEMO_TAG, &xtemp, &ytemp, &angletemp)){
-      int zero = 0;
-      moveVertical(zero);
-      moveHorizontal(zero,zero);
-      panel.singleLED(DEBUG_STATE, 0, 0, 10);
-      while(1){
-        Serial.println("end of demo");
-      }
-    }
-	if(cam.exe_goalfinder(goal[0], goal[1], goal[2], id, x, y, tz, rx, ry, rz)){
+	  if(cam.exe_goalfinder(goal[0], goal[1], goal[2], id, x, y, tz, rx, ry, rz)){
       if (displayTracking > 0){
-		displayTrackedObject(x, y, RESOLUTION_W, RESOLUTION_H); //THIS NEEDS WORK
+		    displayTrackedObject(x, y, RESOLUTION_W, RESOLUTION_H); //THIS NEEDS WORK
       }
       panel.singleLED(DEBUG_STATE, 0, 10, 0);
       Serial.println("blob detected");
@@ -141,9 +143,8 @@ void loop() {
       Serial.print("Outputy: ");
       Serial.println(Outputy);
       
-	  moveVertical(Outputy);
+	    moveVertical(Outputy);
       moveHorizontal(Outputx, BASE_SPEED);
-    
     } else { //seeking algorithm
       //panel.resetPanel();
       panel.singleLED(DEBUG_STATE, 10, 10, 10);
@@ -154,8 +155,15 @@ void loop() {
     }
   }
   else {
-	// seek the ball
-	
+	  ball_detect = cam.exe_color_detection_biggestblob(threshold[0], threshold[1], threshold[2], threshold[3], threshold[4], threshold[5], x, y);
+    if(ball_detect) {
+      // move towards ball
+      
+    }
+    else {
+      // seek the ball
+      // add seeking algorithm - turn around for 360 degrees?
+    }
   }
 }
 
-- 
GitLab