*g>FJ+KGYIy=jS<*jhnTm12LQQm;M1vW!`+=Bx#h@3!o#NFq
zneJD}I>}UoRw|+r{}?)JD)HPh>g~QR_IZHfCG)A+$*@DV<$#p8`PJ{xKOn=hYqq>$
z9H4)t6fnE<^P!+m)?%>ee};sN0^PRG0Ej8d0jC=+is!*J>1(A7EgOBG-Bk#^F!CSH
zWC$$%hXY*8Op_iX{NFFP6Xp9)3FZ9g{6GS_O#(e9#yF19s@%FtVjvO?hHpEHJ9TC`dmaK|%{C{asm==G9@y6As5Kec8wqk75@
zm4O4s<`1#b%?d=&*5|6z0E3
zn1~Umj1FD3+ft^^pUki+iN-|I!x|~kJXVA&>Ix7O>{~JFMtSCERByq+LR4{PVK3vT
zCp7ZQh%Zwds$0&yvgpfn=+@1kf!=^Q#N3&egkB`gjYaZcLm{ReR1+(cbL>?Kj)o$I+CWl_%`#
zzC4f2R8Jtn(4o+?H7ji|dW8D(i~Q4fBUSaC+qj_fv)HZ=P`lq+F8O+74C2
z${O~zts2TvFA8GvR`3eHMem^CuWT=Lw8c`;KR)IcuoZK>F
z*21#|Aq^0k?S_Hl%4G_gkXe63gW0Lqt?W=8P6@m`aTYr@UihNGy=TBF>SbSA&@OiR{a!5?V~1yDaCD|>QsbDn;1y=2~B1=0u39-uhl@R
z3mH4F5{mrdfOmz^$2<4vjJ@>mIR46+Bq|D=167t|m)8S^y)
z<0NG-EX^c6jlpsEF{sltLxl
znuc(8^e&8$9mBNxLQGm~yNmWbeOaIGM9yX6Q$ILe3|hW{${~bDU?z{M1D8M3)8B!R
zF6(~=sm?^jBd@mczU;-eF)$=8R?fcd!9~*RF6UnOIeduhNfG(=OMzeL+Z$yHycd@L
zT(H|o#9sY3o^=x+Y2IYg#tmT^7-$Z!t1@C)q4RN(Zboepqtl7lQdmTb-Fkz2yc#=n
z<`u){lZwZmlSB6UhTW=0@samFy_&22^Rxpqnj=nhfGnNAC9-!iOvi3;O}v_a!#?~Y
zmiC{rO0RFT$N(Ek5)zH!$I}05_BB|4-R4&A+#HG#^|Z%GC3-vIEoh*4C#tg507wAl
zU4%GduoAef?F*kaS(n$_D?7M`g{B>;%3QJ&2PB+o?E69vyW~^tXGD1dS2&`q@@~4~
z?YR-^v+Qv1P>ZJ6a|H2D8Q&$c+d|O0E{W2GORIcpqC{Fr=<0L+tYFraInf44nR6A%
zx6$Ya*wC+ETF$M#h=TBBm{e-(JJ_s~fwd<0?$dnd4FC
z*rB)%1|tsoWit{F|2=MF0cXCV_@FPJLMGdWbVP~Tj*vS~40`MEj{Vzl7OYUVH?y(G
zx6ip$Q$H}~auLI&EQ+BOdBGR?)iZ9FvLE+eHm1YE6hHA+U6;dn((}h
zi#xJn#U|~f+taCc2oj67cX)!SUF|*Gsw8%{!=n4xj%I~3Z7;pe?As{4MrG`=Ge*}gO7hOz#feng3=4;1p=inzCTv|}aV<=gXi!^Y!Im#(Y++%4
z!~u=8>qAU6&@Mzy3U7L@%R#nCSg6?W33o>~ah1|xSp8Z^9bM8fGg=7tEv0K-
zp|YZ=q1Qj`fkD$i>kN*W0=@E*VY5s%-+`VkP%I>G8Xk1}PXm1V5_HYY|Il*dQkO_N>6fmqsV~h&o!oPfC-jnS
zrm@RaQkiU`VAKBFUe-Fl18-0aji18~KzmSGpd^=Dw`~It(G5y+@joPg>C-fE_Zutr
zZtpAku6Sl2(1Z!Z?>tvsZ0v}y^2zm96jYPXhuGVT
zPTnW;693GV+y>&vFc6%1W_my3R@t;8#`YPf161%?)2VLUr=6x@{UmS@B}fCHzoVdt
zz={+8$}V63s@OZXm8AQnVXJdlxY5{z>R}o@w8M%~iUR%P<$f&=UglrGW%#=9x^uQ-xFC4FA%(qQ2C&sOI)qP0UQvj{7J
ztxfOZNsHF((IP~^+-PsbptLCsS3G^}1ZR|78uG-haaO$skDQ{$daluoDbhg2GPZ6W
z@xyN+iYLK;)Y6bay?M8#Z~x^|G?P*~c#@CAnTBaLdL8y6Cfb#P643A5{wQ1JcjsM@
zgqSxv6u;Yjc6G3xg7hGW&=bp2j1C)bzWkKV^mpJVO*zb~zj5}XN}SBsmQ{$>au`L6#OLU}R(Xg`
zz8GJdP^wc6vRwJ5#K6{?CyG7mn!SwlK-)9Mn>Ui6l(To!3Pcr`ZFnVCE+=Kz8bzxo
z)UD()c-%aN(rTXt)#MOwVA$bZ)Md|!l8D$Lg!m^X-a)Xp?%JBJA&+b
zYTukM(raukXdy`8&jPCyR6AFdx}82!=CV7B0Yb5{O){{@&*E>s89^php_a=Ri<~sM
zM(W88@Z#urwRa_m3u!lJv>T50k#ZPo9&ECr3BR#ym(;$q9Og!N-RPpbTD}BE@Goac
zZrv+K$kNu%Sw&}?GxS@U##JEeqq?jOm?v7p{2fyP4@8gLrO^U`t$pmB{n-5Ni31n{
zJ9BaP_&i#Ksn4-(6<-$LGEjo3Da}-Y7WrB
zb#Dt2>K6?4?bWS(XZ7Uc!zeY53mr2j54?|-yfFd-6qrE2tfhxA2dU@_br?ci;`Rm$
z&+iTU2aHTsUn+xXl>1wJwHMUn$*`hs`tO`=(JTVLM_i>K!t^52;9cWL@?_ECsct{+
z#r5I|UBU`-zCdLKR0uJukYD;BXI}3)AFm3K*X_o+-wRDWOY+GdE(6kW0qwQRa_d6(
z9Q#k#!7IFrziI_@@UTS6{sE8YGzj&EOkL?&TqH!CspL$#l^;dnaPxzV^sCG{OCHRv
zd?em)9ksCSo>k1p1Ea^g`iMM+Wi_(-QprSBX-(~`{K&V60%C(7w|d#B`*vAsjVVl4
zo~f(oVN=4%_eU^D{?aR(>;7CPPWi(H02X<4d3k2moUB4{2e57e%73U*C8qn3UZHZ&
zmIi!t9qAz+S?Dpcy|Zcftxr$h?eJw86f0`W4zou+)?KkKukuP4W*kD1paOLklQI>H
z@21WVUeCCdA569x5`2)0?kp#Ss8mP(9p2F4>Kvo>3a{VuVGf5j*AH#4^ll1vxeXSc
zhyFQi*q(X8Js7ei_3v!yKkk$QyNf|t#!{4MRjAtEx@GH|MBf%bit{MtyJ7kh<|+x-
z9&EvY6TWNF{-BX-ZmiKTDagLlt3^iH8fVg3OWS==Gw#C{0LlOGpze;qYy~{rEe3H;
zH@x;Xu9MGtE}lc?{uGPT=6Gv}-#?aIO)8jw0?8&RjQ1v`U!u^e^`|$`+T!A;np>Y?
zSpj6FM1A@rYGjcVuyaV=gFoMo>P&(J+eov9Y9fRXwPR^}UU=iCDp}`?*_x&Djc70E
z+gw*&ity~B=jja&?_$tKT@nk28Qy=wpomreTP%C?Js%EGbz`Uk2DmsclLpn;?W9QF
z&dJtfI4@V08d@CbHSI_XW#_A;PI~1Hdft@7aMC!u-rfDM@@hsxJF06Y^I)x8;%v9t
z$&7(ps+$h5q;@J+^NVoaOSQ;jxRzi$)Gx5vi;^D11^oxOr(MHt-{^_^OG1y;^E-zU
zg$(c#_VsWo_tIp_;ziMNeQ{CO@Gm7FK*fhl%3zGI|U=0E$|yjB#Rt8Yf;}i64WbFaC?hjQDki*Bd@4
zlXVKB(8+m3_5LWN;ZdaInPnD7!zb4KGa;xT;Fk(Ro@%N
zHy5~X0r@Hx$AEZd7iQ}c##31LN`zzr-c=<_*i#`(=+3*%C11Q}OFu0}KT^SrapYv;
z%Y#74J~DkovIpT;J}=glcYD2x4WER0!u*lLKGMvdkY7`LAasU*I&R=VdBcb5;AOhN
zgA&V2AzTuYjfp<@-!&CYDN2!}C$Ew{){8mDI7Za>!uv-(K3;xPe<0-i0UIE`uSn)y
zycicmf;K-Q8E}n?3_#9hTF=a68p}Ojbbq~#;U@NEsiwg
zG2B(e2v=@o;tOy}pQ#+b5CV&GiQq99mYBZQ&iYIc;-0R2{I@h^@o02_cryg~VdcdP
z>K}{KCs6(zR6XulWbn(T%q9DQzT>M@O!Q)Fu|u=N(YA;5!PX}=*ytis5#nE{zP7a~
zL9OIxvM@kxQQehoCm~(Qf-6(jC@NMw$hw7raM4AI4B{Yky!~2ZGmC?!D(d_}{K5xC
zr;{_k(XKi1G9@rcf7}eSNZ6AiTcerg%O6g$LGbYS)%VAWB=JLQ%K*xK^BRo~S^C{i
z=(vk*sG+6ucU$<5OTku=RP49k`Si=Y<;)aOKe}M|xALeoaw!1u_&hXDK7LG6II#>;
zL|4(2@|syj;+q(g1LWdR8m=6#Rbd%V(6TD*3&-!(-OkYL!oTqCKxHmjDhd)I)(M??
zw@nTVE9#<5!zx@+#cgVC{=NoOo0~|i#O}lw&zQs=4$iQI-%{9hVNh9n9J(vfH~ufs
zdcF2)zbcz4*%jhq5{Fkc5S5YZ)G%rCa-q5Oqhh=nPf;mF%$(3T8=qb_CE6~Xm1LLO
zH_-#+Q+jBl4BA&<`CC-F8c(9+{Vh(Urq{$ie2{1*nEX=ZZs^Gk7H_wO7YOVb#dkV-
zjibi9pO0vv?ov_XCwlm|bf`wqRq4^Nq=Hp^qk;v2W2`gYnf!P3SV6Im!c(I6#e@W#
zIBSg%&_R7^td)9m+Q}|=y4u2xjX2cz3I<8OG^Ew}(K$6pHOTs81cCK@=yUseCycN4
zj~pu4dabr|v+ndIURhVsOOfuu>OXQiKR;%KJEv&S+q#FcEG|=h}E9XY$HvXfRt
zkJet~w3GPsLIckmDL6&iY{?2P?=iW|?~r%G;1DJ}^{l<)%9XY~VzGa>1}(&|8s9kJ
zAq4>MdRG3tEhzWL!BLv;84DsPS3iD?4p={JqfAt+TxwZ0kCTNyZ{R$yNen>@*4Amz
zG%4Mj>$9Pibx>wxYR8~N1NU4tu!d8_4MWNX~i%pv+t>~nn&pcz>C=RRDOk@#l(^F@S!kmbVQVC*a1d*Io-1e!6ZzD?*
z1tWaH9gp%|F?F-*1ZL_?1;2W4L#9%3@Wj2)$s5hkG^|^|<;@H^bo+C$DTvOfvDv+k
z^jP9Z^G;{l)cE-wydi#vMAhviVCI~Kom!F*bU*WMs{vqY&th$J0YR!NCDbKBGuTE+
zEUMytP7)g_A1e4XObC64gG)M~P~ZHB{D~5*
z@dFr(q=^x)e$HsJitxX=V3zk41B8!?rDY25NgnUi)
zKTiKv?5!H+EoDszF4%V-nUUr@s4uEy6OTGFYk1%v4(vncoH6b{us%n%@SKW{K?*E$w2vTdQd7fnNx?E1S6NTt3w#6Wzv(V>uYS|dBhfDz_!j5>0*T2E
zBAb}-z%y?^V}e3I;n7|pF9sQ(Nw{5VYg(_s+@PxcZbbENd%XsLws(=0H1dLh&sU$F
z8fM=2bF>)gbSLNMH``U6$IQ@N(7Wdtb5yFq&(mBM;;mrTj%x}$5YfdOf+}wzo4tRE
zSu!&zzSJ2n@unx{GQWDBPD%MskT%8Wgd}&R-ZW@cf+&2>WJRj~*)A9~38!SY&5!Hu
zOE;?q?9!*ICA6n`vcek=gYRV@G|76rsz``)yG*vWQ8~8xZeUkfTe2$e4Cax=T`$Zu9S*m50hskT865f@^Leb^Z;v;$NQpVi-p!Z4ffxv?gx5bk#(5!o65C
z2}#&aso--sw5sr%ns?e95Xv-l5%^Q(6`RQ`#eEWPL8P0l30P#kvm3q|$x8CKK^4p1
z|En)c3$v5?O8A5HTJMs{3!*8p2>kcQJ6B_UQA=FT>SnjOub8=3RlM2`5}OGO0x9y4
z#m!2g{Jf02W+rQ9+5
zKLk@i?+LFOuq=Cc#VwgY~F7r@s
zqZkHBi&6s40bly;I|eOfMh}a|q>Lvc=lj@gOWmcQF`4FHoXb~p5g2kve?S@PRr5O9@;hQ#FXUqSN
zdzo!F`Qj(uG^1S=i%prpY0Gaau6W^`Tdb3Nq_Iq3=NS4YFu?3JH6HbWH^E8uIFh25
zMfk_hQw?5(>5reBpt3eo2)N4S{+NHSXCwk@4G#~T+)^bPNvhPacwTXRJjy4h@b1N&
z6lRk6umsVOMnxdnD-v|9}87sYU9<>
zB)p}t4@qQ1pm|0vL9h1TnDoMvKujY-qE~gq=l`(D8~i1|@z_a>1yvp)hxz0o^!U=I
zI2uL+1>cmaR-MGKCiM^>Any`_SW%xSt`Pm_aX}5cqW?DTAr028jvM0tyBSFpug0nU
zaz@Rw$MWXUrU3m&N`%E_Vn>=7(UA#2n+Kp>0ygbInleBaH3nPS&nT+T4@x1f)ctcC2{3e;uzf3$}tZ1u!#Emw;jr|HS
z*OE|pBW1*mn8Au-SIKvi7c(^jhRRauoOz%%O=@l*!HQ7Gd8XzhNsVGsZUVb_;)74G
z4*uUYpD|Rf2=(lPq=qva$h&}J$smom-;s43Gu6OSe~|+62Xu8<*RuTWAq8Zg+=L*s
z&EohUmfYc29|YnX4_cNKe(FN9?T|x@tdNA}o?flOhBl2^X_>5p4+
zB&!Z*(3zBcK#3h+${)B3s6Sp@Hjhc+Jaw0~OTwqL{BW>8J~lI<;IqdRz3RN)>jo|>
zkTSUT%iIh|?7aLpm1k|4!lkn&27f>2MvD=@j~ihfGX^!x+5q4;omOuT@}32b%05gs
zUd`+YGpQm;;Y>pvg$?2ERmkYM6lCNy4(?*XMJUx65peIXKC`DWv;F(S{@!t{9ihzx
zc~(2=ly!aI6_v!ywqjRH-0=CI^x{aacJ=LLEpLOYFFycW5oJ22(_6b1%8;^bx-Cw{
zEPsXQcAn=JUdWRf0j2%|!Y{dU02*usjwvhs*+ztGxW{doGk~_yZ5Dx^d8F4)1f}6|2dA9e|KX_lQ*lzZ
zxizWn64z%?B2nB5c{HBac)-izg=fP73)<0Wc*;Y~pLgoL9;NceYf#Dml?RPrD-%L^
z2cSaW#0js`{}nBR?|D(87s=8?zTbb6ZT-wzGmez1>*6RuoCyc2b`Vk84j5S$eBoVM
zetp^$^=XHAn2jV*uDyS6!c9&ICcao{WClFV3+ZZAdqpvdz(G|Q4Qz-J5X1SyL5S~P
zU!9g21)ud02~deYmE=Z0>x8B1zZCKt2Tp)E`X&TJHUEp%Yt1t_bX&lCSk~!-l2Rx4
z5SKQfi*>%W{JkoP{AgS7os$2>Bk%DRD^`X0#mXvN!>OTg5Tiz|RI(4|p4EiJN{k4)
ziCA+{;`8!QW2!8EYSb4}>Ph!B472WCLtYq7Eid2l=b&8N6i
zb_+dXgQJ%vZ=_*PrcEH;%@IVOgdKoJ;6=bda#cH&K2KMmf3@QFxY{fxMMq5B?$bYsqH@{>G;P8~0lu4_`{Kx03_F8>T`e#gw^tQ*i$H(^oI_-A&lDErq>95~<_~d?DF`ORj
z;NXaX&Yo!_m1#<%+nUlZx%r2A$%JoxO#~x-)t&oyecn~LrKh01f9EP8ffi`0(*kI$
z;!v4lxs#MEj(EEBP0pHtW97lr%xg|)t;}2DU~m$EkxZw;{-@%=;!)dXuM!jk6rrN3
zT=uARkdcoXmj9d^jGStNu;Ffz>VS8^8!P3IV?{Aj84$hh$W-f)D5queWz}tVCtmYs
z-S}{j8QOVWl=x=5u-O6{g_V68ydm2HLQc*jDgNYc320MKRLNcgTPTp|Kvj_S;b5b7
z*Sz^&E^Hq(QlGSsc-R2S0u8$4CG?{OX@EW2Tj>Hbi$Os_@_(oAf_wL0GzX2hdt|={
z0__p*VpI!B1A{+sDvv{zL@DO7aYoO72E^cw^>%qb%~@{0Bg)m{*XKS1=#~42<^~
z#F5m&cVGLa74a*$tdvW7`^DR%bdbj3$MaOvI{8(>MA-BN&DGnof4t4rtWk$
zTDuoN{CssP!)CjN(W{logEOUlu$xqOHCNJ8C}I*amnu2-t<{-sO~9ua@~dJ%^}Gm@
ztExl}@AQbw-v7Oea-q8XD`%#O*8Zd9)*#{c7TXfS!-uXMMylUOHNnz0+&DwdSpoUsX*!mW?UTpz;Vny(B%P6mjVbnxCkTLi+T^TCcYG2ZyS2{W9QJ8>!INP>EeO$ENps=
zZlRA?1VKH@4@I|oM>7O8*9~b)MyHVRI8kJ|?H2}Al}1|Qo;q+xL`Of2XC8^Q;r@?J
z&0HE7z-k<!4FR24N#Ff_<&>=s65qo7Kpd`sqA&9O>nwa%LLgv}$_$RAmGCK@_7&
zu@jPFY<5dd(LF7YXfy7yI~oqDQoDygqJakCB1mb+mMEkb?J{%osI|4wS&-1Jm1*Ws
zfv04SH@athHO>3#Kf>=~?^HROd_#;4s5bJvZtVaA~>48hl*JD6-qWiCg
zKIUHEjBl&Y1958^8ubqBUXXjx6Bt&Yg|=j69(k5!t;{TQS_92YdU^cs`D8Wkv}o@8
z@&|O*-@Jaa{_1ml)l`J5H9}xb*UQemijIHRQ2q&+B$_z9gTwJxZ{X;Gu3vwQ23p*R
za0`;1<5!_9e!1MEnMRaqjsF3dT$%qs@0X5!;bHNhM*JF3_3MuzR#fumjBs5=F=Dtf
z*5`~O^!VTj&wS;O<)yc8PYBOy
zU>-1HE5MH*=+)cDS;4f)u?CkwJtOdJFQUIu!vywzbA_+fMh_xo_j57=Sb2D-|K4u`
z_PSqJl)5~6TuR5jQ~~F~-=S`(fqfde_dP?Y{D4dL$I=5IIH;#;?}OAIRE;ffb@`OP
zZ=;q2`htKm0$E=;W#KzuAf?jH$J`7x>648|4!tzclxD&PWS>9Eri8+@7eJE_mCru;
zsG_okrpjSjF7j3kx@CVVxeZtH1QdNMmC-HmiA8$Y!ITHB))LI&ZdQ$Nb@f4p4#Fnbq1jYKM?-mlMaV(rT9>V=&bzHS(KzGcWIL{aRn{LdxxbeKcp
z;Em_wVQG!>|FRHX=iziXFM3wgpSg6!$tBJknIAG0iiyYKbBm;>7opDjFBR$Lq;+x!
zgqO`}@W9-zCV#d-Kl;cgdNyWQoQwt+K)=?otq!m|%+0W2r5$Y4&kloQ6J8ibv%|3y
z>h`nlZU=GGHHzFaEFS&Uf2POoQktreaaS+?8*^ibZ@SM5s~uVru9lgQ$S!`=c#@f3_bL(l^0=7VZgdh
zm*tjqObpH!R4*rk$Ouow5!2rJ!)V}K=+FkDC22v7@WgRc)0bGFfyeac=PHx+o4~XT
z)AJG=J8S^DlUthPXN_RK4b@U&z4K*hqz$I6b!xN}C2sjy7it5GBH=|PA6mmNN+iB>
zsGZFmQ=2YAaSR03fqv3EI5r*KL1sC=axk50duQq+Pxi);iHJT`=UR<#nkLX=L@>`9
zc=1VqP9IOav&omUaMi$j0oHJq+YrMwC9%KqwnDR#Ldo6T!#!=VjpI1Zx|3j^GcZb8
z7yN!t+k;-qATo5x!++t+6+4FcvPR|P=vc(R-@ls=#99nAGE8%S0ZIFcQ!S>0wZ#03
zL&TOHgwKV|p17va9{g@PphtfjlP@TWsyu3N^*`L7tGeU{
zWAWMNsg@8vt%Mn|qWaQ-Nx;c|`{B_toA|mV5OX5I2}X}<;7u%(Tv)yQ;iteHo=Dy+
ztBX?A(@?)Xm!cNm6mqX;Zfj%%NmT6TATeHhqP*+t1X`#wir_8(9OBp}D+X(U_>))2
zz=t{cFvuG=Z$|$wp=)Qh<+MxcVDKAVQ)*mJfwn=QSR16#XEEjifwtR`PAlHGse$Ea
zapa#yH`g=Y*%v77R46O`TTavthjN29GmTVeu`5{yEQ9?0>z-ZS4Uwq*@zz_?3`rgUIY(_mQ%UVBv*S^%~=n&o?c1vu_uOsxpXdCXpnit_
zow7g$ikK6vF`R;Eu2i$PJ~bF^nCasr)3`Qr#E=1E`yl98Yb(;ocJAGj
zZqof#im?8W0`4iY&3B|UV?_$|kuD^4lT`bNE^uHijkgMnBhEkOroe86E@>6>cWghOJMbV}fsz6-(AFF7dLaa);l9Ub~U((9e8S7yP|>BI^(
zBq3jXcbpq5sOoJ6tovf1&^8hZ(@Gr9TrOXY{s>JtM!?JcUo{%ZeE*&PO9~SGw~sWa
zo%`|N8gDg7-I4|xtlSjr<&SBj&0cB=N!$Q7Q0-&a`r2gyjaex?vYc(Ql(BD%;EmotF#>&cW4Rq^d~SQ
zUiiI1kH@*(HEB1Ko&1|_ild5j?FYvnoMUJaLG`0q4eU#EB%#`Slpq@9EGdrQq!j_C
zrXN$k#c}?0sHX&QQ0;u=mF^XuK9+RBzeil?u5&)V@uzDXljP{cqo5Cio~A(Jxz$m<
zJn9skQe*Z>`kA&LF%O;a4H7(=MPRP#e$6uXnAF!B8x)}+qabCLY;?bjG<1&T4v*Zm
z+g=~VKZI5zCLIJJc?CU+vu7z;de2SfpFy1bS>6U!ZdP);4o
z&%SXm;jaN=<@b%68D!1^u
zqP_c`8=}-{H@%bv!JycUiUzgV(}-T%b@6Eo)x9M(MUhO4jY&`l=T~eD0oHFQI4q1s
z7RcD*-$ud}Gzm6_wPKW`_E<$6T>P@${yzmh-2v@Wf_{d}|60DVzj;5y`{eEv982cL
zZ~UiIs_IF8oBh9~NuIlSHdI{s0b4vQ%f(Gwk!Jlq)Ej91ynAjd8QK|ysXhI1J@I4I
z1Mfqfd;7SR+mtxzqpM#A>}>_l(+RrVYZ{rtoSS&`Bl&F&0}%d*5GA;L+BTKZxyC_kQ|@`C
zMnz;P+9@c8j;Q%_+6HP%E|kWRmwk~Cv32!V3e4(5Y=B{l3`LeD)?SUAqr@lyVA?h?
zda^?95;S_FL3mquY6X~Dg&g;71}CW
zqlXp_8&!sK!j9}hUT&x+cgIS$cQh(KwCZW&RlG+HMqJ5*;i5m|9;A5)@>(<|s1EeX
zmBy5Tai<$PH|kAeuix97;M))#sp(o|g7;sJ%7r`)?61}-XL6X2
z$mZ#C6iTL4$qv{KH$05MAl@mns2L-86Aa2->a6Ot%4ud$N8d!sta4{FXM
z)R*U4!-q!SNC<=}O<#xVpM1Fv;099ARDqNwRBp3%vTaTJNZ?#9y`?YS{#U5jZP&v?
zWNaFIh$?vVzTsz=E+qEKro9xg7*LtRnnuq3Q@iIG4J+@M1V@~L@^WFP9@r@fME5VSPOm)QkI
zv7SQ&4PD#W$;|O1bERfG;43tV%}3|ZDA?FGG~Bq8BqWNbk0|ZjL
z-jjcB{JU(IgE@JB@;q@2p-7NYg5Hj&e8CX;FbkSS
zy0RXrJF)haEgK99?@j*tEtcHf#IYP@dENda&x~lcpcL8FXfO$HNwCpfU|^@1mdP})
zO9vH>Pe(KXZ0ky!gMQT|W~zhDm2+1APJk7v(_Otoo#tVP3cf6MUQ?Zk9THAzYr4w2
zT#R>%v_16yMfX@GaHx4b&~pAw%kS@Po!iHxmD+Vf{iYXsid!tRmoYz5O5aq2qo9W-
z9N*UD<2;8AfDtkftD@q7^t;NKhe3fc?Pj}DkGPA}2I?uhSKR%jodXsHHCjfG5*s>KGXr*nqw=b|
zLayG59(O*O19}q3qu8z97+q1R>0SKYrhpyJj8H#3ZB5fGKlsARlf&TiVfN6s&9}z!
z{1B`&hYprbQ}E4_AmUrwNNTvf#C2ofrTs)Q^zHkM{r#=rpH08BzqkM^e-~exAzOuN
zb5BI;JhZ%hT$eDSD`gr+1JgcTzllff3R)PH!pHclpXWOadEi*T7RkP__ZpTWs|4%R
zVWPyUs%$#ufa1g#I&<+QiX+YP>reHoz#jMM-e)m(##aM_tT|>y3&=kf=MYLNjw+tz
z_3oDFCW}E|0^33N$Rp`~&iKZD8woz08s15WbbF!yYn$K$xdq&C4|v6ZjnW2NM75R#
zpVj>2_RiwrVX%$w{N42^?Yfp`0s`w~f8rW&rB1()}%EA;)!Tjh9-9Npo+%pV&
zh9P_dus~qT6RZ>n2#lYc!Pbu(qB~^F5J^f+Qe>CU*Y1M<8QHwyZM3EoE$n(_D(sBT
z4nIT#k&6=lj@^ufMd}#(<@hfZ4DL3zGzwjRrb^a&9y<7B|E_vK|9S>_nHM;BW2C&9
zg_IfeMevNl5I^4n1S-ov(*>E&q~0c}LVXDKAHHwmDzBo!T6?|)!7HGHTx^_y!3*q&
zCK>QT`%7A)ExVK%?)oCjR~wQc+d`*<+uS+aLVWFDlasgfXP~foYBw#Yt4>;eOm3H1GH=juv5|R+Q_9Z>rC|Y2o7$;;Uuo_g;L?L
zr2e2#1U45Uo}Kofcx3+a5sn`G_J;$Hq!G+_7Sq$++OmUW*~y)NFD0YlinsrsJz7#f
z&k@n#ORGlFZ?o~i`{R>Lp8d{G4jSs0VSHhIO>Zk6cP7&A1k{!c*g~ZU_R_o4W+$Wy
zII-7!knTYPXN25L&xg5GJ`HuMQz}LX3Y@!_of$J%)l##&t%{}(9CJME*>SM37$^)F
zg_o7k)eV}d{kJ^pq0Qs`!-gMZ_1wep@QRcu3fV7KGFPc?j;N_oY$~87U=ii5nE@D7
zU10aJ-?+$1rpPksjl1GeFFi{3HA|7qt;|C&hBI9{DZt|S;v5k!s|
z4gp055C%{J1Q1b?S#E?ND2EK7jvOMGxF2q2hIjzZx+8~jj9jt^2qFpNVj?P_kRb-f
zD99zq?T}?6*(dvI-|T;|{i^%(d8)hmsp{&gr=H)JcT?RJv6KTYW;+GpeeuucYGPCz
zPqoQiUbMA;ZaFURo!Bd-HGS(4Z$-cC{&Vb=JK}+*%+jn^@^4S%AVbfX?meD<0hXBH
z>#Xr2jswU}_4C%P^YeJu%L|-w^B0~`0B$m=d3@Qkyy?wB1;I4~Ae;2*^TvyqqDPro
zvMZsf0E)_kuvFi$@|!JT5|y5rP!a|@>5!gn4BA%`V>h6sXqXp(Q1po?T4q(!rQWCS
z+?y8%a!w9W3NQXq^dT~Q*yYlHOoB*m
zu=t>LP&oA-rK(rl7jZLNBj{*VOxCz3wgf@LSyfz0j6x9Y==C172MvbRgcut>)Wm7w
z%eOIOurYFka}Ls!K7kQ$XOw~|OYPJ)G%zcb9+OI&QTMsceJXsRdS+YZiYlAloC}t+
zF?7!#6c}!%OJhsx3ggk*``?kFwdRaJBlYvg(}(K~VBcsv2^}f4CD;J#V*_#YQ7&Hm
zYw#f&e?^X&@aZlig(!U?aE0JLQ49TTTd0C*wb<_b7tBVKm?G2ld#O0Apn?Wl#vI?j%md#z6P9g;C|XYuu#$=(t~`0o!q@9UmUCY^jW=o^{=dRcT6d
zcH#!foDS4|wnWu8bQ0|-FA}|pn_$n~qPlU2os1w!A^a-4j=6CT?>`{~SinluN_?ip
zQc}z=mE!d9&lu+k+I(lRJ1kcAHpN;f#M70Nh-E_*n*G)yPUnJdToQVSOKTD8xT~`q
zKlKaa+|RF=yPL|)2_WEFPt!Lj|E8B+A-`7KqlPjTpvKi*zf4ab@Sh2Vq<5$-uovPo
zwqktK&HP2|_?8Ga#2_p+tlH(7T9G-+wp#IzM<}2$lp~?4Ra=5zi`dQv}b51xX%R
zj^>w?lTuz>?$qcp&E22Q?J1SndXP}UM5sco|8i2S8Kg)mO)Kk$u}lNL!;V*H(;Wsc
zg-v`u(_|v6BycB${iT$M3bEZ<^_z2JA%7}SdTC1Y{1CB^?Qfn>(iPHf^|GC`P~YQp
zg?jfeWnc_4QF_+lX^DG)8)wxaTCtF^9nc&_S?Qyk=4$vr@mheeI3klvLkX9
zQGH!DqafyHlo8>cI1s^{BUlkT0BvfF?1Mzw4+DdaRMrFLQN$jhOdMT!0ZUtF_Zr01YZ7Ed;eh`^{*>h$`NE#gTFB&Ay=-1)K0JM
zMe#U$B1itp$B9F^=<6nV*c63A$$;R1JTapfuN@~T#iBWzf8x>Dv5KFDOvCl?;@!+6
zYXMRb{_oywTQdz@kfaV!B6&h9tn0<2
z2M0T3-YEv)&4`+V;7Et;yBmt0`HotW@CKoSE}NVi+d3%}^?lGAk?aN
zak@b-feHWRyKV2!QoUtOoPG!YE^I?ZXRcf1f*)0~nkV=ikz2Zv@*q>NY9-Drc2bTt
zgKneKBIQ}Tp%xb{LCNLvYUA1B&l4N@3CDImyTcPHM$F31@y6*!8HBfG
zA8q#Ak>EAk__MmW?IjP&lzlC9Nu%8EC^PERFvGo&XT4$4w3HAp^By!Q$A=7!#V#uu
z3RJd}9}IOSZE0Bj;Q*WAE_%fpxS5f&SQVCByYL8%b1@EG6_?20Icu?bB8^Nf5~RAC
ze?JtsmRC!dC(Ja}oL}p_!PPb~tW+AOQd62`Opo5Z{|9>gZ=RXTe;vLENu1LuytY=p
RMiqj?%l#;=(KX_){{}lLZkzxB
literal 0
HcmV?d00001
diff --git a/Projects/Superalgos/Schemas/AppSchema.json b/Projects/Superalgos/Schemas/AppSchema.json
index a91037675..b28029cc8 100644
--- a/Projects/Superalgos/Schemas/AppSchema.json
+++ b/Projects/Superalgos/Schemas/AppSchema.json
@@ -14879,6 +14879,13 @@
"iconPathOn": "configuration",
"iconPathOff": "configuration"
},
+ {
+ "action": "Send Telegram Test Message",
+ "label": "Send Telegram Test Message",
+ "iconPathOn": "test-entity",
+ "iconPathOff": "test-entity",
+ "actionFunction": "payload.executeAction"
+ },
{
"action": "Delete UI Object",
"askConfirmation": true,
diff --git a/Projects/Superalgos/UI/Function-Libraries/ActionSwitch.js b/Projects/Superalgos/UI/Function-Libraries/ActionSwitch.js
index da50856fe..5e2324136 100644
--- a/Projects/Superalgos/UI/Function-Libraries/ActionSwitch.js
+++ b/Projects/Superalgos/UI/Function-Libraries/ActionSwitch.js
@@ -712,6 +712,11 @@ function newSuperalgosActionSwitch() {
UI.projects.superalgos.spaces.floatingSpace.uiObjectConstructor.createUiObject(true, action.node.payload)
}
break
+ case 'Send Telegram Test Message':
+ {
+ UI.projects.superalgos.functionLibraries.socialBotsFunctions.sendTelegramTestMessage(action.node, action.callBackFunction)
+ }
+ break
}
}
}
diff --git a/Projects/Superalgos/UI/Function-Libraries/SocialBotsFunctions.js b/Projects/Superalgos/UI/Function-Libraries/SocialBotsFunctions.js
new file mode 100644
index 000000000..ad4be83fb
--- /dev/null
+++ b/Projects/Superalgos/UI/Function-Libraries/SocialBotsFunctions.js
@@ -0,0 +1,73 @@
+function newSuperalgosFunctionLibrarySocialBotsFunctions() {
+ thisObject = {
+ sendTelegramTestMessage: sendTelegramTestMessage
+ }
+
+ return thisObject
+
+ function sendTelegramTestMessage(node, callBackFunction) {
+
+ let botToken = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(node.payload, 'botToken')
+ let chatId = UI.projects.superalgos.utilities.nodeConfig.loadPropertyFromNodeConfig(node.payload, 'chatId')
+
+ if (botToken === undefined) {
+ node.payload.uiObject.setErrorMessage('botToken parameter not defined.')
+ callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
+ return
+ }
+
+ if (chatId === undefined) {
+ node.payload.uiObject.setErrorMessage('chatId parameter not defined.')
+ callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
+ return
+ }
+
+ let params = {
+ text: "Test Message from Superalgos",
+ chat_id: chatId
+ }
+
+ httpRequestJSON(JSON.stringify(params),"https://api.telegram.org/bot" + botToken + "/sendMessage", onResponse)
+
+ function onResponse(err) {
+ if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) {
+ node.payload.uiObject.setInfoMessage('Telegram message sent.')
+ callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE)
+ } else {
+ node.payload.uiObject.setErrorMessage('Could not send Telegram message. Error Response: ' + err.message)
+ callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
+ }
+ }
+
+ function httpRequestJSON(pContentToSend, pPath, callBackFunction) {
+ let xmlHttpRequest = new XMLHttpRequest();
+ xmlHttpRequest.onreadystatechange = function () {
+ if (this.readyState === 4 && this.status === 200) {
+ callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, xmlHttpRequest.responseText);
+ return;
+ } else if (this.readyState === 4 && (this.status === 404 || this.status === 401 || this.status === 400)) {
+ callBackFunction({
+ result: "Fail",
+ message: JSON.parse(xmlHttpRequest.responseText).description,
+ code: JSON.parse(xmlHttpRequest.responseText).error_code
+ });
+ return;
+ }
+ };
+
+ if (pContentToSend === undefined) {
+ xmlHttpRequest.open("GET", pPath, true);
+ xmlHttpRequest.send();
+ } else {
+ try {
+ let blob = new Blob([pContentToSend], { type: 'application/json' });
+ xmlHttpRequest.open("POST", pPath, true);
+ xmlHttpRequest.send(blob);
+ } catch (err) {
+ if (ERROR_LOG === true) { console.log(spacePad(MODULE_NAME, 50) + " : " + "[ERROR] callServer -> err.message = " & err.message); }
+ callBackFunction({ result: "Fail", message: err.message })
+ }
+ }
+ }
+ }
+}
From 9419d0b8495bee9cb5d3693a19f52c223084f0e2 Mon Sep 17 00:00:00 2001
From: Smidy13 <77650800+Smidy13@users.noreply.github.com>
Date: Mon, 26 Apr 2021 17:34:09 +1200
Subject: [PATCH 4/4] Adding ProjectSchema changes for Telegram Test Function.
Also Bug Fix: Tutorial Not Loading
---
Projects/ProjectsSchema.json | 5 +++++
Projects/Superalgos/UI/Spaces/Design-Space/Workspace.js | 9 ++++++++-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json
index 5f20a722c..a935d28de 100644
--- a/Projects/ProjectsSchema.json
+++ b/Projects/ProjectsSchema.json
@@ -120,6 +120,11 @@
"name": "Workspace Functions",
"propertyName": "workspaceFunctions",
"functionName": "newSuperalgosFunctionLibraryWorkspaceFunctions"
+ },
+ {
+ "name": "Social Bots Functions",
+ "propertyName": "socialBotsFunctions",
+ "functionName": "newSuperalgosFunctionLibrarySocialBotsFunctions"
}
],
"utilities": [
diff --git a/Projects/Superalgos/UI/Spaces/Design-Space/Workspace.js b/Projects/Superalgos/UI/Spaces/Design-Space/Workspace.js
index 2cda4ca82..64667840a 100644
--- a/Projects/Superalgos/UI/Spaces/Design-Space/Workspace.js
+++ b/Projects/Superalgos/UI/Spaces/Design-Space/Workspace.js
@@ -112,12 +112,16 @@ function newWorkspace() {
function onIndexingFinished() {
setupEventsServerClients()
- setTimeout(runTasksAndSessions, 10000)
+ runTasksAndSessions()
+
thisObject.enabled = true
UI.projects.superalgos.spaces.cockpitSpace.initializePosition()
CAN_SPACES_DRAW = true
thisObject.isInitialized = true
+
+ playTutorials()
+
savingWorkspaceIntervalId = setInterval(saveWorkspace, 60000)
UI.projects.superalgos.utilities.statusBar.changeStatus("Displaying the UI...")
}
@@ -132,6 +136,9 @@ function newWorkspace() {
executeAction({ name: 'Syncronize Tasks', project: 'Superalgos' })
executeAction({ name: 'Syncronize Trading Sessions', project: 'Superalgos' })
executeAction({ name: 'Syncronize Learning Sessions', project: 'Superalgos' })
+ }
+
+ function playTutorials() {
executeAction({ name: 'Play Tutorials', project: 'Superalgos' })
}