From ab5ef9f7558a5e2c49d65095d59052989b352913 Mon Sep 17 00:00:00 2001 From: qo-op Date: Fri, 1 May 2020 14:19:51 +0100 Subject: [PATCH] g1sms channel coming --- g1sms/G1Anar.png | Bin 0 -> 26064 bytes g1sms/G1Billet_LOVE.png | Bin 0 -> 78936 bytes g1sms/Oeuro.jpg | Bin 0 -> 122901 bytes g1sms/OneLove.jpg | Bin 0 -> 259329 bytes g1sms/TAG_fond.jpg | Bin 0 -> 13021 bytes g1sms/TAG_fond_G1Tx.jpg | Bin 0 -> 14046 bytes g1sms/checknodes.sh | 152 + g1sms/cron_CODE.backup.sh | 71 + g1sms/cron_CODE.upgrade.sh | 40 + g1sms/cron_G1TAG_REFRESH.sh | 83 + g1sms/cron_GCHANGE.sh | 49 + g1sms/cron_IPFS_open_SSH.sh | 23 + g1sms/cron_MINUTE.sh | 108 + g1sms/cron_VIR.recurrent.sh | 94 + g1sms/diceware-wordlist.txt | 7776 ++++++++++++++++++++++ g1sms/diceware.sh | 17 + g1sms/functions.sh | 672 ++ g1sms/g1.png | Bin 0 -> 33870 bytes g1sms/g1tag-v0.png | Bin 0 -> 23388 bytes g1sms/g1tag.png | Bin 0 -> 33134 bytes g1sms/good.nodes.txt | 6 + g1sms/init.sh.old | 83 + g1sms/init_keys.sh | 148 + g1sms/manual_BILLETS_PERIMES.sh | 64 + g1sms/natools.py | 85 + g1sms/nodes.txt | 11 + g1sms/parle.sh | 12 + g1sms/sms_ABO.sh | 49 + g1sms/sms_ADMIN.sh | 89 + g1sms/sms_AIDE.sh | 33 + g1sms/sms_BILLET.sh | 180 + g1sms/sms_BILLETCHK.sh | 76 + g1sms/sms_BILLET_MAKE.sh | 129 + g1sms/sms_COUNT.sh | 77 + g1sms/sms_DESTROY.sh | 78 + g1sms/sms_EMAIL.sh | 58 + g1sms/sms_ERROR.sh | 16 + g1sms/sms_G1TAG.sh | 302 + g1sms/sms_NEW.sh | 60 + g1sms/sms_PAY.sh | 98 + g1sms/sms_REC.sh | 170 + g1sms/sms_SETUNIT.sh | 44 + g1sms/sms_VIR.sh | 104 + g1sms/sms_WHERE.sh | 56 + g1sms/tag_LOAD_passenger.sh | 164 + g1sms/tag_OP.sh | 168 + g1sms/tag_PLAY_passenger.sh | 68 + g1sms/tag_READ.sh | 250 + g1sms/tag_READ_X.sh | 286 + g1sms/tag_READ_XY.sh | 300 + g1sms/timeout.sh | 91 + g1sms/tools/4LETTER.blink.py | 15 + g1sms/tools/4LETTER.clear.py | 3 + g1sms/tools/4LETTER.clock.py | 20 + g1sms/tools/4LETTER.scroll.py | 20 + g1sms/tools/4LETTER.spinner.py | 15 + g1sms/tools/G1_IPFS_pishrink.sh | 332 + g1sms/tools/G1_TUX_keygen.py | 64 + g1sms/tools/G1_TUX_natools.py | 85 + g1sms/tools/G1_gen_pubkey.py | 42 + g1sms/tools/G1_request_cesium_profile.py | 32 + g1sms/tools/G1_send_transaction.py | 54 + g1sms/tools/matrixKeypad.py | 41 + g1sms/tools/matrixKeypad_RPi_GPIO.py | 102 + g1sms/tools/matrixKeypad_RPi_GPIO.pyc | Bin 0 -> 2215 bytes 65 files changed, 13265 insertions(+) create mode 100644 g1sms/G1Anar.png create mode 100644 g1sms/G1Billet_LOVE.png create mode 100644 g1sms/Oeuro.jpg create mode 100644 g1sms/OneLove.jpg create mode 100644 g1sms/TAG_fond.jpg create mode 100644 g1sms/TAG_fond_G1Tx.jpg create mode 100755 g1sms/checknodes.sh create mode 100755 g1sms/cron_CODE.backup.sh create mode 100755 g1sms/cron_CODE.upgrade.sh create mode 100755 g1sms/cron_G1TAG_REFRESH.sh create mode 100755 g1sms/cron_GCHANGE.sh create mode 100755 g1sms/cron_IPFS_open_SSH.sh create mode 100755 g1sms/cron_MINUTE.sh create mode 100755 g1sms/cron_VIR.recurrent.sh create mode 100644 g1sms/diceware-wordlist.txt create mode 100755 g1sms/diceware.sh create mode 100755 g1sms/functions.sh create mode 100644 g1sms/g1.png create mode 100644 g1sms/g1tag-v0.png create mode 100644 g1sms/g1tag.png create mode 100644 g1sms/good.nodes.txt create mode 100755 g1sms/init.sh.old create mode 100755 g1sms/init_keys.sh create mode 100755 g1sms/manual_BILLETS_PERIMES.sh create mode 100755 g1sms/natools.py create mode 100644 g1sms/nodes.txt create mode 100755 g1sms/parle.sh create mode 100755 g1sms/sms_ABO.sh create mode 100755 g1sms/sms_ADMIN.sh create mode 100755 g1sms/sms_AIDE.sh create mode 100755 g1sms/sms_BILLET.sh create mode 100755 g1sms/sms_BILLETCHK.sh create mode 100755 g1sms/sms_BILLET_MAKE.sh create mode 100755 g1sms/sms_COUNT.sh create mode 100755 g1sms/sms_DESTROY.sh create mode 100755 g1sms/sms_EMAIL.sh create mode 100755 g1sms/sms_ERROR.sh create mode 100755 g1sms/sms_G1TAG.sh create mode 100755 g1sms/sms_NEW.sh create mode 100755 g1sms/sms_PAY.sh create mode 100755 g1sms/sms_REC.sh create mode 100755 g1sms/sms_SETUNIT.sh create mode 100755 g1sms/sms_VIR.sh create mode 100755 g1sms/sms_WHERE.sh create mode 100755 g1sms/tag_LOAD_passenger.sh create mode 100755 g1sms/tag_OP.sh create mode 100755 g1sms/tag_PLAY_passenger.sh create mode 100755 g1sms/tag_READ.sh create mode 100755 g1sms/tag_READ_X.sh create mode 100644 g1sms/tag_READ_XY.sh create mode 100755 g1sms/timeout.sh create mode 100755 g1sms/tools/4LETTER.blink.py create mode 100755 g1sms/tools/4LETTER.clear.py create mode 100755 g1sms/tools/4LETTER.clock.py create mode 100755 g1sms/tools/4LETTER.scroll.py create mode 100755 g1sms/tools/4LETTER.spinner.py create mode 100644 g1sms/tools/G1_IPFS_pishrink.sh create mode 100755 g1sms/tools/G1_TUX_keygen.py create mode 100755 g1sms/tools/G1_TUX_natools.py create mode 100755 g1sms/tools/G1_gen_pubkey.py create mode 100755 g1sms/tools/G1_request_cesium_profile.py create mode 100755 g1sms/tools/G1_send_transaction.py create mode 100755 g1sms/tools/matrixKeypad.py create mode 100755 g1sms/tools/matrixKeypad_RPi_GPIO.py create mode 100755 g1sms/tools/matrixKeypad_RPi_GPIO.pyc diff --git a/g1sms/G1Anar.png b/g1sms/G1Anar.png new file mode 100644 index 0000000000000000000000000000000000000000..21051325e096fe31263e27e9cf375e6f4391028f GIT binary patch literal 26064 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

UKn3$zI=J9k8MHApQd&vpgB9A4WF|o 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 z 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 literal 0 HcmV?d00001 diff --git a/g1sms/OneLove.jpg b/g1sms/OneLove.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8d227d12dfa43ee48e1b4b7d0c668502da0afa8 GIT binary patch literal 259329 zcmb@tcUV)+)(5&1q7X%aM6pYV5JaSj^b(LLEr^POf)YAHfGE9$P((4Jf`Sri1QkSt zh%`}(1w=#$y%&| zZMhxz`>92iHzK{N-OpIKloxP{J@n(2`i_6k`u}(rc69P~000OM{65egd^p(u1on5? zU%a3X_FDl!K+w^{(GdXPzrgXkE`R52yUv^A@?Ue@eLY+OU>lh??%`zT4fbQfzJxvT zh7Z^;lSN zDe(*dgh1MgnGU{Qe*cWYcyC*PZGaH43)lx7295wn0a@S#pbBULy1;3`7%&4a0#^VV zzyY`pcmQ62KR^b;fjdAn5DPp3k^nmJ0>}pPfOkL%PzHPkz5#VWBhUu)0Kb4?U=o-E zmVtE$1i}y50YO6cLBt@E5E;k`h#Eu(avFk%T!37G*g{+&o)BLM8FC8}4S5Vnf}}&T zA^DI}$Y)3`qzTdm`3)I|EI`;$KBypc7xWMm1C@uWLG_>}(2LM(P#5S;Xb?0K`VdNk zWQ*d>?)>?Vu?yAMl(y@D0Ps$ea!->^9tcgv0~2e-&< z(b!_NMd)S-ONo~{Kc5$2Aw(xDVZF$?O zxAksY+`fG~db|4e^V?mwhi#{Af4lwr_TSsr1QCMA1oZ{43i=8@6wDI*B-kamxMRl- z%nschRy%xlJlv7JH=5EmA8ohTunF5T_B2h)Be9#8<>1 zk`H+VsgHC(-a@`WRwIXZZQUic%V?L|uIOF4yBc=Q?MCcAx!YoQ!0zPT<-320@`++Z zjYQo=V?^JHwu`d&9NMF|$7v6BPu`y9Ju7<;?A6`twD;a##@@EQ?0u+xr}q)}J=#~Y zuWvtW|FQk&_xtZp+h4tZ>cFl8ng<*X+&l2@K=(oD!D9z691K4A{NT@ntV4$n863KC zDDlwOLsN%E59=OwI~;$w;_$c_QcOq8RV-etQfvaX8>NSGN6}DKs5$Y2;)deB;_2cI z;_GNB^d)oznt|>+vh9f45$7ZEN4^}HlMs_Il^{#xNOViWCDkOaOD0IxNUmU{FqW7o zObKR8YOj=$RFG7TRPWIpN3ln59?dw~D!o-&O`0g3D&2StdQAD)^<&A$m@-fq6&Y8V zRGFsZTaK$A_dK3)yhBz{R!`PXHb?fioTwaLE<&zEZbn{0-b((Fe2qL;L0Q3F;e|qv zB0|wvF+%Z!;=+kzCmc>BpJ-Lup>#$mRO!9a{7IRUPAAh&b}A#4O_igRzbJ30sH%9W zY?go>T4P*8a^8DG-fqrHHn(9HOI81w4AhF zXbozkwe7UiwSVcLbZm8=>HNZqW9_gR*gv{QbRBgwbw~B2_1yH{=*^r`IOTP!=+uh7 zhJJ|tCmbKn0Cx}9a2j#?(&?nr{b$f;T+Za2nKMu}2sZd+xW&-K@R4DM(IF!Tqimx& zV^!l2<0=zD6LXU!lRx-lcrW}1Q>dx2X`E^AS;@1WXG_cgGb6J&v%Ygu=Wd?+cz)~o zbLW%Kk6ci^K)z68jx;BjzcydKc#pp-;(F!16~C2*Ri+io`n2^E>*1@)SMOYHzb17p;99NCej9h2a)J=Sj!8R@%?>O$H?ey4b)LGm4vGbUVwo9DL_;u{{r`M-k z^<9%(=iLn5=x!@SGh!BT)7{dY;UVB*>rv{7@FaRxkq(mrNKH3nZrr)?>!!xdCpYK3 zOuRC^A>P-#-}~$W1I$m~qrSI&fBWh9CHt-VTlg0Qhy-{B{0ux6NDUkfIurCV7#8dh z{Dmw|4k!N((F;kZKq&THb0f<$>({Fbud1?Dv$J0xd>xYm&GF3{e{=OsV=gZDeV%MyIzyBZ{T6uZ z`*tGVHoyIy$-6HFY6W?Pl7%Tn$fA42kmA7NxsvN8zusSY-&AT``sIV>hoX;iAG6BD z%aY4?m&a6WtB9=FtPHATeY){!>a)w|!7qd_Jzp<>ZLKr;28MW$0`j?NU$>dyY0 zyF52M?=`=%V%E~hr7x^=to~(><@J?&tNT`8t*Ncmur1l6>;4>m4sAnv;{(@( z+q>zpx%pq%L=J={sQ=&+oRhPiue%S52Uzq;?j&C?l=%%i2Pc#)iU(r;0TBOZum8a* z_K5&cavK2lcK>G#e9XCj9`z4y``iC7eEGk~fd1z?K2ZSRQv%WJi~o#~G5|o01&+sh zySkuwSL$E5i25%%$X;-AcJgxa1X;Ckb@F%hbOHJIbaeG`C3&J;J$dNuKVte{PyRpn z@EEq<(X~(0;&i$`;ym&Nvle~OfeLaq&PADj- z1Aw=)(uuz$K?HFi%p2I;T*LqXe>?ze#B6S^r*Cd^lf`0d{#Rsq39IQ*k|SaK-Likhc-u z)sqBl_5k_--`@rU+ZJBq=ij=OpMSdm9Q@fXvR!aH_$wlW5ZVd;9oUUT?mi&4f8TyF z3>uA5kX6vpxyZW-whKDk(7A;G>U>A5#; zNTktg%q!uDbGX3>3=A*6?FSNe3Thi6VCoEk3Zrdl!p5*?cmY5d4#0JR2uY~DZ9H7} zF&q~G4+HfMh2!qha2b*)P&B8U0hBQ;EL;MicN75t@AGs4lmvhagJE<5T>v40RCtVm zMTVm#;F#mI_#YVAqwzn#fV|tcC;hZJcRTk=bU#tKHt@xlvJb^YUs$-h;bl%HxuxO>>+TEycs&<21gK}uMrJcfHgx`F@ zya2!sL|8Z+hW`w;1z-RKdJgw2*2311$0GnkKw-~7kst*CD1t@<;7}xQ7yv-2#KXhl z;ah6+jDLOt1p`Fb>q>wUl7NEph>y@kU?dgM<^qW{1iD2b+KMQhY(Wf60xdw+*NND3 zXp$&?H6iJz)pE`Cl(@@zSBqtl<~MsG$wAh zRh$SCv;>gT3`~It5(%q9Wy2!{K$hXz2wmJ45rs%&kRcQv9?oMbOhn~SN0f@A0dYix69A`%!F45QhLLyU5mXTc!^mfe zxEJuq7YJHBMudpIK*Rm~tmIbj;fS;P>{^7uw7*~kzAmmkS!ng6p7i+UPlD_`Psvs# zpyu=N1xC5EZZdzZ9kh7&f_p^p&%W#O2xbELNH5^E=tb(K>z9xM7hDxZ6a{kgyYsCr zh$8N8rXGe7oqxnnUb42Z+x9xT*&a<)RLIy(E5w;Piz`IfAuqz(g>e}YR2czNU6{B4 zO&B4JfqeqG2h}V9@~jIo27ZE|!e|np1;@ffj>01mhT#(Eb9hh;Vc?f~C_pfyR5vUV zj{+|W10+$AcOfW&cmVc80`@~v!bk!4v)$YgiN>6}J#zcqvFJ`*?nSFb6Imw@(d5BG ztM(V|YnV7|$71#SiLwug?k#tS7qR-CNS8(gy;5)=qgQTZ-LfJ%*& zQJ_-q;)O9H$~0j;sK`+u>@fh+3xGCi7zTwlLM1_~20)hu7@`mY0PcIF1l3p|7WLQW zY2eIH@c=yR5j;W{*mqkAZ6_cJM?(c3Az{y`xEBbhZ7e+E99-lm5{fef3=QECPKZQM z$L;1vaa~a7VyhoHL{p=}c6*+;bA40QchP3~MSGXj!D@!Px#&;Oixq!$>p4Dny1;r% z4w9R%Z-6E&cIm-9ycL}Vrasu2Z&gZdPXa04ZP z5H<{hpg=V$-~a>wGWzd^(3ONJ0P%*vzR6=wRI2F(TI6SVn^q)tH0dMeDN0WYDa{Gys zR^(YNxOT6+`BGqg+Mei^K~%=I+l#*Vxf|E2ryRLkL^>P_=%T_E3_V+1l8&shN!5br-I8pYT-lf_P$Vu_M9GjEDGY&%C`6poHKYoFtM5}b z0?>mCAZXy&c{GS%;CL|p#)4Hp0oYxhLxw_7pmy~X5L6Ju{ENeQLt(f}L}FOvCo0&& zp|5D-lD0hkCBgyNXA}TIV?cp{?im*r3ps(nWt>;Emq^T3Ny>14lllGhON6nA>bc~4 z5!EDg*KS%-X5^4V{Lp!%@7B{IsuxUT;NLU$T#$547rkh8jP~wr^l5whCK2Vri(rR% zJ@T_~?rXd_@`^4E_hpMA-dF&F6cAT{z(9u?4lYL+9*ijO2UM3UobGVJyJ9heNGZ)jG}?a0WM4hBRnGB^bdj- zesSA(02TrMqV$d$pThuDkl_C`gf1X~`xFlcc{YOT{v9_|+U5)hNJM@?;c=jN1Y%Da z;^N>U5)l$c2nhrp_6eL7D-a8Nfe?U&;W4_vDMKq;N$5Gr^G=TO@T7Ftbkz$+Nk&em zTQNV3Wlv(}&--rqlW`800oOwc&<9Zm~9afr+9Y+p9Dq1!T=Ez@Nb*pJ)UP=;7Y;6Bg0PV0=x#xz<)^$g920m47!;5 zLie@(c2h|eVOWF_MgoID9z{T4Rgri&KsAO_fkzTBsyG_7DJoh5L5++$EK~peBy?bE=qNxm#>tQq$pc`>6K0`zS z2m@dk0YCyp0|boEowDUo0|sHR^l1x0f&Kq2Zjk1G58z={iMN%&iSTd%+U_FETg+Wr zEK>10jTTQ0JC2uBkboJ%LB=0TP(eQ^L6ZqV*T%M_2h4Bi9a7js^jD_E2`~dCyRlK1t90Lo3fh+DP5}@%20sveX=pIo3=pF_BhcYMx1!}$O zk)nhIE)3u`TAV_rtvDL?Nf?k31rt*k6-LGXoew<^hYK4TO2DeZppLo#KH~!HZY)$# z{cShxj;UR~=vPw7dL?!oD}y~Zck>sAC1yOIdY|mqFPrDQJ4ekeA@?iPlN zG(tq27YAtI>H!}iA)&|P3J?Clsv_(JH?9VksV`p(G1FTt8!#Veo#I4GbuBBeP-L*~ zNzSYBAs>Y9I;`K>ZvN+TMN4inVK9JOnoTzuW@LVY9p zM1cyxBb<2z0)Vb0S^|J50gq4s{1E_qAqvF-kbexyN&-lHEv57Ab~e3|RT()o!3qso zuN)cZW*r%)0~_g;0bI|;iplxD*Io`PvUyJCSE|u^z$0+!gX=I{5hXwi`yYz}5~*hg zirZ%bHUZNmtoi4aO3fuMo&J5vr)SWu1^cpQ)Y+vZDuGBy-!Gjy-k9A|Uwt>`bV6Ob z^yKp&PI*{^s0S691cTE33puZ!AC7UO|SQ*1&JPC;+*_1F0!Y@|+3BL|X z0SQOz^0@n-h5=~*EDc~^wGx05SCoK*DV{J5{x2&A-5zLv04$7#(FG(G6@>9sAb7|8 zBa525jvWAAT%z4k_6oJG;JMoSEMOSMBLITt1!%BA?awUJ^FKGSU0QVFKCkV0zi`-r!JG^V#ZuDfX8Bh+WxjRo zH4RLWw1nE-9eIEDdl%vU)Zx9lDm4!>?R(V|h~+gbtFnMmqK_}Dm~wkj%&cK>eTI=X z9VoVYKBhLbViVXMqM0>#bF_L^t9r}Zi>6Rr08|1h78e$A9>t^KpN5B?`>Ps=g3>+b z$S+V`7}`h|zIK@@Rgns^f5HMEGjfT?%O7yt!1#JIybBD@~uNfuK51; zbGos(yS$YFuEMatO9YhA9#+3e_O0v22U^b^vvul|`kCMR#BD3b=oGb~`q;iA7Un((3yyrI^|!`b}r# zHUaNFmZ^(TBg~c*v(T8eqTF$Mz?*)m#h4J1Y zDdxv{OIjBJg@VxVUmjKfmI=xSOb%jW!L@D(Mibl*1m5@*1atg-e2tRmH+)rlN1$kV0$XM}g-lQO#hP)0hGu5iN86j*IUXwmd~E)lv5Khi3hxQBSj%)O{X=|% zy58?ADJni5gmGIu7y#X!_Oq~GFXm3{Wn$j=I3ECc!G#Rx!>xGOo`uy%_~ z&_4?sstfQMC?sisCIE+F&H-TZ`*)0Ic2GFg5Qvok9nB+9objLHjh!(_l#xJn^1+US z-NPpwJ8KGZlY^TleYI-RH?}Wt9Nz@s>m_ERS|0KloUGpz{@~_y`IO&Xy`3BBbxW*; z!=%x}Urv%sLUl|jmjB8nnv^W|8f!$c-7p_13Fx(99vKZRRCWoctQgSKDYF;es|@Dk zXC1g%5TerUVp=MqQSi1ZGw55n%5vbYmYQ*;K;pO^>k6mjSzGhu6w$G+c7|Xj^& z{W%_@Y9RER)KA|w;pIe55#7ZcUE#0f6es(~yTA&Y^KElPC4R9%4V=ZGg<~d99W-;;&+Vn!k z&Vh5IEVZSzfv24vLpQWd*Hf_RQ}#1UMIMcFAJh2zygynEFiGmH(0F#=RilTu;~)yW zY!RZUP|{rCF{vCJ`eqXl3)K%5Up?GW=tl**;4$xmmdlljaYi2>QjpcF!`QE!t%%p?Ws`$4HK8 z9hma$uC(3jyE=;*FPg?Dz27dK9)F)1t^nwQa034fs*BbIrvOSA>3Bd~`jjom z6%Y#uz{37PPhcG+HujYL1rU}%q`}&qp)ovKR{aR^urX=FnzdDsPOmfwBD(+1y|JLx zzoYWu*cw543A?X+>EWHx7Yk`mldf)fRwi|gjMP=S$47O)51Cc{xX4WKmFit6&osMo zD?RFS5h<&>W1>Ufd+ah+hU>qfzZP2Z{VV^o2GB8rltJ4HO+RRDqy!H%#-#d$l+=ar zFD~l0uF*5S=h|6azuOc~g5?{{%VagJrLn=fT$yo}%aTZl`0&v0sI-3)1Q zrnsUcpZR^pafsyHQMRZu?>14F)AoB=TaH0+ur`PqWp|cEJ?dBt+5{d@5*I3+lHU5W z8)>m%3h>M@%n&9)4M*WX^A56+KY{z=X1UYdtxY-thp~5KCVkw0_I6G}()hVXkHO-D zg7L+BjoqkWG+hV^JWo=4&k3|Iaj+}=7Z3t}H3F-u3WGyXa9FrPESSH%y#CannKk-@ zTfw4q&~xxlsw?W4ZEb7C!xf>O3;o`0()HEtOQxoE?$eX*u3k!0L1(4-NhJRrA=sDq zvH0dOn@!;8LdCt(QuXD_M;gWnCR@*bYn^rISl%BBaOzhGw|vXECu`Ds@J0aGpw1Y~ z+MILdz=T*cA!ZYBSUp=ZBos-R;%N7E4!6kZYyzooj608E0E8s$nJ_Hcf~bjY6dE0v zE;|tFJg3vMSo3(K<<~(S1D6YK4@YshM`+0;+2(bzBz8yq`qq`WNw3mFA+J3Gdy`Kt zb3%!?%+kkv7wzV{&^H37_Fo*CX6MBilzw7ZGgru-S+(Sj`a-UCLmPW1>(#@k3$~B# zaX@SsEJK$^Dan*KA_y z>4q35AT?&=C#O15)<>}^&)z-h zd?Vkh!lk3HDMoojgLB+kEkrD*qLMyHTKY(~p}*+voIkV)xU{qluT@lrhKi*vYWJ3s zp7-RA7kp_ft`Iv^{;{F8b85=nsiS9QuXkYi?86&n^co%SrjhmTs^{Lee+fyXQj6Wy zT?<%Zy#ryD0jm|WW@{@Of}E`GHcrzmf3y7O50qO>oQ50#~*F_xR*+XHR2$>+=0Rv-9a=g=FPi z6YoGdDgA~LKR?%k8E<#5g0+5d^Rp7hma1Z>8Q2J28n-nDy$!EKuFH#_09b1|uP$%> z#=0_^cout_EhIl(DHkkO!S1&p+z*nsOHXf0xytn`^z@RlPH$}-^_gG#(A&L~Kj3g? zeQ$el$nlE|e^RYQ{4$M`H*)aMPD|^cqPeStH{7Ky^+r6`pz*OKDcdsIyx zFfPCJ585;688Ex2=_~!L7V}y6e5yQ+rP+5@HMGM|gKO5}&rV7UzTG%&y87YcZin_F z`;=ji7&A-Nysy#NyrH%I^~)h!UGtbOW-7%D+MmF(&?IgCTFrxkJ~Y;~n%rL$Z-s^aem;3*yc$qcDnO$^Am?=9mV6cUBEl<|o{GsHDFf>m{`x{;yfKKu#lgCzts#Eu_qyEEtQQ+fKUiFIWA@Ym zZSvjr!Qr8`vkc8@Hd$+0F2S1dWo#vAP0@?JA;A1{@2vLKZPGvM+*}vmxi1H@_i0*R zW@!ZVClEV*)kE&vn17w_pqC^EC)CZ635w$tM@Gs>&qs&bwXs)4Vc^ycpbLT!o~mkN zB)vCOmtBU<+UR1-I$0`tqb+2!A!Y-ibQ2IdvkAy0DzZ-6$y`9t!f;`*yD-2=f>&ce zdu#YzW`ka-o)DVxieDCjGyRPY*Pq! z@|Ic3kB=9RV7ozC^|ugWE;nzRm1uvR{36ZJMV%n+mr zYCoAb<_%JF8bc=r-BADXgUhozifaFz>!(wr9 z2sl-0605$UG|H)I+2|0;8UC=`m}-#TZ{IcVo4S)Bh-=&8MnxW(U#9A(t z8%}|BXQh6n^ZPX+_k1~J3#SSvg7wymk1jp}%b>Bwtm4@o4z^#br1b-rl+9cS5loTm zh#r{m*x*Z?ocC7waI#!0-l3SjrJ=E=d@5M6=w3MmQ%N5SsMKDpz*d!;-DZ__-YOac z%@-_5VAbdC4TwSUQ*4ozsCbUZt%anmA$|jxIFN=ac$4Ihfp({ z+~Ype+^=tKEtl}5UhN>5D|`$wmGhjn&d>eaI_{$_idBsv5}RviFC1Ay^6uv2X~8a5 zseVt%d%aIzdRD7(aC{YGJkU*UA17UdTGR{GBr&gAqgDez9)MlL7RY->#B z)HtiGCN*{H0NIAHn0cNpQ*Q_bi-lCssS8W+a!|0rz~~DLGX(eT0I069gM`j4HgS+Z zUSo!{9wj6+vCkf7uXBl6C2>2-W?~GIn;9?LYsep(J4Q%>GeX8I^-*Ki0a6b7E@lq& z=Oe3EcWwgPzmRL>g{J6gYc`cHOZ=$@BnGj0rE8;_75XqFp>CK<4j8Z;`gka*%_b_X z=={lW1z3hI3M2(V6}?|n+p`g}Hp}V=UkRqjH-a{CD3@hgek~?+h`jQP)V~RYuP6kj zTv23enN?!Cu3jOVjH8i$k3va@~_WvMWZ*i<-V{}^KxAMamQ%B`DO^AwBzL!NCU zn|qIH-Ipq2HPXN{M*vh$qB>nkG}`pJgw6Wi}H;(-o zT{W|u=(bv~KoT1lXOqo!iZk)$*B80(Zmwg!8Tk`B&g~^qTQyyOcPt*ddT=_|%%JUa zl(t52()*Ge@`v61-|C)U`-%V1+WD=H5#<^q7wIFDMYir%Q!iQyEKBQ<;(uPE>aTC2 zQJi_Kd$HU?u%-2(N}gDvhv$aAP}IsvX6>XuTPtb8m!+aLdw^79w`M?6{S?(vc0vLc ziG+(Q0H}C4SiOdT64wPQ{5T!}`@5*Y0`T#!NzV#-XmNWjjgUN79xAj%hzpnwb-};? z-8luTMVxiNLQGzc>aGx99?(u+>l@w>OPTalY;WuRm0|C8%1!~#J3oQI0Y(TKj+#~? zKb{04^IUG!Jhx}0Pi#+aLGSPKogU==(YiI}XTrzOtxL*e?r~bVN&q$59ufH{@Tp<# zf!*x0S=LivMXW3xU%CkNf8rrFp6u-5x(HbC%w?%B%6&BIgXgskk`k6F1NskbZ>N=l;* zc4pQXh~9QhpqxaLDzB;k=&6bDb5<^4RC;3M^-QNY+kKXb{gm_F@y?@;y$nsvfJwdM zugRd`dG^&bN`rgwrItCu(@o$eC#%(&Q|Fl=(>-4v(@f#_FyYoM(Qj)PG zdihZZQmtjzBMhPDNbp<_iU!Ap{q+sH65yIdK|r5>N)JqGFdA?~du8-wS=wsX1nyUT_=#z@36%ir=nm3PX;G@qE5x4EP3U6qiC z#6riErta#-F-q%PsQX%nJ-hJha6l!Nb8DSAPs(9&O+?99!@0KHoDipsstvxnjmhYl z4T64XJ!id%pkk&(Cq0_s%r>jYmiE2)HTUFe0^#;S?rF-c@fG%g9vzePVGSFdj`{M* z0EXGfO~26NYjo?OikeZGE1qjKu%Zn$7kK29(d1Y^nRKF|LH0X4RDL-sb(-Y&yxyC$ zJQ5`zv*_7Bn%rH}H5=Gq_Q6-9Qn{KX-PyI~N64}wE|Lr;bizA_SSy%{ni1c&64mc6 zS@J@v4J%$_^@_gAtPlA0gRhq{D}R`-ir>=SUCpw}I?*SRu36i}a+^@&{ zrRH)cLr25!-h%3fU`}7iwU16sqYm!VL}DNznvz=SyQ*5Z2^a)cqzy1-LkF-z;KL@Y z53i`6b85zgfqQW+Jqw%~h`dD`vFAbjpqp(*~(zX8IqG5l(37NDx6Pzhfzdd6)8J zmF}!#TpQENxsGdvRb_U)9mx#s5_4XiZC|w(YnV|bJZkT*K_1X@G8>BV9mYZ`I+LqRB zZ~vLP-&7h+!cO*yRm?4~bsrLvT0FMAV9J>aWL9Adv3o+qn%C}MQ4A5Q#^DJz-hY+@ zG$CAV=2gv9W@(=qg)HJ>IHyq1D04L_GG5oDMP zHjMD!DrD!8T($oEFB3PHS1L~i3SAqb$m-`aV>Gy#|N3s(V7yJ|@Bww@6Qsf3p4MrW z&k;H2v%aEbmX_XH3pWewn7yA9WayI$t`zBIv2Be@+B;@t=tb$TRMfwNl?wbb2=Exg zD>v~Vpe_J43I`8G8S>o0IeZv`uXmMXko%HtGQjB=AQ$`yGS!M_Z2~3_T}%>Rj%iC4 zsZe|ySUpJxHUYOqtHVcHIW41SR>58mQ5^-n_^pqewa=9+_&x^n>TL5s%7WX3MN`M30tVcl2g?<( z+AYr|96@1%h45>`o4|#6jU{FXB`T@8xvypIEZ5EP^GgrUEG3uDfx!V@p^8H8VqxX; z8YoS4Q_w6s;ZBU)0#dDtXf@K3Vrma zE_#eEN4;MVoxZ}5TroSq+EKBUoAsC(7u7YlzM;*?n%{V;b9VU~UX4Sxt^NLIw25sK z^O9{To2?O0TDqG0&>*gN?Mcz7_1M1m8)q@5F%3HA&1;P8fY(*uW)t-kc*&$Ry5)N9 zJ}DW}&c2GMTg&YaXKY#yuWVZ#B_v<(sE!`_n5a0|_RD>wqxzOyyL-^8_moGA{!aG| z*#V_n4pJ@exd+Vsg|fbmDz;>g6Gx=ugIiD^SOMN6Dh zo{Z+$_~4fuPI+iPFe-3jsNA12SA2Z4-@%&{*Iu37+SkU+sp)4v52@Ggdo@8CbEtj1 zZlyN+w459inif0|ACQ({ZlWS)R{Q$B*LW+KQNU0$&y(DXSQ$Ji=9e%Ic}elO1c(ZG+eG)KhN%u()6Fu(XU%I^BCo* zzFy0UXUEj}Q=*p+g`9mDqoH9F+G5+W8uhKxn0%zqb?rq*3;7d9l=`MeXU9Ev?k^VC zyETxTH8jvl(QhF$n{S3nbL&>~mTQLDzNG}h+Qu1ET|=m$B+N=8`E=rBQH&dygB5K8 zm%TLh`Ry8?o2?%hT)Vo4W{4HUSUTt@=aMaQi3Qd0FeD=Wk&8(RPAM z)_QPiYY$6s->OQr>BDQ!sYTz1Jin!xdb(H=tX)KxmopEQXT|3+d&9_TBE1tmRe>?R)C+XFqw>EBQ^vdvGMcR)mGe= z`Qd4IndOD`K+Jnht1IKVZ9SuYg+8jwOUus_^Akh~mUnb~$3qc+CU0^kEhXw@qa2d) zr?YR0f@hWBxJ)n$7gvzr?JWafQ~?i)f_o^gr@rJTXe+sCB=22$e|AQ#_M4Bgm#dwX zJOcv6yxh38s5-{n_p2hNbHOJ1)|7V#QNJTNg!1rVOyXFGHOb7seKkfZJ3rye3Yk>T z%^u1RniZL*kY+U~(PCznmh^@(vg#7{#|mj}R?PCr68+Jo;~%^gm5Y{rKXk5ydIyuF z1{P8e%S-9V$Ff$m9+LFidpIu_g<9#!+?<2g%R|J%;CE>tj+TH^lfQw7k=bI_%Ud(+ zy&4L~`xV}+pIG$IUp!&^^5$AdibnB6?#KX=v6$xB5jW~--_157{4C#*Ge_FZR%&9K zDUDV1T}_J`4e(hcu5BOftf7}in=$<;@WFDSBmBrx`lQyt>EUvFI&!VDmm)L4!4!Ti z_!W{hCjV3Hg;q?9wpqmZESMqb_bmsd#Tk4f?8FC^xw(STWHdBLnfrV+-*x)Bw+gG+ z$DiU-njF=&xR$$+%e6FrzT^>;y0K@d)Qe-O?_xP#iNSp{1rNO-sE^InWuBHQ1({-d zX{yWRP06WyN5wQ`jmH+e-4;vK*w!mw8E^7Nv;}uFEceJ9*1G0)^KG@}(?3ofU)w&9 z&ZTm$3Yy<)GH>`}zjSHwiDk2S{g;Zz6>cKqhaF=~4m%%PVyZXib(~HJ<fNF=*BtKu=G3>EzZg66hgV zhq#6P6KtKrY8MwlB4Jm%IpW=UA8`K=1P2J*Cp?1Zc)|cUS`XZGHZ)R{y;~tz5#4b; zs1n}GCOABpqvCu?tlP2=v z9lFEM!S$FbZD&wm@ac-+C85Om^)k*1i>}w&+#Ah~32go4|G`GJ)~RYO#(_SvkwqIA z=ft>_|Na0fhApM(y+=N-?U$!-_N_(v+v{fExG^Jh7>#~Wr+^Al3&nu7k~CvUA1l?+ zz+z?sD6{w2qBbMNSy(gqQK8mQg=r72MfJe%5SP)y=rf*VILMVWwX&O{wEjG`mYq3$ zCFn^rGk3W7M8h}1dFAfW(d&~Q-W7JODcLI>?Q45lIhH9)*rQ;vd}mGL2ES%b?%oha zkB$Q?g!yEo#w3WK9J8}6a8I4{2l7anQi>MIAxjDSYe!-(P?W4$4G*Ez8j`y zUET4sAr@sXgRJ_^8`m%+)vKu?Z?wpJD=v*4R!U#knYCwZf2DlO40(NmMlsFF7qj^~ zKkYvI&a6toiQcG1zcbmlqD9zVou52I(Q#dyqO24* z<-58G*d)_UmJSC`RD|}{Jgci;>`(SLpr)6!&)EGQ?CGC2e-JI_*%shi;n}A~o2EVg)E5e8skk4fJJrf6 zV!R(P=sF?9S&J^knd^4B!O1!{tMlyX%H0VB%K;yq;Eqvm?cspb3i<7yI0>vvCDW@8 z`pY0p39e<+vsNwJ0|+8)DeL-WhkkSAe72d#csYN{^a5u#rCfgT;ZsjBg4ioMa)Fso z-k7<$TxL*KUtYh&4b4xlpA&;_n5{9}CRg8uWYxKh9VRUM^D!nj&Z;eFB&STzgr--| zSC}>HIQ*$do;|5t5||XIFt+SmnaahoOBM&3a|hcQ*=t4S$ct6AiV9Y;d&an3obdIU z+PU(>-|}2S54(AIpi4$(+ldVNx9RH(1;iIUP;?y*a`&C@9345FR^iY*zoIFo`70O;&!7Fsq14DbsAjLt zzH9lMy;ei0{0xTM-9fYB&G)$ND|9WkLA~Z`cAQYsXh-YfN(D7N>-PyW^K8ccgG{kO z?t=tNRm(=(u|*9V14_SC7kQBs{B3#d+JhM4%e8`8dh&*le9V;?m&LtQ>MOiN1g-%e zC_`$*GAdK)&Mm(~m_wn0GjkurGALbjlS`^M$%8%Q=ih@4H@KVaYg?@xWtMQHCf48Q z>|Ubl#N!6VrNhw9yz>H*$T&%rt{WsaGY?G9e{w%hFOyY?J72hYy`69)Fnu+zg`#3`LFdBzx3(+q z$yqLD^qhs5j~wgl(J~3gpxJnbc2;1~I#*@AJ8`uwa^NcZ7gQV#07ggw#A6AFLKwJ3 zi9o=OkkYg=U!@Ht`s5N=o<73`i=@*eO{<>7!gnLREiHY~*O{*;f3+IYt7)qRf) zY3`-;EHRRUV;a>}I6ABx21)XHrAR^#aZOBUiJ|yQ8(X_E5IN}=!mv>CTJrfgaA2KZ zh$J1uzsvm(+Z*F zIm*Wxa&!;t`7XC93T2hq&OOb#qw&*U>maVG5%U(V3+_D_+cyOVAJpDy)}@m*P2R(p zPfPpIZ(P`3GvcSJp=0vAeaeq4H`-Wyf_b}l*)oqFTatUXdT6likM$2bR=_?EC86-M z#{mEHC2e=`fT(5+=||Vt4S&}LX2}?1WZCsrZbXmo*V?w($>I8j#k4GQ7qRc<9T_to z0UHf_-u5h(55$v4mk6Iea^#iw1QDM60Z`$*bGT4R1#ty@7#PvP!zxci=HPO;B!y+sMNe}a_gd?}_3~rgIQxOAY`>?xNnDHb z;vss<7+d!8WU!9G;|1<|?alQ{P^- zG#ApXf^nY^dA_WXVhy#Cq=Q_`xD|@|%kH%j|I`Hku0NA*Zr#aXabsiOd|##dqGZk# z7dwG<0v_EORpW)^^ z{WG)3WwggevnI$)c2t{rDO|l$hnze~kYuN2s?nwb)X>+F!iKmATa3JFUbQ!g@_p5R zl8_Q~Kg}e)Y60IX`|#VSW!-X!&df4Bt$Xr!-OFs^;E{vPB`-bBT$TyWcvA0ITs2br zqh-llopXng-&Fl^xHRpfajKXIxc8biU_IKUZ6+U@9TWOAiKU=A&Zuc#dSBr9+jlae zeF@yAS>e|yc0MO0NlO+1mI{R1XNN{(Um6Ov*EBhJ7eS0&ZQ0e zj}Deqs(zmi)M5JnKWu#oJk;CY|8P~@ZV9)#B}>w%E7?NU5z02qEkz+CLJTI9Z8pWd zNHy8An^Z`QNw$QUl;z4Y_T5a`#=gy1W{l~7-242V|Lb}F|MQyHj4@-(Ip1?W=d--e z`<<3jQZ+QQT8)#QU%l&~61J&)y@NG5(lD+OGTg4hHL8hI29MIdt6KjNJOw z;Xo=w@B{1qmaJ$+8gb>w?Hd4o`2yUlsG2=Qk1xljG7V`0ld|v`C{rDQRe{ za_^ErZo1fWivEb!xit`kgRwLxwRP1yhM2uA?2)Pu!+exyONuO$(ncOPJp8pL|M^B5 zf5WNM-$|B1a~PftH-gfh(`T;--POg7@b%Wi_+l+&I!DG<6=B!YZ3;aZvgLaNOVTr7 zzMR_7#^a{8`y=U#)qMZrJS;V?F(g>c2k+CphIe9Oy*I?8G2!%uGc_(7dtQ;JcmyN1 zEU z5?s65=t z!WAE+>Tt4ye@k7!Zc9mBkrFn|nOnmc?PkJfeM0c&84EJ|@F`!m_w?iZ|7v=-#^uvm zuuID1>G18)iF?{>?#VZ;eSEw!)yc%5vxbJw!?-h8?2UEI{jnj{{-=0HJAbuyy~)Qx zC;jQ?S8sp$;9C39VUq6hxQ6efceHAzAZ6Faow`>gmBT};H>Bo*xWyF}(N0a_v}Y4o zOxh4@`|#($%lgM2h`cmWydV#W`lM)9Cl8YS37&4ZL@m|D_QLBMt^K`k=QT~EyX5G^ zPJ#i47SJ_4{3$35w?9wLE-pEe;6N%ZC@g=aUsK}}r&BQaZI1VL&6}mYq5O0{l{Yea zv$z`(SvN9vtGlJjcj(Y4b9Qokl1f8k=;+DrCBGn@YUe`Wcl#AqqczjFvXME3F1hbf z%fTP7v4iVsb+@5;u;(~D^_5PO4sLh!*KO73{3pDiRbu%NkH#Pz61;2SF3me-n|9pY zo}5c`=;Ogm5BK(TbZ3TewHJ}FLCi1N;*&_9mC#z64vkHC?J<3aXDeHr9ZlkMxAp*2 znpfEH^TfcLy=`mDaPFO0@bN`?tfZYQnar;qY>R`b z#*Fdz3<$hu17TL6_!GC~OVH)nGSlbhw?pQi1vBSEYp6|c$QsMKLG?@S^TSU_ zPADkrXN@_Y5zzsaLHk~oFMEC3eHAY~BWn$N%LbdAY4zv?kA8Ccm3XV*GEeE7fcSa! z)fP0^VSBArwsz^a&a8zcT}o@yyy`^wNSptpmgcOF$CdS5_jC6o>|XS+c)zu! zeEqg|G_}%zL3>kSNKz(sI!I@&P^$5`Spx(jd0<`Eye>}%J0O4I6v+PyONqjzL_u$z9FyY{oqG~n$&dwT-l!EvbInS_iBqtUUsI@&2>Xx>W9BG$~AuVQjStFF$@jImbvi$5UQt45J-_q|E4YW>~33jFPlJe}N>49C+S zG-o)>4#RZU8O(M&(~gxu_vVx*IGL;=pNVC=(klA!^mk@k+c57^wu@@ep*#GrWl|?{ zclUZGtQh-to499dF9VBV@LRrMe2;EXQ)Y~!pA4`#f$U&|jTc-c#96o<$&SP_Y)YTI zXQb1|f$2=+#7EsnhbLDtBt70CrcTN#^Zk6_viBWUF~bo<^{a{QKEHq1tJxoUsF7&y zgw!^C8cf%B`>?(Lrpu+J_!S%>hVL~GljXg{*RIrLiKpY!K%V} zhjA)g4A|hW13nn@#NGZ5N?AEG=VkoJ`w8f{neeL0GHrf$V6?u2!`CgOX5Tcnn}CY0 zTG*JYZTx#p?(mjZTmV)4W-TIY1?jaxXeHUO8M>>^AM|AkW&^kJHpEWmwPnWmXV)(@ z`V8B!4}Ef$iYp}5-{V$i!3Zhr4d5@r)^+iLDhRJt9~0>NsQOj~PpDY>*Ki~m_Pc<# zN>!dqD=%!@2(RL9QSI_cra@WPx&2Sp@#16vog&$~Ve{)?7x_Q+-r@e8&Lbtiw7WJp zt-csct!w89H0OrdEnSnhr`^9dPHhw{hElqouWsE4J{O4X;&r#Poitn93j1f>zLca? zm42nTs838X(feQbAM4*$NIXeSL^ze(#N7=D*Yo#c7q>reY|PTQvh{1%O!qFXKDVHS zh6thi-7TxO?-}aoYSwCoUwynjNcNNJ%G+nOh+UZ&?{n*FnKatRBYl@16@PSRJ`lI@ zv=i*ssU**wcS)qX_$BAIPNHY; z1#3*vBVol|EWFzGm%67EHi^VxW_b*4&;t2H9_+y?qHNs=x4@^6*RhNgo#FMGin)~W z+C6zKkve})d3KJ_X9GeB@!J_~<`q*sm=p((dlxQHBKNLhnYz=PLr>&R_AShB1cV!8 zj1mkV9zR;a9(Hu8%o%u}7%8r*qtwg^9l;qsA>CYABH|Lq38w6Um+qC{195f}T&*$~ zdqU`=PiV_uOoBZduGOGFi)ecTX+bu+;U1u1~mHlWC$0x$jA$ys%T>eh08ka zP3wGGzljv%(4|O&lRXWKFltSSwRL|pg}Ncvo>9s~MEGBtmdUb`BK4CG*e zE2TbL*u%PqrJ?t<;^S6vg2k-U-OM#c$Tzt=o6$L|Lj!@gI5eFHT0&}3FR!E~_6TVF zSYCDgCc0p5>@mTzj@H6h-B!tx$%2Op2yDu0ep3mDV)ulii(Xdk_yO5JJBuAsL84by zdgDBKv|JuKj;GVAxovfRl$c5-CUmm-Oyd?CEbWi3mQilsQI9W8b>y6?!d^ySYESnF zy)gQ)zURQ%x)O5Sy%zdC1-}=gju;oOQSLsMU^4ro^jfo2xwZR1RwnkC%U?RdA8y*_ zE!+>&S}0q?vO608+A1a@aE12Zt1S;pC9TjB>vh@zlY5?%^^DSQkU=Qhw5z9l!m1EFZObKx?6g( zue#mOk3XMf>$9NZoEqw6mA?;ycgaG&G_5DGI(6B^TkQr@0AK?$26zU~rYitO7~ZvRg8#kCqz zw5A2_(S|1sW_*?nNz!PYuSU^-uNerK=8a2u7-xu3dOnlnFv0%D38Hn6jrX-s{K99? zz4sq`PI%#u_PPCKs=UnT#uC-Ma6x}dFXMCXx+4tH1DTRuH$@@YCXo>xR{C!r5l+|xWXla>xinLWE7u|LTQu<0YrW66fJ21c%swj(;$QO1c|i@Kh!pR6V31g|C2I~MrSb2Ou7#KSR0A8${irXZe8du0$E z1f9CR+D$xUb8YE)xy{EB(hXW}b|ulgDc|TkHHhG4j+8q=_6@9PaI>~oy`J7M1}(W~ zqrJu}|I)QeCAGQrznvfMaZ*%o=*Vl(lZZok9dZgB%g~t}@5&nT(_*=G9t|F*zILNK zC>^@-sjIl%@8%E4zqAeID@t0I3xL_sKaK@keE zIH`VIGR+Kl0jXI;8a})^4#w#hpCs0V*{T+hq^qay8zST!4fkNgmC;h&Xb|P256pe5 z%l?@3Z7nExz2+$;_xoJ%`43wB=d4`bE(4`kW&Tq=Ux;#VDJio)GrY4E#Fwnig}Hf; zjbpWs?%kc48TL7cyCjQX-4uVgg4@H;C#9UoXA}Cf3s?5IJ7sL|;vgRg`iG}o`K3Is z)iw5gm^1$D_TGkB{QJ)7z~%e81MfAK>@y77#Sxvp?gJ~w$WQ!Q1zUE}lQ{YqLlqVG zO*wj|Y#ReCRXgxvv9iwAV~p=}GYf$Ro{PoU@(rgCt6o#n@8^A(t;1ij`Ezoo=eLTd zoDchl$SyWR%$*wn^wy53;Z|? za^tbJq(hY~RaD7FcGFW1Zu@sEJDFzdU&Jgl2%l^lysJMvux);;kONaXR^uY~>HZea z#pR=b*xmFzZfZ?^@}*a=`SZ7+TyY2SHtc%r8d`bJ+clUPZ~ZJxI+CC`w03#&Mo8^d z?p4HF(&>Z~0~`UG7U#f3q%yjuf>*=%l}*!u-1*vLGQ7Z``)Zuh!227@)0DB2!G(ZO ze=ofskZWzLjNLp^qT%6ZiwjIt3W@fqPwKG=VBm-Vwi7t5pfauoNNO$4faCSCX>Xbr zYR-NC!XtFxuWhmZ;!^s;2^wpes)!lR>C#yowNjI?8{tr0HNj)(Q6Cg$m}Vqe`|HuQ zzVP-yN0Esuf^yb64iu+lLr5jHi`nj_uiDqB!wr~r@wgduH>|@TSF>Lgy<7DsS*~rV#lpC9ReA%9hiCf|V^(?)cVLTvdA7eSTx{bEChc=ciFi zcPq>Fj$#bXI^@hU_ahA0G-V#WMc=3?d_cpA9L+YLMYhQ>!BX#ChiQTR)8{LWGD0|u zBerwJJE)N?ITJQMQG4o4nqhv>ey2?VqHSX>geNHcvvGlK=x}A5qBK*J=?jg2^?8;0 z1JdfhF7RV^ed$=M3S>lGn>msGW%)^ie*G2{APH7yKi|QyI^(#>` zzjaye((-8b4+y>XaONThS4?@ycKLWutCqa3mu6Q3CqrZ`L?Zg zwn!oE^dZM?b!k2JZ(A7xClu1O<2H+<#nEs{%STSY(g@-B!}DH~S^;aJTkEVL_gsS+ zO`oBZ-X^I-4Z@Au(9wTO8G7Jq?Z_GnqY8@8n%X~ zw;QHp%!lLcRp=L&?sGo=wt>T+Ws&Npl={6U{kZ}cZ0b@iB{FTKr7E$BZS)}S5UX{L zv;CZ&%oADHlXcjAojzZss@26GjqcbgMru;n6tA}Vm9T0joaz%?bz&#}@|QJ4%CS#f9(=@)x&ptZ>>3buSi?H1rpSl6f*)wSdnm zovzY9D$U*2abQ!XX^)ly@CbO)22JTrg_@A|OpuC|Ae~n^B~Ii2fYfhGpVSU9deuRX z^lC(H%H-L|nX)#y?{MN?NdNSs)W|-k-Sngh^F38@rHP+5>3N}#8T7N%6fdt3(hQaq z{y`8hL1m8fXyHtknygjLSl9blRjyO}1M)Ic*FZ-vTYo6bA7lVqDuUG) zw?JIlbAH>_D{{2=i**1wn)s@8YI~o7z#tX(3%B;s7;leq^YolI?B zvDuuv-G(2=@CY{> z7hF23)pu*=`+YqsKm~v4U3X?A-woWr?WZTqa&2VSZ>nSyblko6_sn_@_s)mg{8AFq z!#Qou=IR>cNAi%_+~{|kXuE#?cr^zW)c%e4%XwYd=(rYo$;c*aL^rIAaMqotM6YGF zc&qCl%gjz`3ohr;I%$bGuW`KBeqtB(r*(qnDnNvzX0~Xr*s!11@B!rmsDi5Y3x0v3 zEgR@aOctKRu}aU-b397YTjIynh0?C|a>YBh*5;?t-X2>>6pBRqR=&I`m$TVUGiBk5 z#R=%)`OqcPQXAygbU`$ITW;c7?BkJ+XVBZR(}GNX{>Fasq;1oIRY6NTuZr%RnZ-Qa z$iXXt^HaK{mYszE^tU!VsavUXVp}ObtAs+I2qWH~;>n;>@9XgUen8&MvA2%RKj&=2 zPJnGIDLClPn$i8plCN`jc@(h)K@bV^)!%1+3G;*&iR)%Ft>Y$8K3nKS<8+Y-z;2{# z#9Uq~4m4nm8iquyQ#Et+oIc)Uz6Ews2KiHgflDLl7RZ)eZd(0N>(KvdQa##X4nx|< z8F;rC`WB0+ViQZczh9f@vlmO2lc>|1SG*SEmj{i$%Sn{1|Gi0dq&9MQ&GP2?8Rrna zUX$G4c|lVZueX(y+Hta#rgH=74n)u7E66e{+z)nqwz^K_%kcT0~VquMz>*X zN=WP!!I(!#TjzU8O>fJIGidJ@#`BiEdT%vVw2kzQG*`90Mt66i0@zCzadc8ij#Q+R zjFC(?{p$cFcVIOeF=OPe`g*eu;rCq+>EoYHXYS zRi%^VKP<;doRqWVGJl2{2wwAV@Rral<`w=;WTHclmO`z6RK4ocKVl@*{j#hZ0QABr znoS?z=WDW<>4qT<8e9Yj8UNVa=>4ECoA2Ph$9*0nLx3@stB+ut^2hHfuiA`KWtTca z^lKguyu;>CfVwM9hsTs|h%?VwzMJ$ZLD8m`8MTP=5p?ss{ub1I*S(rC7EaV(R(0pP zn|9)&dqdF|I=K$-1}4{dB+I&+Pxc`~X3;sd<5epAw(gHNgc9<&McMhS=;bZUXf5I+ zpEOs4R_dDMa1DPzlt}qGw275jEPa}Gb~dCe@X8jxn4m9+;I9m@Gf$<0wA0zBhPPmY z71@?%8I@XR@uWuhpt$-2lHA`j+|41mlc@%zcG~f%V+qhvGRbf#NyA=TP>%{eXRyjB%Nu(37*nt45QMW zI3plTePj?ixZ-3s;TXSZbn|R9M#i&NT*Kb$SiM9=o6UZVIdAvI_gB z*9>$z@PxQm9_Z@&v{);Z1CJcvymd{I6n!8sA{k-!LQ>SM2X3OGei|;Npa>B22LO7_ zL!?=xK1Ni`?8P9@yk+R4+^cXH$tZ222Hl52YR@cd;}bi%8$qf$YgGvTz-ZPa(9$1+28I(5a@7w2x*$t_;WTwFqVW%&~#xEp;&A+$xEb0tfY)4@hJ z7BR^zJgjbwnT+`X$v}~%Gw;CVt^8^uwa{C87m?yy`O)l7mZA7m=sNA#vUDcXsgxrg zwu~+d6gYAA_s6UqgIySmvnyD;DQ?FKG3Ym~wyac6j%*8W_i{o{@ewaVvxr^`f@F{s zS;5--`>#j89Y-&GqmSR;1g@f23&yDOtfNQU$dn*-`zP)aZK~?B`YhE;xED+y;qc5N zPX06{ho3Rc)LUV+IQk9onEF-C%}t!_hxwV4a{!IS(syE>pV&h0>fE5l5o;4v$g_O8 zoX2>~I4O@BR^7DedymVYO=!hBIZ7rennjomYai>%=nt$a}+~f zO)Sl5=F)PwtuB$1`q_z%YlitblOHb=z8j_K6h%$7~3QU$+5sZ6J4zcem2BQNy&#>fEa)IfhzQWE0rR?`%vgW=wY(<%J4 z6l6G6(Wv69?djgT+4~Cm!;%-IK8)z<8BbE_}#ZMDE%B7o(Eg(AR9u z-KVO;R(*{fE?L+JR`++pwBoVbLR@xNSTW8IX~&L8kAOfRB=e!>=nkCzxZL$+hUPSe zZ`&uA>)JWmIkX|jfGLx|>t0{eW>q4k#{`Kir5--3b7iJ`&1r;ov6TulO{w3KxhW^M zis%-c$Zg&{h(kYLBd9h$ckz`}u#C+((}wn=^sK-!4^NA zssMQ9BtCkMnNg1BdLfJ|-;`azo=UYB=}`nZJx_k=N>(+q zw@6JDK9DMO9P&UNK*(Yro_QuIQXdh!YrkO=Js0dvBP-s77Sbh^T?F#ju;ilLYIh8OLn> zbcch6TPFC-jv9gOMvD$kbx--McA4G{a$MF-P4R2yQti^oHCbBI56DmaC5{e@bm2?h z`qSb4$D}{ni6&V{s3{S$Q`a#@`vY%n*e`n%b8v^*^qQ^-!NWBs;PeugvqR)idU=8+ zL`yhQ0?y;E&Uah9Tcfm};$&=7Ui9*I zSEdbd(Os~;+j~;R&kvRx?$+x)!u> zt-Il@j=o&l8g{Xd`CtWkc{R;2MJacRH=G3rZuZ5TiH82_JTmk82PyHmD?b@+nPqFSAYpx#C^qZU5 zzzUQm#Y^!QzHu4*sc;u&SJb%K=K~f{2(=wln2tSKn>6scQfhnq-t(pmQ_s^WFl9`x z&q_Y(*RJ?yuEn2^cAlz%io${Mk&jStGnN1>2rn%kD3|~+LxiG`u$$*`b)nNypG9Ng zX3AjNiM((`DO+5JK(aT4;KdNs3o1Ut2qKgbHvJtq59 zrFmh6-?}u{pIcG>VTfvyk*dP%pXO1tS~~e#%fwgw?z!Zm6P4p8u3+AXhtXGQ7Y4e( z*46XvPB-Up1(#k5($d*$@szH4oOuSNJU@CU{4w7@|F4Pn>Pur2%iH=W?OdBjjQ z8ol#=I}*|h&dWZ^j`KpBqn`9`G7HABC&ss3bb@n(#LZV3uuA-8AZS1rqTt%gX^us;yE5rPSb@a(^g5-WK^9_5Ha)Wrtg{|N-rh<@~;o(AV;#nHA7Qv#FhmmAB z#jMmBF2OxL2$uBo7Sfyf^%jgj{44`#11<3%|!(M8mma|EQ3(GuJ>4BD>Rf55` zINN_IX0r!99ZpOW0%X$=VGC%l>Aai?zhP}ja}3X9aKSoqVlXnPEc4N6r*Q49k2)h2 z`^ea;pl?la{#z35E#2QkAL9|D0@Nx^WiH_T%tajHrI{*VG6$zoq)9%T2vk<%w$Pj) zWX8Z;is3OC%!8Tta|{S}2%Em?fNHFqrbQX+i=HDbVPgZg=TpfvueQ12;Ot$fgzs^+ ze`%C=37E@FQ~CrxhJ%E0@IOV)FSXAEQ;9_DK<({y)eDn4HHDo{yZsOUUgef$^=*PD zz2vbn@&kgRH*_s$GGBHp*-Zs-T2tt3nWdMD-N?`3a&}$4V|RnMDxYfGwA!^ydgSf1 z5u=lwFryVU#XlflI5iIKRKugNX^4zTl@*MIhkl7N|zUMRu?hidMJ$9x?4hD9-%((KD&*T(0)Zs>8FXo!fsxN!rXBc&z` zJ#kin25O`ve94r7SGT^=Pn}#Uv5=-rC|M|-@v}wexGr&PvfTvFKdi3kCgzv>w{nrS z{Ky_w7gvtNk(CabHWWBq*00XMBYNEWxx}xqt5~~!EbEi1E&VURWA6$Vc7=+(uqjaL zFv{Y#pyOEt2awv15H?@i5MWx1L;Ia2PKWoAM-V%Y5&57im1cVHKuJ?7UC0 zYC=@{B>a;tNCFi2fDstsw65B2v=lpKv@wVGo5OlisyI}q;d`}hm4S94C-Gt52pZq# zc?gNPJ^4ME7Q>T;>b@7${uxe)uq)1vAqd+dCM|<=((|F>H(0geFY73^jP=cXI#U9= z_zU*+nqC~FFNeCI6Z`qYGe+j4?CWpBnT|1Fvxh)rTN-)Wz{5wfe;L}Wm?4vPZyZvTkO!~) z!qrgY1iWuWO0H)5ro_1xcl7wxcO&F%&Q0mO^nN{>Xi0T4g*HeyL90}8VUIHcC_Ynd zzq!(X`^&LQBK|KG;<>p_mqIJ=N}A2SH_h*;aKn8T1HBc;26Zuq`xq@Pqj}Ehm^V*w z={Jt3+q*+$j24UNdkpWdZyFjJ3ZBa5Cx-hur#nNPZ*bk9FJb|2_5-y8ip`ISMd6eP zoM~H_cz!Tn4%6nx8>z_>R94UnN`09Z>!uAD2u*_ZZ>7uJ#GGn;Pnetv$A90}56C&r z{ynB$>s47~Zwg90bM0yue|wUK;GY=aH+{|1%eItMaJ5o2i&2!??T9(%M0%x#@7!#e zq~^2yu!O5C+oG)W>gxgIgif({a1cR?M1k{W4=*dY;-o-AGr5*UT9qp_N?ESv+9HN& zr}?ZVFp2VR_cXasQI`+*Nt^>HjenakZclb*D9v<@s=5Y~0Ex1&&K21d(t_cBnVSMu zao#VjjHVPC37M8rT{>R6e7`mr3G0}ezW085vW{Hkr=`AxO#G{zL6fq}FX=1u4H<_v zXmE6^xI=iQKgTzyMw=|Buj8HNhLz<-hn_v7OFgKF^J#DJRKIjb{gRs+Z$Gq6vrXAD z=F9WSx{H6>?R+QcStn#s{AqIHuFGLBQXfK3JGs;K{?zD8sW|UZbGy#BH_jya(j}2@ zMfcb|jL(xepC@nU26a)EW;TbK{K&d-ey&Nk(Lt^Y-==OiRhB%hQu#C9YI54G;kWft zTm6d_>h3C~q~ww#C!A2Wyuq#PAfKv_L!9R5d=jyfe!eCtq|}cq*e@55xO*d#6mkji z^U{j;hk-^L;8m(x8l}w(e&P^e6V&|SkTCh zlT|q7b+4u{@!VzfG(LdYH+j!c&Kg0<_2xLY!wMVPH<6FF_p;@@SLvc0zHNST_rV$q z1>?OJ=X^;;1Uq<7X?Qpl?sz-<8+TJpFWMC21-zOWK$-4{2j>^v}= z@l{l8XWag6yK0#aD`e0e+n`)w-mnP^>H=Qc>#1=1-@cgdZTa^P9x-klW#7l|-^^AX5_alTAO)m9}HOJxCvuZHM<}sTK#C`8uZO`a; zc=v~QyLj5n$4oc?d6(vU9F@P~mEB^g6UYm+H|dw!KmMN7C7Qa+*ite!R`_gFXpMaA z12GeHhD&FPe?Ys+e1Csxb5-1~!h~DaZUbK)d45=UuJY&kF%{Ie*y6?hvpoZ&boy{! z)3qk5Z1&>$!D9dY(PiVlE9W1lu79|oChSUli6K1PVu+{knh2lQYs$9vJ=HPKUszw$ z_Dh-OEQOJY>PF8$ROlXiGjU&afEK&LwEf2H!fsR-v@to-yzQIHPMzGCwcm6Bw1#wd zGx|Lj|K))U@dT6d^YZAI(#o^J;^x%QtjG9ahkOw57xU!k4AlZIt!=>@V~cZhI`#&z zrb`?LBpX6%BA)=Mf?^a95CMFvLLw0t*_(oI7Yz%V_S4{_C^Q4|1pn*0pU_A z_0RI}`Vup>{{0z4^sc3e@2r98;Dv_wn8V+@51pMfU>F)9^QXdGv?+Ug!R1zA<4JN% zKIH-O)=W|CT!?2%&cX6qME5-=s(N=6F8kh16@3-~vNa-~6aif88RS8_1bp58vWJ^z z=YhBei?S}uI1#hN#9vHYQ*A7nPfiBfhr!CWi$DQhnM;Ee#1R~&WAZ}85YY~zgpPP3RcOO?p@@zGCT#(Q%hIF z0-EN{-2}=_+xn44MAmj2-V+p-K#irZCS>!d%PXWQo3@9;Y^p`j4Wv}`slQh|X(q3! z+-V`Lqw5F(cX{b@kpv68VfS!P9TxwJzN-WRkvMfyQbG|71dzJ{3JK3Z(n91#0yw&B z_9@~2E-GQyd$|5KB?t4RVP+P_8L6}3M~V;D4VSZRW{-Tl&l3U5UTQ-k zFrum$SU=zV*;Bx%*B5PGOpi1qYf7dS)j1Bmt0_3N_cA2vzb?2a;2sTdesRDI@YM)I zp*=?w64Kthm4^dGCCw{-*q}pgkNh*QHcP=#CMA+dP_a~F2+*jJ1lW8{A1m%_uB@jB+%Jg)h8fyj>j<+Vk$sFw|Rw_TA&~1QkO5?9BPywRME~v71Q^4BGc4)1v z${Oj3EnX5+*9644it>PQ0r(X=-3Qd031GnEB_-sAK=SZEEfp*a6AKlQ7-0*z6lu3x zw`7uIlzp$tjTnp62cq&~3T6LkiLl6mw!v@Xv5!BxLifDlkv?Ov#fL`>bs}cDvdG#IcC8^L zsIx9%3u)2EIcDI3LG`w0H|c+tV)xytxy$7V!Qq4XAqE(OpfdEt+s7-)zeOG)zG)c_F z?GF=Ukv>bauTr}#qS|i9pR$4oi5yWn7^kdJ!+>jQ_;r^bfaOr#RH?wuRybZ;Z=W*7QM?WA2yv7YD zuSNsU{&8yl6JoMQ@0#@G-HT>cm(@-Jb&O|#w^7XOnUJFJt>eOfNJ)yG6uuz#(9IZ_ zuK(45oP|`%p(|{slTruBepgDJEY(k$eTsmH!i^s&T-n*B}0b zE~RzI-qILwcc!-<5KE7fw-R}w;3@=6o7jO8Eys?=meZdHlFRem-0lx+$NAWfkn{CR z4|Qg3U94K49;(up~fs4Ndexi>%cgZKBh*gW3& zQXUtazBPjR_JZCDzVrYux_Q;-4vyW+k7R_>Pb_R;5jpwq7l$2!ayk192Iumpd0Q?{ z==Rxg=gjtK{jAc;!g4Ib&v_slew6L3`gqo0iEJPkGDk;b_ zfXjIn0iOTkIRCE^f`~l+@cwfjIUzRIzM|-Kxbs8L9g!J%;6;LERre2*+6@o1*ufjW z7hSafHACXspKfD?KNs0JBuf9TBy}$TCxd*Kz~+ZRt+rxqcPb8r0dkpo+uijiM5dJX zp8IV+%4NWE05uWE%DjPke)Y9&y^p^bf#=m zZZ^^sQJUbUzF@aMe0YzXbzuwRyIEf#%J-h`%^I2W-$R`W1PX0fG1^D7K!C;Mfx+*(eZ36SER74bV z03sxOdFR_mK_Ex|D7G}Y5_6{D(AAqafYd^I-0wCEQJF=iXTF)9bGKF;Gu3yodsipc zUI+D*3~K+VbgSr6%k`{6?aTqwv>=YDDdNxvQXP8Em)^Ijs^yu^*#SB=TJdqwODMFMeK!BVzCOw z!iqwY$ALD4u%v>UF%Wb)kg$`zhd?gK@7(`)6Lyt^w8WkEmQp)dR7Zpw0HK`N2oV5= z5Q&$EKoo#H7UWQj36Mzn$DMt8(`MgjvH!kNTmQvu)`_F; zXJ0@-Z?#OiulPwwzJJM8Q>dDG>?r@v;s7v)z|x6Wm__YaNKugp6W3=DVNeDG&;Dl< zc_4Wtzys7fp+B4T{aSk_)+{C!Fatrr0}xbFFa{ga|M&y2F66BsAVVZ7Y<%(*5Do*c z3cJ~nw0{|>SPvX)p>#F-2EhkU>nhx@I2!acRi&q`fIj6r>)G`nAQEiN$|5kkiy&x{qz z;I_WJ;osIP-hXc)cTpYZ-3I9?c2Jp`ftfGO4?m^_pqJkyuYFeo$~nE>Hqfqg4Y;jt zn>toA8|ACr97>h;Ecg0l-UeMfQ08>4{OY&Iy_dAczS^mHsyk?){?e@PKN#5OmJHmj z0FMHT8k1Co*^m(@zNu7fAwcM-tBh)La(&8EK;$Ev-g%zKPO^hcMz_i&>Um&@Uqx}c(H@muid)V0Bv~t{vaGKC8TiZSLZ8! zpzol^A}7_wq7+ONh5zN$2VD_^D7fzQ_=1{PEY$6mgt|PiuOcsiLSUWNGleVvtVpmZ z!8;*4Or0W<0C*1$L<^lt0PJgEO{7ASF5CgTGemf=y?slfaFw=W6)HvBdfsg`b#TH? z`**YXpv$4DFYT^d?!6{;AIOw_?bb@oXgP^?E)91K9CqJTP>L&(BD!n0Q=N6$UUeBa ztDmQZeF&edStsRpw-~uQbp&mkZvN8QJJ?VF-z;_g;&gG@9$L|8W}|Y|##1cfxV)&P zgyt^$C}R^>K(%5A^e^KT4#XxDN?nUm6n0aQI*@7xJtzi*2Gh(SsS=9U?f_3q)GWrz z4a`p{aJJNTVqmcST8MyY-wIdQfhQhNOt>Wkh!G@CgMRK__e|UY4mE?!1_DCAhnA#DOV)ZV~?vJh&=!<-!ov^0kZ1&=_p0W zJLmk^!l|s$K~U%eg;Sf$pk48 z#fvW|?H?8Z<0qkPd|4Ba9UDU+pu_((fQXQ{1h)F$CIaIBe=j_k|BA*?$X>@cWvvR` zK8&+vj#Ua!D7Y2CO>QW-u@jzqcs3+xHZ~sXESLUGTeXsic0xn@&hTmts+6(%I<+c? zn|*^{Pc~B$N=q{w&gw5r^$g`w;PW@Cu#6=b6b<{zIhOtO>|t0X;MvkmujWaG|s7S6PK-&r*yy$m+;aBLi*-JYK zwH@_1fOOoMvL?3x8=6Q2P)fX|aJDtwtnOf$^7UHJBi1G&6+R>Q)BDzIJu5SlY6Fo*XHwb2 zXU}wJS1nIvJ@Wigl7ZUYUcvC)T%EfgI01aIp?c`R_rq87oOy$%{n~2x6*){#_6_$B z_IJ!qUuqI3GAB67pQk{A)z(1?k<&JFS8D~N0~<`degP_wmk%8znP#l$KoxVcIQ zNlK|D0nP~5lj_~a*aJW3 zY64_}A5#)Y#Y}VTInyH;U@}+>F7Mwtz?M%rBt43Hl9O5io`p5jz3hf7-vU z3V6xQL+X%K%SrWwE95vh+z~BxxO`krWN%yUwruoaE~G&BF&01AAoBTWpX%Ze5tax1Ee|cOGpwb5L z-Kl@ScUw`u*ymVzQ>*M|c$&iIlFsd7>)RlFX}{hQr}h4l^9^!(nmVgFWj`2`Qq)9U zM|)!)?B)-BmvE^p(L)Thu<1SSm`Wbna5YoDdWEydey9eMa* zmB*((R~V$Po4tlxxm`&(1JwS+6bis*s|-Z{!eWz5B-ACel1vUl<5b-b_e&9M{DTZGO7m0{_5v zQVDdUW0R-`gR0hcM%I_%gR9@ED)S{y4uOBfeOC4j`ZW%9oBB4ufBueFQzC^{&+KN- z`v$US@9XGF^Q6if#zH>eTpUiA=F{iGaA(41Dp_x8+SK1$#wKN6YrFASi+oldGZHAW@Uw@ohkp8~Txu@nW>74D?r88HR`z3HI=Kz&m=F%NBpCBr~pO^*zyCw;{+RXgoI** zJRDS1QWM0EpE9}q)-o#Z_^DKj9i66Jv4{kD#iZl%!XD}#h4J2H9~P1b!{q*q@fwee@vklLvKHNdiKcWkJh_HZnTNXF*+U+ed%Ahzhritir>Vt*bg z6@m8~8Qe(&`5>_!P6*?cSgChN+3+DxRVmFIMUGaN%-YX4?^0M%e-b|QuIYI|-@vNP zWi=D4Uaiz3sRJSr5I~IiUrHwsNnq1Xs!6IY;0hlb0C)|omt!F$H>Ox+w&1V z>WxN!okb!tN+VNVb#zU0v-Bo?mrLH~J}4FK_r3Pp2`%8~8>;+vIz6TMs8^G3Xu$kf zGjU(wmCb;Qg;NXRGP@Hl#%S)khN?TGZa~7 z?AtJA>}8i^-?Q(8?8Y_=vSnY#Hr64sCtHXR^}l`pzk9itYv%JY=f3y6&w0*!o|8C% zw6w35%6Lp4kMmJmk3Z(m;jEeA!npTK5y7f3R&f$#2k$MBVvZ%ONTG@jQF3g@d)CPITEtotXOP>MZr(0WeHp`?~aKnF_HrY1iE~QN@Rh069 zVT&`}%rB{g-1(4EW=XLBCUSL#OOSS6209^P)XoDI0a{1%BwWg~d<3`xp!+FsYXIBQ zQ_-CR){OnPo#PL`4F>b_ztg1;>UkSa6Rv!N{$911fc`;RVjB{SLxq=)>bsiOqkK~e zy|vI*{jp$81723F=GV;eNUJD9YI!A7By{o~tnyYj8ip)?CjtjXJ3=V^2qLy@In~YF zZsXt;F`jVuX60+f^zjG;GA`!G;b|cZp6P~p==AO&tMTOFuEQ${lBAGn{gs~-p1F#2R{q}5fZ>=99Pr9Jej??Zyi=x%~( zoE?!BZ(6q6oxuf7`>|;;lwrj@(cFbeT1PutV7jXN{#zVM&BmLzC;YV~q^f|g*0Rao2wWSl6_DYD7Bn2L&2Z{(I|IZj1u{M1{(fKQHK z*jE7+%ZW?i*oVzMHDdvYSG&aUcehKyJT<9+d2gHp`q=!l?Kx4Jx94sE_~7k7M+}&q z@eWPoI~(RZ_v84(Z_wO(r~EXrP_V}GM~z_oy|f^>XIf7$bbv?-wX6q_Juc)JoaUl# z&&TA(`%WBd?8Xc3*S%*-jEn~wdJ=@S?2!eB5|*UO?DXG=1hxZR1*QnfM0(qyRd~}9 z2V7F;C{gERBGU!)u!vy+S6z~Ebz;uJcuJaBiNzQ-FqJDy)hzb*r)6ldL?-98m8I@Z z@)oATtFfU>*m$YxP0QX`+U7xyI;rZl&J2SKu1o#c7!jil(uQ{z^vKPUlwxaUb=4ud z+{6UdctS?tg57p}k}}!PmI^sIl=^va2rN>O+QnE56$El&;P@Y3r`j_z z^<+MRc{C=#LeD|=0G|^zLIC0Vi1(`yZ>cU?<*&+mH=OA?lnhVq&wP?Q{Xi-`cPF_v zoK6+0!84YmO!Xc>(*G!~j<^48`pS*O#o!w;0FK&2h%Zdrm~nZUK*tLaLQi|)Ruvj^sf8ml zSO8HxyG77RO?samxi&fUjM9%yp@mOOwF((~Ib$p%%6y>uy!I2sjM0){!<~qq@jcl#W5x$a2#OW7Dt^_fJ^9U_@)(hmITeg-;d^3J{#P zEc;=`?B2&!-@j5Ohl>80i6GXQ4=$&O>x*PC`@&rv7QSt4IUpxyM(2hIm9KTADz>h)qQ)|>ds(nmKV2%WXg?PZc z_td^We$e(b5kRq&dLHC>lLK0yRVr`F&p@_-^P&DvvfVe=xmC5|o2@Ja{y%8?$Tvt-vEU>dT2*XxJ^3)3fEhKBe;?VH$K+YPg z-kV8<^`etjH)nuBE0{=btqoLUQ1B!9MJpJ4?b?#tjS0O)tO9mX4N_CBIf@u|?-}?n zDGw?4L&yPec8cE*^fzLjd_Tl_=I0o^_s#y5RHgix!Qh!p1TNoOe82d6d z4fK;wc*&5R!vOt5%(grt?tRVl!b@!Khd`}|{~zd{!=!E+K$;DScYq4oIo9h4OFC5` zWs0K$s87J&w1+8ni~rm;wK>&)j^+A4s`jnMv+{70dx&Rn>(0dysXFkpXV!=^Mzsii zov=oPU82&EmDQCgS7lApUNCBcam;y4i9ABV z@NUeFuyn-H&dq)x81ZtmZcpLz?Sn}efh)$epov7z%%1*8J5_5Tx}bK>o!EN@f}`V& zK({0C6?Pd{0|PTBBSi)byCFnM%6aqaP*F&li_IveOJfoY^{QH(nx3FcPE%&bh|Lo_ z8H+xgSTg}7?Wxv={TTmIU!w6FzI7$pskxQ2YX)v+!P~F!zYZW$KM5XE#A8aGyBNle zK!6a4b#+!?`A;wI{O5rIvjLk1O}r|C?!2&kuGo#Y0S`J$!)Wpz{rf}hheaPyFM7-T zpN=L~9O%FIPy=>9cdw&O)%1nH(@0pEXJc3|&@m*w5s`K~QO^>6D;O>Q!V_m81kTjY0rxIun8Q8F_b{twi@eK7{6vt4GRy~K^ChnVjY+#OGl(k6Btv# zf{D$>sWn!lLO;eMWe3Nu4!70&Nz10sz36c z#pF<^FsGj%)-T$`mtDqfeM5+~em}nces6M`n9UFlO9-?=_j%_CWL&G>w%gkCX*hoE zw*GU^DxGW_y7!j~|HJ!K``m`Ss=M#d@PYiAPu6$Q@7v!8?7uspw)Uzvw$PiqyFfqZ z)9?Sx`TrYD(7k(MtOKtoU6~IBtiu>ZZ^z^4f%jcUc>BM1Dx1^M1igO`26Fx`{7@*|n<5U4do?hz0j>w@G6P}I({POk@yU3osg1p< z6TITte`dFki(KsYcpAz0^b`6Sp5M1_ zPZz8?F}1&(=~b2jHkR(hrK2!j`_}C;hvI6C@qL|nmY_(miEkY1o;gvzfvMAe#j2M% zO7^#mQ>?C;hk=!mnE@}P{wQz6k0VWN1zTg&nZS(s%{Ig0W)%9(H@mBL*hA92ZZ6XM zWSUUx*6C_Rv8a4MWZE)R3+Ov#XMgNg8T=*7<#e^hpgL4%lz63X2OA(1V|u?o>g|7) z0}j-xVIaDAo-Yc%@x*4GS9uoZiPveaLjn3J{NGE?djLfr+T-xMfEwAu14RRliGLK$ z|3*AOR=j<$tO_It1;K*xLU$y*O~s*w^@WxPpL#2l!GeZ*-eotEEO_<9BN52)UZa7@ zdk6<;93-^~iDZ-zLj$apx?h$_mfygyZj784l30kQ>u1@s%2?`7;M}!n&tWz;M0+n! zfF5)f^V<>7c3SfFVk;kE37R7^LWZq5SD`Ed@oCOFwb;ePMg*S6g)(BNOumBdD8|Et z>?y>48zA@ti&J(nUX>X43Jf^{l_79Ld^w_zm%ba5ie*fm8te7>+JEa4|1GP|Na2U% z-dM!~(UtBDBkF;4NUzbTQv#O;vNwko1BU?Nz217tr0)!Z5~ z?F1VcZF1GstSnk?%8r?r>)6`amHnf8m9yN4BYkv6e4LO62nTJruBNhzbp*Zr9|20! zxj-MReA&R#NLO}W#)>J=fu@HMMD-XTI{-T9?LXs7Z_M}1V|Ta{>t_)7RBR~~wdEtA zJ>!3q0rkDN^mKThr!_h?mX^Ix(}~DQSzTiy!NDj}ZM7G>AOSM0H%1q6-bk;!g)JPh zx4~nLgGf%y;Rs8l5CoeCueQdzZEj$`Qb@jDq7HLEn`TtsFUK4MwN)e1xxCZm8;9 zBL(f;#99|y;W z2Z&Rt()0lKrGn*+T)!P2q_vuD<;G!3E?}+Zy#WQ{%`ln|bg7Sk=pT3uC(w#0=TEOl zz*3V1fXxCqoD1o7T}r^_6aoQU8Bk~}DEz7Q6$XP=c&B?wwJy6crxW`{>y z2O9r9CD`7i2&dJcyqX-K@o7 zBPBRT*;|BO>SZFV+b=hjc+V@8q%e0i)r?@$4l1ED zh>5V~f?e~WcbR{ZB-Vd;Kwc5+O)$QZWGg2#@Uu*4T~b92#4|`J#ym{5gU3==j9*9O zvW|$(e?$FN`cobr3+i#`3XwfQjQ`Q2>vY!v!1CWle;Z2E@fMg*!*2t>Uk6sl(16im zC_p2$GhPHe`t#p-mZa2H7(o&B4t4}_STc4)9H#%ST0*8YOJ_vv^9BhU{rVibz_0#sd9tdSz(cg`z?M`33_i9>FGE-{|z-q{P9$bWdx4jv&phtIx8JA#UZvmvd#4E3s zlyFsJnUq2c^*Ve&l>eC-$7-JmK~GA6IV7jBWo4mmoIk#y+?{Plhi4~%E-+)1kxb9w z=|!5LIOca?Fnw^Ykt$T@AW~0E{NFGIQkoztL;VrnReBm#4KV0NxH1s{t+7Vi&pEnvTl>bELYvS$8I9NVlU6r1-!!lh`sycPvggCE~3nb=_s%P$zg~7%uS0;WEjUO^Z zF7!q!J~q-3)Fsu!-a@auTx0h-lovYL>FebR6-W`1kJiw|@Q=O-|z@3NAPfD5h?Zx*W{!##j>m1d& z3)Fw9ej5X|Xj8Oj9)GEPoc>Y`V*#Duvs2*OBp}2BXi{3~uD#Vg!m8wdF580)V2Dnc#g1#Ql+8qA; zbPCDL_$Jdl`aP9=e#S56A|9dmYQZR~#rD-~eb%PH0O_*ym1a3X0mvUJ#;DE4U$)ub z_h;vPGPK>iwqq4W)*9r0d1Mu3vSE;4^jHf#nH&Ga?~x$O(MEhHF3qCmHRc<#Ay+;h z?%x6DRIYm`dT$V3b6fuq4=LN6Kwj~VXjAfG!fE^{_xywkFH$3S7}H4}pDFqT{i5Fn z&GOZ;IN$jkN~QAl4!Oet!U+MV)aRdLwn9abxt|rQ5AT+n_&>qe+&zQLKk?+~Xbdm- zZB$|b6QP*M=|&?Ar7Eq~ds9z1laX*ky|cMSTQ9A28*k5~uURP!G)ymXS!jg?zQ*!j z^*g$AYfVEwpt+7;1=&9m8sHgYwvNf6%=uSuXgjCYY1DkA*5`FI>eSq=DcPL$C&PaJ z3RtveN`FFRt#i{F|M42J)7IVNZ>NynPsVy52EAD~fmw8u3s}S(c@1IDxbM?V3)@Od zAhYUcva02j-Pau5JGR1SGWlq8iut6kTgxOZ8+Ij4DV%D7weQF9;G5)s4AW zJZbp+8)`h`vN`OBHLg?sv@zF(jX&Y46{y{QIpN?ZpoXSKB^e0vzihaZyGpLT;1&i5 z@w(T~!{@V(cR+J|Z#+7-Kdu?i)$a{T1a*9%cW8L@aKJxqLy>7QtD9hmeys)hO9hjj z?8x17>=;?^*0v?QQN50A*jyE^N{`7(D4Og49TU~KFDj;!iCJC5=nQ|9*O%(M(-ie3 zYO6kwt6gEF=o9NU(kC~2)%FvM3&ICC*gtrcZ{W5^YUxCZMEJ#DDripSX12740Ph7Eiq;F+6dWaYuwxF*rVc5KEnSDRnW`|fIFDo+6feox zyMfl~N;O@*w6hki7rI~BWSx?zvNa!U%}S7yAjm1RF>}}?-7XQlI-))@ zTWr6D{G9uKEbfN$tdDKMpU7)Jdry3{B%%Zq!t#F-mMCO>vX*+dN5l6dcni!*BVV^` z48MWj=s9a)tuy)9;&$tW#q*}}`i(X#5QpH+j_yDXtqs`*}Sl+|(4}F0i6c75DOAWzu3e_f9^J6ZCSb1*A%N^9+6-u&$@sv-2N*n4kgano{~-@I!%!(IwXIEGd% zx`NUN(GTf+V1RQ`vCA`9%1f2?Q7MW#lkHseM=A|yx8f-mB2D*iX}9qIY_W<1EAqa) z!*4j&RN9?q&(@`7W#)p~Ty!D(6>F_3=DZcS;yDCYJ9Sj4O9!~{?g`OB;TLCkZHs2i z8%4qBD`Mq(vGI4B23AlR4>Q@EB?2<9Ebbrh$*Jxb-tHB(4iiy1Uk)g~8y5AvJ5NJ+ zScyOJum8?>Xm#50lX8x_v(hWHa2W}d`8)-&pJ!*3DJ2w7^d0kv8$!uyLbSFC(Xm+76QQo^4LkvHQ1g8xj)4oJD$Z znuo%c3riN0!p-HcCj1I*Z&@clNT%p&Tk(^}pnfuGg)uTG`7XEjvg0>uWfG6Ne^kNT zSd7&3wQcYH;lsU!CnV&)M3K5>e*L+h-TI|n@4!f2vmAUgNM+U8QqC=czL!rbt5xou z2hA$(Riq(mDyuM)y(lKBVnx063GDObo4W#Jo&sW%8P!*N8i(VhMWq4vh?*!PAqRn} z{;gDRckl)0DtHN6(!8PwJD+-1R*_^b{L@@<9JSHt z2Fd753m?p}`?g?l3gg-F7&6Ij0h)ur2b6AVTUTtMOAhDjgWaR$bYB~qt=NY2e#x5t zlC>a*YhbKTlDq1bIIB(TKEbA10@-NXcI>~Hn(o2i#li0;|1E1zxO;@9o_IDj`RknWZY&*evV|*Wvx+zd_!h9vi;?_aIX|9%EnXAKnZrIC!|XPDNbpA z#VueQF1d4ba^l+E*-p`WS=#hz=5XwHsFDcYlDosq%xY&FMQP$ZmH!Si$mvw6CbQRv zd(Oi5`Y|ci&@Vtx?2ms~Db&0X+gY^aB>F9l+2!&;jfrz~38gUVfG9wlB%(9($RiTe zJCCwyQ17F*`Ht54e$wKZGp*f?|4ObQf1&s^40(7>p(v=&q?TB7)U<5yr)xNtbo+o> z*kLS2NJ7Xr4?k(_lc-)FbsR-6)23%L{p_kH{-uYk$EhF8>rzS51hdm{R^e%cBUk(0 zZ{?9De+JvCU#BsRDU>axFMBL+9t_!R@7Nul)kA{QV~X@;*EU#L{hu%=SXnHQg7qk; z)3+?p&U&T}(FRNfd>__dXIhGHkt``;+``r32da;Ye?Rk-wzZz~H|J(Nq85vcSOsTy zfpci7!?y(#2DIHkUua}3Iiy1A)Z3zi*>85`2HjVkIqHhtJXHU1f=q}Fcsa)$^Ly|S zwCq>3Ghr#ZSq ziEN1|4=it5HMXWF(Qp+jpJvJtzd>g5;xj{zt$0>|bkk8p?)PAx(Zdi`7H86!+HXT6`{~F>45{jvG|v z)p;+&uVd~U>rrgJ;K%kJwrr|=g=%te7$qA7qX!)Br>V#E^OLFGrN>K!Rqt6XrydJ2 zY}>l5yH`Qe~EST=k9X)OIH?AQEvFg#F zIqx?2v|FSTWD5_oLWyC6WEvqk{Rd}(;r(h9wGdcXo~byrHI>WpQ;a;+(FID&ZjKdx_6dK*d6A}OWp%l8q zaQ0R|L`YsuZ-;8};uFW)zFXIypyH72FM7WwD?!e}UVm=Kl)X9w)m3huA$33KREw5= zG_&MK=QprC7A=2pS8zdQP_%IWZC0+FTR@Iz)&!#~U1Z#a2#c3?Q++n6K~K7pEj7jN z>hwd7WJoQ6BWfwl!JFU8t(LIpTG-0rru6c1m*a!Ob0UKQ4t3pb9|fu3 z3+tf!#naXM)K&FY_&@CDtMwzRL*iAY>R04&aaMgtI4Q{Z9nUhIpnkNDB<==0$|m(g zzsud>e!9Sl`BqfHj=wGbg<;|Qz)`2s?kO{jnU+!JW`LgK;WC@#*^1%!I8>zSC7L;} zqboc2Q?*I1lir^*I(5kJ4JQW5t0K$nGxNo)j`HmC|Ez&J(d!9@HCU@#v-`1Y7B6Of zf#nwn^i|9q_mt_Xl7|GT-J1pqvaEiY`qd*BuWyM9PT8|^+~``JuZ~IAzspP(YhZGX z+S`x^kv4l(V>6*>A+Oef&4<~W`(Ltsa6=w;D2ad!(Tu9Bw%g5@J65A*2EjK$wR9HD zZ9LW;P0(osJmLzDB^-HQd{*XY6K4mWZxz5|{VuA5K%DkZwN*rFqzB-KO!K6gQuJmK zqYkf8M;?aR=|?g(>%dFZ2hT)B+cA+c>}YL zhieyWlgv-YO`m9WEsCL-Ceu#~&RcG^J_B6E<^$Mb%xx8xP1fkjo36q(vEmNt$=WV| zsjNZQIF?QFP<^)_fk!7VOAyXU*MDtyk9>Q({jtI<{d86d1&9$sav21!%64@!R$Fx2 zy$IU7jSs8+{GA*YZ1MOK<3sU|9v%Zvi4_#`0UpO~Hx`nz_@rRe>ksWY36;^v%qwao zes{TukT!CoB5%ix*f5WfsZQ8ULB8Dex@gxhM`R}agBs`6S^Qrr;`|oQB^pzETaYw1 znwwQR<8?2m2Q*#kuhXK@#7CHV^Q%B9_mrf>GIhlAHDmtW*1(Sxc+Zk zJPbjb_0Mx9}YC{N`AwJ8w&{^$}LVm4yD@5PJo=huJo<(l7JR>pV=fb5=vdf(+=ypS5d z!?bM7R3q^&>I_5gu9m{x`?$f5zw>>cAGrDHXHS1&{3_)Qq%HC0q?@aaNukOQrV{tO z4`nd7VLF=$=a(E&k2wn}#f8$2X*ZOtL7J`T85o&TbveA1A|)pFwa}T`GpNl1?3Hbs zR-Zvy3$F^MkqjGaf60GI{Ua+<(3>vvX+Te;?-#b4!KzZEo}@X|iXXOAd$atG64$;O zj%AdOILln|ZVMy*FcLQlD~uoEPr9vR@y(F#7b)$-b6M9+&LRiqTh#1)?&ev57UT4U z6vAbzZ%nx7bU<>=F*^3-F``V`!D4LZ|M}CUhA3M2AC5q{AAY zRH`f@y1LI>)bgyEZvi8)(BOiizfF6mZ^KUqUIEj-a0)1BYtP|r)Ns3W&_6PPnT%R> zk_MSu6ss4qp$m* zah*doZ%MzsF7!ht!?e`=`3Ju)5Z4xScCVtl{VPb+S2R{ zi~i$sN@C}jc1($;Qmb?*}p9yi!qDhk<1 zu#K3sSijg)KKk1;D&t5P*0rHzL2*^Dw+e zOW8^K=y1Jp&V^R$MM*ID%fs^3gjW$d=ipiRNM#m$@w;j!rMHXYUuvIrUaH%uLI!nO zG%t5jY466Z!=5wbO8lj=HLw1XO+(=Z^=nOmQW?ubrjZ)qNQ*Q?mz2a^)1DfI34|Xo zJ9Sw5qYZ(AbAKV)wdrz&sV%*y^CbopF!nFiHKi_H?>|~;k)rn((;%uhCbx<*xNl?& zz?^-vFmKMiaSxM@nd#@UhWC80_np~;tm7#zqPiA=H`;G$*9fPMysGF%b80uLpy6>tDn0nJ;&OO zt)ta{&bP}+@Y=|29YIyX{%47uPV9lbM)wtF6 zRlP=GMpOKA8teM=-opUZo-y$~?Z*mHa^HZ0d9?mts#JfGOBE~GgGAS<_`D`{Ft~8 zlboAV7scTM)VvelL9Re)#WfbGc&4+fjT{DQJf_VsW|0ct9uKFK!^+a%h_J}RmRO8j z54X6wL`gwP*V5K1nScq~T1%_SS~T+gm8;j<@f0U{mhm07R5ZoC!=4$g+TFDP>M-nN zbUKWMcK@N0CoyN0wQJLJxFXM~`C}LrF8vgnK@ksgK$hgTCtfz6HC;Of#_bAi(6w-` z?y6I2pBw&1fFw|DN!DKM3Vr_Ko~(mOCZ>IV$#=T!8@S{z73d{kjW>BER{1_MrwShq zeNiJJ^J?mA&`yfw=mX99xEJ^y95Jk5o-3Ok=1gjYW_U(Scx#l!>I}Rezl@!-wPxQs zb;v6pR>-K8RjQd9DB0X5nFdG2Iit$ihSj&iCO$;JudcDOPIa`BiRZmWj%G-~xwKp+x@pR?Uysbf4VlP@{U zXCytWtLG_DkqNJgl**D8(1BJWrR0HL{181&&OUgagblS=lzOWve#OVI4IwI8z9bWl*8{}XA3q4{ zXAcWu0z1POK@YWbGgltMPB46o49aYGN`m(I!fTb^4o)*-UWa>%iYi@X#jel&j&`uQ zx@%n0H7Rw)D;!v(WMyyo&_dT!@mWr(5dH5znT?h0E(BZ8H@&u{ez?=|kzDq6=DKdX zEh)iRkF=8+c^}rHVbGM>DN_5;O`hU^55{-PEq~F)=#Rz`doW8^Vx&|c5uE40Jv2&f z=dH446c8d-X0=37`LrU!{zf*T?!=L+?IV+c)&2u{q*15KcZdRjhCV7>>8-*81-4d; z1yorD#}_Q6dB+@oy&8LlZedj&mK2a;cM(etvc1e2$!x{ZC7L==HT#aEG~f)HTTC%b zc{I}rLUo}{hkOQF*!m1hzSHZ5SAI`*_CaN#p|o3{vs?3K=~!mmLvX~oR_5SR8Oc$XEdWs)&qH$Fip=!i z)*hior7~o_Nhq9**5u4}SgkcZI$k=6?Jl%*bapw4isYf&6wtSFNPX#o(DnKzYi4^P zk6681t#;pL!o}ct#X+ia%l`b@>7(2558w3dJuDW+qjjaPlNx>WZ0f^!({}eU(Q!U1 z^Qh^nA$LzPjv-f6(faQ%FaeEMcAGTlyYS0x`>C00;0*jRz@{z9q~TyuOAv|GZ1416 zStZk1X~5T1cq|^V=IET&wCWfcoSin;VO`!gd~ikC4mIWZJoYQ%`WaNaxz3-cAe6+N zQoxOVB}O@4H_%Vr|3r4bIEC-x36IYOfTkGyOBL>4a+>vTOjrhowoMwu&(Qx-Jq#dr z_3gWyP(h(auG=G$ue)E$3E<6OFT7q9|D}3$YM985A-h0A?cZ+?fNf@Dm^dgOlPVd% zL#;Z*wwq~1sMf+h9nOD(Q}~Ywv76tO{1>)v!nmK+zG#58S2CwKM;y!NPg_Kr#9qB4 zF&p$tD*GGmOR_t&yRH2tk5t1*ou9~L#gREKb!V`9&=&m+h=_ZesXA>NzUY||UY8Nx zIOimtS;P;VemwXrd;X!?262xhO}p-d`y>@;cIdD9xuACbh&JHYqTj*L*~Nkuhl?xg z+LSLGTY_Fm$+mySMFnz9he~xj|3nO#x9q0JMhPsO0!nwuD3(m*1!Dm_5`O+o#&P!O zG(pym?}OG* z-$<|~?>>Al6S6NJnk)x9J-=_?GCkJ3fAr`PPIW|Nyz=vCaa-|ebxP(|`BoVEAB+ZW zY6%5Ii)pK{Ez}91IUh`@G~1i&ceWXN#>aI33LG8U1>7G zt=m)aeW9?a#eewP_r;vC3K7a(KRkCvff*_UvHyIK=~d4g(A6%h6m8zIk}uar;F~Of zA0(&{bNrXjNoJbDiY&63M3|6!T0d0S{A2AgXVM2pG?Ed+z<<`dcsaS{nTO7KjY<} z!Teu;=ot0wyqVQ2;{uD8zP^BDBEQHhs|o?G&;MQGr2=BCQ%H|kYHe!^3{W@vcUw<> zcSMpMv#aQ9ACGQ$UPB$sdsolA2|MKb!N5T5{kY|zekZiO^BA*kFe4}joz3nubDMV1 z-!CT5BATE5D$IrURR*^_wykP8!dhV0iv8gVZ-{U{IJq-z`@$4?laxZ#^j?i+}i=V zXxy~zBZXVEeNkF4quM2ftB#~#v#$`AltborFFC`i?3_~Zl#fV4qs{m(UgXy5T5lA( z3|kOQg#sT9$b2bXee$_x#c)C@0r;>0hqufpCKn0pC33xT>vHS=@;mo_C1&p>%<21# z4tc|OlzoP?4-~%pjQvX65p!6%i8r8JHYZ-TRakVIMB!_O11Ww!#ERLLfc4mRAuW=w znxfMwgZ8EQ_{xB_1Kkbg+`uL zAc=1j{aL|_@l(9ls(Vdef0uOR^sMdTs}6J!03Ochj~2|eHwYD3>M@Jor;xQu?|8yD zYjKJ{UQoxx_=b6lN897<W)EdE+POGLAKbT?OGLV||DF63wu4`~##K3*lsu(r8(e8s&RybPh)ROD80-&pj_ z5!_XT?+qpU;$HvfJ6nd;t&?Wi^XRfJnxOTIu0{oDgSb8$+}tr~ zvFuOrT(lkUtj2s@mD!K^<7U75DT%%0h&(y%LZo&4l28@>b?kSvMxe!n*roP^&)NMx zg3~V;pTkbXGE^1?>o#ugHzZ**!e)UFc>Zh=R>)P#W>c79HsoP&X zxV2d}2}k*-oV+_H>Rd@`Q5pU=QvE5c3o(<>$AoHg2EBuoSl0C zT9Tubudrxzb0rROv1tZoaRVeBAsu}&%{GALGbC`LE4>)4fz$6<{Jh>rYd@Hy-Q0(! zt7^ab_*!_eF(&Qur@FN4^r`E0ZSU-#=Dl{} zY{HKtoikB2CIv4r{liy!Mlt10!U>M)5QB!*`**(2I4HP454tqRgM=DlkOW zRlBDL8hP)Hwv&$9)Wemod6$YS*wo^tnTll~yD{R{N6 zbGaVRR(@jcq>!;V{>m=j^Uj{%c`mi0lI-{$O&uF6m$22m3c;(HML73A$@?jKoD$-Y zWG^GtUXvWoT4shWxy@;Tz9#*gz-RIq)G_>eK129d75Q#&Z`#`I-lY5t@t49YVmHY5 zTlcN|W7(t(j++bY2LJT_mPvPTJ^l1OI;Xz-3B|?;@1r{J6<17F?U|@4aD6-7E{ zinL39>Cj!1zb<*&(bwA5SXX|eQumwtbbVgPi<|OIJ~G)jGydn|5yY|K@z=@y$r4=& zP;k>L1%6y5dG{7q^{q*f&9UNb2ya&CoP1$#ngQ>4)shJ4XLU-}iER3~w#w@L^>x-? z>n_viZ(UA}pGxeZ<&I(;6DpT!Lrz`2)YfaEnK8pwjR&{r(`%9!H~A>ve3I;MZWFHx zk)PEDpZE{{7h_FTS5zZbmfabjfZgXVOEa;&**VMoIpC1OO#=EM*O7}`_)aW+*aKtH z6YoBb5oUc+Z(5>49}&-Bp<&%&13hQYZ!1cz9&ai^_WfHq(cL~*x#Eo%?7j!sSG+&$ znr)M1e!)<}0Dw{3M*1CUpSHn0t*6L7Tl$W+Jhp&nIH>1c7o#{``1>o%ShgS(l4D%n zZ1~TDiF$i&FVRKU#IFD3VkoO~k-FqAv(q+YxHKrX zTRd4eMqXVHjhObZlYRYCcYOrxcq&-=s#nEm(O5`DdMe-J*7NQ;dzmk_CkO@b=BCC4 zsq%xjUh7ud{sZ;(ED9_?=e=I*^sQ=1v&5if_1fnaTgd{vVr39^Z~FJRJ07}wRr2v8 zYmBGJNr|!rC#b>Jd~TJuwu;yW#mIFuSV_1cUdb?1*l*4UY?!=ixF{di+bGsw3hw~X+X<1h(~|W1z(5?&STZ$ zeHl_k*OBV0DXf}|?CPy9+_q)TD$FVZc48)UYKX^!<*`>F&t=BK&ut+N4Cd{C@guz$ z#m%cECqW@jP$+Y=Q2pkHdCG>_E?9fY7Kv@gj5w3&UcIWL__ilZIwGrGzLtU_*giCw56zZy?)42!n%k;~mhl-?B4C}{UGpIXxu+uSs1xnrIL z@0fcxHdg)ca+y@^u%4h_V(W~c8Yk7aEd^P*qrX%F%hkZL3cr;gk zVFC&|lW}{A_>J$l&QS>dzCr5Z>nhJ~N0Il98{?=Wg|vYc#91L<^0I(&WOUHgOIzX< zUnT!iZR=gpZbrN@QENufj!$ls&j`u2j4?tB7@{{PV$Y;+fF#U1{b#{q$5McN;KJfU z)0*}OI|e3YA5=gSA%B=eJpy&{DTHzXb`Av5<;W+8P>rZw_Iwvz5vp;3u? zPI-8+E|+Qi7~t=BF&r`W7RNA%qeS&FgTW2%+`_N7WWmz*D-p5{E}Zni^s?||O{aM0$U_T~F; zp00%z{xTA-n+DQ@qra6y-`Hx(lS~BG-}~BTYc(_Zf~zr3X2m?h`%`DvK7DlfY!-!V zMRYoBtjgJU6NFM|E~fD_&*Z zi&86b@_dP3V6AH>kqq@ED=$WEI)J!@9%-L1?5^1Nyh2O+mXz3)3*98xAZ!=K&NUD! z}vw+YBu|(xh$!d12sh_#nS1t?@x#}l9OsL z(pgjI?jL~RXINA2)~?(=q2X8QyY|&dOySjONj51swQe6?&(bR03m`nrVjjSw0a(5e z;M3?ot3d4m!!N*R*cD~OcBAaWfOKG3xJy7%?lZi7KnU@=gkU9~T}q%7MP?<3!l=oq zq%CplrhYACxQKt+iY-h`hgYing5^8&$3J$ig%4QQQi5Xb=tP-`&c37la{>20L$@OJ~mAC6|!byC> z9$ENp|EOWZz{w>J!I*p9CNXkb;_IuQh}T>G{?OEPfMOpn>ZuKE>X?Msj)gmV`&109<>vE))1X0T|xrOgf2;awklo{#Opre$% zNJCCBSV7;&F)+U{I)G(J=TBPbN_Ui1&ggjVDHR{i^8&Wmoy;=`Jq(a@LRH?R!vo2< z&q1d?u);6$gSsvdTDA_!?ozger{m|jnIRHd?OHQoO|2KxC=$ex;yIs&&eB$?OALvI z5GCBg?#?$!vOPp8FpSTF*~IcAnm&R}NVRW0JBM}`s~5`SA&6@IKz-r*Ip!1~15cx) zYIMaQ;1m40OM=S1i!ShFhH)cLKY_X%SjNK)+O(IBLM9UEqsPZ;CDlac5l2!o=RNy43@i$g0?%FP*sJ$aDE%e;p>-$WX5H?aEgjPTarM>#QGDP3Fi0yYf`s%NP`X26MFf-%i4_5frI(d%P(Y9pkq}ry zK$<0&?(ST2myqu6^cnnofB!s}fth9Q+`0Gc?bkW4^YdAie{P01W%@@0bA~_hzBOGd zow77tw-X4mal&C83!2k@=?8puil|^weKazMn@`m2RaZ($NgMI}!hH6Te~1HsIKgp9 z9PaRDxnpSAG{2RlA$#>{Rdjq2)&E?HqtU4^F`%qt-JyxoU~=5Gh} zpYXgh8>6PJdTBmWKsV{xiuIh3+gyrQ(9u(@StXjKP@Px0Lr@hThk>eN?1}f|mJ|H) zq0rd^i0k2_XzofuT!;>`4^$jw@GjP8I^+v2STUl|=d-KFWXKChcrUCP=^zNI@K+F8 z{#LHpl`!E}coi7>?dnO=MRsXOy=iG!*0-qaAC3nTu{CE2kKFm?N)p8#Bz*EVcpbPJ ztqPAHrwq^8Ro1cIN&h4weZ@_bhejZ5=e_w%vPTPfUzZ&Aj2u7M$w~hSn2c+OlHz)m zV@W&bONxl$6_^G#r+C2Y3-mRU6Xoa6qz3NQ1l6&5MOCYi_2q%W6oKKjV0v+>?nY21 zWfYVT8BXSo7i)H@+Zh7!J=+KTH^6i$8vMS9z?E(O3mU~$V>jFAW&MML59l9?d-qVW z>09c?nd4z&t*deXNO!w9a|k<2A9&B~ZjDUEZSY-0{gPwIc5P#NOs1(CpS`42G=)Ge@=(M|6m@2O zCT98KNnp&=SR`(8aI1MN)KWXeq3iv`@~~CUL&`79E9=Skaw~T4+^H~dw^L!b3i_e;E*tG)6US9qeh5;Z&Gg5 znUAZUJ(OR?So9BTOSnOBZ9L`c&s*U6H=m+PbL-emt$yYq#J{=V&hFT*(Qw zf?C;_X1l2_F1qs=2z?Fzk^SJ&z#sSt8Y(XAcpryEFh983HiSmQH6Zd=(NnbT+R0AR zJLkchi~?HHz+wmF`x-*q|FYi86TV^<`C||U7z|Vef0lV}ubT7Za2eNb+#I65_N@L$ z+-Bfc8E@$mmxp7kvL6)pU1l`Mpeo)zxxFwAf_)PN(s%}v68RH35$9p#lS zVi`I?(|~gB3pcSG7PB2-c5^=&Wt(dEA>k~(ob|hoVSADvrHN%+c9`y|0*n)ftQN(| zRz*2Rk{+1p^|{8p1SEJ0mpTqClTFDj(jIrrowQd(i%k&r_3N7EeV)(xT`GyQNXBw4 z`PGX?I(%|a+u_%N^Rj`Mz5a5|I83Nu2ZNgK@9}%_wyZf*XTZK7gJfQz0P@>Is3=j5 zPx_D;7M}vXh2^FiPVdF()`M5YzXe!$S>04yO2(z2bRI5Lq&>_t4-D@#6V%;9+Mx|& z%;_e2%GLPQ#Hb3NK0tC%KEP&N@86LasJ+9slH(o9SKw+9N7C}|5^UhlTf7TZ<36{X zyCqviivzRITy1-f){kH`<)@@@r^b0BmR2jjVRo?!==MbZPdxfSv1FDv(+JhtA$D6(=^x9+eNct=U7(Sc#s_#V|S8R9t{?9YJfvGIttFfkJfX%n0v|CP zy?ImxY72tfXh9Ar5j+vl${Xyy0}B8(3>A`lbeuNr7wyZOy_TJnz*JB5VwB?z1)m=L zT1rEJwnP9`FETittZLgwyy@*J$s#}6Zgi!7M8-Fxf+TsDqC)d&xM)@^*^0L7PktIR zl$cqyPAoa+4$%Ry9Fl9RhQhN_nQaa4)U&5U^y42L`3eig4g%Rt8<;lCbulyp;)1{9)g#2^plD)%wJ?M?RVB9bj3 zo@0q_{W-Mz`GMtO27mCewdqCtI2tnf)PcwJf-ZYkKUb@VSDj37zRG+{R6iUNY3?%0 zwdR+c#(CSctSCi%HvJTSeX(XS#uWGcMjE?OJyD-7Z=a#QCUDebBjwcWy!7U&u$IxP z*N#kvscD~4}6iF;%MquX`+2YO)%JHrX>38un0$1P}_s}B?q08 z*YLL`HOO-X#)xfMl)yD1=3=ZK!lk|5b%YrmVH$17B{2b*#GaJYkel#q4)Q#u5U$we zM7Hx{fK#_gr3WSYT$I>M9PWup52ggDdF!!w`04vg6BS=Rj;P$FYF`2@n8sZGl!pxj zVX{%Qy%n_BIfcCiUm4*z+;UwJXisACPshDo1zaiaidE{}u4vlrQ-8C~`BDgs`zr6s znY~AFd%1k#zZ&*}!xhbz<15L@PHnLdW%CsT19l&=>DID81=OYoP$Ek&rb=4fh}{#< z&H-z&^i7(;Y}~|U+va?z5c;!S=7!3>^;@rB$_VD+Zm{h%Z`_eB+3|VtP_e$ zd(}E~qFQcw@$-O@SK+Yrotu%uiqaPshto}H*>cKu$i{}r;YS*pV8O$EFO>#izh3o8 zk=*O)HdkOvul+Q$%L=Opj&9uK5$mVl!SUCTHewBr9Esk`KA*LaTcz3IM`{_StbiPl z(oCNoa{SCEh%>OUMSR658HlCYLZm;zfthY(rsM4sr~LTknCmHVLu!bAX{T>E4}H4H zSg}^u>bH8sg^_3IddR-7-AN+B$`C9KM$`SscEY2452W+v_B4gO^C}5v(eQM|w=v%T ziwIfRxhvAtWjFTV;^zByh>B04x136&BQ?2~y)VK9(M12CBmCs+v^8t&{@jVEt4Xd zt3E7O-{As}Ihuk8>MwC7^+&D8ODoj)wp9$EB7hqar`~1FCGeoRZ(^GV>0-xn_1>6I zC%Te)vd6fH+Wgz=T&%GQi>`#?nM|1|9v_c98J6_{u|wH)Rbg?S`5$u$w@Jen8m&YG z%41(L;A)Bm?8XuGZ|KA5L&;S}1p@dnDvl*CjKGeOj_VcEuAz*eeWLE3sI(vE`cW~r zNLb~g^M_4uV&{YmBd3p+Jx87oY(`5zrhi20rY!y@V25{!~g z5mANz9tD6S<(Tmdlo(5a0 zO{$JQ`G+S00y3gE%(fzy=05#m&q>`I%xw^z*RXQ#vFj)rw^=gwIsUJT3o(OgOkz|% zcH$|W_ecOQW(hmR{x!--#gskH?4{>7S;O+dY4;`X}c>L5+b<^aN(1^bGYmh^wsbnRqXHeMhtYr1MIt-bqR%8G$x$u~z45JU{+c zPL6b>AoG4O|L=a^Rm_aJ4|2138SplAHN`n#DS45~i6P56`p^D24dwr?K0DncJcOP~ zh2eox!r19gXX#E^todAZ?ca+fiIC{+puH1E#hst0KJ@3Cf!RlXaJ5E~9NH?~03$1k z9X`Zf;`sHt~W?RXmVJo8JjCPlxg?@?2E}L`ouYzwXiE6M+{ur?wCS*Q_1gGj~jy=W` zjWnKpIeUF2ep%4U985FN4(;wR=(289Ar_ZCK+y+v7u(Zu*54m zu)3dedD(AUiBHK>DH9WWH$^+1F9H-{=CkRpYY?k2X_qeTTb)`4 zVVCKSV)5>=k>v`VC#V`G^Yb(@-d|e<2U1wHujD2+D5-cPE=spUCY~IOVYn74%iRzX zbdS;k16-;q4|^()DzG7O%M=3J)IzV05$;^&QrM%iwzq;fKO2Pf zbRFQvaM5|o??Cj2cWNl7>i=R*bX_@r>yUmZQOaVLuA-E{I{0vl`uAzL{#oDD@hRV~ z3-%H!Q}Lqzo|mGm92!>NlgKp7)I#Slp#&{>tPR4F}#9)+o#jc zhVGZOjyFD(T!3NbhSr6b1yO4Glk0&Ex#_Y=7kl+nb-2RY$yqt64N_(K*gL?rJM~1M zZO$B7Imddvs8K&Hv)HpoJ$O^zWWR?2u&4ju1vLhoXH1k|$L7A1a%JT=Jzsfu!RZG) zLz7s=qdI(4jjBi0Te%D#q-+3og!Ft_k%bF-{+kTErl)DIDSS&tRs6?mUnCk&nL=~d zWTD$$4+w9%JQZtV-nWkFJWndNjdX|MbfQ~oLi(i(MCS?#66h$9^PUjHt^yl}=k;|| z@%G)eePP`w8w@432RcJf8e39C!`Q zcr2296a}H)w`KY$3t?0sSLximP8RcEQQBr`U0Y$xp?$-%tXMO4_Wh zqrqQODzH813I@DF-!t}me;Vf-cL7zqeIHYI^Pci@O7X1^czrH5wdS5B-(q=1wEEz@ zj7I`<$1mocubPSq;o5)#234qL>4u!Puxj{3T;&Av{PJA)j6W$2@KysDvP!E3Nn7>- zY8mY%zf}rs+FcIBC_gCHW$8qHhJ4cymKB&3ORn8a1qO-o zC!D9-I@PJcD>KjglPV?lkd9=%)*rVLztLEX+LSYR8f8r)bM2pOKRZt3>@=NgS+Gee zzphM~-&|yxXa(`&gHL;-21XB-m_7VSNjH~PI}}-{-a5fM1)imeOs@_J*f7KR>)$@X zm^*rQtUXRP{^;4+)7euIW5-F)NzXB%F_xAG()Rm}Dqs;yioY33^*LHglfGDEWnQ@( zN8tmD=srqzRmQt56F$`>w}yJ!rag}uy~XJ-X?hSFJ8j!KkH~r{0WST_Nv>{g92j;g zohM~Wr20V~@Vg(Kj*?3oT}=ty-3~>PlO|q-zqa0zj1!%C0$IYRi-*sCaXUXYxegXT zt#Dn@qxZ>o|Kg7IveB0S>2+!I*24Hq5`<^3h4hJz4!3wf%tLNsIogyk3uF6>RlV_p z!|S5!ioWfgq*lRX=U!%{XII_B1G6O%%dJ=dlWO#3T;KI^iPL+l8A7Yv8V-f`f!7fs zNd|RcOo7kObadO7MS5#2HhKucF#U!0CvM?rb8H85^}DJU>`uH(J0o0c_3>X#jH$M| zivb+klK1t)E{T_p{`Zml<)S<8F3}92P!zOW{yjOK`ykY-rMackTj9&@bbOx9)ebGS zc_V(h@jKlf68&NdhlBSt`caB6MtHm;-9pGk&0$8{9& zb3Q9`Jc?V0=R1nlF%K=e@-pwFMc$;C?T!_pjK37KE>uy!H_|PFp+>);851bllqEXOm2D=enR*zup_X-s>&LQ|w1~AVK>-fgHJMPK9kvm=PZsp|8TDd=sypv@$r=aB5C+cQ^aXFwt z8NgfjsvF79OQ}^oC1HJ zCQXFFC?FzUEV=MS>t<4URMM;eD9rXGV@2k8Xbk{KRt5Pyw^>RIy@|5l7Bxd;Y?jO? z>7#VV)<+Lq)wFL^{;O)|EcKLj(nnoSVTflCVUUep@3@59V#=MLp6@#@o=F+pCJcy% zNwP)4*Ov^Z>+apk)9hh|gE|7eg$ggAzO$r%l%D*g>t+e;Z(y%DG}J86z8;_a7@-v# zu0!@X#USo<0!1*xay$TwZ>sL|(aoP^AcWi4=uA&x_r!|k zD^cma$d{o<8X)=pBUzgxjZ~P$ip7fk8t}7gBvqxpgR1dq%^pT_QvLQQN9nl%gIfLc zW0sz?c!TN4rbZ2))N{^8qP+m`#UUT?UbxJGRU^+?N1&kDD$nVciR~wmeSWt^-7Y%@ zAY~`_P*Y86EyIjaeBq+&bStX*3KUyqzJcJTC+@EmC_R~Vm^EaFuX}@HcG20w zPFaH}ssHq95>;MmUuSW)bshiSjjqprc@B%8*V1wHL0@G1$`mxl2SyJTQZLuJ$VQ0! ztkF-xgmMb};F(U~)6OSf!jZlCETUC2Jm5$eWzKko6pU%2sTO>?Cf@hNe-G%?Z|C~HYyiwuu*Xd0gcgi`j&$}__AhBZg2RD+~PT$z9om8ex^wZ6> zj2W`_Gw&8~)AO!DCQcN(oDn*p!VyZtE^YK2x5nmF`DHfGZB95ScX4QwrhNXus%de^ zzawo-(CUO3e4|9|uh|i(*$y0u(*~1&R@id(c}T$dVH-}9-+Q<#xtp&B8N6*jC>c~5 zFeBUDY_y^K@2&>AlLJ-k;yF;RiB=VXR8H-*^lAH>&@12+kn^my3Ly&vK-;o zu!mN67ldYX>*1tqck^DO??q^`yG{7iWNmzRrtUb)*JsVnhV%5q-kk zaiGVnz^<%Hw%Ys7%+LV?d%xWCd_*CXOm&GI?@?rT;y{J*a1&3=0WgWaTNXwqM=V>h zNz(QYLPa3xF{>`PrI~@`=$Q7>g$!9%!;r9B;aXAk59|EwS<(N)jp2LV&>PxZX zC*CeEg~X4&MLB9i;`X?m4fSoO5@}{EGjmR(UY(4|b^I#zf3eoK$wRjnnVzInp2 z5S=N`EW;jyR(q}WZbj5R__2Nzj5*u4)u4{9kTiq#?17F=v_5llrrvBvXK_k5=WVv` zh7ef<>WC9#GN0_HI^VRlq0zZXZ^tEY@#Yl$oXD#`Xqnc{YwG#)L&6Ta9BK|DdNq0S z^vlczT^<)-ftbkGS-4$lLF4qcq7y4g{tuM=XfNz43h!6#b8UOUAAm`)Rah-#oa#TB zVW<}CXNm9CDBu*0PA+Bx96n>7RWCUXmzR0evK5}J#Knos=+Q#GdkdeAPyOUjmqlr! z2Jrtoh1OU%&OmR3IYUHhdw;RHpIjObLfi_62DVL&?A{$I_!*q59ZnAWRDS!(xAi0W z=am~7+ct!C^CU$osVoje6M9%xzV@T|_fXG!TUVdc{)UKArwnoEmW?44)WgVSt`mqF zo`Q#fV^k5I%Msuk~z_jTe!mPE-;2$})CbuUxPwhrZo+LA&fLF1U^ai&!8HLqBUoP~YC!xc~|h|fOU>`kG0n8yq6I8NlS@OQq}I@hL5BZAZ*jKeZ zy+?}>cvl8b>Dtftqqe2?29~R!mfWG946S0Gg12pD#K~_$r+a*C&vonPWZ?1+2Plts zl)S|@x;Ns%`0q@>=&0ah)9OwbPS!?!Pr-Lk_WI2D zgswYbcYMUnL-?wCTukKsXuuRzcTQgi**XlX-;l_BOn+@hyYV?B@%!0SSJBV7>2g1g zkd;UKA?b5Dhzsns^e12Pgt(SP#ul_yeEm-ugtF3R{$f4y+Dvm$Is@S-Re9~BS)w)` zA8!)?IFYnLIaf-?j|jq2BS|b}FJ(Mi^tn*)N$xP&;jfrV zsXPi**A#Yze|7tu6$b;DdJ#H0?QlZtZa8#~7 z{rE9;m|uqNEisZYPV!z`o$viJr)S{^3k{#qofHK7THQvep+>$}Mr$Sd2&)ugJ`%Z#n_CrHEEysgD$mZRVSDl4*%!`d#yRC|-?j;Za>l_IG_NQME&{eGM{ew{(vN#ha48(-1Sf3QI_CYyTM+i$ zgWVES+uJ*#Ru0S1(U2LI!#SFZgq@DFjSU{7j!+?+Wd@HV-XIn3IqpZcLZ2f-t?M3z z#$};gn$&tSD5?O1G3(f=Bc?YMgVf>30z5nEIQ*6Dg_nDFW?JoDawwrW?j82Ja^DwO zp&26*B7acf>Kyi#o#r6&dFLv+uKgmN*cFjkhnd&$x-mwQys9c6Ji8^B(~sjPpLWBK zVFI*J$5E5;UhiBy-aNMY>M4j`tn7f{z+v9wr7QiMt9UZy#LvjUlVjCy)Wg@jdG$=( z6m@zy!?e&RS;)TqCALXQmUhFD9Cqu+01<)(Wpw~=a<&-#^s_8Yi@8``gl$yrs<8Zl z4K18}wlZ&#p*Cg9c0NIe5Uqdou*8d2L-80UwC$f3kuGawabCWASv_&;Frf7_5PNE) z@=Wl6sg-6<&p;xHDX9%Rev-jbjr=+ro(_hX=ERCXs6w5jZMi+pU#WcL_PFGeOdH`2 zlz*ca_9K#+NF7hNb$kq8uI5w3!o8!KQo+hFF$!~r;F>(%2PyH>`b>GD@s2!_6ZNa_ zd{BT{gp>O#U_An!F{lywG{GW0;SBDvVo#1aS0qh$d$0sS!FAn5@$1Ygfi+#vTT#b& zt@`xSRN|?Z88DvLfBM5bACTu|pDT{`u9X3#QSLwgVm%hBss1o3RHEh$y0_G~BtxO4KEJDalx}=q$QgUWL_Z$n9j8 zcG&waoR5b+d6FKZF10UOxj^<(Jgzh^cJI+1mo`0gf$@p5mv~l}jRAF6hv2hkdes>G zlS{O*Lzi~zw)9Bx^ri!~-e|elR8yk-{ztEyR`k;E?k+S%r;ZPIJr|v*g4xvD$wZ`T zoPa1)%9VCH-z}fqZNfcP-kUahAU-U^@=O> zUTeS0Y7~zAf?l}C>({%WO_(xnK2xIYQfsp1g4=26q&CNC<;0gG(U*eQtPd8r@$jFJ}@sTF4- zOCTNj8CzD}!}IIwlG%M8mDP1rC|v#C{fUnT`OIk1lV4R539%S&^A9^*8LW6g#|*;! zR5?h=Ys@A}ey&Xo>&g8fuTnk7wq!w0;x}y%ab5zJGvg^8DeWok$)iA{vfL6kS#ULk zkOk)ICxi{W$)D3A`?e-|s__Qm6#hqs@Kc}N+;b>@W~|Fo-{d-9m22DM(PD)Tq6bb^ z9}s=*OVi&U?~C~Cq6!{~yeCvbQ>}N?5tQX7V*mPR31At6Itia*9;qDKb!k}NqlM}W=W_R0kC#NmdjS@)>4_vOlbu6tW3`#i9 zq$PWG8JmTB+mqhNp{YoC@`Y5M>cyK;&}DE&Q?D5a(-F7GoLDusB^}i{w|ACxCrHr= z>MFc#zSrsntAD-w$j~uChL7{TC|>Abp5*DoZ3ywv@S6`Bmde%((8g4Y~ZY?UM59 zT}4eU>LUxIPq9RTPwE3HXFFW{DU$EbpUn#CdHTk<(_M$GA9R%#n)xBbD)>Wx)aYu# zC=FrU){3ZzE{2j2zhI(H6WfW}GoQnnqPIlLOcS^0n|d7HrYUr>Wzhv$N>ws_$nWuQ8V1d{Lr z_>k~IIYu1(t~0Mlreii??_|FWL)}|wxYbpwhv|?GVTe>Y$c@^}DQLMSKV4@d_Vod=T<5sz)XRcB>7S3^r){+}ZsTRX_gGQ~w-m zN5C~FUng4qbrzyfudsK*t-D_CBS2}m=-vBux|d(BP~%*!*aY;rny#*blEngjg2X;xe1;v8+XMtq{LGM z4EK2mai`Sc@2msweGK$?b;xp&F;R|;L6*FY`4on`Ea%6=*a%80>~^_%Wf7HBuGZ38 zd0_0@z*Fq0cIC>7Q(uW#w2fu=O1l|UiWQyWA+8&G>R7xCtSt&Q2IOx^^rp2=y`_Yu zxY<#3g$?r5R|;D)3poum)7@pWCbaCg!zw5AyI-oVjrg@isigYtE|h&@kEq<@4dNpG z(XrVU7Sq08vj1ZJR72=2S`_Ju7-B3u=xr9deji8a9q@VezAHxg!PSNDEbu}2N4`VM zEae^qa*JRGl(3L(ZIBy}Ut?kwxxZH9=`}+(D&h{s2M~YS_CXFukP`55ApW10H2^&W zG)2JQeUTMOq88$vA$ZX~!xE_`Uz=_JnOAz(>x8c#y3$QMenq+DKe5dmeF%G`*KzPE zQX%|YxkEiAH@s^Aod0LR&?8EAF3R{2UVU;Wn>$o*EoqwO9j&K^XodI#>P^j}tWQ&J zepr-KJHoU34S7R56NB!1XwC)`nbnP1XYuP4eqB+zMw`Ho=6Wbj5Yxj3cXXd~rZneK zi7-8N2c$-D56#w$(IAyBewlw1KFQr1Zif7y-TIMVU0216J&nX)^e@CysR0pi^4WSt zQMe-Pe0j4wp<-KM2(;W0XwIK($mo_C^U{4|(VnwUS}jB^0+W4|ydusd?+0%-g-25_ zNVb%#3)ZWhhP4mAB9|xWPMPhzYF@~RlUb5t=Lx=Rwt!)XVP=6=&M) zQ~Z+Mo)gWOH3zB0vkbkR9>m2arskw;x~b+V^Smw9go{Rh>7W_xTP6` zvus*M`P9NGc|SA|Q}e6>45s6$``?#eo{Ic=qkE6A;K7&pIckelnD7aCxbJ|S`~fb9 zqn7mlaTkp6S|krH@A|X(hdW9R>O|iuBHZcNLnV&?C&e2Lqtj34C&Bov>=^acgId^f zv#A4oTa~06hNM^53O)*=pii*C_vw>1s5C3tLYEY)MU4{Jo5!d+CmPF|thgWj44&ZdshV09=5NO2uyZCWCBh-wSPl~A-d9D_5hazCvhe@cIXH6J-X)7 zIVp5Dc?r(9*oWumBNma>K_ds1meNfw@Eoa zs&5W#2#g`_fA`9v@Rf|iYL*K<;cn1iz$R)G?Vy}F5?|Ui6S*Bz2dvq&UM`y)It$BR0TCkBB4K# zszKJ3E%wy^pdJ_X_26|UTv~44K6AQGp_`XU_{K%2N~OuyN;y+arF-J=8<{m(6T+%4 z02ERlil?|zyizwD=)aMdNT4Aa_}~&~v)t987?DNRm18TdntiKf;!!N~T*kZCApnOE z?O_AeZlAL-kG{*fh{f8&PDBB~Q!w+WMpyva0sEwOPG%6`O`mxc&j@J^bFH8E8RR^N zNQ#>$`#R|+MtLk|JT@G5MG8>L9Ee|j z{v~K^q{Ni|IX5XPCC>MOdLsT}F*SLeU=H0bjXC>dP12jx z)}C&Zp6|QjcQGRh)DDCsn(HG~=4yTZ=}9i$_7S)Q37_wImpYXIxV|+*z#Yjr3?J@4w0)q)ePbu90lo}Ye|M3cSeoW?ca9gtnRGsM@h0PD5LWlZ} z3raWbdF6z#EDM*=gu6~*S0}a^#(h+6FT9{wfgTxz0T7F98ROwC*iUcq!^~@On}6$8 zKq)L66`E{C)apq26_`5#>wEB_1`0kYfg@!J@NVpcPLq${7dQ{eo_}^31`O>w+Ta!O zJ*u-%OVnh#rWO9{MBG<3bok^n#Cl)Ff0`IS_kOcOIRkErOZ#I8uwY3H-0>hy0i7|B zcOZGRBU~*fbP-^I1UNo^3<7vC(0iqHCP&N{9oTbI56|PHB3PeaV>L?)I~H%5Zfd9& z_3pmgdj>#dFaDe?NvYsja@D_z)93FkW{^og4MMu}&2P%wy#si`xf|REu-8J_0GQdS6IB34JWLbcp?HY?Wth7YWp&--S;eN4+sXNWuUr1_;e z*d6#a@PAB7|1O#qNy7=6A%Xdq(ZsM;C9eUxj+0)XLkN$H7&b9TJq-ZoFa6g&37OWL zalh3D{Ui+_4NPC(s#3P&CHuOA1cle{O7BX~-&8Z7lc`mugneL9s3fWc41UrH4i5-A zkgU%8XRp*1B0zg`1g$I-K}0n;rskf1vAoE>@}McG*taSC=K=_2v9UHf4Hhe$3~ulE zs{q+1Ti%@=?@m=MNX$)wEEelGgxLf`IOWOdzgqdf`UFV-Uo~yy&7R*rz-4e>H?i)D z27LzZ0{lmqA{6ZOPq^48*A<#=vLzr{D@uvGS_fEDKyN3>X?vaEiTw%qyF zsIesm@3eAXelO$(Hd!jglOwPa!dE+kZaGlaxcBfre=wj1be{>eh5p6(i)Fhv%(o9@ z`7{JN^oJ~n5ck2o=JHU$G3hu_!!AsOGHyYHdO}~fXcP@zu`->J z|GP_#g-cGB!5o-9Txd#bUT8|ANZxi;bfvENkZh;UUj_~McfrObCuF{)2Noo9xB_2W zB_ioW1OSr{rlC)t!LQ1cyqiYNLI1?1wkt7;9;5^&FAcw@oZ9%l9QpuN;w zF_LUs%7@McwGx&|HmRSNZJ`T+`qqN8Ht=}xxx!5(LDwW{Q z8^p%QvDl^5z#8ALW-}x{j36`ciBcr}BIfWF8hY^wCU!>!H4eX~A2h+=R|v~~yP z>I`PA^LuelUwx`B+M6I>-_@hEBa+78S+|YKzgU5dDCc8bd_p=Lpg}ItEQ$!X-)(g^{r7_T+-(c+ zqT!c&`TH8@q7emaoAbOhY{4a`;kcoJJ^4D)_zh?if4*gqMOnYXY%ulBTQhBx!*0LL zd4k@`VFv&S?$Cw?)A%(-QZo)T!5 z=kR8tWDpGv@%$fw8>8C9DtWRIpyuE>`-MC<u;Auj2t$a^2FAOB&zH$79ZNng(;p)hYU5pPS(i^J;9~GKk@)XRHv3s-bO5N zEJF+;#~sAT$v-l!dT+(^Q+-qKC&uulo_8Nn|6cw47MY<~1t=CMX5e9n+Ui>RrPK|} zIompoX~;U)-mo050W&_7c+vDOt*@r!#~>=VM*%11166YfggOaMT-5hHNv1AWO@C0x z#$POAOm5&&)bRYl>G|ooDp2Ikf?+vo!V(|a#38k*X}f4Z3_zX)+75QDglWV5jBjNr zF7(JoZXZ+u-w(ksX5SrzeO`6V3$$<`V%x#fb>;xVQiQVJfYw@rC0J%jl-&!l=?qha zQzg=cPqLO1TPx{Y(|Aq&&LQ*<0eTceU&paFGNZp(jdgWoR!mzG9DrG#s*55%1LWHIuY3KjgJjCCB5ySo z0tkV22KSQ;x+M=>VAAwar14@5St5Vwky2YBFGLXNoh4XgiuWbJ4gFDCM9Ga}fj3qV2f zl{xT_Fh`OD^_b%fx)_H_bOq-DNrP#y_;%*_Ypk#Sd^Ot;KbfrZ)I1;=Tr^p>zZJb7 z{*iysu|Lx*Ik6e-+3*P*>~n_J{)mbB3g3~E-H3>2{b*Yra8D4R2}k)o$}?yGVBoDA34RIZL(6xIABsu;P`E?L#>%KAhw(7ESKtGWo@!)QSMrPX zlg#k_X)|;mNV)kWZlirjMmhTG;W^1h{rqA3$Z6LIOltZnex7tb5=kz1JT!(`U|S8@ zgr3V<9{FcHXZ%u|mcin{yn0a@9SIg2=NgOG_tkT09LO?{;r~1_5v7duLRa%hiFM+m zy;`4p6>k$tcOGB2A5N5XoO%wfoqt@HO}u71m*006_N<0qb1>zzH$h$Tc|#b(DSvTr zsHmA{9K5MN>$%4D9&%R-L&cX>g*q4WR?^9TW2~k5x0##0 z#8++l`uNdsw+>LN*d@+>)eQ#Lf+j>@r!DroI64R#ARr1whL+dLmNC@r)~eod<~5$W z-tt6WvafEtpELE3ex*$vwLnbzeE?NJQJzhm&xxv5X#6c1+^*S%UjY58Rbq>QEVJMi zM1WEfjOQkzTs?3af$B;Az-S0v#YD|V4?rOZ(_2a;W|3SD1H z47uSEhbQ&|WZ`eFBmZKVGQGYLJV*oK4}aC8LO>m(_ zTEvw7b18>|jSa%SUT2xOUyDb;tm#B5*C#|O*G=W>>grdJp?mW(Oa@}am^r3(8GgG) zS`uQgg?I0>T=%2WNnolL~6&00p7Zmp1W&_C-6l7>Uja6o6%+MXb zEIx6+8NxHkztMkja__S~_`6eo(Om$d{|gzqBb!g-{K|?qP4YKy+;2vkbceY%fv_cn zXLK(x9+F}SuGfPkS{~eGF@dK~h)@4jM(EblxVv%{oXnpo-?*P(zW`po@UIlEiI)2R z7l5Mt3+yIiO_TFy&o^)W-yPr#B$s&iz}+8<_r;Tb8M>FnS9Pv_btkh%|HA*f3q<+9 z=WhByX-0Qt0mn`J@96~Y!akw@mFQowipO33^P6_ZfiM99L=WWVF5j;H+M7V_N;Eua zxp}b!N#<#>ynk27|Al|qx)}iF{{J(>(_HCrveIomplFY3q~eIz{AxcC%7r| zbB2EIobGvu{y+S7ahyt#5;jTMERMc7QO6I~bEDjfa8_0PbG84BN0-a0lrO=oeHWgm z3@B9I=t5vK8&VA}Q(tr?dZ$TEf;MFrQ?y9*(IO&84q=2_AKbjSGRT;>vz{2MP7B@_ z1D!WdH|-A>%V!i#gc;VIYHT;H45+D|&&c6|siQA;WSPKvf2K^mdzPs{@{XQ}#6;;a z8C+0S9=3S8hn@Ec_Z3s1-&FB-Fv*o!l)ONdyDjA<3HGio9_NeAiXLHQ|CgnfyVgz_ z>*_4r#hQi>2)^a3vSms*Lpf|xu6yl4c*WmL8=NQo|3^hZPOHp8*25J-J3OzpDvO)GvK*cRFn3no*%6~Li$E#K4C;v2dx?&eW!l> zY0~W5sp__)=S=P;05|-h3#^R!@uee^msiUC$#x}`w(swP;l;C5Ws!~)ZN#R`L$O6yOK-Ouonvw4syRd=g0!`f^!J+ef0Z>{nUvtT=A>_9{{#M zNxzSO7N@eu^Ncc?l~u4r^Jcx^A0*sm@>Cj1QL=@dmVl`n6D(cYDY8AC09fMA%ddMJVo7O2yB(aHXY^q}b zr{t@`BOu;NbCmx8E0lv&e{$cus>;hM3_=1^sh&707wp?b55#VMWi}y-)7M5t9a3Rm3<*6Brzg6rsBWEQ!8W6Uwe{`WJT9HtVb8mPmllts+^Y0`0+4;Zn=3tkJ#4Koqr@Z3c{Qq(7eKf8}8nn2sem z4X2CI{{Tu%U@@)pP1*f76Jzc*<1dnLEwGy9iQF}L&O0T0f&N%9t;@uXfyfsJj zP@pz=^Hq-&xQi+Q`$jeY0C-0ge4K7p+3)W;T??SsERN(>S1T2&D56g?svPWuW>Pei zMT&Q~q-4BX*+1x?`<8Vu;VSP>fA1bSbk9_hK>8sn-s_95J1xIQMX37 z{{WoIr0C8ahkIN~VLYF)VeI_R6;oSNUeQZM23W>{j238AZ`fmTx#R5JsPYPFrLCCB zC)|VrR!AH>IZxiEW?39OQ@fz@N9w7mXRMj9!ov5va0kyc| z@c2a0_bOFS1K;2|rc=V(UhY7~-OUSVd_Lv0D`-}Bo$UySUA>6G0p=5^+IKxqPGT1% zCkvv(ds$4}rppYJ6D2#hNZmZblvtn4Y_0m_HtLRsNsnc>Qqe5#EnTIY?4jqy-b#{!qAGob6atC5yS{? zN>~JA$wS)4&Toy^O@-3CD@KbFsE(Q)lMk6vdq)>@P8-5uyL`T@1Ch{TRPSzwHHZ1M zOqzUNmZAxqUnB!)%kTamrDjq`)iZjj)sZ{G%78QgR42 zEQ5MLo8xf#BF7FNtDNS>F5;f|Nxwnx{{XtNa*CUY)nRmQVG`x-d%g*!DLO3Ai3UEWPmi2@Ty~& zz28z4M#W#F(w?$DWr_e=F@3*l30P^nq6UDxyAt2aD!^XsXl}%@&#h@kb z(V;;`OSZKKJNOO_^%~OR0Nz#yhqnd8c8(t2V5sBB(=+#-$`%==x!gCbQm}oSPJvWQ zwSR&F>tNQ#0pG=9?`s*e1l+7?*UJM7vpm~+pu%XVqi#r>pNqGj%tu&hDubh#o*}Cu zA-v9tpP|&Si`CSCc?AszN9lX9=RPTu(KGDnTlX(ZXZUvg%hF*x>D%`s^lY8_arY@O zd=jVK4OKl0qm&a2im#!y(A=}M6-FCZP2Y@!K_9ATsALW1gS%KU9{a%RRzLhtoOg)TWiB~n%H}@K(c4r1PPa|mQ z^zRj4Qe16)PgNvWInLmwkTtG*xGMU*?viI8C5JHAR>@TE>vU)4K~mDmRWl-B)#l0A zFGt|CQq@Vc1GMIgg$u9@F#8zYQ71RZD-h_FZ8ggVV5X*; z18204)YVmDowjbTJ9}4 zXLD6}%#t3{{z>(+KXN6`-cSjwFB$?-87u7Xh+Syi7!>oz4*g25uMBB>&&g9ZO1XCO zZudvk1s?TM-}n_LjIt^kgGpNyp9{tOmM0TgJM#B$r;>NqP|`_TQyeTByxC-KA4v@a zJMG#{V5N&E5~-LP(<{D96Rplk;lURdIJl_TUf?;R0~#1OZ&=k`hQX&(y<>GQIVqz( zr<*D|cGASSYaO zx9ucNhLN7~9*N8#%45lFBH&k}o(@@MZ;BGRyYxb4o%*Li1ilIMQb(%_6;nmok+%w? z55n;#_Lv&wigYqquKImKo`#~8){%v(->9nUnM)aQ-@#Er_x@8idEL>;F`P%u`?Vkh#NF;Qq{>OodH^;n%yjhiO?)l}P8+k)OzG`-P}*o+ zAyt)j5>Fx2tSTo~RX(;&+nM>0SPmQMwFS=}$`PJVmj#K}NnKRuZUaWQkP3!{^Eelr zt?^B*p`u`p7Um;+ihemM_pH8^bGNv!qY=+kOyDNUWIQ^$wm(H2V4erpxzbkN=O{ign*d)mgAJ8)1J zV%6p6?4v1+y{xj?Ks}&T!K{yJ^W>^A3$?&3&Uw3&8+9Eq-t7}aarayIr#s>{QsOkw z@yt}%obnFOU@Y066R&%Q>akjUQT5Zt(Xxy@_KK&&p{DJ3-^Iu40-}V^Qxrpc+ydzf zqjgA#AF^m?+^73Oq8+z?C{Oy_9}j*dT@)Z_Pix6lmR>qIbYx=MF5^QQuG%_MPk5^O zvPsud)lCl3{sVe@u6zQ;>wO|^n|qAjv1*6b)Uu8)J?{Xi;blBcjk|#Qt1Ei8Kqz5! zk84^kNl(OL!f6EzI=JgI`JPDEH-kmduXt^S^w-M$) z?i-w<#F~4^%S|BF!8;)CND6IEUGB1U^sOkZcX4)PAAq9dn|El<}V2 zrppJT^mg)$AneI?Ee!FryEcJT%PsAgsb2nnsB?WI(lf=dsuncgkWyGfX6bT> zO@2od4tHHsMjdkP)>*XV6xHFqn6*6BULh1fx_K_0iC0$XNfnv#yGEvAJ42eTXG(q@ z%~8b^Ee&HD(Z~eE{{Xd%$SiT+mPzJ`MEzSrl0TyQIM#lasNDH1Ix!s^-TweB#Yw3s zeX#yi?@$ERT~J}ZlHy+R6m9Q3@KxAxrVVpm*&}|ec;bllIyZ%VBV63yWgltkrcX?% z$ltSOfmprmV|qaG-{n$CkQWt*L0Ne!q;6)9hg&9x z<2aSi*usADfB;y1NC-CSC<}^;iw}gfR#cdY_gdV+y4QCY*7-KbRpN5{#RgWtyz;7tqCn|omvXJCeO&H&Dj18(juzitR4uU3SvAe# z;DoV{c?qNVkd=qt2s-;MNf&zmu9AReN`($=CLY^4^q-li43NJ{2AjJhaUn*PH!F39Y(@9K}xNVX)uy$8h+3QyTf-oy9>< znChwN<7VclSpE(C6mV3#a~zvTQ^Z^5x<`peBfS}pzFzT7vWNyZ#P3n&;1gnz+sbV^ z6#i>qwku@e#RtmHB{r!0!8T~!xY-8~wt$Y%1xZaC^=f-ISc)D0ioAH}NlsGi;|KX_CyP#5hgr;kr`Ugz-rL5x3VhfaTibVatI zCz&dTT4t$7uy2~Om+g<5Ym-_?xl~j^jfwKNvhE9}cx+J`YPeV$$s3g0nDt}cpZ($= z@~m9`RVVWleylZ7uwa-A=5~`*55Ykw+d6mZZ>O5ODsf8#fpPn159pa4n{^xZy%?Aua%O)*r5dBX0JsG+$>E*nlJa2rQ=8~&-Rp0-mXu65LvPeR=@ya1`$ zhQc-NDC_7W?!*_d$;*#-fK(0)cz58k=4(g_k-wI~ z<`+vp{l!P0t`G_+uVne5pk>Gol9di!Hlg7%c}fz?%?C;GF4x4W z-e;G2oJ0wbDAlF^$9Ex9J=; z@Jy)QgHswh1Ngwf@-UxP_sSa4=Z}6!d zrIr^;Wa!;RF&(19`+h1-2Lc;e3g^FSVW3Yt#CUN+Rjy@$*X)sZ+dIU%Kl_P&HgUxiE*|B<$=10{D zp+z0kvbKqr-y!afUL_Lg99&Jw;+or=CdL9}cT9+;!tO;jo==3QP|Yg~Y(@B}Fe!oU zo2KFK8VsNzKz<;F2>qa5hR@nBM2F*EiwDNN8lU1T(doIBu%_`_8gCV{rsP)6o8c=Z zKfQyq_MZ~Qf$ufog93W(lx!15qMdN(NfaKMF!qav~cXVmx`#E$m6QN>H;$Y z4;6%yL5);Eeln?L*w!)J9=AH<%~mqb4;!4OACx=!mKyO04C1hQjl2$t+!NSfna$)? zQ+9GPP`X=4D{#mwm^)GSU*vkii+ELRzC6}{&4_EqhGc@AYwE9xaLJW94z9F}47 zT^_-GI#$m(_CV-9B>>n~mRm=xZj{mDRS|M|w~~$7Bx{EQbXz54RP_hASP%}HK*p>_ zp|n)O25%!(RW{Z3L08p!JX;ohqsMQ+a!|K3(PmSo%k*LL+Bar_B^qjLgjJcrzao`apu zXFnI>jIH>G-nQ|6(W}y_#`zk(Hk5vqtLX|c`e444q93LU>1rR^uchceYQCAF{i^zE zgZ7Bylph&iPEhkJ>Dn(9^z|Q#`gV`SeK|^{#VDoWuQe@Pd2SAf%E=Ce9qSE-Aa>Jk zZsE;VR=#(gQ9qq(nFP{zSmW|c!LcXqr+?gz2Z^*?(?9M~QdC9Xjm`Nh9=?%8Xt7#) z#`k2=-eFVAx20r_-rZFc!lIRqE2%4R!((5y}#RyFg`Gu*d>o1 zYb=yfZ6no(cwH&O=v`0rj3umoU>whgl{C(ji|!kOj9HgYD+0qlk(6gSV-6XLbv$&% zjE%Wi8)lCsTrBwJ3#Rm*-U_zvm6kqXZY!hpevyJYA9^Q#3Ya#AnbXPMBSnc;x<|N^ zsZCPM+Gz8g{^;gWFPX*1QccNFfLUSlP8Mr?l_PIBR<$KK^He%iO8)?YGOJ&nrdM-$ z^_ruaCVCMq_&yUrEjG#=exRMw~?TCvuGC&}cX z=={&tTQkFXQQ%Z;-qP;sE!JPZX8u3#dQu-zR8zs?0kyMX=@tsxRujdAsu5Xm^(EM zx$_-O3I}}|2%L{>@z@^-=Ae|j5{g$FouDOEQi8_Sj^W;)`9lr&tS#)CIcTTu$lRy> z)*(kF1yry|HDUEa#Vci|eJoLygFLxOJO@-@2Hc?QyU8-{cY=s!MBQL-6!M8Ug=njy z5;MFMZp+wsT_>JXh{;d6k)F!SWF2Oe3{I$&F}zj|8v{cd!9UtlvEzb~n_5yhg^kmC zegi1?;5mYJ_0amgjv=#mc14Y18RRVovc%_^9!kvCH#4^d?Xen=(fus7I)?ZSkm643nJT!AEnzD|dxJ2!y zUF2?2wbRHN6g1m5?p-X85~if4eLN01oON4%l0Wn|S$a(W0CWZDeItJNv@fEu=M8Ea z6EGZC->lVtXX_7ou>LFiH!0s%_5GUXQuI1B&+!jKqfma`=yYzI_ODc(4HdEmL$!HS zU;aA5FyJJ_CVY~9$Q1=OI{=QBpJv4k0}p(r&{1(|KQt&X{{Yz^y$nAN{g2{>1{?bn zF#I$2K^!KD-PW`zFmOAqY55~a*p1&#!~RrY!YUh*dPZ3ID)0XQ9&}?71<^ppIahQo z-5(B;HaBH`NKZFCXY*SuBLS<$U)gP=;^j$(VVFZeV+6BvS!$}g$18azK~EO(n60h! zV^NBC_$N{xG60`K59wN`!=~Yt%2;Kmb=#SR98YN7opcPHoc-bRRai|OL~fRXT-Mdl zySzNPsi^*f$KC+5COMn)O_tj#hVb5_kWCY0973yY@eelyR4>`c77107T({B75szh2 zm~MKk?Lr;NV@&k^j_0-A1A$i6QBr{us-_;zo4<&u<#j}b?&6>yl(2ZLE}&IYnpf_& zi)QF0EO!MXOfoiRu947;MuC;_4`~pzo-O8x^#a83$?+UQio~)gZudDBfu|(rSXnWp z=HGhDmcS@kmMb0QF}HG!#v_@l48%(aAo+#t>totS-d!q#E+W?vY|)RwO}$3P%J#8> zcrU z!OInwJx6DAwM|u0I%kNPuD^LeGYh07{iBvAQ?ZCS{{U$#$Kt4UALR;N&GJ}Gd8!AP zRcG2C;TBlLn+yWnWqNn3!5Atj>t>m;Nl^K08K?n+my)LF&(gCAtLAf>!QCB}4tgiY zNe{E7h({B54t^zIbfLycUAe79TzuC`PD&g)FW@CR>SK-aI5nV>cLhb!ZJR{cl$#cO z9`RnC6b#tVL?Uk&aVj|T9M3t5rly)s;}m#%{r7;INeg$q2r0S#E79rKqBDUg(@Hlv zduDG5l>~A7*42*h1tlC4Zcn406LuBSNvb8nUmJ$!G@{*AKSnW1sy|6=eUshs3Tj#D z+*>0HPl~tZfGh)}j;^%z9f$`$D{RKJQ&Kl82AU{fiUFD0xn_L5)sh&6)(jtv0LofC>~{D?e>3io4xW~ zAB!~YJ}RNvi~LIIe499_DaQs~A62Rdvk|&G4DR`^ znHxThoS+E$_EaJutHYOa!-5T|@k(>StcLZPR2cRbC=TERtEJuhX$vKLC7O;v{HV+L^WkLE+G zqu5Jp=Q2y#f*oFY_$sVO)I324W+v%ipqY>}eyO#QZ*jVt8F(3DWrCX$n4Z(FpHVEE z&APQH#N)uDPbb1ul<)XTk|#B7rC_!06g4KEQ7n8nj%qm>GcL`?QU1zi*xhVmk%M}g znatelrx~Gr?y&lcm4(T+p_Vhi6&qag=8j7bnm8zNH(#>Y9!XKlwFXGtqGL%;XR&Me z@d*C_cvO;Xd{;iBG~0fctD$M8)TDXqxB-@R5&V{=H{u=g?W z?IU&X_$gr%w=;Bj-Z`QyRBtgmGgdiX*=b^kZ_SxuxN)}LLHvXLRVlkI$f}W^HoJ>- zD%--tWwpE%p4Od@921+irgM2LVw=+j5^1@VW-KyERL0 z?*?%D)de|gZ*J3;YI<#6b32ls7ID$0!;oH;E7jh2lmZrAln06qc-&KJrDpXNaN?n? zBT(fACgG#CQP#mA)P(jx{aWA(E_8fBOsluN6W>iR?O9i0u++sQO?d4N&zh-=WhIKEK&D3Lodwfr z0PmlY4T+nYoh`SUDe9t)g~j`mF-J)I7HD^Bi`w!2>R6h0DI>C`tdf=f9F}HJ9%dVZ zs8r-x&3DNSl$U8fN>~G~nYE>q5V|)u+`ik3HB(F)WNS1RDyA1r(R^Sv#jbo=Snm?L zA&N-XO+ivlc-(iYR|w`YzvQDmvK{YeQ5LHskwkF|4yrwp4xu|PB|;uM?Fo+eN`_ZZ z)(dVWbgK;%)ncL{?5YM~=fyFl#=u_d4WwoVOSFIYshj@*U|IH2KB8UV5~?LK$meq^ zikLFe$-jV7_MS?nkKa5K&)!!^D+V7?L>=9eHPsbssU9YX-ZS26rm2piHpvlE#3}{b zqyGS^AcScHs& z1-|u-Q96SWo)fvRHu6|CPQtaC=;30q8Cyl4p8&CZNw{@1l05rIE{@^yO6Ot~BewqH zXSeAKxknw9ILi}!mwDechsU$S{{Wb(LHSl=?lhH(O}4F>+}?dqrk#}Wm%P{on>YuU zP&Z7;g7P=bP_zCXe9>-RG{ zHjaORdL+Z#D8lydX<1d3%D8d`&D>X{zSbnD++F%b9^3Ybk;wl5eL99?xyo94wtK}; zwq{Ocd(K!GUVciUj;W}2QF7;hU(AP8GCDT`3UF>Q2+Ltq!T$jE5BE)$NUs~tQr+p* zMnjYx6mL=G-ghre3>IaA72^G)bZ2|F8wD(p#?oHzl5?i0cJGpck?bMPYII=oPJ@z` z2dP*_g;Lc%oz}l(r^@~J3vVDO)IHn6l1r)#POA@`OB2tC<`AxmcwH+_{{X>PKVi|v zGmS*o`89N&k=RZv7AFX^WHyt{QPlcXBvlMIAOrGHxJw&f_n-@_51Cd_zhftXSS^0W zPzmh0Vs!f%wvFz+O9`lmxO8)%`uoeI;1bRh%RNoY~A0&G*s&?m@zGl*>7uo!$jr7x&{vk_kJmvXY8c4K-UlyVm8Kn*LImQuZBFD{sXL z`9~6sd3N=+y$yT6$s9-sB^IJC_1$sQ62||`vZff*7{slG``39_2loL}P z(@m8;xAt!NBTVzCYT3P`R+S?{e0EXDSbR9FP0g&QrF1&L$U|G_#bY>YF$yWEo;$-s z$gYXv5>ibjA5o*DaTY3$U4;8H+W+-c?X1A$2amj`pE0v^ z0Y}$o}x|yON==s=;b~7O%PPyMm&w zbvuOc8?g79sj8V%7?vad0EIk4R+$<#_kwb!mpgW4Q#-M4N>Orruhl^>1wEA9~g3` z8Jf=qr#8%LgnL%3FlNK$3Cz4Dbd{T4kHr4~f#~&7QOjFU$e1^uxlz!&45bi38O?6f zlW8j+d!-6GfXiqXNUQ#di)0)OuOD&+@;JH0M;+8G4cr#dt>bmKKI>L`hjFq3er0=c z?-beQ8V7FPgw}BRA$# zW4^9YS&kRfEIzL&%VA}lol%kB63!d%ekjV{jXI{Eah1P%ntE9yb9SvdDynu4+-?V$ zR24zZ*}T~B@l~%m8)L<0Dpw4x=A5vsNKuzXFwF#=;qd-wSdHR$cqnIUm>$hTf~t%( z=5KY&F=K&L(gH#FlbzaS`PoR!jw6zd*(7OLT>j@Z_EUIo3ao6VWX<`mnBm(B!BoNQ z>IMG*&DYW?GU4Tee2xuWAA@BBM~O|!$PVfeK^zC7df z?Fbyz3v~G@8`ugV+a7BK?NdnK1RHiZD#-mK0IQGT7fw+|>0TPqa#j$^d>SC)(CJ){ zNF?MD$7KU}PRAv&CF>HblM$OLl@!OJ( z#!;h|#GWhB{MVy}Q-)L24$!l?tU`)<0AH}$uzSqc@Km_XJymC;#KW1VRM_3C$GYX5 zOB-*zZ%-|1ZlJx!zzd%Mn_WXGHl3e(up;dsj|Cl6t&e0)*}!sD41&4|A$F{Iv0WWA z;W*#X(q6_cs}RHC#9%SWzuk8tu)6v1sp_cuQ zN$$H%qRO;n(@O`6U9>{iz9|z#Et$+x`<*}bkvUfM(ZD#QZdoJ z&2X^>$Ez7Td`5VlmV{J|W~PDse{^)!%4$1nFgYxpHQ0 z<;zpVs@X#$$_}Tho}JE7z#4!Ym&tsVoR`T??2x?Mg2VpA>AlP3zDwk#epaX4m7T$D z7IKWf2$q$UDJ&KXP3^rY`ZgZd&w{L%X)~S7{$xE+P?Y5@=Bn!ArtH1No+=Dho_83V zASZ>EA1e%*CDGgph+9H5Dq38lGj(dom&ru)3A=Sv^T#Exf4x#sVYLnSujZ!1V}Rdg z967CxAr>*Tc&RAd&11^%3oJ^4k=1XJ^zn%_)C(2Zi)mye8i0Uw&jF(MRroXz;mwAm z68U>Z$M98M5yND0EPSz($;ce>Sh9-_5JgAIvX6e=xC@8hBdLMc@954Wo1D z<8UKY=n``a&?NYRG!kg)7UPQ;6Ia5rn&Aw|0*`)f=OzjMCM%?L2ub zV+WfIm*R>2$MfnS6wm^}KmCP2{Xnav*&2yH7PzSAv!bYG=U6#OKWI2^-W2W^zcmam zs*@=Bo=SO}96~7jt^8JNl~?U4A%DP2Q#AoLKnH+RRGCO<-E~hHd9dI$D237IcAMm$ zHI=?=q%7KCal7_&e^h-=kkCFSHxQ>5dpqNr!7(vW6g3S#4o^AbJ|gP&dryjUy@L<% zsz-Ym?Z7I?#%$wry0H3^GMnlXtu#UH;F)QmEIfBAibht_%|kC9;pA0p52KP;=l=kOI0p+6buA|r8+a$R?C$~*x|X6@ zX|7)4_P_e4Rm=&yiuB2TBE2$OcZz$>b1WXkbl{ZXf7OL;jlvCSK(>l>Ml-QcmT z8hk2zuI)zevwy|ZH>@A~{XhLytX;2tJ#c2O*-3Ab=*3y9qI^z0rs$g~F^lj~Ml&q(G!6b86ZfF| z)5PBeMOYhOEg?SZNb^}lvALfxoGer_Y~&n@!m3Ab?oPZ?>AQlgk1!K6cwhcPq6Z0= z6oht~%(DLgy6AN-T4+iBWAjxG>@+GC=A0rd*xSjfN9^fqB>oj4yNU7j`c~g#1O69< zgGr?`lN)=EVG*js-IhxsD-8yB9_qyErK^{+Y{9ur47(>~eVuI(#3g0Hs?~aFKl;DL zNmxS;T9Quu%5S2k%=}{{V>mR@eUkOyXtpD!KDUVQVGH?1qcdD!;@pNvs>EM!LM|wqBWC z`&H?+{{XdKonQMzYio}A6XmQu*(|WSxrF8#k#@@5p~Hi?6;jg4oYE{u=k925Ad7;r zPL7&sU0FmtT+Uug3ddV0*i`qtRTd*P5e26_M}noTf~~otcgZ-iQE3PHl(dc-x3m-3 zTi~DMr+8@b>SJ>qcPuiiW0z)aZVHm33{D)94$w}gl9m1(3UxawqvY_UhAOxnMOfVr zb=*Pb7B7URd8Zy~PWO;ltM+&; zLHLc4-|O_6Jos~u!d3+~dI%lL$^&r2;1ul3BZ7h1C238ksjr2xMJR7Oub?VJ@|l@+ zQ-D=M_Lt5w_yyBmf>yQ7#3`x(WS#qSU)iij{9pB7*}OyiSM^`ny8i(2U)6tSF%R)y z)qiJkFY#a1eF2J%)g$j;LSrNJ4r|}X z^$so3`0DR89f^MesPSsNGF^pJO}tedV7+&iH$irFyQG&yEtU9o@z=LN6NmUhWSs%R^-%TL=3YL}{sL5!v z)kQ2Al{@I`1&`?8#1)C*l^9)9p_qRu;Ni?FLzY$_5T(-)lm4OptE9B;rN(J-M>Oo> zj_$DD=I#oHrS(w9GvYDk7Y#ednsdol>uap5@knT?s%9_k#M7r0(TpYXmtvK7bhBKt z`~l*y6SBo?BK{?VKRpvagxOUKNPJZz^3CR=J9;2^wM^3ZZad6fDWlu6D)tZHlh1-a zrXc{RqM9@BFs_P7(4Ub3XZS6Hvbns|cJ!xdmr<2Kadb?pMrI6_E z;%%g9VdMQ%*jVFz;Whaj9I)!J(lyYjTW;9-u9D0o*t3wjgL}Nx=eAY=%gPh|^14Fo zm?xXj_3>!7)Dt)OS4CybMCkamtTIilBxO~%R=b#9D+;N~<~daX*^#`pPGf3m%Q%G_ zBdCg68j*H9Sz_2^*j;1bc-^Z{G4(MWXi*eXaiIyheY z)9AF%5xY}Z#R@}|e;a1T>i&L6fp_WGd zoSZ>bG!-~yVS;wq!031p%qca*U*htm4S3XCD_hpZ`Z4sSdn$JM8`;`3;sG(CjST}q zxev)YOzu)F22Cc5#^F^q>|?%29Igk&VAUXuhjW4>V+u_0Y2Ho_qs+>ZYMUPkAQ&E^+J-RSs@Ob6mv1ihIeJPp*%&j<3Z zDuzt2%CPwxJVmbGWWwlVAn;Z6`G(#->k`A^$LO*f3W&#H-{@6MG}N;`DOg(e8xVbX zqI9keXe6D%VfbWNJYu4x2UHQ*kKyxEzDeF*^Kw;ux!+;9EFiVDvANrZs}iX6ikT$% zia$|K{gm;)lY#tJK6aHCk8`X~njfg@@R|zWwTNGs(5ZSKNKdnxMyv$W;j`B5WejMO zW(&@y%A*s*X=B<;Qy3n1RCRRqk%=kf*Mg$2X@1In%eW}6!*>4w_N1lEHjxi7wHy-( zY0T9_SZ*?%R1?Kn7FTawxF2KkJk>=zYMGt7JSy5KF<5;bqq8eM&Q3*ELi$Wy(MjH8 zz$!_byL!y?xP9v^r{1#JN&8dxERzq?U(77ijqC@=t-O40-#ri@?&|3rW*XXBmX0SOh1b$X*rMF=xxX-+79CP!b+5Ss+QBU55j9*PcG}(VDjNIm$H7YPWcAXc{{Ri9^GDZo@dIn>s{a5Y$C~k=mdgpK z*w#jPNGzkVId~lu%-Oh(Nv_Lc79Cbt=D2*+trNx`&FTq9b=!)nrF}d0(C%247fFxB zdx)x9J1*zuu?#Y=4wq*#g2D5 z@k#MBkD8C6cwmXmkjW#DzFnyDQqtm`8K}$&d<5w6yXVPaxV1Jb2x&HY!*NGbxIt0f z;N=snLz-{?s(NO~-K2joyQ!CFX}>i^T0sOIQ)_AFi?zRyOqyo6Wp9x@RFtw*w>fyt z$S#ny!;Z01s|5sA@$-5z0Ags-nvKjm}prIfBD+J(&a_FoCD7Xf1YEr!t};me(E$&SCGd zNw7PZQ{v;3=2j(VK1+(iDt1B4cMz&( z0u$m_O5OP#8+;M#^i#eGo0aT3gx_7w4g?+{Qn}bJGWcDjZ#sO|3s@nW zVozdCTC|a+j`=Aga~)#08-)dQko(RBLyk<}(%pSH&w9mA(nhd$7{IHsnyRmOfWFc8 zC(TPx84F@==Klax=U=Sq79mdjBDhZ%**yKqhPP_i>S1?js}8SabvtBk{{VZuSM3BI-$o|(a8cFORy~k0h25>;bgHg7W`-6z`zY-1G<|s^ zd@^lg7xAgV2e(ojfJU)Ki7nb*-tMq<)A^&68YKR7tfxi(d%{)e)L|+ROuLbq)DB z3#p(j(3#tQYe_%FbsBqghC{FP$$U>R`<+Ed8DstmTTQug zt&E}cuKM!U`pc2S;^eoA)yJPn_P-h$8eG-XqQr}SguTWes0;L5`uIBWPKKA^?2(cp zZor&0*5aa<-$75U4sxO#Ag=U!zkUHHNmyFa7F+ev$|!us#79`qfF4%@VsEGEZ!Qu) z6xT3_{SQMQ`VV89oL}>YLZ8aGjhN>9HJQ!j)+oCTs!*U3yR5$rCn-o?vWr`sZ%uEwGS<>R4^VIBhjw z`+RoXhS~}fFQ3K-Na+aOY|K@bCBktO&x`Kyiy^t#)qGlO?R{QPl?3hV>)&>gQxFB4 zvJ&+em0Bw0cjN&RVr_4gQoc4)Ffd973uZs_6z$xu^m63ldY}xq^XTI2+~tW>A-j50 z9;x8H7MMT@7}{zL_eO`U&>ID_Kw_5R3-A({of%O|MaUITNDBSXM@ZajQQA3Si%sxr zCR*3!qyeE>Wa5P%*~8GrxI_*l7%~g~=384*@#$kvr9;$A!OCTu_4{*A9tXQ35J<*n z^9!h-;15UlA&<(VnZ>-UsbFWu{F$uUAy7iGgfD$v!rO>XSmXj0rwo-)C~o0MyM18pKW=*TGWY)~Yb)ZU@rSfyr?KAtU#z z^LYN&a4PrIhIRvjSP9M?^?cs)O5FaB#9C>SaQ~kp2AYHl(SSnZW$rkDgs8fIYF>S! z)P06KyFaeYF`C(c4%fWJQ+zNGlso*bV|kWfVyIjhZ&>yr_ zGHnc`V_xRg$DOcEVMXW%@$z*CE`NLX#LJzPzSB^h&8IN(AI9_h`H>XqyD)Me27D>0 z;8XdG_*Klt+%y}j>FFk!Oxgh6oe1vLJ7GGJl0PB8`9`X%(>&K+?=J=dV4SlkV*3aG ztJp1)(!k2n@8+kDTRU}CCKAoK_Uq`arua6Owxd~Leyxjb!UB#LP?nwg=l|N$B~IJE z%9+{=7dqzp+J~UlgO-PdiLc#JJJD7P=f~%gx5s=hVE zTxQX{5PI|pvko!-tWSwM_}ZK_*sjL zR-u3=r7jJO;1)|guZaF-5j){H^QCQcI;p>lVuREoI)tg2Isg^!_DA=F)=qdym_VBw zz5s)ZtNco4Zjt`>8}t%h#^9toa9l{})H_`~r+h9&=-Tz0j_TuYH+%_a5!0o{ z+v*I8J5Qkx>FMO|Ry;N;v7Sq64vn-NQ~L8tjR|O`J7yYgp3CzW@7=k^eTedKrM{O? z_N+Zk0CVJ-^*qS;*4u;l6hy8fw&7NAY^l8n1l|fOEt__$6zErsTuSc4W;EO-?!R$$ zW<~776b~$(@=Q-H^EhA(05gvnTi;rzQsvW8lu5(5el3v{{-DHz?PRhspr<Z3`%D58B@lKFPBZU2nZzh~80-f_bqe>K!JD@ko z7BUrIvpb@pdq^~*_~1LOBITa2ed0N%MWKvk>g7W%oeHUB>1TOHD{W=86gdTU-`p9Y z*<=_p^TGWtu2kwVE)ykE-%7zQRJ}fvPuoTT4`7Mli3&?h_F8ufI%%$lz+s-_{X!!wowhfO;|*B5t)0V<8neczC4qhQa( zIDxVFoLbdSVH5id7eqM0^V&Mb>!M3;F9X8gjkv9LF;#a>f1J0@=Cb;w?a8d9$HQ^* zYMVIOf8O&%4(`^|HJv6vWjwK6T(Cf!p*$&!D6UE*^A47h|DD4nsTraVV+w1Rmi1{B zqc@!PX`8pJ{#pF@g#gYjrIc^`<75l(1Lr>sYglnX^7X(F4$*qen=hGZV0Gd3YZ4SC zSzNRKv4fEX*K2AfmqbT1D2kfflt;T2@cvoh@c82|&VF=o7FnDC_Bp@UAoQ2kn z&6t(-L|FdipW%3(tyelR$LKXnT66Ivm#R23(Ik@x*;S*;l}gZ1vTkr-5pUOSOZ=I# zYHgQ<<62p4BWsND5LOdwJIL>a=zyG5=t9aoUehlxo0D;eGKgElK|oWF;pVABV>$J5 zK%=K3W$tqul=Y%`8?=nl|3=8`!btly8!g^H42lSA^u=OiE4nik6s7UQ2am!kKC24W zxeP$U=I9~?z1nma?3xnuS$dcFhWB& z`vZ2Ggw$^xRn&;;8PNNAMP4%^CgG!Noh~eE_8H{e*50S*k@GT>V`C=ldq)3vk&10_ zMVACin&mP&|b$vAOzdoWE->W2&t ztf(22={+d~5fLTkdi9;i{W|Kg3=NjM@~FgmW?Bp4PUSyGjX?ZzOr4=%X0iqi3jK_%f68)0PHl7L|~Hn~$~?j`?A&ul<(Zwg}7MfPyKJ zf_Jxk!7M|SA2Ln#eA&K09XjTs(JX5kJHY+%^@r+HQSXW@#RWV6ilCI+q|*m9aPYBf z){a?3b~lUsO^-o`^WgX8yY(8*2qlZr#IX{e?lnDYikGf~1*Np_VTAJP4kFGDYn>)_ z$J+RR`WClxx3f+Y#kZT+~?!W3?yUAx zgTo4INg9!p4L3_xS-<@Z65ad1%{jOX6bNFmvtPyU>GPj#g1&-rUSEOr6|TLGSX+qI zU*_sC=s_jgRwqxv8C|Yrw%n|lV^wkX;a0A_OA&AadpNggSnJN0>=DeqHha&_=AqQz zQQj7*S1rls%4*^nKI3K(=hE=AX$3vHLgx;y=_W*3n?+c$cx?!NvsP)2yL&JycAfB7&+|E8p|?R1>AV?y!q=LQVTNJO?85{Mbk`{g?jI5x*QHdi`R z&bb*Z@Z)XN+!k=&RK2=^ z+%T2W6e%ClX}HF_hDra0g_+lqR5CH(|8QsQDpD@l3{^CzZSWqx%@4?@P&joJ3%QS= z@gRmQ`5x53Y+VTv>*p$9JG%_y|GU_6GaJ)2+qojpw!qDTFwlora)+E_(If~%OO18( z8r*Y{6R#!yW*Qh9D6*Qev6}LsTWEfaC)ADrFibhdQ)En9^oigO+YPK4SPPwI=rMe|xqwxZ;6V`mMka8*R)uOTwrAn#-SehMIJ^b?y?mn$V@bezj@~@7NJd5d=;|AY z>2tfQQ$0t2F3t0*=z7<*B7Fth>m|vfTI5@Pc+07vMCjEIStjHlhm!B2ZUQ#bT#Bu{ zaD97b9#;`O1&w;l^CK=n*=gZbYdI&hL$c7U6mGv~m@cH&sq8??D?##v`yV7wZv9%j zPh-_{wzPj2{fLXJs=nx2yO5dW%+ZqbPGh5!e=?G_@QSc2&zyIxl!23NIzr=DS=zYB*G$#OIaL!Ob5tFn-V zdAD2Xi7W2-;gx>P0AM*#?U6>KZ*Fu$<5^vHm@FoLCstJD}2VYGJmvk`4iJe2@MoE~nt zp4>AsU0h*1V?Aphc^`0!_K~!4QVmh^oU!SD|Fp>SG>Z+s{}yrW#!x*gVlK5UdP4bU1t(I9X1pJl!mB=Z0sbMl&epFiG1#wl)^sXy~2; zuMigF43~e!l#^BBhIAtUFiXd5NpVJSM7yKj>b_L%Ced}2x39)W7)Iy%u|+EQpx#}X zXC%w|Ej>dU#5_-tov{Hp1EYG*y)Xy!6?dVo_iJr$FD3Mj0HPeY^naDt{T6%Hi&uGx+s7f9x1xR?1EnIkBsLa`D?<0DpBu8Gq_Y4*baLmH}+T=D; z)PgLzB9&gE6AYq0!ojj$!fUsFP3eN}?cuJ!d!jP|QG%$%K} zA{L)nU{F;o{wTWYV9FIuQcPLM{vXBol7QG~sLjM>*>O=OAQA^Xd(E3;1;y)Q=?l|) zA!Ve+I2L>uQKh_Z*gKL_mE&+IyhEx?hOSg`iP2yRZf>Tk&nQGSa_*&;Gm)_Y$Rv*x z-2twMi)-RCrWGs1&CM}$cC&?2b8;x!qfzvVoZ-Jp@nv(6WTec+``)f|VE0D)%zHaQ ze5k}<(^DA4ODiF8(l< ztwdE8+5b9*b6;l`&LbeodIUVx}zkyhOp27wolcRsI zk!U2QlB(x{x5Fr^>FMLHS`2uq+g^^z(dZQa+w+P_58I^;Jbe+APY;-Q=*VjxNs-J@ z)}B)phIY>3{rx|}=(V-!*eh%0CeX z`*ViwdwR!tTRRuj(D<(nSQ{VRc}+`6hUWpt?&PwJf9`;c@->M@B=OFbo2ky>Sxw^- zkL}L5&v3x#n=oNdj4{w7Ms63s@H2^6Z*ScHoQt=2i{4R-o*YJ)GhP{HO{_B(W=-Dj z%WUblL5{KHCYxYktWnT63x9$4AtFT!vMuE=+;nC66q ziH>+@i9tgfL6xPER+WA_#ZVhnn+DM>fJ6?A^V)rb7%%IPcb@eV7SEjD{%f;%x%yd^ zbT0eg-_GwPC(*=zqr|!#G;$wZ@3CkP5C-QpP~zvujMCHAL9tT|!5+}QSfQ#gj9w1S zqZSt`NB#GSK9erW8IhCUMwQG{76DI?=Tp&3=;u7z4U*`i4$`N6k@&dj+Xba))foWB!Ld zzw_%d<>vN%KJ8JTG{E+sr$859)72#Jw=YZ!f14Js|MpEXSa0ekHU4kT0&i)5dd{2C zrC*KuKNGJ1vms7?OSZE5|9ubbTF=efU8|@6n-Bay#baRpiU-|r|F2U0XXgJN%Km%a zNZ|SJC+>0FzQ(4-=-0NWjD{Tp{kJbxP7GhE>b;HRss8gPxZ{6^`rlIs4;pv+_?aF@ z$#9n*i#9r|t6PaA!$@dv9OfL^oa6O=$E6dW80UOyV^*41TDCEzX`PvolW%cHppP_R zDD!LtAK(6)6UJk+pUy#qR088+#rS=#W-Wg=+X;Wc!+`Ks-=~#)9@i7GXZOn3=j|bH zUar|5JEGIJZfdn|iV}#eL|;1Xw+L31ylV~8_1bxv|?>H6UFG7Qa{xNV+J=s=pIG*!ug2 z$>Ta^qao&Whr&YKT+cWib8%JM&<9>VTJ*`Nx@-t!Y&;ZbZt>cttDqm$>c2u-a+iC$WP{Ib^?0*{jBNE#*tmAA$y z#IwL~);p+0&%>OQW+dMsJyZvFi`h9tHsYE@#hdp@Vw7Y8u5?+Q_Fmfc+a)IPj)t-4MhRgOsr*{~ z@^9=yre1?|OXtB9Y$-tjNU7ees&QpwS|VT7nbmK%%I0Wv{c6~fmr}xMyAE;47cZB= z`w+f2BMb&M+v9DDTL@EvC@j2)CKBn3t^?eSRyfKAONa3sLq1|}`+~+(4WbaPWU$RB zWz@H5RrB&4hm2MAajtD}*_q+jE;lwhb&3~>uME}6yaWdbV!re0D9px_rmkvOG2toTBeUNah8aLZRJljn^IdU@AzJt_% zMbsYm=A)jUmMWp;;=qNd5+Ug<;RLhcFe}t|wXFL9=8y^3zj;*8VP^W^ew^~Rilchn zj?!(@SmjO5JkEy~9$Gg#!8T4l37_?J=oW^LR@T}G1;i_lY~Mel6hXk79zFl$7CONz z$_q+7buAP9;?mzs@hT91_O!6VVc#S5Rw4NOOQ&bsf9IYoMc;BJVRVem<%f4wvJ%5M zOk}(n>+85*sDyUS{4FxQCqu@2?UXXenS@)XM^s;vCI*_fEMoLw$on~Pnr{>>*?H#w zne!*yKnxxx`1Q{j&8KBCNJ%W_JMOVm`W;lofHD0=D+!hew@?LyB*rMtgR;{OEh-~_ zNN*p(UgBb7|Jwyi&}6m@9b~%f27URcL6YmHIrQ=E8$YAf-xnmi7Mj+=EcH`JnLFjw zjiP#7Mqh)e1`7UPsd?XqVIMdr>hWW6Q75>JN?1ZdC#$7U+Yf1#i(<8^qA3>1bjkg+ z!xh^p4H~H2SfO*R+Js?HFX)!df5*w%YYs*zLfJ`Ij1r_15ULP|_q&bgAw}MsoNoq4 z-;=A8EWhPex8-r~m=sP3)KiOmN@tMcuHbpDNj5KKU_G;XmPkzWmy6#Zu}Vu{%TVUh z63P-&dvxUI-jpK-+xtT1aqkJ^NPON9{t@IAO=I^p$afD8t=jx)J4{F}7xl#e;~sfR zm((6o2sL?yqJK4wy!v))0o{3_JUbTL-X6$ks=-QxW}$WBXQWKG{q%1EZnN)Aql$aE zk0K^@8D8t&N)pH}tL`(Lka;>k`Gt;gD0ci5PGLYRM{c*odj-_*w{H+MOTQOrnq!Ymc2QIgMA(l`vHk`6=^a2Y_y+ALH1Qn z32DEtHrb=wzj@Noezp}tf1tciHzRS_hP|0fc;QZ|S#E3Y(57Zcr~(rPj|%`X*7iWA zSWIJ=0f6Owq(q%dBQ+vwlHChH3eIQ-^$?r=t@M-7k9118I5JdXts)RZ)Py5jFh)K^LO@ zT{w&4b9>3z)x&pw;d&TTH$-4UT-TR%g?0mab{Lr>?j=(&-7 zVfWch>&z0Enm8+C&QN`eA&wG`L7q37Ykm#-by9|w7$(UGRgk}NVMb5}sk>jGJohvS5ORZjR_}E|5Pj zs-62q+IVM4VcH(CbES+&Oz&Bwf95}oRb*d9dw(|TfrG2{*=TXE6UXw1o*skYQc=q; zYFk*I!xjfzjV2x<$krf^`eKR`S1%`gD9rWpm*o2nHD|EM6!n%2$AVd7e?YF5Tix&I zQbjnZ&=5?{bmTe0*t1fqGR~lGqvtJYWlCtDCi))h-kBHRRWV*JW#X`L$qp4<3UlcP z5XveUD+CvX8_X25Gcd_5C}DH17gyV~ly^#c-Q_;-XDyDsTMy<1`3e|FPE<;{e$yk+ zMk@&fs>Des?0GRB{lf^KH%~k@GAAf?3Y@Np6`YwNP+px-Hi4B4Gi%Wbr;J=p$@2_C zz3^-;X58&S%7=W{D*bIGzd=SkUPi6XwRA+_rm}rju_`h`-s_7b5`V*tSzPXecL-fr zAw_!f$UsCb{!@RFPi$c#R15^qVZKQS(Kh}LY||J`O6u5*J%>d=Tln)`+Sw-==p^38 zu$Mh>G$`piK8HkkNk7a{k+kW{*TvY23bMtSw)nS?^Hbs_8j>+a=1(=^;eMaxx%Neg z>NHD@|OgZRmX=##^HO`+y}yCgb>+d^x6A+D<3>2I7U?(U{Bn zuJvKa)CeJ_vGyB3A=R3Kqx_?ZD31;q(KVqAz_}|ya_4kfP^i{tqJ~|7Qh}hs`Db6M z>#XYh0K;ZDzpSA8QHBTyjse^4ZdxD!;8eak1FhqFXMLp>-h+ds=eXa3u~|`@@FmFi za;}@l$|~z+;*3sZ8xscQja^`XFpBl*mft)P#|lAtfLL#7=2@l;|FDVf&0>>fLfd;H zRKbP1op(S}Dym#}I-SGh)#xgkXV7H@3LFk3P+hFFpEwS+O#jry>VHm`2sXLkO| zViyDm6(yh^6#0TG_3S%|=GzqDr~3$pD`Apgy;qR}yU`$tV%IOIC=hlyFS()QtX!r> z#yh=`5-=Nfpe(2^+6KSoL&75>F@H{w_@XGLZg5`I^NwtNUZ`#GhnLX=zp&{B9T6L` zROX;hyWs6BCx3pz(|S{9qmJqR5Zx|jmfzu>Q~hjO{rLj|T~R?~vRCkghtzl-_noCu zYda&!`S)hRfD_sRGWI<^zF}cz1O8;cFX=`T!%HjQw}vW3$ZwyZ8R9HA+4vV>Dk51; z9f-bd_qDe6q11t#lTO3cfR7YB+EpQXrLOB>a~~6WLJ4D7W~y@=2F96D2}9yfPuE?xIFHn|DGS9X??e_i{*4742F? zCv#e*hNHwydn80#!aAbJ5!ti@O40NK0*-dLJp*N=duMprjQtUN?T)|yI+@HIFJqYk zx$|8P$R|I&ZT0$_P_0I_T{qZNPlC0pq|s<2WW?7c-w&~?F0b%aUc$pcfi*Sz9K(4x z+|+ydZe37xA+!`qQ3|T#8(?9OXQH~R+6ApLg$S9siO+MZF_;;4Cegcvx5c)u@x}=l z0i32``I!|1GLJ*!>Gr2h*LJrmy|C4z>>J3#j9J8 z@1a_|HoM2pU4q7(&j3f?21q1AZa4=I7R~lk>wj1 z7Y#}*7FUJ=sLPKOh4g0)egus(`GB+H6Wm8Hfq4r?%G41$Wbc4{K9fDcAA1DhikBm> z50~>-H};@o!Z@W}26z>x`scc3*I#ZVz56_RwXjOkhTz0XlCmh0a3gmD(t#Dq1Q5ti ztny35MFAiVtE>zoC4apLNb-BJVovYysT59ERh}F{62&_mULe3Z8l~7f{|^J0K})FR zD0xXTd}$OsI3tosKzwAKfzw7}04tYp%x8-ncbpR`mQr`BbY6L%wIYiS9)$)nT<(dm zEcoQflppw}Vz5Rvdv@#wBOy$QxjN~#(On?KbbI!_yC_+rjfS)RnMbNvRn4Yhsr{{CDaTH3Os5B4R&8w33!GRx7wz9mtUhVcS(-mQ;f(yflN^-1ETN)Jh=fQZ4D9O2#|k9^JX4U)vD5!+*`K1&2%6Mympo)!=(g1Q$sRWmfrv)Fq>Z)0Oe~ie1zS1-!UpU0$nD}KAl5z? zY9c>-ER&MPuU#>oK%UM4JgyhN%>hHkf>-TprK%%3)d!2S8ygqh1l@10cBC-&z>B4*D0EQqR2vO9};htSmkJVg466UMJi+8`_S)-ozVM5>Sqek zwFHmnNX~uW`LY;gpSe`(U6nU@^t3y+(5|vr8Wp{sUvM~KRL)_{=9|7l6O#~iag*`R zSZC*owy?r~rpEjo^M+4y`zI;z7=Kzk-^^fTyWR>*AkEv&+Hx$}`W5l^QeTf}E4YUuNo)Q8d z;=kkNfEppeST<98b1KM`iZ1;InU{l!toK#+&_;f{?ZVJYlR)LmIenmns^IApOFtVy z;p2mkhVJ@D8Zn>rD~?G54aFj<#I2^kw@|$h^E3G*hnDK18|r_ZokHUHGyRjg%{szC zgZXH<4i`Q{{oSROGuKPVqoXEK+2_tPy{9}8r>m9DBDHm^l#Du! zX@VWhR!E(g+yFF2y+o(??XLBez$~&`riNX-LoW9URNbU$0r>LJAw8OJCzbKyPQojI zG42c4fOOfOKE?-Sd!qgxO9lrR+_v{{G@VVqkj&AexsmWxb)DNoovPr67!ONZ;~vppbQ#;abDPP^zCLXF3+5kKPKx7w;a;Uc zoAYzU`x!$NEdaU;%hQ`JsGm3dPnj~cY)N-oVp%wTT1WQ~23$O>0JbHGuhU$ODw(#+bj711lFCP3Z`Or2_|&JpddMPES=RzE}~( zim1I>gLvF>(+&DF4d5N|sK&;MNTIem%Nrh8rNCln4^0(Y%y_tTl)i85;Cper^bf;p zC-2~J$IB^&FY%Uyo z03QE=neerFPdjt?=m;SLh%ca4p)H7dbZV%JkUHq)8wIQb&o08b1N%1$qNySHM}CII zxBvhb^?-;}Z;yiP4Fx@+7aErujxdQ=hG^)2OjlWI=+4%3i&|wfGq(23a%T5HTt#Z- zFt5T`m-!N1UVI+lKQnS^7JK>WRa`e83@d91hyI8p*SUAdQ(w@I3*Uby*p>jZ@`b>{ z21?S~rh5w9@z`=}p>G|Mk~Kt)Y6-f~A@h^!Whr?dtPuJ0l+G2_xd$B&qiqzsQxhjX zy&~7ulV4mEXe#l(Xz%RNAUCsc-_^WP)5&WwI0ccmH;_`%xf=*FMaHX)%QI@Fob0@= z8&j)!QX|2AQ0_Ac&M#@xmt&xP+R!O}%6=9g1TcTc`dx#r$Xd*&i{<6Uy0{X78IS9uD+bt!Y~XSX33PYJ5ba*ka!cQn&D;pt zbzG}oiMaZTV$YbuJqdUeQm-|ZD(lTF1r6-0PKqXLyQoK{}ZsPcR; zpnZ*St%yyk8TB@rBh&B!7{u_=dJ1hk0y5UUG&1zjG5w4w;Au=+CPg<^X3HiHE`bYx zC{CT2*I{yGW7-eS7sr_0T{9fYdvCeci=6rjM!s{p6JYdXfyJI39cARYUd-pyF2CIZ zO(0aGb}&Pj%q|D}-?dr)qLWvCmp>U+0Ifp`h@8^SQ>f6|edyaZ>gYt@c#0a!5umGC zg@4aqT58kXu719>_cQALl?|`EgMZ>xJXpq6DOvQ|f8qNmK?P!Uz=qGwODp$XMisrc z=uwZYYoLPC=T!=eYgI}Tk@o@@2N#jt1c}T*{>Eu)^UhPPaiEAzn;~-bc%_wxj39&) zgmb!7iAZ%e6QOLpGQrA0-rjGOtS95M z$pzkb11@jd-pG90eV{4;edsQ}L=|6Nh zUDis$7^&|UO1W_c{0`O7Yc;;d;0aVzG7w zWt=xnFR-s3#Q$Y+7h%4%B6QRO1xX=;}jj`0Jbw zStBf6w(}4Sbs*%7jg{km8pUYR;rx*Iyqh`mrzjIcBhpe|-!xgSHn9rv5cswN(G-T)C;Ch3AugS<&+R54Uy{yqrfOy+h;FaSzmgBADj=(;IxrN50kg zIU-CaRd;r4I#zL^$6FErx8dm!ImHj8Rm1wu0(IJ}hT7`IPX>ZOo>t^q3GD@(d)(w7 zvNzb0x^6!8_AwS@eeW5=TTORS++6I%V_2R$;w| z+2kK6ozpZ=ns3P=F8?q{ke^=Z-HN|jzcv>gxgl96841F9tT>3ooZJqHn?gtPkv?in z>7tVjMyEVKoa*#)u~PZg;I|?992s`~htKT$w$&4}7^byK%C<>Mif>8wIwzw3xQrcq ziloY(x(}t3$zDq)`*r00^g=niO4OJ4t>UEMPh5Nw!P_UG5XY6{ESi1h>zvqfS>g3c zenYWE#^T1yGZDPxK86PauV3Ll=?Ar)6*GH(kbgd)Sq}A++V|sQv*UV!I;P4;YV*#$ zAIggRtEPT24p*7PG+ud|!XFz9sNSBAm^ZTu9v*lp-&ec8gCz_kw!S-cs_o~Ia80%2 z45~(3-7V}(j#OXRg?ptK#vk->T#+@qlXP7>1(0{b4q$ZjV+Xf21WM~~wcUWyn%{RW zUb_|hYKQ6f_1N)u!LdGDV;c40UDY4!j5$LuP{)ZP=hIfR!+$^Q8;V=~j#Q5tyNaHZ zQyj0Xde<&;139ACzZL8dtc68JN*i3LEXytcY_h{&1tb@HRaE|k zylYIT*`rVpsq5Zee0};#UqJ z#~IcxyF-DsDfb;fIaNh8eV>}%yR*RFMEMViuj*59>^oEc%LHj=6p7H1sQjso`& z?XnA>`2W0iZlCYP#Q_72ZZ|TbP{k1`s1x1^H3UGc!=jF#Phbt&ts?n=4#ntemH`} zJW3#hi7>GBl(kF$?j3t>?$3?e;)QACdkRCGJlUm{P7l5K6L=qth+URy29;O{QluYB zg6c^!#kY-8K!jWCB>xry@TK#)g^*1eJTE_Tmj)sR2{H`L4qyJwCa&#@;;!NdG&gL& zk*Hc??WTygys*oO^l8-4)aD%3@xXK{Ns! z4ayph#t5+m*hgPo8EF|T>%VFJnAr{i_Ulj>$BYi2A2fdNu+n+La`xir{@vV9TY8KMDaLLrj*ro!6 zp7-RETK7S4+DfVlfvNdw5@}sd-Z&B0uK^wdqYRQ9(6^YDRf89Nn)b>3)k`|0f0J&( z=gGn+LW?jwk@Ok93xL>IEib{yem{U=KA+~qEI(caY+nDzr2NUrsnHxRI%)S$Y|P#p zR-;EWObb@&SQ*hEimHR6$Ki(o&=04*S+CV{cl)SBf{|nOe*U4hr_-z}v>N%XJRX$3 zNjwf=KOhPAOn9r~N3g*Q3?82s{@mbt`}8R^dKZ`p@Nr$9`>cz*)aZ$XI#^{XXA_uH zV_6$nxvfv->?`g*`=8ll(yA_1E-p#(V_wv2eoXRlg5JHQ?d~o2f1k-qQJ`L&#ukfS z$gM$I7KDiT(Xvd!IKanU83Ro0hyV--79r~sGo%N^^Ou*l*3r{B-&bIBDu(B_ohahtOL( zs2!|SQli|vTLAjQsa`Dp_ukAoqd*LN>nf1#8L1zZ-tfXuEqlVO3Qu5T>vmD534RKX z@`RHPtZ=aIlD%KBzCFkQKiO!7Wy<7uo-&~z+_aK3 z0hdMtjCuX1R-mVhDT>}6w?;}9f4&WQ=ZFHeJQGb&ruT9}$r|dBD*DJTAMuRLb)gk> zyxZg-tm6QsDt0|`o zx#$q;pNbPzz*?-K$1uRynjx(i3oW;6J&#bB*^f|P?H#bxWPYlkjM??L+uka9z3Yzj zfK`LNrBS1CcJ8HlRIz_@6C!&l*X}uD8z09CybUdV(Yp`;XbrDR8BsMQ18bJUTnn${ zdtM17bPWCG@mo>#7zf@5l^ zK#QP-ST4{IwC}pv7Q?;Bs8KYaphco4id(4q;RC;k{!DGcJv6|1mr{F&p=*V7sT ztDq;0IGr+v)c?u1fpPkw`^`8harzaleZ{DbR(I9Ty}Zh`FaE{b95<od+R4;$1Zd=b*3s9hVvlFz!!N@->&guD5ZiM!{zCvTjMLF!F+(vOl#d0SRDm5Vm zLlrOM`Cw_yTMXb_SK;1!`jLxvkM-OePu;m8R0&!3-Wh*E_P{JsJ%HKQ-Vxod)k^vdj*sMafCJE)Cj+Tb6U1$o_(P0t_3! z=ND54CdzQXD1sG3Gct%q2JdlCEtG*f<&$Hnou!3{lS=GVk8>lWfJ5puX*k*AI zM80D`7ubi|7Z`qD%kj&LkHRP6$+g=*40fBW;Yc~9C)bG&CExW%2f!MsSvOb|yH(FF zL43H&w*D9OIjciV+#{W@G*pCA9rp`rr@_-B&!WCWp&&K3@$6>q7k%)x6MWIE z(r$Ktuu_(PCOwDB?isL73y-chKidra^pdX*lHZUy@>h%kG&V*;M~Me4kcwTPG(y(I zDiFvat2jx7UwjT`HB85_aTUdY<+t>QRMMw8sMC(?iSoP&5K=a>aqhJq2St9F?|+wp z{27`~_FKE(Xj37emdha^pKrsvm>pRQs$y{bZHhEv?aJtgf&#@t!_PM>%VDX8e(6GU zWb_u_v?ayoZ0OmyLeaq=XqD?-Y+5@0D9r#*aBIXvIwm5Q2nH2pg1J78LmDX(ZssbG zZc^n84YR6IZ+?@bP0s?Nqe{r!5GGv4JugSaIPCEO6~Y40niHPtkm^?_MhTjs63|gB zuhioE^luF^jCMW>k+24|gq>2u?zO(-Ka5?edGSz?12G9L1C~Nm|ANu?UAbqT2^2~$ zEVRhhj#cl5*dD&WIoDqiccS0^VTe@);D;+Ug!T!lvG=1ux?0bV$ow)5eN3s_DE1m8 zebg@jUw&l}a3ALT+Z)M9xGw^hjkNc9fcVdmfvZnpkBf|J68RJEVW@WMLP*GUMA-bq zLPwP^0l`4F?iAfol>@##m%3^Bbm5K+vt_&;FSjL)c#fD?D_BnP!LaqR=h+ zL*%K~cIDb*_9%YQ#1{AW*zXXaoYjb^uwqT%DkaY26ac1*`q|L(3(y>E63C;J_ZF;T z98xl#NA@|plm|${pLz{*iWeYOU8=RMUIhzY4%Vx}wFAY>fg=s+T*^g#u~y59*$YpTu_7yq?0xRlBeOK{~7L&0DwGqJ$@oBd0 z^Tt-#-?qKL(U6@*XF5MquK$avw*YG6`~JU?Qrz94c#uMIcPS1D4sEeCxVyW%6n9N< zcZy4KYjJm{Sc`oA>GwC!%yX03%mBODJ$tx&&%Nio-pIBX(cuPbWb>6TqDyou@R^A@ zdDv79;InXz{}kt%a^ZK==qdlww|xj(`JV|1ufZ;#(rG`CRY($mnbFUYGL3O=mv;k* z(`qzIm_p9@s&XS*(!qO9*-pVh~<)4@e=%^ zw1cRFtnz9VuGoN4FJclR*1g308hc#lno7K2q+d&V<7C5x{+QS|R;iaZ&|L6p)rDW5 z?yl4KS!@Q|rQ@P1ry9qUs-M>&J}sQ3)`M_r_$mM!9W9y+hWnNEn8sQI@PTDW{XXeS zh4nq1Jbjlh`u2Ya4Had!a_!y8Ft*A)g!B;SOlj45_m-a+V$5&5Yoex1cP*tpe`E7E z?E}qxQ)`V}UOL6GM(4%3+eg7Z*PJb!J&E_wo-*_x#-9#X@EQ&17-8jY>Oz6xdV-vz z$BiSJW-7~n3p?i?dJjcL+YY$g!BZjXy+;(ND3*A6*T<9&daN^6t8c0Q=x|mRPxx4B zk2tk_b1tvo=O5UoOgVOsMYxvwklTZ(x6o7OTYdN?6K9;N_@qwqK9?9&zo?it@cl+- zK^r(KO~T-GPyyq0Gg-laWNQ%&vZ;xcCxNsNV+Z|XaI#g)J!j3d4$Vz&Qt#8n;+0A5 zzO*u_K2gEy?m%-R4N`T`Bryah2X!9iskrr1YzI)gS;DIB3&`$1)`5xM*3N537ip@{ z!=rXz2xYg8gZ&=SOK#J)ZuLJF4?s_a1r&1{*4-N zRm&~;%+@3zxL0Y#mkm)AQ;J(GLB*Qm7hu7Zd{6SD_`Dk?3dR;9Olo= z-YlYdL6=mXgO-h91R0x$m964>NfX6W>5aEU^H-MC@Luk-9G z&l~+obH}9?G&jM<1X5w3m(mxt(RBDEu8&G?19uAmv#`S!|{>{kOs)3t+>dS##r zM=XP`z4&<4Qr{QJJIV2iNELFb{-I;v4VRs|G2ab^lxs)*Mgf8-AyFMRq4a*VHQx3m zQvFX@%WLMrJ9+O{Bp++3#PCBV>b>5CsI2+vQirSQzmx<|pqMq2h_c>7^sz-Jw(n;l z!w1e;RVu(ldyM$ES>Hy_|3kp=JQ4oF@*=3F!wx7OKYzw$GWf_ORvwa70T?Xqa=;`i zChS*|9?o-G0}<@y)@)ssH10}Z;)O5-wcN=w>n%$z_iWR2B1fR`sk&m3ubj39_e0hA z6@XhoZAUlJMm$xTJ^+;m<|o6sfJ|U~XHNdo^Ag@f(?IXfo0R)}`LNd^xNkv7NS7T! zhT?rjHCq)XjTNolrk&Ck`on@Gb}=Re8@UFm%EYPgvRk28-!w|g>ZCY)stB(O?eMtI zSI{-nSf->}C9xB|l26@?cgN(UC5)dE(?oiV)b~)>&2i(TO<_OBov<0JM zh}%zDPX^iwIr}$CT|FP#-J5sOAYOmUhfA<;&|-EPy1{}7blkLiB7k+c+D zhi#ti?&1CVlHuhWitO++xoF_s(0d@T(!;Xg9`!ko?Nx2I4Pw0Do3q@>r-3>Mu(F8j z1cc*puJoARfv)AosOWpf``1T0+r8A}TZ??ps6AKw3qP3Tr__&1kcRxNV6=^$kDN7k zwR2U_CT4U<_G!nW+G%q!xE53?+{>X!i$=@aZM3(Vd=ei|P6j9$5!sC|#UW)Q+qv^- zW4hURSDst)lLdw7t_h1|F1i(loKzf>tKeZ0R{H;dRy2x~?OlO7RIl>*yl>ndf(8}_ zS;LGK*6a8Tn2P;I>w5~N*}(~e9L}jj%%*J>jPFaWcIFCFKVmOr)F)Ay zY`;Xi16Ws=XfQD(#>~&UqX&E}JXl4V(Rb$9;r$AnOr~|M*_?DAxlqZFrMNNlA>RBd z?EvU#1rm~L=Et^yLnJhqBnV~w5PuX^z^Vu1^;cwtQn@StyqBLG^X9TwnRRjg6qB8N zYy4x@g=J2J+|=f==diD%g0-|F!Nz_yCqU<@z5TuXcsw~PWy)1nFk#*Ca(C&6EO+~k zu-|d#TFHCAXtWAlMl3ag?0h)uHAl2Q%9xc0t!k5?hkL~d;VfP(9%kx3sV-bC2y(>Y zV3PLvE)FXV?MN1tr`;xOx)ZBuFH`nxgS1CPJpj)HW zJBy{VhJxZEWMEROdTk(x*Bx5WrL*U`fm9HSA@$%cwLYl{RC_(BT(@yE>I?FcjrI-stFQF zE*r@r;2X)YZ=PRosqGlfPtHL3Si;2?JQJq6w#bP=pDqx8`FWgV^L=o?;dzpKI!?X* zo=5yi>|O@LVg}KR6#L}Fg=J6W!fdBZ7?I!_X?8y*QY`zmOdE+9%?XKR*1zH z4b&)z*q)`(ZS<58>Mx>Oqo>rJgn>7daGTq!eN>G9VXw?Jyxx(jeEBqos-I94+%S-_*B$y47tJ$Gev)>`U#zA}9jIfb{b%q+;d%3_ zf;BALe?V8*$Xz6!C5Rz=Ni3M}W?p0p(`-3Bdx_G3pQx||YFGwpaR@!$iXtZZ3K#y-b=@5jvCCezlsTK>u2RkyMK_6f zWKQCvyT(XYZ_!TBIw{S}Vzj@ixW0FX{>aN}^ASs6&hTBAx$!w2Kd{`4k!tH3`3(!AAr0k_%yI(o4mSfd*Ha5ix&t33}L zippzk$jza*DZ(sf^>G|Pn;pzK9*;bQAp4G*5Kb&z(-8|eg1m40VODP_D9!szf)rAhZp(d?&-`4$ zJ^p+_Lp_S=x-iTbHYt{-k}=M@zfF-er?+_clgqy1Q+idTSKD%vs3P8XoM^4Aj7Nrr ziofOe#m*_)&gLz|s@`EcN-Nug-fjB=O9-z;b|L10UH|leI+`a8`hiY;<{*L9zZu@8#5d>6yg$DL*=T70c}0QuqV{! z=ey{*wS_BNc?-F2!Z*I<59*)dzddRw;^aSSs1KCCQl?>Z%q)HXO<6@l#7H)>CKQe{ z9y3O&^B+Q?4pFk)4W$3KfAko`CyT zJszuM@glH_lgrH8Ai{adFw&~38b46z`iKWzrL_TQ_yAs(<}tqlNznb9kR~ho)iQeA z%so4Gf>`SzEaIn%B4;j~UL`FGV8FEwu&BtimB{`BKz%J0$L2ku6}un*RqHYV&_7`j z^=d-BcX}><)ubuJsJ>Z{H;|!RcF#lA3EG~-Z}Gt9JRA9=Gw@a0Cogj;5_+&#;cT@6 zY`RgsPkdx)<>lKTLDpxAuu!kQv(9WPPwHB!xBysMS9~cis!Y9MAFCo?#8U$@Kio@1 zD|GPsb8Zx+Dt+HKQD=%Rub=SmA{GmVG~{l}{3bjDjtr7;T+>IvaP6nQ9YJxH>K@B* zt??hz5yT50h|i`~=q}Xm-RK2tsngj=KEkJa?wJXxDlR5sA`Y(A7{48M~~dM`UtgVydF=vT}MvxS;fJ7@-t z0U0jg%Ps%YuLd?&4c>OT%9W`qi)YEXt&%L7RwL175N%r2*88B_p52IPUG+%oSeVu* zFyc)bwLb1?pt%}9qwi18$=GhPmC4HzBZ}Rp)o|;+4}{BX#CR2mTUA*2$?nB%7b(2$ zGKz4vk(EMr)L-zjru_pIJdEqXB#+@}Ps0q!H~@ULbTU<3?pa&ll?X3TTK@@3OVSyn zn%@yuvz=-9}5n zkTl-k+#X@E-_a&2Hybk8-rANpX(`c6SlEMwTrdJHqNg?__VR+$%Uj8M zxl3-GbJsJeNGQYll&Q5(a}wxqaR9}nzddsqif35N7m10P=41FSs8Wfs(+W0rv$EbQ za~wo)C}Nh+P9`?0O_9C;twQbFDiY)gx05ols+}%OAfJok6(&~cRMmkpEcT`=AhOWZ z1`GEKdb#sz#<1R@w Zb@3nUsDq7iIH%Pm0Rsj_lBg#QgC0T&M5Y1QT5nv1N+JRY6*`~-GX#TjuMP^pnZYtMf zq{axuP*hJpAuaul6lqG&G)`8BpTIZg{^OiOkuvF@-##Pu@v)iN&Zg4vn!s@Fk{cG?89$_Bv_zl3ey^ z!x#TS8Nwv{bf@q8&9WWvtEDcDSJeT&a7k-Hp$--7V8cIc*_LPN*O3=3a-ZXmFbkKc zTpwgDiwCcVzg8{sNO2u<=+SPBE`%fj0RnK2#e-IY4_!%$w?d9BY zXZO5(%9forBwvra{<2QhL>7sde#NcU+=eie4$6FFv710sN#o&phR+6fEOq@6RVu$BdfI-h#aBM5`P2HQIO$(UhB7N`dVy11`I>)Kx2A09^c)H*Syz*^lABuT@s{Zm6?v^hB z9li<=NJ9d8g5K`K_A}aAty|7+V#T`}LH{8TF7*W#Q%+!;%Lgr#lWncTk{lCineU{t zY8>Cfs}7;d-+wV|ypT{Tvsq~Xz?6>u9+?PJCV5GXTPKvTa``@L`Un6uKy)A32!iUEFU+Y z$#GI2gwy|q&G;jvbg8AOnMx}C&ik}vnT-3PTHw}u)&CG!F})l6S0ZDmhjg`jSkiO1 zwLxFW)vrpvq=lI^g;OTArG<3gGw?JFhU9Pw0mN2?)mj0*617C>vq$~9_(6Trl->pH zd`4?6Rur6Wu?wIP7Cm;u>+b-zwc{VgnvGfYBJ3wff^p-?RbrOj$?w)>!aEco>QRmI ztc%qOLXXIQipl?I9OR7TPDp0)-SnntMrW~@TugxOl2x6DIfxoYRJnFNSnnT0w@_5D z^j&G!P4OjqTBm52?f1m3#}oL2=A1!kDN7&0`9usJQ@Rt+7eFPLPX}hZaNY6us@U9|`f1=D(R2RWlk>{7jB);zfK`O8q5YR{0gt z8<5iOm5U{kNC?ed4vG#z_pKoWZMIidBmW#^9Rk6fYM+;u@HaNvMkVx3buSG&e!1<{ z0~EtU=CEZASd?~W=+3#+5uZ%4L}v9q`E~X`gsZw|5e%{rvP~%R`VOeaL;2uYRx_VG zG-S{L)QqHnJQAJE!=U4bZp8(;HUSf>nY7m$Fr=E4S|;-WO6>0r50l;LUJ*sSE8)@! zv5Fo_`@qQhT>V~t6tTz9E?*s#Hz0ibMUe8z*uCmn-HO2MJb$2#ou9A%r>Ijz$Xkc< z<(NPtgz-m>A9AN zsZ$&H6=mwxW%gV7QEm4~SsxEt?qoxLXl@zvffgKR8=Y&aKZt^df=s>Mu1H@1zH^K0 zoMdGtjy?#gez&@CVNY|e(KTyK%ejGb&+^;BdSZ*w<8UGcoYlmXWInv>>M$k3=f%fi}Nm-B{r64)6{i-*~0} zNR|lri!^6EQ*)GC6zsn6VZ_@e7jxzvc+EkpXI+o0o3T^>Nla$obQcDW`0T`29WE$7 z+*h=3YMVlRldL=@iggw*8;oT|8N94`(|RLa;P}v1M!?)v7vD;Ocqev{056M%{~YX0BYG3{m*a{qK{z=lyo|` zD6K9sR<8DKn&T_s`u8a`M>HJ`t-Ky(lH1N*3m>B1G5^3GEU2}N8l!uT=3rQ4AAgoL zmp?c=S6O+@V;?iblZG(gj3f$_`h2!IvGmC-?8{%J;l?H?U*YSmpkgbm?GJLg5fUs^H z8N)A{dn4oY&bYgjDp8XnAD(~-dzw3t@at(`gYQ&q&C_A;fm=RC;ysc<$iw?-^3mFiJG%xGO(z{xa;o=mn5H4mM(tRvyZ*(@|E>^xG8@J)`>zQaD6?6F`3f8-l*R6^xK;zZh$Fe`dd8;2Kncfn9 zL>a57~bbqGlkS|f9zv_P)TQt*BnPu_pD-8Reh3P(@01ipxujOC-okj9N@rm9fSwC@FcsV&dQwO4t%HU)d2XSbl1S!{(mP!pb%(P9ih)+5zvMZ2@r&Y^PcZbeP?FAv zsm<@u6E=E(MNDVsU>EF+m$ey3#|uDFxbX14R=CnY8H}Ue1#{{|ksy(((yGjVOi+tD! zRE}M9RVj+p_xyV^Ky@~L?Fg%D9dO=g3Rvc!`|jNluM8MnA07gmx0Xw*zihG0&x}+e z@>+qeiFrAMp%`dKyDblS^Sx+r6x_e|548uU&HY2p{p-!VFBVvEB6IB{F44nZ4`3L< zentx(&J}%71OGDnt2lAhue<2=dXm!FH=tkGa#J|DgE)68irDNQhFASL*hb5Wxgm>S z*IL!O2X~BtZ##!9uJ$rh8!=gZ;ELh=_?!gUb&H>@Sr)?ammdFjp(bxbrj2vF}vgH2R-@G(O8&u=%~aIk%--6 z-e}N}@Idfa{l81ctZ*XV?J;3qV|9_mSn@jm5s@TO`Z`%nh;xFYGL!J}rMfql{Aijh zO(tim3p0FwNg`TjWjI{VCnYB)i8WPAPkLVw5U)cyuS^>=CRem~$kHzKH;f3*CoJ@i z8Vf^yY)Vz;k{=r)$cvUJR99CMsW2{bP5?;~uMZFbap7SyAQ1zF zJzV+4#h3kmSBPywq|8JR?acN+%F|e%5@D?yq9*nDyX@HjKQ}j5@ne^^H@w%aTQRrr zqumlDNFPa*rh^VD$#RCs8UicEQQ#P_f9>-UYpRC)3@ed19ObLM8F*1Uqs&rJa0DBC=a_e9W*r^9YVZ@pped9WCa7to+na;$s=IOik_Nxf z@5Y)WwBGP9t+N$8X6m;gkc&t)g@Vskp6x3aUdle!z+ z9r((K7Vu=(*Su>sYBDg_EtbL)y2s>4+u=w0{L`7On?(122S`f^c9e&X6)*NG>|t1= z-~{L7l(?ltcc3w+_6MUwH}(oRPk!Kwgbm3|R6jMmo~7bMYDfK9-i;D zS#9{hxX(13=|O%KzYMy-LTdw}J(@ny#rjN%FLsx4~IiS;0>7!j|vd zf|r5XftIJD$wH|N57-UCHKAkKT$7tcm0`{J#tvILF>2AKs%%in@89lnfJyK>gyua& zL?}bERTRxyJZ}LrX72@^#F4Wz%L1DBNC9)<1>DQsU$@=G#+x5?-W23jBc(RM)$lZcJd!_G` zbajs#7z+3W)ka-uf-46L|6~!}%Gfu$ilr_zDt1>Ued`!kv^B@FZU@c(pln*pdfZ=M zWCc?$j!JD_(9qh#J?N!R9&UTO2(=E31~k|B7}#y9-%wf-+8Z=!oRAriMk972ESa~a z@IwtbpNMBMk-Z=X4ZVh96Fd}nN-6SDi&VAOEPA^$cKO5NXK;kanwZ3lw?>b%hm!Og z;tq`pao~&yZnb@kE8)o-JjH?n+Z?W(Re;x?=|;8|VS>K?Z*>djI5&mJ&rMms3NG0V zs9l!=gPyLQV6fYEV*A8E*`jsS1!{%`G=>xWS^MP3J0vuQ87)0|L?|{YXe7Ph>Kgj1 zX8cWZ;M3mIz)7kW+>>43h-fHbvfXKPvlh?V2S$8UEMc!275*T1N{n~vo&L0NoA0l6 zOtA^VlU)FekELUB>ro?(F4KB@<4PS_(-bN$Qey)+H`o!>8v#CZOZ~AgyKk=AD!iA%mv&7snu888hdk!umcUbC=**KH0#;ZAM^7 zazVot3USf*>;GZ%5E0%=BEgp@Knga@oxM7$dI?1r?n&^PFz?p-&4$aZG~MT?JQ{}V zJ%cX-Ic+OYQKr%nv>|s_7>qanF zn8G+bw$ic>>p*f!>jAy}_SaU@4NkiVk?p2=|FXJ}gNXjCI|Z(#;Sr?&@{K&KEd-gU z&ZujaJ9FX*44v0*s0}JX6rtW{yw5}3R{~4c_Mdi1z$Cv8MF}DENy1bV7eD zY=07FR;TqSyl=*1LPyaD%HQkFG6`DIle+u?t*HvOCy>w;hO9Eu4&dqksU*h(*8hj_ zH^A+ukTGtu3(ed}%hr=BzdA@41k(9w7q^>HiKZe=r?(GuTy+NBfIn2SQ#R~~o+*uM zFksD%#iG!@R&3peTY4Z*uc$e20}-f*Lai&C8d{={yOdp&P9#9zez*zUSPz;?o@4n) zw4(Q^F(kX1joLQ;FRbvVc@N;x2bu z8%P=5_~nFz)_&grm-Gv4sdxRUg1-Pk=#BBsQWKn?h4VwxA?h^-edJOg0Q$Fb%uVV@ zsLIZ-FkBdD6@VTW#&ru%4<_o-d~0g@EiY2Cg*@MpZbIO#U?Q+7$pL&WCqN%S z|J@H?pLV<1ls9{ZS@_*nt}@}-!z*d7D=6%LPrSul$fkvi7n0iGCGP2s4>JyB-Ua+< zz3|6#??P3EklmMKq+#!gPsXTOcWvF9j#|*`0jew#qDO$77(FQ-{#E(=Hzq#@-Mb_V zOv<9`dt$7c94O9k*cE+nyTsa_bI3gP?R^puLY{0&UseMuKP4bzS2-w=ihoDQjRsl|j|h^W#m{?1y)vhR6_wlA721R@Nua*% zuzN1sWR^9YJETNl)(o(bi0aweFyQ9S>U$pPvbhKYsv{9Y*ON2D@bm-pEv+->WF~+1 zZ}p}G|3<$^zw?!}d^X7b8>vhLbnk=>e?rf#E~*m#{6}NVy}2M+4WS)=FBW*yHsPgS z99VR?q!bymR9sUok}>UUJ0j3HSw83f%F1}Lg{(3+B41Xq=su4v%(fqPXA59)}A zUo^B6<{K=$Gpd)lGx^ zb#e`fEdGnXV9(|84|$^T(G}DG5JXP&+^K*-v3oAX{_aG3RwB<=F-c3wb=;Li*7l2U z+uEq?!q|xvOm+3fI^#QW7##hG-Fg9dPXaRy|N0p>14DsFN8znj+;0RS`rnygfU@ZR zU=kVYppSxIw5|qa@q#w`FB49;S2mxz6kGomY3*qF)8`E>W^@Z(c^yvhsWsmB;~Dzu+n!OmV^fyU&8Q{rk~B z{R_=SQ_$6&#H<>!s2P}85z91_Q!&2P9}yc?wSv6?fyBPp^bn(Mx+U~fn(I$Y2ydel zIRK!nc4+@fG$k@fBizg(mHSDG@;vD`4P_IR-X89k7n#BS{^_XP(#E=)QIv01Lh4L} zXI6+(W!LLl6~@HieTBdfnX+tlnN=HKIbm*)jQB)tpy`%?}{_Hp7;N(;bd@AMqr~;!>1DDTW|0W#-K!2Y;WO5s}#rQUM$`M|!95TiBOnZ9e zI+YFOdOGl8GsOy0n_|%=kWiug-8uXQPwF;iiFrw-XEyhNxq&LtM-69OiCjkWv_{$5 z+Huk`W-Z}80nfD&hh*oXT4-Gn)#a@H^rTjStxKm|*fYO7qnJ={GF!+zk@ zu{H$|5_arcoU?)d_Kql)$Bw{(MbTu)1cKeYtmjs=7zdk4b zN!C&nV$I3PRYM{%tN2M4d)X^Rhe=#e?@-sQP2U^GSswYd5k_Y>P<}+jt)i#!&;0MS zpAmVq%P!|3V$(PEk_^3}zM5)9h;MO3jPo0@o_amY#u`c)qW0qZtt~j}va<4OENZ&U zvruSpc~wc)%If1%j7%wEP>k_Ls`0Nv%4<5v&%5^*S5&eG1 z*1w7FE%5T?phzI#fSvMLFo1@GSVHr?pom6tK;Ee7c69!-Kq_rd#4E@xl&zTc7g$iT zi4{hW5Z>zOK(xfu00HX$w6ugA2>uK({W~=set84E*G&Mh?4q_etlM6A`C_)7R|N99`xU$}4wpF-=yWW)Rw+vw-IN^uLF{d_r_t3>lzcg3#H$M(WRFQfS&ZOzJHC zmJS~1y;e~_UMt&#IL3z`xlU>uaKZf^Fsn;i&yfy)gk(zLYlB>z8$8yy6yNEa&d-nU zU+LvHXvp5I*=jMr%uZ_B;wICbQNndXeL~K%r>m4^C?_h9(IBIEQdU@I2v*7X68^Ze zjUB@;#eV`8d65w_4L3JyHoGd?&uad)+Ll6{7172oojo4Y^j8dG^U8Q{3Fm+vMJ2Ap z;whx?G$NF-D!Xy2u!R*i3+b!s^W5s(%?I1Vg|pZsIyP#9Yt)x~tcPCwy+9->bi}Ig zCJja8Iv9uQWD@J~>U4m6JlUl5?1l>uDg<8M878+gBX$`;b@j==n84 zI}jOsG+H?x!wsKRpLwqmFYZrw>5qSL>at;h(TsJmU>6BO&yc}vy z3n5ORtlc~Lsr#X_Y9^C7DNs>CR)G#aM6|Y0sz8TmcW)~Cz(XQ9 zDI;1hm>WGuP@4i!u(v=n!nit$M*P;jDDP%jC&4pFd6|A20BLUlifbLgz`!U4)G=z9 z;mk*7DU_FDGL5FTfIX^ECXq@$j_IxsgAojva3ddMkOUtawyP&h}1{!XrJIKJ{1xIr4(gH5bK~Q)4HGEZ9G6iiWNAMjC6E4$ z9UVOon;rh~4JABRRZ6EzEGr?rKqitD4JiLC@afY6w5eH_Xm-dcG{*Jg_jiuRvl^U) zb!zzz;)Fo;--@~xc-+YVCmYm70htxHNxU+8)-1NOt1RI{80+6*!;>=lP_OxqF6rhY z(t$wjpcq`xI^j;4jy)(i`5Qw;k?HNKASKG2{T+NM;fH6k|J$=-qJ3P-o)WqC*H;3YnY{=LVbzNKQnSJLbO0KO7-V& zZ8|%J>&G$z*VynaEg5ABlT&ilDidZN&USS?>fspw}|=O>js~ z;PG%dPuOzsWvIyAV)MQbO^DD?ZaGa%(3Zga}ve1>L%W|^UrhVZ#h zI8}fz<`atiLdi#iCq<{cOM*a1K@&&h{bxA@Vj#UXKj?}`Ck)CF<4H}3mw}=1A+*4# z@YRuQ+DDqe-N)v7=+7CN8^;!t$d7~?E{k}3wRTIiDN}Q#GVcH#+b(B%??cfgjr8Cki z&5>LIF<^714sWQ-6y>x$^HT-+K8us=#YhpaiO-k4(WSys5nc=H# zW%HrDWFMi>4T=@3>S+=`zhne82jxO}RwEr>^7PZ*TteV4Ts{&76CE=?pRt-*c}_-I zw%F9!1=cY7>QB)|r zSK8igYQGdVoE=PEqudegj=r#;(+X1T1HUVOlwt#Tc33qOHF*|`wk~r_S{3tbU_{rK zjVJa*g%d-5$~AkjK{Dj%ybCDGhjGnojFk+8WR#5;n$zyIXJkYe!{`~8ZtxS=DVWfU z%F$zLV9=z75{<0VN4D(a-}B;JXpw=Sg)L>FcsWe8I2^fwqj-3VQ@eR<*Y*kGmiT2& zQ7ne24Ldt?Q#8jQs7RH4m$TtyC!xV8^!I1@Ft<|~a58aAqrX&BURb8(EUJ~`4KF5T`P?7Iq+-M4zVyS%9tMb!v2VrhUVN5* z<_m=Eo~1Y9uWvsUY}Xgnw6_DnhFhf#ud~7I4_TqK`|lTte0Zn#wYk#=Bb6%U=g=~c zWH4mN*8oQr4vW~~%=CM?;ir>I%dTNuCHC-_ZJ7X~3MdJm$0iYPoGU6>oo}v^U z6LkxrWtWTSlsF%e*`7NA8exrdN6qjP;PLA#cWM8u=D2{QoAc zC+KjoL&x2De+qphGFz@JHxs9k!KMZZpioy(>rzlm7{|Ax@Chm00$ty7F|~P8K9&h)jQR#cfVK{!3*KaE`F7&wRb(Q?MqoW4~?^D^? z*qlO#iuijm@!PYuVwAFRcH2j0#2!97@Jpb|>V7FDmnt4peuwi5v3$1mBwB=-v}m{& zsTU)oi5CrQ|6TNBL~>Sg)?^LDDivM*W>rnVxH&g1OweDBXo76D?7?fbu2qtb&B2Gx>^&36X~i-7L{NRo>B^iCLz(Rwq8VM z9MXGUkw{#49vei?qn`9{D{ZpUGb^nV=Zx*6Sc}U{v8aHbQ2fab@G_R%#y+Z}7BK+5 z3+q_V{p%>=Q;MXK4B>)#1#eJ;B|g2!rSV&Ousj^XKYOm>{q9t;zsP^)+DAx3Th!5! zg~?uvQCNTLP&~Z*hv>e$fs-GPaLtb@oB^mLjizQ9ua8$2oHdHAmO?$tU!0YfX~iXg zhS-6HAyP(KG}wz`@=M26+dw@^D%9ww@ir5`I49g!-=f;w{USrl2oFW4#M(e(@$Ayw zp?yDjPO@b#y3jWBlz%G~mzw6f{zrZ( zy5xh_%Dp^GZhP}uX}w|K=jVK9wLd)8HuX?F>&@$4dB#F8OORV*YT zDTm7AM@6yt>$f?}K`7!wT4;Rq-j(1n(g`4VzVij^(&|Onm*+QS{(1s-8Xp%AMy? zLQ3E%8RlsEu56E&!ULBq8C60Z}JHs{OF`eV`jGtJP16> z=;g}oH!L!TTYoqYVG6TIL>s2BXlkF}lMP~M!mouIc}GD%JFC`5;c zoLJ4-xiDc~u8@D$Rgv(GSF6R``*+!UnTHft3l~Gn`LFB|uj^!Oijg?9Y6Ov?Q^BDU zk!Q}Lt_9oXxU9-7a?O+Kga(61W@xAGYs^x%zo`QuXowi=9{*yb|6fZiE!bp&uM@!I zZ+MP?mTs0sz0=ioeMt8E9t-G=f6w~VbOrEjm!A9_H7GjCAUG+G4+M~jZq`wJ&-p2? zWtTkkbGYc5cO`X*SoGI@O!UoYf*=Z9%d?BSOJa$w{}4>XGuJR1@_*Csm$QaWChnKW zufCT%4NE;^frk|`N}6y4=elcGAcVfMV ze%*(w!o6qJkjpgoh~M>cW1IGg$=MYYx)zZQ>&qJOe40ePo6}@xZJJ%r=V5%Kv8cDY{7Y|VhiE8u z`&|b>re#(w)2o(#Qj~nS)Y5ICzl5=opGpB;H1cQ2LFONsKANYJ(&>*bPdd?e-eziEl%0e@-8eamubQ+x9^WUJpA?Yr$hCJa_Q zWQ_2?cpo0|Hz05Y!v}MG09fNr(}PoxdDl>CLhEnt(W=_wCGcxZ75JBqDx0X)2beut z5>^e+ItKth8)KeN47%vgro1;{%b&0sc0(t0v!lu~dMSxkBY4L|DT)3FhA0e>VvY^S z1!MbD{&xLT<9rhOM%5xO9xhB6z{eN<+rUdkGrb++og^zgFoZ)7I?Ba4hLTC`QK#f|34s4nWVn-)W4{b>(qwd zI{44<-qh4K^CX@_FhK!}ww+VOld~SdT-JJ*L)NK}%?c<*$UPwMDTNzFJKf(TQ=665v`Inv-yi(Kc zHXEyssXNml*e+xpmfVp^OML(S<9|i?U(RvzF#;twcMmwZWV$9a>5%T@FJW@wYQ1WW zhq(L8&&fq>`Q$ssJy@50DSfpg-Qmi2FyNfo4kQ%$QBwFL|2LZc!Z&`nkQfT15<^M2 znlkq;Ys8`0j!wd|=P6vRNbACCuH;a&;+mG7=Qx#nvEP@sh9x#|7N0lnhOyXeQueoO z*d02nnWmf3l;*Uc_ex44O0rMaDHz7h@8341x)9FJbF>I;2#UxKIpXP(_c zxIy)dLYa=U3|~LFvlm8BMH;Dp`mE=EW6z=CrTwG&2D^yfgh{5msw!hjt3|-;k1lU| z9Xnln%M|z|;wRTYc+{&h?uZvVI~s+|#wcp9!faTE)z;%I1|E9ao*VBgp74~e0|tC$ z7x9FHJ>e;4LSb)us!Dr&rsmj{r54F^^L}NSA$Y&)Torw!@R2hM?&_`URTMwTLO|q3QC{A#>t=<;h6Xo!nBu7M z7Iv@lPi}Au-dFDjMbnV-H!F6(S$aFY7wM^Q=KshaYHXTPn{T1UeO1m~jvXD>+#JlG zbwD`f7%cetd!X)R<}X*Zb1ktr2fEz1U2aXUuD;>Jr4|+gW5m2CxUoTZlkyku#>ibx z4*o6UQxW=-y`nc}Z0N$#+C9;S1x}-SYRw3ix)t{kRe?f9h9rQOXxWfP@`-Xc!M-!5 z_*3lmmmicL9oNmK%D(l8m(}`PNaz~Zn)G&Q>yp)D$k{t}KcBJgG@QC<{Ivtrw~~$y4(BV4`XNARr#EcgK88>c2oeL!b0K`4(E>D z2jE?gL!R!k2i1v@@bz)7{5R{E$tv{`_YqH&j!QE&M8%k@g=`vMOEm|U3`DwBf^E$X zE$%K)OL`SdKOpR-J)%N7@7e6z$yZ<2>INd7*LKypeVH*r)W7%Aui3L?Q_PoSr?>B@ z`eRpi`+l+Luuf=I;Y^-WsjT)&L|V)>~@nX!NdzLzFMS_fyOWA_u=W81=km zuSKov4;YvcmbtPw!`46GZ@jO2O?E=`b;iy0@Y>^YF;iFBDjviOzk$g&hhbLqoRVlW zKYp?~u(P;?A-qs@^+e+Fj%c95X+pj$tEk!Yzkd<=@iQfKv6kNUK{9{@Yhm{p4@Sur zv?(&>Y4$Qh2}b$>N6Js;@3Y;enU^-a{c5xL+mJ7^9S@anzF?a=ec>?TazEkI&R=W6 z^Mu|{=M%fpSr&eidD)&5M(HUD#$cNSvut_U(-ntnr5pE>;GNH^Ez<^an@fkPgxju+ zy$v}25s7%CAja`t2=f)-2eXf zdys%j^xMiTP%DnSuNM*fMe$m6oa2L}ltb*%n7Mwfg!IAYi>fY;mFnU@1xjUZbw;kf ziopScGb(=(gFm?IQ(Wz*wTqp%(wFKlEDzH6e$oFG51uJtwgeJp>}J9nVjb%lcAacC znp(t5y+iA9kCi){lJ1wwzu^6EULYwo92oDh+_L&ijdhOr+#!|$V{JbBgtEO*J72;i zxVIcYZhx|kum8CIwIk1Bx=(Jk@oA422bz*sw`;c#b_@p)ZsvJXoLa3$B_|Fg^!E)`1B%jRpM!Gc#{ni10 z2`3e6KT`4;BA$1%=$^It4a z-3D5ItvzJ*ZrpeYXN_V8#IZX86Wx{M>T5BMesC+Yt-T`zd18{{x~_#wbkpA4?^%%R zB7@)Zw7bMx-NQz70rrz(Rqgv+U=_;~d#C!P-}!n0e8322Bzd0XLs-tcx?LERrctvT zDZ1oA&jv^!cLt3GNF_3o{^`wM@w;8F$$GP452{MZV_Ao>F~ee5#nZ+j^U2{M$v4V2 za~9-?eLuuT_dlR(n-dnsJOAsxS4Eu{E}2;|S#g{DcPkOG40pHxC(CQVOa61M_q09@ zQrFhZUHebDg}!C2sq^9)-U!PH_;f?jO)3!q%ae%okBp?Wb=kzu8um-;g4cu8d_ajv zSXdsOJnCF9v*M*xDW8q<)JR*io0{2Mi(*Q)P>krXAI|;&AV0E}jFPRB(vy$)UfFRk z<{M(+%j#|4$+2YmPDM)&w!2V`BwPGvE2Fvmfz)CTlSS2P0ZB=caASeV;Lg^APnRif zCutS)h@Q_%O0rGeeKz35!gA;CqP$g!bSmB0L`ujZMHH6tSgo#!_R}f3U&Cgn zSGl#{9#pDYat4;W6HzLIVDr`6s^T zZirE`y|a2Q+uy(r=L4L>jJb|&wHf9J7Ln|=QW}0t2&IaSR=&$jV7t*9#cG1iQ z>Ox)rL(qTCB&LM?@!2CjtTRQl@$GaKKA@HPa@*>` zMNZ%qo%)6*l4P{cbJ6cr!XoI)XTKzD_`gei@lG#caKR$-vmYHaD_MZZ*XP?i*Sqk$ zLW|!kf;&PaaxjeojB_2~jn9tOil=>|NX~&dy*7UxUk@|gur%>fPoVI!ntPIb+@ffe zy>oNo#ti|Pvp4@Jw05rSX7hn^KtxwDf1`oiglSQvWWulKV-4)VM(&&dh?5{Z&ZnB_5R-3 zuuE8zy-S1pb)N=4Yn*99*lmknywZ{5xt9nRkQCX%g(;pg=KNr47}*tMebLaQ5n8Hc z?|hF83%W{%hb1h0j9?_oI$3ojF_J7GSqJl}Tu$B^ zcYo_A+Zf&<;HzM3XKnsp{e9rZ(`5XT{VjGXeChZ|L?7SWZTUKiJ^Y}mg=bu6(b5}Y zJQ5u}#1)adW;HN=kwDgpL@X=KkOi%I;(vSC+TPOJTC=vZ-e9xl`nsvy6JZ9q^6hrL z?OJ%{xPXD4n{1hIVKpd>$&C!kmx4ZnQIHP&HFOb&e2=YvL@7M@pljr0q@g?&**g>W zt1d_Oki}o9hEJ3XL;7?oac4vDASdUi)Q#k9Q{RYZe;#DvyLZcjn}avQr1nl+ z_tWqJ(&9%B#-1P0m6n`z5pb~1m`nBIWcO_qPk(#6wZF9G?R;N4B_*}CmS7n$-%)sALQ#Gg@z-BL zakQ?!JbSr{VZ`4exOb>?WNga2^e^e&J^dv|H&f%fey#jZwI$rvBs|1gxqi=fpS||sT|o`^x(xa8;=~(=!UX7f95X{li79yskoZIZTId+u>9PFZK?LGx{T`_!4F zw$9hzYkA=O3>`g^qFD)<)dG=Ag5|wKcl&y5SHJ%FBHl;4fM6_5WHL?&?iGs}Fm3 z^q$ZtY2<*w9JiA{*?tC#wGJR91j{z>KL7*Ot$MB4X8?b9;9~pkIRm;D-%V-JhtiySzT~F3LnQw{N;~jvX!m2wamGC zNiTh9w|lvFUUL-xy~*VvLuCPt0#AbSlKzLayzaB6$6L`-#TSo_>)w4YLgp}J4U}U& zE1g0u*UYy{9#QvNTa&GZDPOE4_=8XQ<7-{jzq01!SXtE)UT9a#*G;`3X4O_(%^%C3 z&@moLPbF+c+b)?~r1mZ!I?u*Ll4cb46aZWKS5^ZjcoJ6eoLoldtg@BSj{5&7wpsJW zEH!ffQINshQa}pID^%o-n(7L9qabfr*nki@GK^a&C{|XJV0MQL-=5jKyS^Xu|H8Ge zXh6;=BXihcL~m%Q5z!Ym8wqPv3amw!3zjR535#Bab$zXoN5crpa5x%96h*Vc3dfX) z=_a?T#=+}}HYYL* zX$;TWd1CnEA^SJSxkm>DN1m1Qg=lqoxCAK*@XdAmVF$1qf&R#bbilVoz$s+tG z5&1*j=gFVk|LBrW>Sm7$Z+8Bpcsd5lBGdUVsp9`~{qJ7a;on8N6`EdLM~jwu!;YrN zf5UOe|7B1nS19>ZjGRJdUkA~8dGmdv?SV;jnQ$?0N`TIvn!S<8W z2fxP@OA6d(VDEg@<&8a>Ov!JQ1-FudZ$$Jq(VJYq75~v8KPKpkBeYWC+Y1w4*wKG- zk#9G-c;tW8+5aoXDPmURtL1-3-%4u8sfs1Iqpz2Puq^xSCl-%>n9dQ=qKn3&m!=vH zUf-#Srq47Es*YKrE1LehM6}cZPQFIt7||O~K1KXT-Somzrk2dY{_Nr+qx>I5AJ6pw zxJhz_jmGASomGBNju<4%?7_)2Cfe|k`}*zsoF{5SFZu(6_mp`_FIu6Qdglp38uC(b zJ+TGnyvyc^!|>vC=D(C~W5$AVG=m4bhNlYp*hjauVlX%0+oF#LyTa)vWxaVqc_wZ( zJ~I%Ct&l6^08IQ%6|qxEh|}0q-0o!d*ZAqnH~V9+8>kt0X(_HOomFi0h3{6$bS@g&+Rd& zw2^hO>SNr>{@{ntw}}#ur9?yZMU3tv-g_wU=A83pcBM}Hen&Ho>A$NAiWEQwTWp8L z4EOyB7k!5fS4*OTH1gN-Z~jq6`Y^C}cCvv8&)kPUfM%u?ow2{Xl9%N4$ey$-Mfs~| zw-8g^XC@y|N)V-YmS99|ZX>+`k88f~cX2v`!}6Cr8*5Z-;*8!l=#Nk;n`GmPvLX<} zOy|8A0SH5#!e@yX=Gf@!pNPgxo-{DAWyQg8wB1v;Nw&gQ@sHrSr;I(hqn9D{Qfq&= zuX1-yys6tJc&E*GkGGXIHbS82!*_a{XY3uBZSoZTqdBGR`9xfN;{=$&BN^Kty5qgA zMEg=_R-p$r=0WL#Opv1DsNB#VvrCPKOk1_yTgw;-+5|q@pS-6<&4!LNZx8dH!JjiJ zXR+{n9Ty2q>m}KVF618Ey{Q(SICfETZEpJghWI5l2iz0dwgP$_vuSgJGRuI-Kc?bZ zQ(+NKUQ?lKP+ok1LN)P%;d%kU^M%pk{sK;ycpueax>Cfe#V5oo|0qTje#Fs3v2aZ^ zquhy*I-h%+@A{JyzBs6n3#E#a%I7DK{!!>ZnInwrtc5(Zz6AV`V)Zds)@@Y8{L*>> zEdc48%!Yy5MEpz!8@y|bt}zcXsQ`Aul2dgX;N-}CM!5EIAU0xKU+_Gf8o&_GkiZe2 zCQ6Vb2V|QN$l^>3=jZ)LQN0Jfz>D7pPYqhEt7~Zc@yDC9bDh-{zV45p!y9{nGH3>oEk5bXOwSCK_HwRwCL3@W=O89F4^*YH06~Q+Omjy>2hN^Iru< zu=enI?4Ze`&r;|+2eU&slbz35C%{E?rsmRSc>K}2+FHH~Pdm5(kMv=7R?Aox^)QBdwX>w(PzWiN`YHc58zFKzqr?TUY>zR}3?NfeIW`+B? zoXHT`k+G~ucOne{@sg+HPVp-3NVc4-cAwkQlV%jbnt$_FSUYP+5vlGH^|Cov+jNZ^ z-NU43u}-fW2VT)NGxJJnou)2?8nY$oERMX?4<%GKi8i1EoN4AT^fdNY#S?_@q&|OF z&eFucn-q1-Z};#cw#HZKkq+(O-R|yb^LO;NyOH^v&S@`8JXf}~`Jl!>)iUwCjodJX z%EjI>#^IkUMU(RO?q9BiTf~8UwZH^EHVvjIV^;p#?_huVDjAP68_#U{3R!IW?0g3d zMKU9*Ll)tGN(YT+_>(BoxA*w6Aw+F)d*wl0_+Ui2ZDVXd!(=%1qMI$dEaD%96Y0b~ z_H5^R!&xT;Fv_DU?g?Q0SaKSZ@CLBEozN|%&S)N3DcC3Y#P7>T(~o|mGo?lJdJN3@ zekn~#U9=FG(kv$t4uFI{%N)|etlcVZoVYc`Vp}?qqX41C(=Fx;nv`@YFXi1Sf^sBN z+FT6|Xu85Q^o0*E*kr>g*e@%^T|Gwh^wLFxxe3u9?!7OPo#++xNXb~089e|}JY z8?2?CG?|BQ-<>CSu}3_iaJ>&WhMg6Y%8?o`P93c>sB!!m5C1?9M5;!1?ylMNASEG7 zN5!~C$>(VL=7AP~d3y{n*R5yyfo=m8V5G?s1QbIA%4Y>HQo;K+ZfpDWL@2u|?x2F{34_$jqO% zuJJCY%eY%{Og@TP_FRripFv7<2Q^9wGc785*cL@$1nyxSw$!KMAH{2=f3H3orl?bn zX{*A-{pD{3YepDv8YI=Bn8%dMxK`V4H-P+vgg6^qw!EgU!*gqbms8DBn2A!@o#L%lkoe^Fm`w# z$qzb4X_$--@ZgZ(fitkUE8uw=Hm?ouTdf-FrbDl}&FA;+Q&imZ2Q6k+!xj=B zFmS49<4W||p`3PNI;tO7m%k!+)|6!B&K>duTUv}wcsu(gbi9z=N!wYvHT=-d&!3%x z&z^C1`ar=6&xI59K8pKhwzwc^-hm#YJQ6UEY`e^foh2-!x*nLEpyHAG|AO z7^?;`?-o+RQ#F--YV!!c2}giAUUh*@eT?$98;Lrh&+GDYjbdKO*(*=qBc97a4^&<0 z{o40yJV3EDec-wPS$)Yy6Lt7ilpsTQ!>5e*6~q0 zIvWJ_V--5Vd&&QyoG+-6s*FkE0Js_0t;@yRcv&DX(#)^jU;E|pAk|xnQD}*XX4jbB z7tPbkcbe~^L$V8nOs6VF3lriD35kja;WYx%QW!R;rk^f6X3%*zx`wxYxfflbQB1-H zOg;sy0Zo6U(_a6wYnyHl81?#$!3R6QZq>19W>=uWyjXzd(9>OmB_nZIu!1%5eMk3B zhS$NxJlpmfOqJcgqP+4;*k&tpDw_hqcsM2lcKVCX-)`cJT*ys4LslnO-8&JG ziqCBh$wqnRganZwk=VARVAQuKE@2%*oR;$$cdKtOsKO(F6{E*1I#)D$Z+Dos>uv5) z8KiH#puK5*BHR^5ID0JxurU!TxH?jv20da}Wj!F^jj}pN2b`9M%yQWl%`2fLfDgt5 zXm3i{Q4^!oZTghaAa>QeLc4r}kNSx3wt9e5SIU5_F(>5Rj0e+Ss$&yZXinBgo|R2x z-Eo<|JHS8$eJrFnk6V+`65-@MV_AniZFe(q2o_S&tSg7YX*+6oBSD8!eyI?}vYn6Y zOc97guIZ4cokk<7RD3)%uq3|8vQi2Yf)a<*^8=6 z!}GM48}VLvur?&mg6yYhGSmTju00PG)<0P1(ouTzg}ep;ypa0^f(Qvh`;4f!oU81J!BGZ}l)ZyhJSP`R}Fc#6K`9eRzQU$l@ zPX*#-@@$poMU9BP^iuK)m?7So9dV6kJ5EI1a|aVk(|y1j^`XA-jo+RZri z0ig$l>MMG&=59Bte5ypUZ{RpXVuj9(Ti+LQ>y^y`WsY6Lz!fkd7majbg^T!dMs=|41A~M zNXnyYvTz&J86!V8oTs6H(K~ZiVq~^$b$zdV`B!3(Y5xhad8COhlm(x5ng1zEEC$MK|L`CzlWOcdGOJjsps(UYGh;BY)?j*e_E-_F9`(ic#(_scX%(_~)sm|ta=Et0MGcI8p9Jy1hF ze^CmG3bS;im(;==eF4wNE zP`7aFh6)~5k_As?&ed_>J`mmcM`4JmEG^XVOIq^L?V83J-zIGudPmCz-s3*S0UC6q zBGESUL(jy7stK?>H%B|2s#NxhQi}pnCw5F}Kw9!957FGb>-rAK`Xk*a(nJ{phevTI;^R1uP4Vy?bu&W?;WO8A3CjkSA&AAHAT6p!*P48XQ z2G!%lta0AN{&m1hqdW6ymatq={p;Y3D^O22mtq|rW`7TQCyP{GBEt?geKf`KOJD;S z9Wd(23ue;4MR#*AnG&JJ94Vfy1{snOb`eVQ!L>AZb`25N66)N~gtE4HGMH~Pp)1;T z}LYMai4kv=%2O&q>TA&GVeOIPE?p_Xw_={ zsPAjqU=+i{PK(kHT(Vo0QvI+jZx|U7DF>Jn7GJ`BsnLzqexrA~vyEqNSeSsk3G<@{ zByPz*FT_DJ@zQ)h233-{R0{K({xKL(r`@m2G0Xe3D?iw5ltiCJAL;VY#I*x+z`H&2 z9HrNUF3s}Me^3h^Yuh#s)z=P<^(vy|!noOIF}-EHV9;O?q?KoumR9yN&txLV*cYKo zn)~Z$qRV&a5G$P#4Hf#I`(O{as3%k7y1cY?JaZk&UvTm;AnPhnD<7yQezM?;0&T9n z^X5I5N`3t57wIfl1T52Q$5saObVis`V+=LjkL3l+a^S1X?r~*=_=XqbP|VD4RYaYR z7&{LkM}a;neb5YN72rfrCX ztB=UICDFF2R*zJPy^D8F*7tF+b9;(fI|t|&7liHrfyWS_r z^beE0ghzPPdWzAbka4^O)*K&PL^BL0;lC`nmede@smIv=;#kV~rF^NRz56rwV>)+5 zRM|J+(QOiTF^aaq$jC*>hwDp4TAqoo{I3?}L8jeq+iyHkn=_Xatir3vT=f%n?u5Vm za!ow<^u^#Ej|Jq7*X0FEb3}1{Te`Y(df*9hwTA0Ab4m29fE!{#1JXH*4G?jLj)S#O zbw(ofuMS~lN4BhqG10V+ze;?r$8uI!oZXQv-S>nA6OeZ7`m7<824}9Tm_PpI2iHOc zHgR;)&7hCKK_tVwyoN}h#Y)ykgZYN8sdYhfixS}tY3KlRx>O*m5_1s`t~67cpeDmc zoAv1=e!O)_2k52IAq*u`Z8{iA@re4f*>Y6$UHHb183W#}K13f6<-* z(bW`EDuagn+0g?7k-E3uDYB}6)%n9>p;Tc28sPckk9Gd-rY4ddF{fr!F5QByhR+hP z3|f#Tj&fj=!hMzrPzFidHG5lAA0a(D`xUMRuzc2Jwhu+f`8hOF&ibV~A`;>G_>!-2 zk_=BC3c@t*)aC#Z+}qX8As7xc?Ip#HgBRFhg@=w;*vw<*6L(HNRZd%t$4EK<-6m7H$>3oPwBI-3whsJxy?}=^5 zG>$9y(2ku^-aq)Jo;t{9E{|Jr`Jkb((0h_WUFz|9R%*8=(-D z9nrN(W%q485(`$5i)H3HPz3rLwLLWUM&-r}EtQsgccDnUY;83<=(g4wA2kXKqejys z5kAJo?OM$fx3{(HowC;%1m7BFg`4Z5#O)*i~j^c4;sH2Z~0r2nHx7ywxy0V|!* zMa$=3-9J<$D9#7B_|Z!%BE*;2YUXtUgL;cxK=yL@GTB7Kh~(a0XOXADsC0P)^W4{p z8aM8oKXK76-GVpr;{7_WqBV$Xs zJtUNk8km65EY;7CjTJ6qGC2VQ7WH-Lb*s|6a?9(M3m&QEqI?Izv$l(z$+4NoJoenA z$mC_L>kd{*h9PI`nj2^2!~k!e>a^3da`;UUU!;D_MvR+=Uk+WT1MVrK97m!`IV)?A zNvvXfn4mV0Ajj@{d*RaF6S@<~F{j_or?Gh5rbTXs#UdFs-JwG>SfsTt+s}Y4P7o9x zZIkD&TH{2*>R_bIKkTDUipf6*&dXP#^)DhoByq|Q>WLGX&*<%aKK>#sF@MO@u>fv= z|^U zo!yQ#UT~ci^GR!U`1K-i!EVy|z-RiCN->Gm)9t#5!cdYPX026CF>$|TC4OLxS%!OE zq4QRpJV@hxkQ`hm*pM}VbOwV7EnaE*OddIp;>3i!T(9&GjEP*!y%zL)slbUhG2etI zgG6s|^XIj9QNt*YQqYZ>>POX!u4bXy`;z*p*8eCfZalzBBj2p%+F8Wiz)J{#hRls# z9m?xITg^wpDfrMYCFhN-dA38(tUXKg4)XlXE6-k91 z5vjBDq%sd2+ZLdjTdE^3^?GUw1ZK+>Liipl7bDh$8<)fQtGwy4UCb;vL@)YgJHcvd@#2ylE)2(LPH~aDB|qQpV_`Ww94ud{K>lAgeVGS9cIQ`s zx%SX?y^2tX8nQ(4?FLy#W?OAACh}B(a>eDK0&U>ra9g;!LjUe{@h$iLr(!})ac;~g z^{kIY;C4>8$wvBqVT*}7PLb!*lGhME0yE?lPtbl)_)8ZMDaP!+;0~JkRrrftey(|$ zVelxDnRz;~%z?Cv`=Q&wlWnA&MTxJth95e`cQsv;ceWpY6Oz4Ex(n%Ke&brabwtaz zuEN45NqH|d$gL-N(Ex^3r*3Ufy5^<=+qyk^qSM*DxX{Ifxrj5;qjk%&y5kWrcw!26 z57r~}d%f$%w`qf*_ovQ);<3}S10#1r@PZBskjJ>prhs!VD@9w-1kWqt5K~M^KS0ke zja=K>pt@bfT&5vVKFhWCkn2x#X0qQfBWn<0#8ZtGotC9XGKJdi=!nO~0L{A=^lK~1 zKXQ#ScdgyaxYq$`!n~sNuE8`7aBmnacq^ebDMI9O^u`qlgL0>!pS$X6drQLMg0Z0jvsC#eO`120K`s6 zN{5T?aM{*$!0E92`gHQW*QrBsM)Ny#8w5T-vJz*&ShokE(n4~bNewyv^ zK+G|B`!QP{=5&nSKru4oz>smf;W=uA^Cd!&!BTRGO-Sj zkUuSYHRFcJf=Jrnak<4VQt5VVzGq&%vI6{zdu zfOAHDY);~kaY*%gA@*--l*p`#>pl=|!hYfM=aTDteY31i76*&-+V~xGN z)Gx5!zadh)$X6fOAyVgw(7uCQTAdAtG`|kJ-vqDX1Tof2j1*DluAHKb8_;zOOv`;6 zD1N{0=r%0>4FQG%woA2$+ z`(rA(nKoUrq=H7`z6}?!DfRS!h zP)&ClX{||*^7IAv^6AM-a; z@stR3_X>G-Nx0l+1zKTDXepk$>pqM!2I+j{r`V=-8mh#;(NWGmzD2+NtWGEYYvor@ zu{tB~2Bqz}bgJa^*TL9Y_LvP7vD>az3H@$J`fhy!Bjvy?6a8CP9JcS{I1mq~)A^!#ZRVZ6v| z)kbF-G2z#7<2+VoB})8$#%dt7S|1&rVC^+QZLZjA{ep#oX*;|^=(=moW5A!O;Tpy$ z14|P$!7*zsQ^WXxfvztFM` z32;aD-p?Op@8IN_=2jwNyRSTaII(p2J$Lpmoo9^m+|dlBc?Ok_aq?U)n#&FjNoV(3xQQ5^x4=S$dwym^x^P~!E z!}P;Wql%y#GufHR$KT~3$O3F9*%=`jVsRU^<_}i%pNBy z*43SPLplmPww;)MjNRrf$n}90Cz}izWeH;yhXDQ=B)aVrYDuvb{b0+Ohk?RboRp?_ z_FH&Ke1mIEV87_%sSyGpB@YA3p!YQd0m&YmAPt!#Z*?dw32fcg`;Uia>nQlyMh(`x&Kj6j*}3=c1G`t*%Mode!j&^ zM7o~9d^_aQoGice0^K(f_X^Q5P#b=Ds&*kS)R`$hDL3V6oQ#+u{z4eSvzc~Q6vVSo zH4c^yp}ISe4*xJ5kvXrHc{y=|NPP6Cny>$*9z<$MCJeSX!NTl*0lbEc(kh@`@~{gT zeJ7`Ii&>B2HEP1XRC8|%Q?Nc+*u^&_EZ{ACKPGknq8X4}m^}K(Cp*0g(ihKi;B14iCSYr-w92Dl3b`Z(XQk{fJYrg#-b|oDm+8qlbeQDdk{u)F=7E)vhAb7m;(WRezsx^o z5+8Tn>2Yp{q|;;(-S^|2E{Y9JhEqzQ^k|)*cN8BuCtx`TXaYX;Qx;)aoFCytelf|x zW*>%H49(ofqOj&L^+mPa?N(ZEn%`xSRuSox7{F(F2e~RSSFz4J3)rS~5e1dWW^kWn z>@vg=(nbqYFAa5hWEi(%10;G0nO`YOb>MfKXDH^~7HBh~ctGh~;WV%e*zl0Fa4L67 zgk^7UB4uzIl=tpQ?x|;-T-lD4^R5gVxEhL>o~&QEr0%~ivkE*GC&>4yrA+ogD%ENj z&8xZ69*&ocVmSyfkt-R928X!c@qSEQc1`(&O3v2NiMxL!8ZM-7)1D4XM*%3!4ZGNx zbAdZ`_CcXhBQ=d!*CwPQmBb0N)M6uljnbG13=cxmgVsDxQ#bB|pqXQ3b&4cX@ z%}XM|A2F+)q3tHD=nicD!!#jOB*1- zu4CJ|lt;nH*K#bMs=Yq%-UEK>k4-SbUJq)=F!&`suf1e(%FcV7SQ<85orw5$H#3Q0 zPn;2o=GieA6rpKZU?uLd8O(av9lZM#cQop&w=MLYai%u8)uV0A#-uJ^XiGfHCCvP4 zDt2fA0Oo#NhMd#kFB^OWU=L2#x^v%*aDJ0=s$sB|D#kP`-Q*m&I*~X;cJ6z3j_U>0 zWCzJ%WAEC*ey+jdtdW~r@Y3}>I)YP`LI{V_QV4zW=UuXZ72O+%El}Vmr!(!2CD@F+oeW_16{6YH^FlA;M7pJ(WN5#1)e*(P(DcPPnPX# zq-On@TB=AL>mqr#_skC5^P2G!I`@Ju3WanEwGB2xf4n+byTz1`G_0&fzS85!sHivK z4y@U6r^nJ^z5>xaS_cI>FhA%Lb-LKXw5gUqqnF8aaX`N^QN2Jyv&D2XPBEO4TUD;P za++IFxd!waIEtdx-&y?90szF_mHjW+f?dBLc^BBK=mI*Idz*cj+*tH@s4nV8^byEz zu}54{g-$Yh^VvH4P1+;?d*uWjxUVsSJIW6UKS^bbeZd2|HZ_v#dX$;aag63`5Ixh3 zSpmxaDR7&w7HmB95p0x^|3$z^(ma)>Q-kadvwTjiVcGKVXEQ$mw6V+ITl8<3DPqxi zm`-&APvOHO_G>&A+$FxI->!9?RL9KTu-|{oLsIrFclaC?p!zQ5oN$!fQA}*&<;UB- z5=$}j4w4w)4A92Nm7qES8!8ioSmriuh$4(r(>+7UY#Q;MPKdT$$WYy8GT=LcRA_;} zx!o%3Wx*AJ63d;;^CrmQ59AC(^)~GeRAH>ZvVE%F-4B@!{5h##SRSkyyT*fWKqL|s zM6>mL#?JH+cJw0JR3Oi`u^Zy1?Su8UiD@5{ZGr{&9% z>P}mX!_|TurjSxxiIB2EdYunFtHc`KL0NTfd82WGpVqu53DQ?N@>Y0DauVC;=@essq0xmyW-|eBGFmu1(mr=|Rn~>boRNyt{ESV6r zHW-yIChEdlE0djjp!Xc+nDs!ZMx7dT$F2Z+n{3CJ+3%uC3SwFN0q;myv?;Uq>NRn| zj`2@E>BGCm3)(lSJj3{jLk{?!Hp0%wEZx)WOY?OXD?BQ`NEt49?AYH+bV_?RnkWHx zv3re4Gu2w)(I;rZJljLrgsFHT2>ge+nD`)2?zIr)HPQ*N$XISP(~dvWoP$*;9%yV< zXy^8BNv)moo4p9;+0DbHi%gol#&SpgKiZ0z<%BmlXy{i>$XQ-+)HNNe$SGRLpZ+(A zNr;zCqxc_2iE6>;S-k<8aScO`#`NzoA124RJ9fW*2eyL}?i;}*%s*+II9Pztq;Kf~ z>|spj7oh-4vzGT67r^HvHZo+)f7IfQ@y)Lk%_v9Vyy^)SMrJ6L0VLO4i5YH%po$=?K<-_lPO7UT#0=86bU6$TZx;gm4s5JadI+YVVA`neC65I|S8iI99qxN@_0C3Rs(54@B%7Mc6KOeEK_bda|24Fb+Q9&gi1(4jxu^(2 zgkOF#71y&L_KMe!vVC3U-|wh>Tni9dFLi*r4WeQ`SvU!cn^!cBR#ze%7%Tj_2(oHq z#c$IB%Nb>9ctbVjmu?Zi?fWsn$Fx+NR7S&R@v*VmIu#wr%D0;`@%qP#E*$B4F$_tM z*P47Ov$*W|vwNiUV7NqfD{X^bodWKAo(H$aaz2S*Rg6Onj~cG}F}aqzdUiY!%TF~V zoVNn|dv8)d2BJ#}3TEIwCqSzUn?|6r}s4k`R$H_|f)Lscv>$m?cg_`?mdx3*0b*K{VR8#wfe2>PO?Gi)tjxz4!>sR< zlcL*YAW8bkyi9k*Hl3lZPAxXJ%(yMp1gOZMX->S%j4ecyo~#X_yz$t(LU;#Q7d(Q) zY0d7Mj+3%BM-ylO!pD*3E(R`#JZb`oOF|j4JLUJq%;qZmpOb@U{L+XW19fT1Famv% z>BJKrx8S?4XVP>2QN$q~`)s6Ap_a{Z9g6dx2)PEx^Y3CtQCePYsolD-vi6NR@S_E2 z_Bc*9ZfSPF09%KTT?;2g%(r0mvF+`00{%9^?J90s`kwD&w)BGWb0UUlM+TLm4&}A_ zJ5hGU_vHMg?A}akLqy~0F>5|)V#4eqMV?|YZ>8`{&$->oX53lAHI$+JQmx_%=#*7+ zZ7>?1GL@dO3k&7dj6hoDQSnt2JWEt;velQBA_UK{1Aobjy(~EG(x%(4)i|kP&BR(j z^^HVyUlw6U;=@s1Uf$6|6CI7+r*ex8#ml%AJz1@Sb5^po^6A%x-&JdIVWn?YP$?aZ zxr+NOdAi9fdX`S$_hs^Tk{u|D9mrsHGb~%C*KotI(zUB05&Ui$u7wSW0b`VhVtB^w zZ}`x;F0~X^&E+qO#$bIS%#~7qo@taBf?-)5rdEYY2SE$2{y!X@cUaQj+s8}Mz=^nV z0U~Y_TxppyMBF1YXF1Stre>Pi5)r`(xHT(WshO#nnKsSm={lJo1prA5<-bl$qq*~9F=Z}dB)6N+ThaQ8V!1&Z=A%U1(X}!D?xko- zrY?ABKQ8Ems@pTsLp26Cp~KC)FP7S?3>?<}9Z+nl*U{$Kb47~mZoah>FF2Xw_@q1y z7d9$g9dK4$;9H8${;N%(!Z~ac6fjX2>3Fywp%+i_YLi&7eMEA?V@>s&VQGq;ypx!-aQl|> ztuG1(iZ;AALmu<90}ovzARa-XUR>$x$!SY zAJ27_mU3-+gpR-hekrny{g^}UO9LFe-^H>8+3{XTdyN46rs_)w^Y=MzAz zRukO7PxG&uV76#`zO(XJ0=`^9*|@ph%e3tR!{>oRfg7_z}D3rfafdw+$23E*!c0njNG%P+Dfu^yGsr zqLbq?T;`}OmuRiM zp7+pnQWe8Bl1op_6ia3Yl&>Ev1P?H(yLx;GUZ;l@Bo9(wS-9m+;NpNZK5m`ai8r>B zDA1Wbt^Y%T39#Q2bCrtgE;LaRkHMRG+LFtDNgXsDm=YHQ;&3#XvjTEjxo2Um3UA-j zG=&a-hu?f1oRfOpjjG6nwH+>Y9(bY^@0=|x4JdGjzBvb!?Hdlc!Onx4C64pW-h2?N zogMvGO*iE%V%l7Mb}#cR{jpyE=^HzDtxo|0eY?T!XG6RqEIZvRx`t?@)!PYnTW>P|7)*YBY2uMaoqt zH#Om@C;s<|CHzIP;jl!dEhGZsCI1iNpC#0+XH&%1R`7=9QKj(BhIs}b$#8<9j+a9s zym3QYI?VAU2q)ry{Qw0jDmPb&nsPkiRS=^zJq>lGNs}1pb`yhp?Ob*dyI#fueNm`P zmv(t)ponxsGqlQ2GDxG!Y2j(2Qjt6MmOrisJRRY>i*kH8J3O&7^j;!9 z=L7SQb%vB&+6ZKu#2KI|2?f>C*Z>RTO+`~<9C&uce625bCA~Ghg-+zth}64OJE}BN z*nwpNM(2Z7c-MtjJQN`oD1?@)#?TN~;l;yegRcmTfs-`dSCZ~f;*Ccq>t%p*oxQ#o z5DQ&iqX*VA&!+Q72;PWlhineFP?o=FJeTg)fWKMN69n;ziMbZ}5v0nE6Sbxg!e;N` zi=*l|FKW*bcfs|4b1C_}FY2pbj-Yey>pSn;j(*t#KEWpj9=PKmB$b@art8)z^!1k& zvj{FFwas~8bhPRg%BPKtY{)E_=nhN{iTd;u@Jk~JgReL%wVWx;NZ|9QD8js-J<2|`WcDOWc78ikTEONuPKEJ{h8(5%fJWP$3qWEs_VoJX zjIE564X@^`x;CoEj2tf*^Sarv7lD1Hl(XuXjd>9JO^={o^6J*i*%;Wocz3L1poyT@ z!r3@sP|o5CDLv#4joch3<_Ay7!cy!-lTy^q_-@%Y_xIHqB@h#+TC)%9nx&ec>2^#A zQpmciy(8^bc>##za~QgR1t`ZSTDE9I$Y>oVYFj@bnLv%r>wh9Q)(RFs{Z_}ynJ@r< zJ2G(nd7Rk5y63BHZ96a6bYU(wLOmLUNCoytk5ysw0{i3&dXRwq(uv@eOj1^OmL2)HBgGq5 zK=%8(jj7Lr-?2%L1ci5kkcIHLCipqwj}8`ja#zbfkrHzuw;l*9RH5&DC@6%vb?H~^L~uVV)uiVe5QrvO zj)NZh{sQ<7Mv`dc4IE-Nw9hw9_gn(oLTrGPK)X%|0}{J>Sr>Z^1T${HK7EhVIEMh^ z*3=__Ps8O*CIkipuBJi1+UL7sh21>z?tXPce#{=aF*${hE)r~Sivb(h;Z#-yYO*>! zZ&g5@$*(C-5%2~%8?XGa(rra}PynQg$J(7uAacSGe z-$^5=9r^awW^L_v@=*R#fa@?`?{nks;>2=SzUqmlRfh&P=6Cio$k!tXR}s7m`QRh| zzy-kip?CAqp#CaXT%cPxz(*On(Hxk`{@jw52;RE#)#z)FYLR&J(&ey{9ZN_0eVOk4 zx}I{AVI$-m#a!Wv^XN#TzPJK7C-)-4Hcg5e+*9ElPp{U}G#O?anx|q;H zd0moQm_}?ZDa|`*wuu6FKZ6#egf`^yqEX*8!(KCE&a0{?P=gZX?ou9lGT$PJWi{AQ zhWZ`HDx3WRZm@iNBuwZ0T6E!zSdzNK5B>>k-YOR($K3gHib54BzVC93k}PK`6!j{} zelZpwm2uCL)EDQ+RHoR;058D2#ma}93wCC1s}-g z)relB5VEL<&~+)3O@&1Kta@Z&vIKd_*^*ild{!>o^Y}ooXYeXo^c5(PY!(<$fs+3u zo3>WIm|%76KwxAhY0UIMYngl#N96S`QdwLz~!xvXAg$Ij8aOr*2g-D_n389{=!s= z^i~J!#`@-@?e zoTU>`U{={a?~j(6qly;_PKgJ2pR3(;{9{OGkQazkBi-3?j60+3qxc*d`>O~6u)i38 zWoF3xENvQY>bNB^;%CxWuJQygchJ#>hP;#|viikorD**G)#s7XC-TBV!A zye5--_UZ_WbggO}a=CQY$O zF41PmQ;Ou3dZ<`$2sUucfZ8MXCo3WPDJBEGv$V48TsX{eFMeqZNvJl&v}e29F44dvV;3`evG zJ0BL>=Q5g%Sf{?W;T~ZwE-AcGuk4ii`~{qx=?!XA|68a!R$SRUFE;7Xt@}q@pwYu* z#_gSJ$$4Ps#Q8^|#wGEPaHkE`km@V*b7$m=R}B{04O=N|K;M1yDAPJ&Ob zzU0juE|1QTDoU8kCj2q9cJa`T$k)P7Hm&e^lHSHK>gp6jPFhxW%bLS66mpw52{va+ z4t3WrTCmlr{Ss@n?HT$S#hWzTP01IjtyTa_)=YxJYlzu7fS#RjSV%4EI`PBwQwI4PC*n;Jfzxldi~DwU$?Tdk*V>CLnXo( zcZaMnghO*{eomOpz#AhutJrEmY|#Tm&#xV|<9Qu$?W0S&Wepi^V+p^-4g<}ISnfjw zhr_Hl4!%r0u0vY%W?^aY>w{?L6J2w(p}rMI2L}maL0=s9r|Q?1n-`=?owv38YRm}c zj|bQK=WL$!lU^Q7GC5J4$;KE>o#}gjr)OZQ_P$p5G~R6#MKGb5%sz;&L2`_F4-SF* zGNUoExfA-w&xbSKdaLIOujZ}qlew>cP<83SQ*|F)pzN#j68GVLb zGn3dEdRLm;ai;52<3)X0pmgvW1U1$du3P-}#GIe6faevrFzpd?qNANi&w+XySQPf! zsle-wpHnxx?1H7Kin^ly+-#LBqi&k#$Y={~JKiqNwUz!8e3#vQP4e}1WJS2ww&3pr ztc?LXg!X_(G7^b59V|@6X{9%PF~Pt1!n#8_as(KW-J{W~|NHq8JBzG6_2cuPlLN(m zLI(MzLLSl+dXx2znwEz;n14tWP-KvFw}Luu1V0P1F8mIZGu4k5HEff&P3=Vd8d314 zboKwYFIbn2_>P#qSSV+p7))f)H*$!io&}RWg1~8k9{2v&8kZ=Y{r~u;C3ZF!v&pR_ zUik~f6It0d{e8thXy+7S5z@2;qpR|sQWe>L7ZEP>J~4G+0Pt?}{}-CaTY08eTE8Vh z#1qwmv%Y%uy^`EHwgF$l%h6Zx;_E{CvGcnIBg^GMZ_Q~ncDBtoUbwwF!y@?xWE^g% z882tYuMETThwVovn@MqPslKVQ#jHhSlOv{A%w@FI=LP&U2~(h#z8GhWe=Su!@Se2# z6LNvBJU3K-EFZJwTl?<4Vmn_! z;M&S3bKVcBSv9HGhXsl00_uT$dO=&Gp`60RIoCUu8`F1ReL;nu`w`R&quRHZ`2gj~ z@Rt0`#%^Mn?r{%LOfm<(=e-&+2Zru{B;bZQrWgmY%*8hNJ+RWr{UhdXuaL`1@$zZ_ z_Jxa!94G|Gg#`rZt?40bZH(Jud*%}FEVXv~GQojezR~;4Ux!13{ek$w-vRt|&OqD9 zfq6E?F;A~wNImb%PLt{Aw%91SHy*!4%j;Tr_Qf)&zKzU4ZXd^1sN1{E6 z-k*9@uQ=L@IPE%}eY(Bv0l}Gf9`kbp`B)JaGAC6~Z%|snADwtoTKPC|W98Xa=1i}< zfd@Y0m)P;9iKNV1vuv8j$l(r^w66Oq1J{2ve4Rrbk-io9(5|Hlo~a>yOYe;sUKbvV z?ZX^fBDG4zr7oDwM#F1Q7~}E|nLWI)zDlq;R;}K8eK2hHWL`W%ZI&X}HuU+{7^9eT zS-YN|eSnNTZ2eYhXt>xy!9wtK++}Cnol({g^>xuL)!VU0w^Fv3rGS4Sk$tfBg4w0m zh7^)lmg5{^vuCJg>?dd!s!>hG!ojdtl;yUAn#~nH@M!VW*LFAvWi?gLzWcv@G%wXZ z*K#RItF}K?B)^-=Jb!ueDP zbb6JQV@eQ}WJ*Z@x6YRZYB}*Nj`|yGx!&m^H_I(=r?uW4oqa=pEV>^4RdP6YAS zRBzE;s!_4(`MPLKNR?T&d{e*aP13f_f)6(pWXPgx2+E~ce%4M2e63Of-Mefjt3{nc zw6LVKj6h1#DK8*xRnb@c-_Y#C6kU zdcEFg8vOWYBRbN2!(4&;sg(j7?()jasLrzg4Sse>^VWqq_giU0cr6xdWtP?ZkNKFx z8_kOn{a9OKHlko>Q;X;}tXLWbJwXAdB2U(*r{A2%d`$mo*Z=!D zXs$&%F_VWhaFSr)E-1dTiUr6!ePhNK&nP>0_w#aQw6V`M(N5y-gp_@aq4yd?*%U z$8t9{GwZ>n(kk_RG3dg@hdFNP_sl-%dnybZoqiSn9j?LqG<&wWx_Z#?cQhd)QX@p% z-7#A#P$}gvSw%v4Z;6isj5$sCS2f-6!6ztTx6@Ta#O&6;qVw_d(l3VC*?E&`rZJe0 zZ-cZTQ~9XnoiXvmkmX-h-D6AEO?tFZE3F$CSaL@4ykF1-(w@wzb>=LUXdidDN7}u! zJ-epKQl{le7RSQ}Dy_;r3n{6z1u5CNpje?po!xiOPdXUDxkJT%Es-~!HP^?s&`Ad? zzZId60LDNzZMa-vpFsWMp(cmTA9CYyOjo*v)wsE)@yBaZthi^^4}z@i!E2Gc`_nI| zZ?5S~H$!lP-r z91RNUpZ<4WKdA4+D-n^SZVj~t($2?Fy>hJ7nYR){SG{Af)$hD`6 zf<-8AT(<5rfw>3<$;{QGn9O`?#UvF*$%Y0?-T3oKfQ#8Zn9#qGSwQrbSNv8L zdmWo;Ag-2nnWyD8kCA;SY5lI=!$?9zSrW^e)kwnBDeLexxoe)TKDu7 zQnFho%8MN2^$56RxiVJjK!%k!co&w!Ca=ibqi~_`MTCcxr%)HuAt9!|lu{esOVjIZ z{%AdKZ*X1fBmvN^fK-1#vp=(cfWL%vKdsIkdgd8t#J;w%eDTI!il5!vl>xn}gd@zo zw6oW5I#5Ts8?75A3bWcvLA|mWkRfZSxsyG8>v}y%oa}l|iEc$7TF~cmx{!dPb#GwU z5&mJr$-ikznxhYHK9o_695fg2?BKf2oLbyRcHn%GThU>7R=GnYXnz9yFCNP(WPrL<4kIxD^p{KX& zedUZmL(zd71zOB`@&H|~CH=pB+)P02IH-0~u`g3oG*-EyA!b5GKV5s&wc6E5ME*vp z_`$i$-K)aO&5z=pHQTpqXQ=DsJ6W^&%Ls6F(7A9XJ4wD#gOM4t=T}?H;$$}WK4z>< zGWK&K&b9=4?9sk|7|^_aIjEPH_N69o2T4Cpg4=(F>Vw4lkEL}Wbg#TeU=E+Z==Bix z6bS{U96i0shFqs1d)aq?JvOoBV`gYC%fFpho-2tjetrJ5;HQ+mY{9u?otIG(p-bdj z?Vnnl6jdlsuXZsgIrj^Vt3?C{UH}+%D2eLA$t^#Vufl)m*J(o`MZyT5Vr5S;zJroQ zD^W7~j-nj^s{5m~NN(=G1o|+!0$~SV-q^P1!j80{b%Tbau~`;Sx1z5<hLqHR(;Ey7{SH zpHR<<2NJ${;ieygj^BV4D7+{V^oH$nwD0>6oo-`%i#XmHc6dbwaq{s&b)D&@;@CT# zMNb|=I9`pdl-%)qKeyZJA2OY%FpvDRhOZ#4UHsH))_mqv2DMa}a-Dl8DG~Jt7l!D~QH*os{LFBV;hbB)^NM@rIz=iU zooXMrT7o)wvEVLZdPM!XR;-4kDObEwsTZl|Hh`r(GcI7X^mZF1gC1yF5z^1aADXi{g9+(Iy(>IfG z$5Ehj;_6T4eE0s_S7X;Uu`IHbaY%YYANMnaAMA>vf(M$l!fuJ5`)Gcc;(Se>Y9s&r zW>3sm&*hgma~c;zIndffES&Q(z;t%4`TjtL$hgU%o4ozrX$=$evTdMX4M8iW(laUZ zAE)(L(M7~x8s**LaH*n?-bWR|6*8{j1~7OCZ^}fbN4GAeQsHEeYsH+g)TUbFHTkBr zQR-_0*TFDN(g~$}X;Q~RA895y@`2xv5^v72Th*Hj4M<3`UQNQA#2{YR+9Ndb&j}Un+Vmt!HX=Lr=cf=9OcL zDq3aqRFB@0DLX&$`^1HoXv3Eoexf+#I6@W1JsCLDPEv>uf{uWTd{ap-!crJE^pR*#5`HH%TuSQ% zqg3oN$r$!S9&m&%`mX)O{?Be!-uE5$fBY*_Eg3r7-P%05%s!0qFz$68&?h*r(N16~ z3||e`PhJ=DlE7)u1JSH>c6s%{l{qQ>1!L8e#&(3eIIK}fd-fFD8}1c=rFduqdx~pk zo7L`3kUzx*MC$!)xu_`m_U_H$qqLGs{H)03BI)qjBNA>$8Fs$&Klpg5u!LM<`bw+i zP~0-uPl=ys(QWlfvVGc5ti8(408rBRHze@Lx?b(I9OEZ#7Re#Z7 zPL_=#;mqm3x|%Iz<`FvK0Zx-8ROriY(TSfPo)TK8W3F_0 zFElu*>Z2Ju@e8Hcy=9pi9c`H;@AcXkBdSl@L-UScB1%lC$T4PBsJok49Q}+SvZn`o zSiHS0^t}Wn*w_RZh5$q*>@p#y`?$E3_Nb2c60^u^8EWda=eMQgq5zRP8q+3k|`nCmfQ<$051jjaXw@x&nkB`zD z+cm27lvY0B6=dfbgv50D<|zffp$vOB@(w=;8l91de2`nbC<$c7Y&w4qoOo}lx;eVl ztS1#IZAamxUR@pWRGW_R9)bQ7ToLhGIDrms595`t;Q_2`3sK>{Sqnc-hJ6R2Hg5mC z@>_k##iA?}Z$N0Bt_cw~*A0AW;MaH%;O%IR#QlOP}j-577N3C-(a3fTz zTs!BB{r;>cPW#SZ`h)qcA4S+am2zh`B77I_MDt>6UVVYT^-X+X{*2Ct$b?2y_nt17 zSgAznVbB`^H?$}&3ZO?UgY?KWFExq2hsbfem*C4c?!q=(F5JlsJZ!OB{d$|Q?Py;b z(nWflYD|aEIooOv2ec0_n*?r%MI8IK|03Bqzac7+2Y$&l?T!?+Hr1*QIB+%g5ZHmB zMO!YqEF|($X4pUvpAnB~C!3nBJ9zB&^!Gi(WrU7nH0&B5kuKmiv?09Vl#~JIit-H2K;Q8Eoa+RRdcn{P4E&E zevq8{{S(^o)L+YIE4f$CZll>fs)R9Ss}Vk~X^QNBv&ab{=V&2S8vmK zZGVVm$4TrBJ zH8S0=ebm#6o4=Xg$i+S~)mU)3BN(8cq7RhoZ3vG$baQ4R7Y(55`M^)eDOz9ny_ZxHaEU-v{vVX^O+PLhox&Vf_~K4e{ufXu&eI#4vX4_gQ)iEfZy~x%Q=?saXQ= zsgfOuz6J8-Faz?m9$0$`iBl%FRkxS;>E)wh6}8i+X5AVLF)qg+`vZGD{l!i&SzHE4 z8C~hRg+43-0%9}0#>U|L-$D03JDU_4p|sn`o1uCseV^47l%?J89omhsMO$5UCW2Ap zDF!QXw+eAe`PsAKybsXx>Ki5p@P=|w6o8c9Omt8`DJPUtsmEzjD18x_{cQ1a#n7)s z`?&O$Z%Us^4%Sv-3$qI^bGpBHGthTJKQhkY^1s^YA~^VOXWIi$M_e?Z#%tV@Um;kqrGHv(iCm^@d6a_7ND?O zE7e|`uBADmK0>%ihMIKvDp~o<`v1aXMo_OVyXbjPPwg9)vTz#77wYG00cK@8{Cz0_ zTCs}0f5=5+awPxxGn%t&UFr!%#jQcq+1^b}V>rf3Db>O@(p2L<@Ux6s)91Q-T&lEE zik5Mk5EX)M{D4=TeuaK|Ttd^wP2>46^zya5plB)`iEa6CvLOPJ>d>P4$M!co5)X~2 z2Ym<6&^Rs~=ZFowyQ;XoY>DtR)EsVP=vH9j{n zCO2o9b?P1+c%zNuug*^fYO@;O$9X-ru^+P3bH*La8Hzmn-@XM((85OWzh4@q(wovL zXH5fK{f=ZhVU=Om9#olSjB? zm2yk_r&SB>W#T58W)$Za;Se{lS9;L&eNn}K`Pe0JyZkxG@DonP4+Rgb1kOnmH~eR=Vx(9RyiRo z1!l5zxmUeCnH2o(?LdBB!$XxlsdS}7vlEp&$J~oNH6oA(De7_xo$e7>mt(~@Y_2c5 z(U`A@;r9U=#ajuex>j$Pf$Y83mBHB4bIGC)_4T{GuJP%z)cq%f9n6S(4tWxNw$a=nc1%v-!MhE8x9yQSrO=@a^ye@weO3`?Q@lwTDV-XDPIBY^qP8~{YxCzvb2H) z$O5F185p=d?u3GCg3#mH$2M)nxb^$N_ya4w$XIEljruB+o7rjw-}q7Ct;aUmCXF>| zG_XaYQx{R7$b%CSj--X42bed73@uzKi=#d=|DHvrU~aIAiD-C6!nbUAgI!VP+J+f*NVSEmqlOA zT?_f%yET|~blGL-WdjXc_$E}|gQH0yo-z8M`tLW<^v8XPE_z^)I_*wu8RFuPjl<@1 z1D$S1e@Wo0)Z&J7he7o4^xHK$DRGZQ+Xf>v>WF(|_p7o#4zLw?ao76bm2P*Xufis@ zTevy9Kp1Rj_=n@u&e>H%JrO)fkP(kP5@3L@WSodke`~2Y~wJ=Drd8 zR(CvA()ZOl&Yrf1T-4J8 zO2kq-^dtqMx>`CwfoqMrhvrCNe7Ll~7rj|-0EDSA`? z5K{0_qsA*tt`<-6nb=Pu;g>%ZYcnVUP{2@6#5AG*e$=STo~XCx8I;$IS?xQXX4?C1tuv2h_Jkxum%FRgUS-cwhW=oZ zYb?p1y=Km7`9v$8Q6H8BUe6+ReS-2Hpy9|Pl#}gw;c%1J8}A^UImB5tRZR2uEQ!@z za^B|!KH0T6V;p&1Ql`M+%*_%HZ5Qjwx#WBYl;d|hgx#t#cU|1g`jfE;#kwPu@zdO9 zi~}|BS}G3G7kf)*7!LPU1v7r(gVIk2p9=K(SR{>nJ`|SKUKGk(4d*mxR%-R zX{S$-HMMgreC^u9Is)2Z5dX|rF?mKzKxS^VYdocjt<~Z;Gzl5NLr41j7n~vh=gFn4 zxN`=YIAY;=5Ke|HJ@{r4o7kDKTI&f|)#(0MIkf$6@Z$BI1W^~KBgRK%5fF?DU1-4% zCmxuG$_7DjJ&B_13@=^tZjnyNR?Q;hA;v#wa8aU+dD}8His6)j{jXMO8BVX^H_0sb% z4LJUed_;ux}%^`#Ae{MCUBig2ZT<;~G{C#?G0IqCbPhicA z9&3oEOENFf3~;)v^?Woql}$AJZ=W)B`Chw=@aLD?j$=v5S5ke-Z!LVPc{*~6-E^u~ zajsHP+*x`4(;_$B%+hR$6xEr`Hp_7n>E4K8Y)0jLSMXV>E0qvTZ;#xs3WG-H@2k~CC;s%jQz&z@cB{wEoyT;u27+p;X; z1&bMd+Y}sd@^8>zv00ghzB5`)*m$@PCAkxv;4(7SQ0LpIQ1O%&Y14X1Eq72LdEfP? z=dU#PMYN=-&E1~6=AEgo=vM~IWV+hEoBeMe{P3m0T|$QAT@M@3=dO0vcfzj+O>bZy zuilF_ru=&5V~2aC`<8r3N?tIM7MT~tjGs5C&U;3_g5}t`A^t}f*DG`)(}(3Z20a#{ zvH*|NJ1|>t)~nsA31r?&6TZ+PK2)x_@T>TAw*ODj|MopPLm3Cl!6A{;nIR8n)q+h{ zOuGX4hz$PjC(Ya2CXwx3wsmwr>5R*^n7UZhs1TK(4K#&UmO4Rot2gL*_|az8&~bX& zq{mk@rIA*MXN{cnj_>)t|9)(Qct=q$VLW%EPV?^4DFLoE2xh2rh(B2Y0W{V5COXsi9V&#(FHpf1tKJ z*CN*{%n5aGr7_+8H~kWMV1@{+u&h{#+X*6pgJT2ZQ7EK(FdJ1i&Nai;JZu_T_X>`b zNfu6b78mOx7xVZbUg&$hC3N0UegU>RPCE+cn-SL1EIWBbrXO7byEMccs!_;kk7nfZ zuK(-N1;$6EARhtgyAK10{2xX}UOCg4o`Jr^NV!W+TjAOPdp5$j9H8&_aWQVYY+_hD zxx4YcW?NWOGu)C0FHg%aQ+Z8J)Z2h-kSADG`GYUAM}8n&JK3@~J$T;sT6&6CgyX~r z?&ag>G?!rMtw%?ZIU`mpN}IC0)vL|lPpnxu`Rp=x^iWRj8qzP3dECm-21W36Al36C&tCi6=Qrl#w|`u-Ci|B}zNz-p`CgiK95^0WPjMAs93+qNt!` z=y?8dmQQ;VpV%XOud{u3`t8%$29d@r@85I3`PlwAMF|=+K9?^b;d1tR?*1N2>YgKt zl%66`s()-}I#8f@&`_>V;IF71gCuf7D>It8f33^F$yJxp9ATGL>LJyP#I!>cX5YZ8gK*uBP8-QRK6-2sDW2#KEHC|T%;}*UU8Z*e(T668nx$OZ#d*T8uD8xcW z>u;tQs)_fFyV~yY-@aYYd6AZ(QHA>#U3$@y$W>7*)`aj@cWe-e!`r6X$vw`B_AMOv zx8yIWa$x8DF4~LFGOA|_Xog^FNo=?$fxyV8NrQAQ@+o|W()-Tz=fqv|hd4=WJVWO> zfT40Wf!-)RuLqh9;62LA$Ky2Q+m>{P9`NL&O8*8Qf~5iNk+`Z`UQo}^@QAlwcjy4U z+@2>@O)cVkBONL#YLn^}78NWk=F%w|PMxZQRaTXhX`VlkS=YlEM&SHiU#0e{4i5~? zK9h^NN2S%0!WwJfbn$l+U_tlr!t0h7+L--ylh7{;(zK2A6py<*$R_3 zX+nUU*n6I);m?SqLI)IQn4C8u#G92iM)jv~gOCKCa#WIlWGk-i+~n|;^OiP6)UJN@Si=eScP!w7D;5AjIo=>%?^`V~ z$fpA90DSF`w=u1)%xJ;EEhMTPOu?F+TAoaPUR+lxNPuoTfCVLYN0j0LzK{dOuG zKA^+~!eb7@2BzkLUB{PwE;O%pt9=ba-tgDY5*;Gp(x30B{`l$zi>S9-*8&%u$Y^Y*0W&jUuUeYJzaNGF zcBKTLiofft7Ri;XNu%u^h$4GSy7$e$-E-l2kZ4G_rtOx*D$l)(x?p-vLOm`s`#t^X zntNKiX6c29pSRjj1XoD1iMw7+%*yNGqb|B!p-qO+vte(eOvu^19EvH~I*ovbyTduDp zSL+G3x2zJ8NTd!x$v%jO6X=jVR>e%)f0Pk5fCn9!9Jg`na}$Cp3O%_wC&JR)Y5miE z&H{yOjbo)RsBXNu*gPP`T6rND&%AW;D{K+~GE zBPEh3pOHt%6VTGURBOIJ1FDDaJ>cIPn2}2OpIF6b$SM{1{f7H*+@BdBIE}z>2cI$4 zAs~zFtm4bC*dfj#*L-2`9oa+o&~Y052>1mbSO$O5W)nPHp~HYtE%dDHGFLOdn2=U7 ztZDq;B5;lYRXFg?GPzRzq$W(DX%I2>S6;2wIaq(4gYG~C3oE#mYh%Euk|M-gzpVQG zl79iT2O5`h+fDWBrHujzm;nK^SS(r^qKSq=p&TJ(4sjmIMjufVSeZ@%>Bc!Nm3uVA zg9&UeSO$91;#3t|0Ox^~Cc?tAsFnxTs{h-!Um>k$_@H{8Ag1a!dgH|W2n#Edf)L_& zDD8iL5e~#j!yo}VngEWSxK(M0#x@C~eT--k7WljQOER=#aW93bE0!zdY8 zRSphp|39)FmsS5-yUFalu4Z8Zc3D zBF6Abf+L7=XeOoLK0M!;O{Q2+ZR!3p3KBuUQVS4GSb!V1-WI=Z57&Vps(?@^o)qsz zq2v^;RJq=Z?fjm1oq@>V8;WY7K5-?^27+K@z)}zZzHxExHg#Y|MZK&vUnPljt$0Sy zibE-tm6jmTpODT&=kGiQ;ehyQdj>26#)PHR8ynm3VVSZ(I|w3kC0v-!P{Zcdpf?RM z@l*>~4&ycnoM7GY?#)-PDlpQ9@9n_W1;7l5u?nOLh^rEghle`f`DE~*^&U*bPhp~PPTxw2SkJug`Q?c1`@$G$!~4I4nuQG&VggWO79s!E&$fk6OrU!ClE z*P!+^w?Sh9;0d77z&0^pce$@fTLRc7Act|J$UtKW%fJ)9#P+O~4!uHl%?@Tb@o)Q` zqaoQHEbJ|U)Pztf6dY2YlkMgPw0HHw=X1PE;*?h@*jj0%7K}H5&PtN63wCacVX>*@N0&0J^O-;-tk@ndL*|c;!OCEdF##j0*<&$wa|b^#F(dN70z3?R zfpFt^9h(6D#*9|8xEQ|?Stg_k4{SWJ@Dx{8J{p`iO`+oHunNhWCdW*^f2zls`l@cf ztC)PYGI{S^%EL<$pJ(rM$hy+F9sOdU{|$R%tYF1SPB4&gFvvm@nbXMOS43Gw2`dCz zh)~H{&pt>As#i8k>^OlemowU8>4rS2xCEc?h^rsU+k8H+v18qf7Zm`)D#U_S_<@H0 z%LLfu{;|t>&@t*!H!~A`UC}y8o>fJ}P6W%g;Wj{us5ItzA6x*-xKFBAb0=s_C28Qf z{3d2|Ofi(V)1`3q{|d%VIivkzDQ;DZ05&#E#p6lgM0z@pRf|*Vjz*P3cgaPUrEYDU zmC@*fq}8s33aH5ASYtsfwYp}Gt97}c$s@2&$yKMdZ?XEPoAzX1 zSdjLEE*;qqNM=KhaIzr4Yw2M!Mr{OB%ImAs( zCjg@%Nn?VX2{yJiR1fR_{qsFkQ5I>a?$3)kHxim>k>;fbZa-HLJ=7?Sv4D}|gSnuIY~J7rJLQfV22NU98kOfkt507U zcdhc{zmO;d{&Y4*?`U5JI8Fei1LJ=|Vo<>5D^xLAT#~89UAO_PMI%{QgSG?mX;C4z zOb+j^L}&XP^w{GJ1CCY$E|~L4Z8Esm?xIp2-aH5_o$u^;OH}Y}bv5@82Bi8l44h^lpKNl$HP86A9j{zUn4a#ydbgm-vyxKM7n@3O4AbuHRBAi#Bia#U zEIm#q#8oF}N~aZ9wEt9~z9vj{|0;>dau5q1`o}4H_)s48Tp)=)^n9v_3%CHbX3JFp zGpc2Ada}*`L&YMpmez`JDaEc?7J)KYo(;0!PMcTyX(wn6(5xxA92ogmm{Hew%-&3IN-y z+Oqd(oE(Q!db}hv>EH1klT{bM1`PEIV3n&|e1W1kTM&;|^NX*7tJ(^3XQQ4lcUUyI z$nD{N2!-BW7y0h!J1}3t)Dz>Le{CB4rg<<4(a{5vL)`Z zU%d5!NaZs~0askeaphk|jfubyJ7hzr{q+B_bRB?D|L^~E91e#wL&jNIhqKq=?42Ez zy%Iu5R5+XLJ(In%6++e-Wu4VfGBZ+Hr7ADoZ(J@03{=j(ZYo+oPH=*%+3DQf<_md9%9N2Qh;i2N)3&t(u*)bC7-DG~3lgfB4l z%&F&7YRU%s4@F1wDJe97qe&RkHe-USrpId*wzTDlnP~c$tR7SW`kaAH&Dqq$A3M>T zghffZ+V9M8T~YSo3pU~vVZondTxtmGY}B5W5`14elgcE`{DgX@R90j1rcVFcjbyX8 zN5;sMEFLopvxK*lbLs`=T0=)HYe6jKtRo2ZXX%%uZ}7mZ)Oe*VW`^c9DC1puMCrSD z>l5PY=s9Os%+KzsI?JTTNLyabl=)*Gh%n zM4VdE+1ikGMA=N{oyP=w!VK)ooixePnUqZ3ZEbKZx{>BI<8RCeZZ-J}uJC#rcucZi zE-lS2NWQ8Qr^UlVWBl&R^!&DQv=G`To!YHsFH^t}Mod3aWYH5}W4n)N_#zhUny=NB z?%ATI(f$dA^hhr__G2h+h}lzn?sDQ;R%e-#WZ|i8WerX<0h*Mah-mRRr=(7O_7|?3 zNj{sNTK)mn4_LQP*3vC`s0J+x_yu6*F9ez+jfLf|6fiPfFVojdV`uT5r!Pyr?L{6D>_mAgyf;D#RuAv zQex~+OL+Uw*J)lYxqkAvzf!!rqgExJ%@bIb+Q7rFfsDAOgyKqZ=GO?EO-YGW%~>^P zzP2h!uk$>IB}&#@Xw*_f8=iX{qv4KF*Jspx z<$<1CNMjVeQuFc@^)Jpz}zhgi@IVKl%PSomk0~$2FF>{S+w0H~Z6u?Ixuzu}n;djc`24 ztB;ktzjkF0<=o6it4luU&LHcL`Z$m@S|Gbu5S<~v$DU|~I42AgmY>*~E3Gx_T3V}9 zJ*zaU@nE#shU7 zTG7Kr>Ie>%fyV9g`G;0|zhKP?{8o}yrqOy8!;(5uHY2LJ4~&@^zq-`ZraVqCW0g|k zp{|tzb6n~r@D6H}01tu1#i)@3OL(U>G0yUA- z$-`HVx%RPw&Cz!<%BD{W_!gSfWA|_E$+%Kw&9m^QpVm-3bxkLKMQIi|YOBO|_g*DT zUxg|f8EK|9@`m4qvu4CV{DfbF{sGVYJ?~H<%kmu{+keYi8$P4q+pbu)Yo0p;@qXI8GnUC4N>iWp{p|O^ck&9yQ5_h2f zr*p}B;!m_pYI2Q)^fRrBam7DnDc`0vklu;ELCGfDr!~yZX(uopW0auIloDh4rUFEC z8WW^Mc(rTau6Vd`($E$L@|eCxyk|8AgD@d#pOt=x>#Zt%iRv&5_y~IHNHX<8z(qSk zo$I64n^W~$l?Z{G)&>YBBmk)`t9%}|)ENqldPyyvHI{W1pbnxXVVIuk4b^sn1Wx-Z^K`KNT|z zbWh(_>MwtLPlF9T^e8&joT-JskPjSx^|>{i`AS=kY+MW^sRnlf?abzQLk(PQ_|v7_ zQ~6vtuO3;Y!!*N0+21+Q@xs_Ssg`t1QE=bur!l{7)RmRJq9=c1HX}Q4<@&S!aXdqX z&F+=No;*(0QJs^tE+k_qiy*I9!HwjB0ujTV;utLx+jrV`g_sdZFz>)X$=)m;s_0t; z?Rg~{a7*Tq=98pSlj_3c;9gg)t^MxAiuZA1neTKo&m~Fa{tnd$-1dlMN}JX7Vg6aT ztqne1`nswfPnqMMGIWlaH>Igcf5*FXG1K;AjHSLzfs$l$Ah>2MHK)l^CzTa@W?3?j zDkY&VpKpgb5q`*Q^~<@QDzWrNy3qr}a;E!Cv%(~-TJb3QXHKL%83ogUF07+F_N=&! zc+)NQ+AI2|Hxme&mXX3tU_#$UsG!yKJ(q7*8l|v2oi-h%YRv)Y*+kckl!RjPH=?&n zk0h?Dwt$&~;iM3N1Rw?T3nNb33a8M^P#n)?m09vgnk^1Np|b7YmwCi;?t#g;w;X_V zjQ0s1QDv9TBatd%go92z`HnIy3=r?HGxgdGQgA;ZpfafWrfh!Ypn}>6n5x^7cSk6& zZkLR3Z)6UkXjnx`yi7-@pc>(KvHLWF(mu+VS&a8l83ohhZF9Bvfjo69eNk&hnR!v0 zHrD)Ks@q3MiyiEmwI98KDSEbDeXS6wKi+^0Ltq@TU_69_ND7z4 zBkCL@Ie6w^!1QB^xI5v0Vj*OUPM)gwsBd6xzY9WY(2^z(KUPmzWr>)UZn*3yUPj(x zWoQXmtB2{7U z{n=T|ln;}hf1g*sqfV{!Q-k>=rlfmTlm$j`GizvAuTbhYBgB#+3lDrk!%WBZ0i$T} z#{ECV$G>V(WiZLKQMmrN++9WwF8}0KfYhjqlnfmK0JLZexXd)wd+%Sngz&Z7Q)b`Q z#`Uh4Z)^3*zy_V-T^1qXOp_}*0@#oXdv2SuFv-~cD8EHHLa20@Rpx!=6OMHxxDU!4 zM`E$~i<7MxV2U=xKoCJfJbYGF3ui^VCH$WAXVp|CisM
H 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 H5P#kyoi@E3=PZ^E6RUXjXS?V}@rFsKN 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 literal 0 HcmV?d00001 diff --git a/g1sms/checknodes.sh b/g1sms/checknodes.sh new file mode 100755 index 0000000..26e6066 --- /dev/null +++ b/g1sms/checknodes.sh @@ -0,0 +1,152 @@ +#!/bin/bash +################################################################################ +# Authors: @jytou (https://git.duniter.org/jytou) +# Modified by Fred (support@qo-op.com) to modifiy silkaj constant with best server +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +# Checks the current block number of nodes.txt (is run in parallel) and output random (from last synchronized) node +# pip3 install duniterpy +# pip3 install silkaj --user + +checkonenode() +{ + # Timeout in seconds for https nodes + httpsTimeout=1 + # Timeout in seconds for http nodes + httpTimeout=1 + + node=$1 + watched=$2 + outfile=$3 + # Curl: -m timeout, -k ignore SSL certificate errors + cur=`echo "$( { curl -m $httpsTimeout -k https://$node/blockchain/current; } 2>&1 )"` + n=$node + if [[ "$cur" != *issuersFrameVar* ]] + then + # It failed in https, maybe try http? + cur=`echo "$( { curl -m $httpTimeout http://$node/blockchain/current; } 2>&1 )"` + if [[ "$cur" == *issuersFrameVar* ]] + then + # Indicate that the node is http + n="$n-(http)" + fi + fi + if [[ "$cur" != *issuersFrameVar* ]] + then + # The node didn't respond on time + cur="ERROR" + else + # The node did respond - grab the block number and hash of the block as key + cur="`echo "$cur"|grep '^ "number": '|awk '{print $2}'|awk -F, '{print $1}'`-`echo "$cur"|grep '^ "hash": '|awk '{print $2}'|awk '{print substr($1,2,13)}'`" + fi + if [[ $watched =~ .*#$node#.* ]] + then + # The node is a watched node, add some bold + n="\e[1m$n\e[0m" + fi + # Put the result into the file + echo "$cur $n">$outfile + # Notify that we're done here + touch $outfile.done +} + +# Temp dir where results are stored +DIR=/tmp/gnodewatch +export DIR +mkdir -p $DIR/chains +########### +# BANNISH DUNITER NODE? +# TODO: silkaj evolution!! Better CLI integration to make! +# Duniter Node is too slow or behave badly, remove it from nodes.txt list +BAN=$1 +if [[ "$BAN" == "BAN" ]]; then + # Get actual Duniter node used by silkaj + SERVER=$(cat ./silkaj/src/constants.py | grep G1_DEFAULT_ENDPOINT | awk '{print $3}' | sed s/\"\,//g | sed s/\"//g) + [[ ! $(grep $SERVER:443 shell/bad.nodes.txt) ]] && echo $SERVER:443 >> shell/bad.nodes.txt + sed -i "/$SERVER:443/d" ./shell/good.nodes.txt + echo "$SERVER:443 IS NOW in ./shell/bad.nodes.txt" +fi + +### nodes.txt EMPTYNESS CARE +NBgood=$(cat ./shell/good.nodes.txt | wc -l) +NBbad=$(cat ./shell/bad.nodes.txt | wc -l) +if [[ $NBgood -le $NBbad ]]; then + echo "" > ./shell/good.nodes.txt + echo "" > ./shell/bad.nodes.txt + # TODO: Each decentralized App must have a source for its confidence to be UP and running and publishing latest code for our concensus behaviour! + echo "___ REFRESH ./shell/nodes.txt from g1.duniter.org:443 ___" + curl -s https://g1.duniter.org/network/peers | jq '.peers[] | .endpoints' | grep BMAS | awk '{print $2,$3}' | sed s/\"//g | sed s/\,//g | sed s/\ /:/g > "./shell/nodes.txt" + echo $(cat "./shell/nodes.txt") +fi +########### +# CONTINUE + +# Grab the nodes we are actively watching - they will be in bold in the final output +watched=`grep -v "#" ./shell/nodes.txt|egrep "\!$"|awk '{print "#" $1 "#"}'` +# All nodes we are watching +nodes=`grep -v "#" ./shell/nodes.txt|awk '{print $1}'` +# The index to generate separate file names +index=0 +# Wipe out the output directory +rm $DIR/*out $DIR/*done $DIR/chains/* $DIR/NODE.* 2>/dev/null + +# Query all nodes in parallel +for node in $nodes +do + checkonenode $node "$watched" $DIR/$index.out & + ((index++)) +done + +# Wait a little for the first files to be created +sleep 1s +# Wait for all the threads to report they are done +while [ `ls $DIR/*done|wc -l` -lt $index ] +do + sleep 1s +done + +# Grab all results +curs=`cat $DIR/*out|sort` +# Extract all forks, excluding all errors +chains="`echo "$curs"|grep -v ERROR|awk '{print $1}'|sort -r|uniq`" + +# Count the number of chains and output most recent consensus to "good.nodes.txt" +nb=0 +for chain in $chains +do + echo "$curs" | egrep "^$chain " | awk '{print $2}' >> $DIR/chains/$nb; + ((nb++)) +done + +longchain=$(ls -S /tmp/gnodewatch/chains/ | head -n 1) +cp /tmp/gnodewatch/chains/$longchain "./shell/good.nodes.txt" + +##################################################################################### +# ASK peers to all good.nodes.txt +#for node in $(cat ./shell/good.nodes.txt); do +# NANODATE=$(date +%s%N); +# DUN="https://$(echo $node| cut -d ":" -f 1)"; +# curl -s -o $DIR/NODE.$NANODATE.$node ${DUN}/network/peers; +#done + +# REFRESH from all known peers NEW nodes.txt +#cat /tmp/gnodewatch/NODE.* | jq '.peers[] | .endpoints' | grep BMAS | awk '{print $2,$3}' | sed s/\"//g | sed s/\,//g | sed s/\ /:/g | sort | uniq > "./shell/nodes.txt" +##################################################################################### + +# Output Random actual best node +# Compare with ./shell/bad.nodes.txt +while [[ "$BAD" == "$DUNITER" ]]; do + DUNITER=$(shuf "./shell/good.nodes.txt" | head -n 1) + BAD=$(grep -Rw "$DUNITER" ./shell/bad.nodes.txt) +done +################# MODIFY silkaj constants.py +silkaj=$(echo $DUNITER | cut -d ":" -f 1) +if [[ "$silkaj" != "" && "$silkaj" != "https" ]]; then + #echo "PUT $silkaj SILKAJ PARAM" + cat ./silkaj/src/constants.default.py | sed s/duniter-g1.p2p.legal/$silkaj/g > ./silkaj/src/constants.py +else + echo "RESTORE DEFAULT SILKAJ PARAM" + cp -f ./silkaj/src/constants.default.py ./silkaj/src/constants.py +fi +echo $DUNITER diff --git a/g1sms/cron_CODE.backup.sh b/g1sms/cron_CODE.backup.sh new file mode 100755 index 0000000..a62825c --- /dev/null +++ b/g1sms/cron_CODE.backup.sh @@ -0,0 +1,71 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +# BACKUP G1sms+ current Devlt code and push it with SWARM_CODE_MASTER to IPFS +################################################################################ +source ./shell/init.sh +source ./shell/functions.sh +now=$(date +%Y-%m-%d) + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized + +echo "COMMENTAIRES?" +read COMMENT + +# CREATE CURRENT NODE "SWARM_CODE_MASTER" ipns key +if [[ ! -f "/home/$YOU/.ipfs/keystore/SWARM_CODE_MASTER" ]]; then + echo "Vous ne possédez pas la clef SWARM_CODE_MASTER de ce CODE..." + # echo "FORK ? su $YOU -c \"ipfs key gen -t rsa -s 2048 SWARM_CODE_MASTER\"" + echo "Si vous souhaiter participer au CODE, contactez https://g1sms.fr " + echo "Utilisez le script ./G1sms+/install.sh pour installer ou mettre à jour votre noeud" + exit +else + # Only "SWARM_CODE_MASTER" key owner(s) can update & publish this _official _chain + #rm "./$dir/_publishkey.pgp" # TEMP for file name correction... + cat "/home/$YOU/.ipfs/keystore/SWARM_CODE_MASTER" | base64 | gpg -q --output "./$dir/_publishkey.gpg" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "/home/$YOU/.ipfs/keystore/SWARM_CODE_MASTER" +fi + +## Backup $ROOT +dir=$(pwd | awk 'BEGIN { FS = "/" } ; {print $4}') +cd .. + +############################################### +# Create BASIC IPNS _official IPFS HASH _chain +# with iterative update _chain, _nanodate, _zen, _g1cents values +# + _external UID references & _comments lines +########################################################################################### +echo "PLEASE WAIT...." +echo "GIT" > "./$dir/_type" +hop=$(cat "./$dir/_chain") +LASTDU=$(curl -s ${DUNITER}/blockchain/with/ud | jq '.result.blocks[]' | tail -n 1); +[[ $LASTDU != "" ]] && curl -s ${DUNITER}/blockchain/block/${LASTDU} | jq '.dividend' > "./$dir/_DU" || LASTDU=$(cat ./$dir/_DU) +echo "Valeur courante du DU=$(cat ./$dir/_DU) ZEN - CHAIN: $hop" +read + +if [[ ! -f "./$dir/_id" ]]; then echo "SWARM_CODE_MASTER" > "./$dir/_id"; fi +if [[ ! -f "./$dir/_zen" ]]; then echo 0 > "./$dir/_zen"; fi +if [[ ! -f "./$dir/_g1cents" ]]; then echo 0 > "./$dir/_g1cents"; fi +if [[ ! -f "./$dir/_external" ]]; then echo "" > "./$dir/_external"; fi # Used to link to External UniqID +echo $(date +%s%N) > "./$dir/_nanodate" + +echo "$now: $COMMENT" >> "./$dir/_comments" + +# TAR G1sms+ FILES (WITH EXCLUSIONS!!) +tar -cvzf ~/G1sms+_backup_$now.tar.gz --exclude 'g1sms.preoni.*' --exclude 'authfile' --exclude 'init.sh' --exclude '.git' --exclude 'billets' --exclude 'constants.py' --exclude 'TAG' --exclude 'history*' --exclude 'trash' --exclude 'print' --exclude 'wallets' --exclude 'wallets_swarm' --exclude 'g1sms.priv.key' ./$dir + +mkdir -p /tmp/CODE/ && tar xzf ~/G1sms+_backup_$now.tar.gz -C /tmp/CODE/ && rm -f ~/G1sms+_backup_$now.tar.gz + +# PUBLISH IT +hash=$(su $YOU -c "ipfs add -rq /tmp/CODE/ -w | tail -n 1") + +echo $hash > "./$dir/_chain" +publish=$(su $YOU -c "ipfs name publish -k SWARM_CODE_MASTER --quieter /ipfs/${hash}") +echo $publish > "./$dir/_official" + +rm -Rf /tmp/CODE + +echo "_CHAIN: NEW /ipfs/$hash // $hop PUBLISHED with \"SWARM_CODE_MASTER\" key +ipfs get --output=./ /ipns/$publish" diff --git a/g1sms/cron_CODE.upgrade.sh b/g1sms/cron_CODE.upgrade.sh new file mode 100755 index 0000000..ca83152 --- /dev/null +++ b/g1sms/cron_CODE.upgrade.sh @@ -0,0 +1,40 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +# BACKUP G1sms+ current Devlt code and push it with NODE_G1AUTHFILE encryption to IPFS +################################################################################ +## GET LATEST DEV $ROOT +source ./shell/init.sh +source ./shell/functions.sh +now=$(date +%Y-%m-%d) +dir=$(pwd | awk 'BEGIN { FS = "/" } ; {print $4}') +cd .. + +publish=$(cat "./$dir/_official") +maillon=$(cat "./$dir/_chain") +if [[ "$publish" == "" ]]; then lev="ipfs"; hash="$maillon"; else lev="ipns"; hash="$publish"; fi + +su $YOU -c "ipfs get --output=./ /$lev/$hash" + +if [[ -f "./CODE/G1sms+.latest.tgz" ]]; then + echo "TODAY CODE FOUND... UNTAR in ls ./TODAY" + mkdir -p ./TODAY + cd TODAY + tar xvzf ../CODE/G1sms+.latest.tgz + # KEEP LOCAL NODE init.sh + if [[ ! -f "./$dir/shell/init.sh" ]]; then echo "backup restore problem..."; exit; fi + echo "REMOVE DEFAULT INIT..." + rm -f ./$dir/shell/init.sh + + echo "DIFFERENCES ENTRE LES 2 VERSIONS:" + diff ./$dir/ ../$dir/ + + echo "VOULEZ VOUS METTRE A JOUR? Saisissez OUI" + read QUOI + if [[ "$QUOI" == "OUI" ]]; then sudo cp -Rf . ..; else echo "ANNULATION UPDATE"; exit; fi + +fi + + diff --git a/g1sms/cron_G1TAG_REFRESH.sh b/g1sms/cron_G1TAG_REFRESH.sh new file mode 100755 index 0000000..874f45f --- /dev/null +++ b/g1sms/cron_G1TAG_REFRESH.sh @@ -0,0 +1,83 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +########################################################################################### +# cron_G1TAG_REFRESH.sh +# Scan all TAG created by current $IPFSNODEID +# Update local and Publish it +# Remove too old or empty ones +################################################################## +YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) +IPFSNODEID=$(su $YOU -c "ipfs id -f='\n'") +NANODATE=$(date -u +%s%N) #1569692075385428020 + +# PROTECT from null HASH +for tag in ./wallets/.$IPFSNODEID/TAG/*; do + function rmtag () { + echo "__SUB:cron_G1TAG_REFRESH.sh: rm -Rf ./wallets/.$IPFSNODEID/TAG/${tagj}" + rm -Rf ./TAG/${tagj} + rm -f ./wallets/.$IPFSNODEID/TAG/${tagj} + rm -f ./wallets_swarm/.$IPFSNODEID/TAG/${tagj} + rm -f /home/$YOU/.ipfs/keystore/${tagj} + } + + # Refresh G1Tag created by this NODE + tagj=$(echo $tag | cut -d '/' -f 5) + if [[ "${tagj}" == "" ]]; then echo "__SUB:cron_G1TAG_REFRESH.sh: EMPTY"; continue; fi + echo "__SUB:cron_G1TAG_REFRESH.sh: WORKING ON ${tagj}" + RR=$($YOU -c "ipfs cat /ipns/${tagj}/TAG_id | sed s/\ //g"); + if [[ "$RR" == "" ]]; then + echo "__SUB:cron_G1TAG_REFRESH.sh: G1Tag Destroyed !!!??"; + + rmtag + continue; + fi + + # RE-SYNC LOCAL & SWARM G1TAG - TODO Check for G1Tag chain corruption + mv ./TAG/${RR} ./TAG/${RR}.old + mkdir -p ./TAG/${RR} + chown -R $YOU ./TAG/${RR} + su $YOU -c "ipfs get --output=./TAG/${RR} /ipns/${tagj}" + oldtagval=$(cat ./TAG/${RR}.old/TAG_amount) + curtagval=$(cat ./TAG/${RR}/TAG_amount) + oldtagn=$(cat ./TAG/${RR}.old/TAG_n) + curtagn=$(cat ./TAG/${RR}/TAG_n) + oldtagchain=$(cat ./TAG/${RR}.old/TAG_chain) + curtagchain=$(cat ./TAG/${RR}/TAG_chain) + echo "__SUB:cron_G1TAG_REFRESH.sh: ./TAG/$RR VALUE: ($oldtagn) $oldtagval ZEN -> ($curtagn) $curtagval ZEN" + echo "__SUB:cron_G1TAG_REFRESH.sh: $oldtagchain -> $curtagchain" + + rm -Rf ./TAG/${RR}.old + if [[ $curtagval -eq 0 || "$curtagval" == "" ]]; then rmtag; continue; fi + + # SHOULD PUBLISH ONLY MORE THAN 6h NO USE G1TAG + last=$(cat ./TAG/${RR}/TAG_nanodate) + timediff=$( echo "${NANODATE} - ${last}" | bc -l ) + # G1TAG TIME SYNC 21600 milliards de nanosecondes = 6h + if [[ $timediff -gt 21600000000000 ]]; then + + # GET PUBLISHKEY for that G1TAG + if [[ ! -f /home/$YOU/.ipfs/keystore/${RR} ]]; then + echo "__SUB:cron_G1TAG_REFRESH.sh: GET PUBLISHKEY for that G1TAG"; + su $YOU -c "ipfs get -o /home/$YOU/.ipfs/keystore/${RR}.crypt /ipns/$tagj/TAG_publishkey.MASTER.crypt" + if [[ ! -f /home/$YOU/.ipfs/keystore/${RR}.crypt ]]; then log "__SUB:cron_MINUTE.sh: error getting publishkey"; continue; fi + ./shell/natools.py decrypt -k "$NODE_G1AUTHFILE" -i /home/$YOU/.ipfs/keystore/${RR}.crypt -o /home/$YOU/.ipfs/keystore/$RR + rm /home/$YOU/.ipfs/keystore/${RR}.crypt + fi + echo "__SUB:cron_G1TAG_REFRESH.sh: G1Tag PUBLISHKEY OK : /home/$YOU/.ipfs/keystore/${RR}" + echo ${NANODATE} > ./TAG/${RR}/TAG_nanodate + # PUBLISH VERIFIED G1Tag VERSION + I=$(su $YOU -c "ipfs add -qr ./TAG/${RR} | tail -n 1") + # RECORD TAG_chain And HASH again + echo "$I" > "./TAG/${JDESTRR}/TAG_chain" + I=$(su $YOU -c "ipfs add -qr ./TAG/${RR} | tail -n 1") + # IPNS $JDESTRR PUBLISH + J=$(su $YOU -c "ipfs name publish -k ${RR} --quieter /ipfs/${I}") + echo "__SUB:cron_G1TAG_REFRESH.sh: G1Tag IPNS PUBLISH" + fi + + +done +################################################################## diff --git a/g1sms/cron_GCHANGE.sh b/g1sms/cron_GCHANGE.sh new file mode 100755 index 0000000..5617834 --- /dev/null +++ b/g1sms/cron_GCHANGE.sh @@ -0,0 +1,49 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +# TODO: SMS Alerte quand une annonce GCHANGE est proche du GeoPoint du téléphone/membre +# +# EXTRAIT LES DERNIERES ANNNONCES +# TODO Requête ES sur la distance directement !!!! @kimamila or http://www.elasticsearchtutorial.com/spatial-search-tutorial.html help? + +CESIUM="https://g1.data.le-sou.org" +echo "Entrez PubKey"; read DESTRIB; +curl -sk ${CESIUM}/user/profile/${DESTRIB} -o /tmp/profile.json +LON=$(cat /tmp/profile.json | jq '._source.geoPoint.lon') +LAT=$(cat /tmp/profile.json | jq '._source.geoPoint.lat') + +if [[ "$LON" != "null" ]]; then +curl -sk -XPOST 'https://data.gchange.fr/market/record/_search?pretty&_source=title' -d ' + { + "size": 100, + "query": { + "bool": { + "filter": [{ + "geo_distance": { + "distance": "100km", + "geoPoint": { + "lat": '$LAT', + "lon": '$LON' + } + } + }] + } + } + }' | jq +else + echo "Aucune coordonnées geoPoint pour $DESTRIB" +fi + +TOTAL=$(curl -s https://data.gchange.fr/market/record/_search | jq .hits.total) +echo "TOTAL ANNONCES GCHANGE: $TOTAL" +chunk=0 +while [[ $chunk -lt $TOTAL ]]; do + for res in $(curl -s https://data.gchange.fr/market/record/_search?from=$chunk | jq .hits.hits[]._id | sed s/\"//g ) do; + echo $res; + # curl -s --create-dirs -o ./gchange/$ID.json -s https://data.gchange.fr/market/record/$ID?_source=category,title,description,issuer,time,creationTime,location,address,city,price,unit,currency,thumbnail._content_type,picturesCount,type,stock,fees,feesCurrency,geoPoint + done + chunk=$((chunk+10)) +done diff --git a/g1sms/cron_IPFS_open_SSH.sh b/g1sms/cron_IPFS_open_SSH.sh new file mode 100755 index 0000000..849e4c4 --- /dev/null +++ b/g1sms/cron_IPFS_open_SSH.sh @@ -0,0 +1,23 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +# Activate SUPPORT MODE: open ssh over IPFS +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +if [[ -f $MY_PATH/.install/.GPATH ]]; then source $MY_PATH/.install/.GPATH; fi +if [[ -f $MY_PATH/../.install/.GPATH ]]; then source $MY_PATH/../.install/.GPATH; fi + +YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) +if [[ "$USER" != "root" ]]; then echo "Hey, $USER you must at least be admin of your system (sudo $0)"; exit; fi +if [[ "$YOU" == "" || "$YOU" == "root" ]]; then echo "BAD IPFS. Aucune installation IPFS satisfaisante ici... Ciao $YOU !"; exit; fi +IPFSNODEID=$(su $YOU -c "ipfs id -f='\n'") +cd $GPATH + +su $YOU -c "ipfs p2p close --all" +su $YOU -c "ipfs p2p listen /x/ssh /ip4/127.0.0.1/tcp/22" +su $YOU -c "ipfs p2p listen /x/http /ip4/127.0.0.1/tcp/80" +su $YOU -c "ipfs p2p listen /x/https /ip4/127.0.0.1/tcp/443" +su $YOU -c "ipfs p2p ls" \ No newline at end of file diff --git a/g1sms/cron_MINUTE.sh b/g1sms/cron_MINUTE.sh new file mode 100755 index 0000000..3eb4e60 --- /dev/null +++ b/g1sms/cron_MINUTE.sh @@ -0,0 +1,108 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +# CE FICHIER cron_MINUTE.sh EST EXECUTE TOUTES LES MINUTES +# IL CONSTITUE LE BATEMENT DE COEUR DU SYSTEME +################################################################################ + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +if [[ -f $MY_PATH/.install/.GPATH ]]; then source $MY_PATH/.install/.GPATH; fi +if [[ -f $MY_PATH/../.install/.GPATH ]]; then source $MY_PATH/../.install/.GPATH; fi + +YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) +if [[ "$USER" != "root" ]]; then echo "Hey, $USER you must at least be admin of your system (sudo $0)"; exit; fi +if [[ "$YOU" == "" || "$YOU" == "root" ]]; then echo "BAD IPFS. Aucune installation IPFS satisfaisante ici... Ciao $YOU !"; exit; fi +IPFSNODEID=$(su $YOU -c "ipfs id -f='\n'") +cd $GPATH +source ./shell/init.sh +source ./shell/functions.sh + +timebar=$(date +%H:%M) + +################################################################## +if [[ "$1" == "" ]]; then +################################################################## + echo "It is $timebar in the morning, or in the night? It depends on your day..." + exit +fi +################################################################## + +################################################################## +if [[ "$1" == "PRINT" ]]; then +################################################################## + ################################################################## + # Refresh All peers SWARM Wallets. + ################################################################## + ipfs_swarm_wallets_refresh "SIMPLE" + + ################################################################################ + # PRINT G1Tag PRINTED FROM ANOTHER NODE (TODO: Correct BAD Cypher KEY + BUG why last image png layers are not printed???) + # CREATE and REMOVE rr.bin -> done.rr + if [[ -d "./wallets_swarm/.$IPFSNODEID/PRINT/" ]]; then + log "__SUB:cron_MINUTE.sh: SEARCH NEW PRINT FOR ME .$IPFSNODEID" + mkdir -p ./wallets/.$IPFSNODEID/PRINT/ + + for qrrtag in ./wallets_swarm/.$IPFSNODEID/PRINT/*.bin; do + rr=$(echo $qrrtag | cut -d '/' -f 5 | cut -d '.' -f 1) + if [[ ! -f "./wallets/.$IPFSNODEID/PRINT/done.$rr" ]]; then + log "__SUB:cron_MINUTE.sh: PRINT G1Tag $rr - START: $(date)" + ./shell/natools.py decrypt -k "$NODE_G1AUTHFILE" -i "${qrrtag}" -o "/tmp/G1Tag.png" + log "__SUB:cron_MINUTE.sh: natools.py decrypt - $(date)" + brother_ql_create --model QL-700 "/tmp/G1Tag.png" --label-size 62 > "/tmp/G1Tag.bin" + log "__SUB:cron_MINUTE.sh: brother_ql_create - $(date)" + brother_ql_print "/tmp/G1Tag.bin" /dev/usb/lp0 + log "__SUB:cron_MINUTE.sh: brother_ql_print - $(date)" + # INFORM PRINT DONE + echo "OK" > ./wallets/.$IPFSNODEID/PRINT/done.$rr + I=$(ipfs_node_wallets_add) + else + lqrrtag=$(echo "${qrrtag}" | sed s/_swarm//g ) + log "__SUB:cron_MINUTE.sh: REMOVE OLD DONE PRINT ${lqrrtag} + ./wallets/.$IPFSNODEID/PRINT/done.$rr" + rm -f "./wallets/.$IPFSNODEID/PRINT/done.$rr" + rm -f "${lqrrtag}" + I=$(ipfs_node_wallets_add) + fi + done + + log "__SUB:cron_MINUTE.sh: REMOVE OLD PRINT MARKED AS DONE" + for scan in ./wallets_swarm/.Qm*/PRINT/done.*; do + lscan=$(echo $scan | sed s/_swarm//g ) + lid=$(echo $scan | cut -d '/' -f 3 | cut -d '.' -f 2 ) + lrr=$(echo $scan | cut -d '/' -f 5 | cut -d '.' -f 2 ) + log "__SUB:cron_MINUTE.sh: REMOVE ./wallets/.$lid/PRINT/$lrr.bin OLD PRINT ${lscan} SENT to $lid ($lrr.bin)" + rm -f ./wallets/.$lid/PRINT/$lrr.bin + rm -f "${lscan}" + I=$(ipfs_node_wallets_add) + done + + rm "/tmp/G1Tag.bin" + rm "/tmp/G1Tag.png" + fi +fi +################################################################## + +################################################################## +if [[ "$1" == "KALKUN" ]]; then +################################################################## + for number in ./wallets/*; do + member="" + phone=$(echo $number | cut -d '/' -f 3); + if [[ -f $number/$phone.uidname ]]; then member=$(cat $number/$phone.uidname); fi + if [[ ! $member ]]; then member=$phone; fi + if [[ $phone && $member ]]; then add_contact $phone $member; log "__SUB:cron_MINUTE.sh: KALKUN add_contact $phone $member"; fi + done +fi +################################################################## + +################################################################## +if [[ "$1" == "TAG" ]]; then +################################################################## + for tag in ./TAG/*; do + echo $tag + done +fi +################################################################## diff --git a/g1sms/cron_VIR.recurrent.sh b/g1sms/cron_VIR.recurrent.sh new file mode 100755 index 0000000..74723f0 --- /dev/null +++ b/g1sms/cron_VIR.recurrent.sh @@ -0,0 +1,94 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +# Effectue les payements récurrents et enlève le vérrou (DESTROY) +# TAKES CARE OF DOING RECURRENT PAYEMENTS EVERY DAY FOR ITS $PHONE G1Wallets +# TODO: Add SMS Alert if G1sms Wallet is low... +source ./shell/init.sh +source ./shell/functions.sh +log "__SUB:cron_VIR.reccurent.sh: START" + +rm -f /tmp/VIR* +echo "" > /tmp/VIR + +TODAY=$(date '+%Y%m%d') +log "__SUB:cron_VIR.reccurent.sh: Searching payements to do for $TODAY" +for file in ./wallets/*/VIREMENTS.gpg ; do + if [[ -f $file ]]; then + log "__SUB:cron_VIR.reccurent.sh: FOUND $file decrypting with Node key" + echo "${GPGPASS}" | gpg -d -q --output "/tmp/VIREMENTS" --yes --pinentry-mode loopback --passphrase-fd 0 "$file" + cat /tmp/VIREMENTS | sort >> /tmp/VIR$TODAY + else + continue + fi +done + +############################################ +if [[ -f /tmp/VIR$TODAY ]]; then +############################################ +while read line + do virement=(${line}); + if [[ ${virement[0]} == ${TODAY} ]]; then + log "__SUB:cron_VIR.reccurent.sh: PAYING !!! ${line}" + PHONE=${virement[2]} + VIR=${virement[3]} + DESTRIB=${virement[4]} + DESTUID=${virement[5]} + REF=${virement[6]} + NB=${virement[7]} + + sms_INIT_ACCOUNT "$PHONE" "NOSMS" + # echo -salt="$PHONE" -password="$PIN" --amount="$VIR" --output="$DESTRIB" --comment="[G1sms+] VIR $REF / $NB" + PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$VIR" --output="$DESTRIB" --comment="[G1sms+] VIR $REF / $NB" -y) + if [[ "$(echo $PAY | cut -d '|' -f 1)" == "KO" ]]; then + new=$(./shell/checknodes.sh "BAN") + sms_ERROR "$PHONE" "Il est survenu un problème avec votre virement. Retour silkaj: $PAY ... $new"; + else + new=$(./shell/checknodes.sh) + sms_SEND "$PHONE" "$TODAY Virement automatique $REF vers $DESTUID : $PAY (Reste $NB)" + cents=$(echo $(bc -l <<< "scale=0; $VIR * 100") | cut -d '.' -f 1) + move_g1cents "$PHONE" "$DESTRIB" "$cents" + fi + log "__SUB:cron_VIR.reccurent.sh: $TODAY VIR DONE.... Rotation Silkaj : $new " + else + virement="" + echo "$(declare -p virement)" + fi +done < /tmp/VIR$TODAY + +# CHECK FOR LAST VIREMENTS AND CLEAN IT? +for virfile in "./wallets/*/VIREMENTS.gpg"; do + phone=$(echo $virfile | cut -d '/' -f 3) + if [[ "$phone" == "*" ]]; then exit; fi + echo "${GPGPASS}" | gpg -d -q --output "/tmp/$phone.VIREMENTS" --yes --pinentry-mode loopback --passphrase-fd 0 "./wallets/$phone/VIREMENTS.gpg" + nv=0; tot=0; + while read ligne + do virs=(${ligne}); + if [[ ${virs[0]} -gt ${TODAY} ]]; then + # Some other payments are to be done in the future + ((nv++)) + tot=$((tot + {virs[3]})) + fi + done < /tmp/$phone.VIREMENTS + + # NO FUTURE PAYMENTS. REMOVE VIREMENTS files + if [[ $nv -eq 0 ]]; then + log "__SUB:cron_VIR.reccurent.sh: Plus AUCUN payement récurrent !!" + sms_SEND "$phone" "Plus AUCUN payement récurrent" + rm -f "./wallets/$phone/VIREMENTS.gpg" + rm -f "./wallets/$phone/VIREMENTS" + I=$(ipfs_node_wallets_add) + else + log "__SUB:cron_VIR.reccurent.sh: Encore $nv payements récurrents à réaliser pour $tot G1" + # TODO Verify Wallet Amount is not too low... To send alert (sms, email) + # cts=$(echo $(bc -l <<< "scale=0; $tot * 100") | cut -d '.' -f 1) + sms_SEND "$phone" "Encore $nv payements récurrents à réaliser pour $tot G1. Approvisionnez votre solde en conséqence..." + fi + rm -f "/tmp/$phone.VIREMENTS" +done +############################################ +fi +############################################ diff --git a/g1sms/diceware-wordlist.txt b/g1sms/diceware-wordlist.txt new file mode 100644 index 0000000..6a49fb9 --- /dev/null +++ b/g1sms/diceware-wordlist.txt @@ -0,0 +1,7776 @@ +11111 minou +11112 yes +11113 love +11114 kraken +11115 matiou +11116 cgeek +11121 g1 +11122 minette +11123 fred +11124 world +11125 bingo +11126 money +11131 duniter +11132 cesium +11133 greg +11134 linux +11135 linus +11136 peps +11141 tim +11142 emma +11143 kitty +11144 cyber +11145 tulipe +11146 moringa +11151 michel +11152 trm +11153 lucien +11154 gaston +11155 moul +11156 elois +11161 vanna +11162 papy +11163 mamy +11164 ludo +11165 fiston +11166 moon +11211 gilles +11212 demo +11213 alex +11214 0 +11215 1 +11216 10 +11221 100 +11222 1000 +11223 100eme +11224 101 +11225 10eme +11226 11 +11231 111 +11232 1111 +11233 11eme +11234 12 +11235 123 +11236 1234 +11241 12eme +11242 13 +11243 13eme +11244 14 +11245 1492 +11246 14eme +11251 15 +11252 1500 +11253 15eme +11254 16 +11255 1600 +11256 16eme +11261 17 +11262 1700 +11263 17eme +11264 18 +11265 1800 +11266 18eme +11311 19 +11312 1900 +11313 1910 +11314 1920 +11315 1925 +11316 1930 +11321 1935 +11322 1940 +11323 1945 +11324 1950 +11325 1955 +11326 1960 +11331 1965 +11332 1970 +11333 1975 +11334 1980 +11335 1985 +11336 1990 +11341 1991 +11342 1992 +11343 1993 +11344 1994 +11345 1995 +11346 1996 +11351 1997 +11352 1998 +11353 1999 +11354 19eme +11355 1er +11356 2 +11361 20 +11362 200 +11363 2000 +11364 2001 +11365 2002 +11366 2003 +11411 2004 +11412 2005 +11413 2006 +11414 2007 +11415 2008 +11416 2009 +11421 2010 +11422 2015 +11423 2020 +11424 2030 +11425 2035 +11426 2040 +11431 2045 +11432 2050 +11433 20eme +11434 21 +11435 21eme +11436 22 +11441 222 +11442 2222 +11443 22eme +11444 23 +11445 234 +11446 2345 +11451 23eme +11452 24 +11453 2468 +11454 24eme +11455 25 +11456 25eme +11461 26 +11462 26eme +11463 27 +11464 27eme +11465 28 +11466 28eme +11511 29 +11512 29eme +11513 2eme +11514 3 +11515 30 +11516 300 +11521 3000 +11522 30eme +11523 31 +11524 31eme +11525 32 +11526 32eme +11531 33 +11532 333 +11533 3333 +11534 33eme +11535 34 +11536 345 +11541 3456 +11542 34eme +11543 35 +11544 35eme +11545 36 +11546 36eme +11551 37 +11552 37eme +11553 38 +11554 38eme +11555 39 +11556 39eme +11561 3eme +11562 4 +11563 40 +11564 400 +11565 4000 +11566 40eme +11611 41 +11612 41eme +11613 42 +11614 42eme +11615 43 +11616 4321 +11621 43eme +11622 44 +11623 444 +11624 4444 +11625 44eme +11626 45 +11631 456 +11632 4567 +11633 45eme +11634 46 +11635 46eme +11636 47 +11641 47eme +11642 48 +11643 48eme +11644 49 +11645 49eme +11646 4eme +11651 5 +11652 50 +11653 500 +11654 5000 +11655 50eme +11656 51 +11661 51eme +11662 52 +11663 52eme +11664 53 +11665 53eme +11666 54 +12111 54eme +12112 55 +12113 555 +12114 5555 +12115 55eme +12116 56 +12121 567 +12122 5678 +12123 56eme +12124 57 +12125 57eme +12126 58 +12131 58eme +12132 59 +12133 59eme +12134 5eme +12135 6 +12136 60 +12141 600 +12142 6000 +12143 60eme +12144 61 +12145 61eme +12146 62 +12151 62eme +12152 63 +12153 63eme +12154 64 +12155 64eme +12156 65 +12161 65eme +12162 66 +12163 666 +12164 6666 +12165 66eme +12166 67 +12211 678 +12212 6789 +12213 67eme +12214 68 +12215 68eme +12216 69 +12221 69eme +12222 6eme +12223 7 +12224 70 +12225 700 +12226 7000 +12231 70eme +12232 71 +12233 71eme +12234 72 +12235 72eme +12236 73 +12241 73eme +12242 74 +12243 74eme +12244 75 +12245 75eme +12246 76 +12251 76eme +12252 77 +12253 777 +12254 7777 +12255 77eme +12256 78 +12261 789 +12262 78eme +12263 79 +12264 79eme +12265 7eme +12266 8 +12311 80 +12312 800 +12313 8000 +12314 80eme +12315 81 +12316 81eme +12321 82 +12322 82eme +12323 83 +12324 83eme +12325 84 +12326 84eme +12331 85 +12332 85eme +12333 86 +12334 86eme +12335 87 +12336 87eme +12341 88 +12342 888 +12343 8888 +12344 88eme +12345 89 +12346 89eme +12351 8eme +12352 9 +12353 90 +12354 900 +12355 9000 +12356 90eme +12361 91 +12362 91eme +12363 92 +12364 92eme +12365 93 +12366 93eme +12411 94 +12412 94eme +12413 95 +12414 95eme +12415 96 +12416 96eme +12421 97 +12422 97eme +12423 98 +12424 9876 +12425 98eme +12426 99 +12431 999 +12432 9999 +12433 99eme +12434 9eme +12435 a +12436 aa +12441 aaa +12442 aaaa +12443 ab +12444 abat +12445 abats +12446 abatte +12451 abc +12452 abject +12453 aboie +12454 abois +12455 aboli +12456 abonda +12461 abonne +12462 abord +12463 aborda +12464 aborde +12465 abords +12466 abouti +12511 aboya +12512 aboyer +12513 abri +12514 abris +12515 abrita +12516 abrite +12521 abroge +12522 abrupt +12523 abruti +12524 absent +12525 abus +12526 abusa +12531 abuse +12532 ac +12533 acajou +12534 accola +12535 accord +12536 accroc +12541 accru +12542 accule +12543 accusa +12544 ace +12545 acerbe +12546 aces +12551 achat +12552 acheta +12553 acheva +12554 acide +12555 acier +12556 acquis +12561 acquit +12562 acte +12563 actes +12564 acteur +12565 actif +12566 ad +12611 adage +12612 adapta +12613 adapte +12614 adepte +12615 adieu +12616 adjura +12621 adjure +12622 admet +12623 admira +12624 admis +12625 admise +12626 admit +12631 adonne +12632 adopta +12633 adopte +12634 adora +12635 adore +12636 adorer +12641 adores +12642 aduler +12643 adulte +12644 advenu +12645 ae +12646 aequo +12651 af +12652 affine +12653 affixe +12654 afflua +12655 afflue +12656 afflux +12661 affola +12662 affole +12663 affres +12664 afin +12665 ag +12666 agace +13111 agaces +13112 agacez +13113 agate +13114 agates +13115 agence +13116 agenda +13121 agent +13122 agi +13123 agile +13124 agio +13125 agios +13126 agiote +13131 agir +13132 agira +13133 agirai +13134 agis +13135 agisse +13136 agit +13141 agita +13142 agite +13143 agiter +13144 agonie +13145 agonir +13146 agrafe +13151 ah +13152 ahuri +13153 ahurir +13154 ai +13155 aida +13156 aidais +13161 aidant +13162 aide +13163 aider +13164 aides +13165 aidez +13166 aidiez +13211 aidons +13212 aie +13213 aient +13214 aies +13215 aigle +13216 aigles +13221 aigre +13222 aigres +13223 aigri +13224 aigrie +13225 aigris +13226 aigrit +13231 aigu +13232 aigus +13233 ail +13234 aile +13235 ailes +13236 aille +13241 aima +13242 aimant +13243 aime +13244 aimer +13245 aimera +13246 aimes +13251 aimez +13252 aine +13253 aines +13254 ainsi +13255 air +13256 aire +13261 airer +13262 aires +13263 airs +13264 aise +13265 aises +13266 ait +13311 aj +13312 ajonc +13313 ajout +13314 ajouta +13315 ajuste +13316 ak +13321 al +13322 alarme +13323 album +13324 alcool +13325 alerta +13326 alevin +13331 alezan +13332 alfa +13333 alfas +13334 algue +13335 algues +13336 alias +13341 alibi +13342 aliter +13343 alla +13344 aller +13345 allez +13346 allia +13351 allie +13352 allier +13353 allies +13354 alloue +13355 allume +13356 allure +13361 aloi +13362 alors +13363 alpaga +13364 alpage +13365 alpin +13366 alpins +13411 alter +13412 alto +13413 altos +13414 alu +13415 aluner +13416 am +13421 amant +13422 amants +13423 amarre +13424 amas +13425 amble +13426 ambler +13431 ambre +13432 ambrer +13433 amen +13434 amena +13435 amenda +13436 amener +13441 amer +13442 amers +13443 ameuta +13444 ami +13445 amibe +13446 amical +13451 amie +13452 amies +13453 amis +13454 amont +13455 amour +13456 amours +13461 amphi +13462 ample +13463 amples +13464 ampli +13465 amputa +13466 amurer +13511 amusa +13512 amuse +13513 amuser +13514 amusez +13515 an +13516 anche +13521 anches +13522 ancra +13523 ancre +13524 ancrer +13525 ancres +13526 ancrez +13531 and +13532 ange +13533 anges +13534 angine +13535 angle +13536 angles +13541 angora +13542 anima +13543 anime +13544 animez +13545 anis +13546 aniser +13551 anneau +13552 annexa +13553 annota +13554 annote +13555 anode +13556 anodes +13561 ans +13562 anse +13563 anses +13564 antan +13565 antre +13566 antres +13611 anus +13612 ao +13613 aorte +13614 ap +13615 aphte +13616 aplani +13621 apparu +13622 appas +13623 appel +13624 appels +13625 apport +13626 apposa +13631 appose +13632 appris +13633 appui +13634 appuie +13635 appuis +13636 apte +13641 aptes +13642 apura +13643 apure +13644 apurer +13645 apures +13646 aq +13651 ar +13652 arabe +13653 araser +13654 arbora +13655 arbre +13656 arc +13661 arcade +13662 arche +13663 archet +13664 arcs +13665 ardu +13666 ardue +14111 ardues +14112 ardus +14113 are +14114 ares +14115 argile +14116 argot +14121 argots +14122 aria +14123 arias +14124 aride +14125 arides +14126 arma +14131 armais +14132 armait +14133 armant +14134 arme +14135 arment +14136 armer +14141 armes +14142 armez +14143 arpent +14144 arrime +14145 arriva +14146 arrive +14151 arroge +14152 arrosa +14153 art +14154 arts +14155 as +14156 asile +14161 aspect +14162 aspic +14163 assagi +14164 assez +14165 assis +14166 assit +14211 assoie +14212 assume +14213 astral +14214 astre +14215 astres +14216 astuce +14221 at +14222 atlas +14223 atoll +14224 atome +14225 atomes +14226 atone +14231 atones +14232 atours +14233 atout +14234 atouts +14235 attire +14236 au +14241 aube +14242 aubier +14243 aucun +14244 audit +14245 audits +14246 auge +14251 auges +14252 augura +14253 aune +14254 aunes +14255 auquel +14256 aura +14261 aurai +14262 auras +14263 aurez +14264 auriez +14265 aussi +14266 autel +14311 auteur +14312 auto +14313 autos +14314 autre +14315 auvent +14316 aux +14321 av +14322 avais +14323 avait +14324 aval +14325 avala +14326 avale +14331 avales +14332 avalez +14333 avals +14334 avance +14335 avant +14336 avants +14341 avare +14342 avarie +14343 avatar +14344 avec +14345 avenir +14346 avenu +14351 avenue +14352 avenus +14353 averse +14354 aveu +14355 aveuli +14356 aveux +14361 avez +14362 avide +14363 avides +14364 aviez +14365 avili +14366 avilir +14411 avilis +14412 avilit +14413 avion +14414 avions +14415 avis +14416 avisa +14421 avise +14422 avises +14423 aviso +14424 avisos +14425 aviva +14426 avive +14431 avives +14432 avoir +14433 avoirs +14434 avons +14435 avoua +14436 avoue +14441 avouer +14442 avouez +14443 avril +14444 aw +14445 ax +14446 axa +14451 axais +14452 axait +14453 axant +14454 axe +14455 axent +14456 axer +14461 axera +14462 axes +14463 axez +14464 axiez +14465 axiome +14466 axons +14511 ay +14512 ayant +14513 ayez +14514 ayons +14515 az +14516 azote +14521 azur +14522 azyme +14523 b +14524 ba +14525 baba +14526 babas +14531 babil +14532 bac +14533 bacon +14534 bacs +14535 badaud +14536 badge +14541 badges +14542 badin +14543 badine +14544 bafoua +14545 bagne +14546 bagou +14551 bague +14552 baguer +14553 bahut +14554 bahuts +14555 bai +14556 baie +14561 baies +14562 baigna +14563 bail +14564 bain +14565 bains +14566 bais +14611 baiser +14612 baissa +14613 baisse +14614 bal +14615 balade +14616 balai +14621 balais +14622 balaya +14623 balisa +14624 balise +14625 balle +14626 baller +14631 balles +14632 bals +14633 balsa +14634 bambin +14635 bambou +14636 ban +14641 banal +14642 banals +14643 banane +14644 banc +14645 bancal +14646 banco +14651 bancos +14652 bancs +14653 bande +14654 bandes +14655 bang +14656 bangs +14661 banjo +14662 banni +14663 bannit +14664 banque +14665 bans +14666 bantou +15111 baquet +15112 bar +15113 barbe +15114 barbet +15115 barbu +15116 barda +15121 bardas +15122 barde +15123 bardes +15124 barge +15125 baril +15126 barman +15131 baron +15132 barra +15133 barre +15134 barrez +15135 barrir +15136 bars +15141 bas +15142 basa +15143 basait +15144 basane +15145 base +15146 basent +15151 baser +15152 bases +15153 basez +15154 basque +15155 basse +15156 bassin +15161 basson +15162 bat +15163 bateau +15164 bats +15165 batte +15166 battez +15211 battit +15212 battre +15213 battu +15214 battus +15215 baudet +15216 bauge +15221 baume +15222 baux +15223 bava +15224 bavait +15225 bave +15226 baver +15231 baves +15232 bavez +15233 baviez +15234 bayer +15235 bazar +15236 bb +15241 bbb +15242 bbbb +15243 bc +15244 bcd +15245 bd +15246 be +15251 beau +15252 beaux +15253 bec +15254 becs +15255 becter +15256 beige +15261 beiges +15262 bel +15263 belge +15264 belle +15265 belles +15266 belon +15311 belons +15312 benne +15313 bennes +15314 berce +15315 bercer +15316 bercez +15321 berge +15322 berger +15323 berlue +15324 berna +15325 berne +15326 bernez +15331 besoin +15332 bette +15333 bettes +15334 bf +15335 bg +15336 bh +15341 bi +15342 biais +15343 biaisa +15344 bible +15345 biceps +15346 biche +15351 bicher +15352 bidet +15353 bidon +15354 bien +15355 biens +15356 biffa +15361 biffe +15362 bigler +15363 bijou +15364 bilan +15365 bilans +15366 bile +15411 biler +15412 bille +15413 biller +15414 billes +15415 billet +15416 billot +15421 binage +15422 biner +15423 bis +15424 bise +15425 biseau +15426 biser +15431 bises +15432 bison +15433 bisons +15434 bistro +15435 bit +15436 bits +15441 bitume +15442 bj +15443 bk +15444 bl +15445 blague +15446 blanc +15451 blancs +15452 blaser +15453 blesse +15454 blet +15455 blets +15456 bleu +15461 bleue +15462 bleui +15463 bleuie +15464 bleuir +15465 bleus +15466 blinde +15511 bloc +15512 blocs +15513 blond +15514 bloque +15515 blouse +15516 blues +15521 bluff +15522 bm +15523 bn +15524 bo +15525 boa +15526 boas +15531 bob +15532 bobine +15533 bobs +15534 bocal +15535 bocaux +15536 bock +15541 bocks +15542 boeuf +15543 bogue +15544 boira +15545 boirai +15546 boire +15551 boirez +15552 bois +15553 boit +15554 boita +15555 boite +15556 boitez +15561 boive +15562 boives +15563 bol +15564 bolet +15565 bolide +15566 bols +15611 bombe +15612 bomber +15613 bombes +15614 bon +15615 bonbon +15616 bond +15621 bonde +15622 bondes +15623 bondi +15624 bondir +15625 bondit +15626 bonds +15631 boni +15632 bonis +15633 bonne +15634 bonnes +15635 bons +15636 bonus +15641 bonze +15642 bonzes +15643 boom +15644 boots +15645 bord +15646 borda +15651 borde +15652 border +15653 bordes +15654 bordez +15655 bords +15656 borgne +15661 borna +15662 borne +15663 borner +15664 bornez +15665 bosse +15666 bosser +16111 bosses +16112 bossez +16113 bossu +16114 bot +16115 bots +16116 botte +16121 bouc +16122 boucs +16123 bouda +16124 boude +16125 bouder +16126 boudes +16131 boudez +16132 boudin +16133 boue +16134 boues +16135 bouffe +16136 bouffi +16141 bouge +16142 bouges +16143 bougre +16144 boule +16145 boulon +16146 boumer +16151 bourg +16152 bourre +16153 bous +16154 bouse +16155 bout +16156 bouter +16161 bouts +16162 bovin +16163 bovins +16164 box +16165 boxa +16166 boxe +16211 boxer +16212 boxera +16213 boxers +16214 boxes +16215 boxeur +16216 boxez +16221 boxiez +16222 boxons +16223 boy +16224 boyau +16225 boys +16226 bp +16231 bq +16232 br +16233 brada +16234 brade +16235 brader +16236 brades +16241 bradez +16242 braire +16243 braise +16244 brame +16245 bramer +16246 branle +16251 braque +16252 bras +16253 brassa +16254 brava +16255 brave +16256 braver +16261 braves +16262 bravez +16263 bravo +16264 bravos +16265 break +16266 breaks +16311 brebis +16312 bref +16313 brefs +16314 brevet +16315 bric +16316 brick +16321 bricks +16322 brida +16323 bride +16324 bridez +16325 bridge +16326 brie +16331 brilla +16332 brille +16333 brima +16334 brime +16335 brimer +16336 brimes +16341 brin +16342 brins +16343 brio +16344 brique +16345 bris +16346 brisa +16351 brise +16352 brises +16353 broc +16354 brocs +16355 broda +16356 brode +16361 broie +16362 bronza +16363 bronze +16364 brou +16365 brouta +16366 broya +16411 bru +16412 bruine +16413 bruir +16414 bruire +16415 bruit +16416 bruits +16421 brume +16422 brumer +16423 brun +16424 brune +16425 bruni +16426 brunie +16431 brunir +16432 brunit +16433 bruns +16434 brus +16435 brut +16436 brute +16441 bruts +16442 bs +16443 bt +16444 bu +16445 buccal +16446 budget +16451 bue +16452 bues +16453 buffle +16454 buggy +16455 buggys +16456 buis +16461 bulbe +16462 bulle +16463 bulles +16464 bure +16465 burent +16466 burin +16511 bus +16512 busard +16513 buse +16514 buses +16515 buste +16516 but +16521 buta +16522 butait +16523 butane +16524 butant +16525 bute +16526 buter +16531 butera +16532 butes +16533 buteur +16534 butez +16535 butiez +16536 butin +16541 butins +16542 butor +16543 butors +16544 buts +16545 butte +16546 buvait +16551 buvard +16552 buveur +16553 buvez +16554 bv +16555 bw +16556 bx +16561 by +16562 bz +16563 c +16564 ca +16565 caban +16566 cabas +16611 cabine +16612 cabra +16613 cabre +16614 cabres +16615 cabrez +16616 cabri +16621 cacao +16622 cacha +16623 cache +16624 cacher +16625 caches +16626 cachet +16631 cachou +16632 cactus +16633 caddie +16634 cade +16635 cades +16636 cadet +16641 cadi +16642 cadis +16643 cadra +16644 cadre +16645 cadrer +16646 cadrez +16651 caduc +16652 cafard +16653 cage +16654 cages +16655 cagibi +16656 cahot +16661 cahota +16662 cahote +16663 cahots +16664 cajou +16665 cajous +16666 cajun +21111 cake +21112 cakes +21113 cal +21114 cala +21115 calage +21116 calais +21121 calant +21122 calcul +21123 cale +21124 calent +21125 caler +21126 cales +21131 calez +21132 calma +21133 calmar +21134 calme +21135 calot +21136 cals +21141 calva +21142 came +21143 camer +21144 cames +21145 camion +21146 camp +21151 campa +21152 campe +21153 camper +21154 campes +21155 campez +21156 camps +21161 camus +21162 canal +21163 canard +21164 canari +21165 cancer +21166 candi +21211 candir +21212 cane +21213 caner +21214 canes +21215 canif +21216 canna +21221 canne +21222 canon +21223 canot +21224 canots +21225 canule +21226 cap +21231 cape +21232 caper +21233 capes +21234 capot +21235 capots +21236 caps +21241 capta +21242 capte +21243 capter +21244 captes +21245 captez +21246 captif +21251 caquer +21252 car +21253 carafe +21254 carat +21255 carcan +21256 carde +21261 cargo +21262 cargos +21263 caria +21264 carie +21265 caries +21266 carmin +21311 carnet +21312 carpe +21313 carre +21314 carrer +21315 carres +21316 cars +21321 carte +21322 carter +21323 cartes +21324 carton +21325 cas +21326 casa +21331 casait +21332 casant +21333 case +21334 casent +21335 caser +21336 casera +21341 cases +21342 casez +21343 casino +21344 cassa +21345 casse +21346 casser +21351 cassez +21352 cassis +21353 caste +21354 catch +21355 catir +21356 caudal +21361 causa +21362 cause +21363 causer +21364 causes +21365 cavale +21366 cave +21411 caveau +21412 caver +21413 caves +21414 caviar +21415 cb +21416 cc +21421 ccc +21422 cccc +21423 cd +21424 cde +21425 ce +21426 ceci +21431 cedex +21432 ceint +21433 ceints +21434 cela +21435 celer +21436 celle +21441 celui +21442 cens +21443 cent +21444 centra +21445 cents +21446 cep +21451 ceps +21452 cercla +21453 cerf +21454 cerfs +21455 cerna +21456 cerne +21461 cerner +21462 cernez +21463 ces +21464 cessa +21465 cesse +21466 cesser +21511 cet +21512 cette +21513 ceux +21514 cf +21515 cg +21516 ch +21521 chacun +21522 chah +21523 chahs +21524 chai +21525 chair +21526 chaire +21531 chais +21532 champ +21533 chance +21534 change +21535 chant +21536 chanta +21541 chaos +21542 chape +21543 char +21544 charma +21545 chars +21546 charte +21551 chas +21552 chat +21553 chaton +21554 chats +21555 chaud +21556 chauds +21561 chaume +21562 chauve +21563 chaux +21564 check +21565 chef +21566 chefs +21611 chelem +21612 chemin +21613 chenet +21614 chenil +21615 cher +21616 chers +21621 chevet +21622 chez +21623 chic +21624 chien +21625 chiens +21626 chier +21631 chiot +21632 chiper +21633 chips +21634 chique +21635 chlore +21636 choc +21641 chocs +21642 choeur +21643 choie +21644 choies +21645 choir +21646 choisi +21651 choix +21652 chope +21653 chopes +21654 choqua +21655 choque +21656 choral +21661 chose +21662 choses +21663 chou +21664 choux +21665 choya +21666 choyer +22111 chrome +22112 chromo +22113 chrono +22114 chut +22115 chuta +22116 chute +22121 chutes +22122 chutez +22123 ci +22124 cible +22125 cibler +22126 cibles +22131 cidre +22132 cidres +22133 ciel +22134 cierge +22135 cieux +22136 cil +22141 ciller +22142 cils +22143 cime +22144 cimes +22145 cinq +22146 cintra +22151 cintre +22152 cira +22153 cirais +22154 cirant +22155 cire +22156 cirent +22161 cirer +22162 cirera +22163 cires +22164 cireur +22165 cirez +22166 cirrus +22211 cita +22212 cite +22213 citer +22214 cites +22215 citez +22216 citron +22221 civet +22222 civets +22223 civil +22224 cj +22225 ck +22226 cl +22231 claie +22232 clair +22233 clairs +22234 clam +22235 clama +22236 clame +22241 clamer +22242 clames +22243 clamez +22244 clams +22245 clan +22246 clans +22251 clapir +22252 claque +22253 classe +22254 claver +22255 clef +22256 clefs +22261 clerc +22262 clercs +22263 climat +22264 clin +22265 clins +22266 clip +22311 clips +22312 clique +22313 cloche +22314 clone +22315 clora +22316 cloras +22321 clore +22322 clos +22323 close +22324 clou +22325 cloua +22326 cloue +22331 cloues +22332 clous +22333 clown +22334 club +22335 clubs +22336 cm +22341 cn +22342 co +22343 cobol +22344 cobra +22345 cocha +22346 coche +22351 cochez +22352 cochon +22353 coco +22354 cocon +22355 cocons +22356 coda +22361 codage +22362 codais +22363 codait +22364 codas +22365 code +22366 codent +22411 coder +22412 codera +22413 codes +22414 codeur +22415 codez +22416 codons +22421 coeur +22422 coeurs +22423 cogna +22424 cognac +22425 cogne +22426 cogner +22431 cognez +22432 cohue +22433 coi +22434 coiffe +22435 coin +22436 coince +22441 coing +22442 coings +22443 coins +22444 cois +22445 coite +22446 coites +22451 coke +22452 col +22453 cola +22454 colin +22455 colis +22456 colite +22461 colla +22462 colle +22463 colles +22464 collez +22465 colon +22466 colore +22511 cols +22512 colt +22513 colts +22514 colza +22515 coma +22516 comas +22521 combat +22522 combla +22523 comme +22524 commet +22525 compta +22526 compte +22531 comte +22532 comtes +22533 con +22534 conclu +22535 confia +22536 confus +22541 conne +22542 connes +22543 connu +22544 connue +22545 connut +22546 conque +22551 cons +22552 conte +22553 contes +22554 contre +22555 convie +22556 convoi +22561 copia +22562 copie +22563 copier +22564 copies +22565 copine +22566 coq +22611 coqs +22612 coque +22613 coquet +22614 cor +22615 corail +22616 corde +22621 corder +22622 corne +22623 corner +22624 cornet +22625 cornu +22626 cornus +22631 coron +22632 corps +22633 cors +22634 corsa +22635 corse +22636 corses +22641 corset +22642 corsez +22643 cortex +22644 coryza +22645 cosmos +22646 cosse +22651 cossu +22652 cossue +22653 cossus +22654 cosy +22655 cosys +22656 cota +22661 cotais +22662 cote +22663 coteau +22664 cotent +22665 coter +22666 cotes +23111 cotez +23112 cotir +23113 coton +23114 cotons +23115 cotte +23116 cou +23121 couac +23122 couche +23123 coucou +23124 coud +23125 coude +23126 couder +23131 couds +23132 coula +23133 coule +23134 coulez +23135 coup +23136 coupa +23141 coupe +23142 coupez +23143 coupla +23144 coups +23145 cour +23146 courbe +23151 coure +23152 coures +23153 courre +23154 cours +23155 course +23156 court +23161 couru +23162 courue +23163 courus +23164 cous +23165 couse +23166 couses +23211 cousez +23212 cousu +23213 cousus +23214 coutil +23215 couva +23216 couve +23221 couvez +23222 couvre +23223 cp +23224 cpt +23225 cq +23226 cr +23231 crabe +23232 crack +23233 cracks +23234 craie +23235 craies +23236 crains +23241 crampe +23242 cran +23243 crans +23244 crasse +23245 crawl +23246 crayon +23251 credo +23252 creuse +23253 creux +23254 creva +23255 crevez +23256 cri +23261 cria +23262 criais +23263 criait +23264 criard +23265 crible +23266 cric +23311 cricri +23312 crics +23313 crie +23314 crier +23315 criera +23316 cries +23321 crieur +23322 criez +23323 crime +23324 crimes +23325 crin +23326 crins +23331 crions +23332 cris +23333 crise +23334 crissa +23335 croc +23336 crocs +23341 croie +23342 croira +23343 crois +23344 croisa +23345 croise +23346 croit +23351 croix +23352 croqua +23353 croque +23354 cross +23355 crosse +23356 crotte +23361 croula +23362 cru +23363 crue +23364 cruel +23365 cruels +23366 crues +23411 crus +23412 crut +23413 cs +23414 ct +23415 cu +23416 cuba +23421 cubait +23422 cubant +23423 cube +23424 cuber +23425 cubera +23426 cubes +23431 cuir +23432 cuira +23433 cuirai +23434 cuire +23435 cuirs +23436 cuis +23441 cuise +23442 cuises +23443 cuisez +23444 cuisse +23445 cuit +23446 cuite +23451 cuiter +23452 cuits +23453 cuivre +23454 cul +23455 culer +23456 culot +23461 culs +23462 culte +23463 cultes +23464 cumin +23465 cumul +23466 cumula +23511 cupide +23512 cupule +23513 curage +23514 cure +23515 curer +23516 cures +23521 curry +23522 cuti +23523 cuva +23524 cuvait +23525 cuve +23526 cuver +23531 cuves +23532 cuvez +23533 cuviez +23534 cv +23535 cw +23536 cx +23541 cy +23542 cycle +23543 cycles +23544 cygne +23545 cygnes +23546 cz +23551 d +23552 da +23553 dada +23554 dadas +23555 dague +23556 dagues +23561 daigne +23562 daim +23563 daims +23564 dais +23565 dalla +23566 dalle +23611 dame +23612 damer +23613 dames +23614 damna +23615 damne +23616 damnez +23621 dan +23622 dandy +23623 dandys +23624 dans +23625 dansa +23626 danse +23631 danser +23632 dansez +23633 darce +23634 darces +23635 dard +23636 darder +23641 dards +23642 darne +23643 darnes +23644 darse +23645 dartre +23646 data +23651 datait +23652 datant +23653 date +23654 dater +23655 dates +23656 dateur +23661 datez +23662 datif +23663 dation +23664 datte +23665 dattes +23666 daube +24111 dauber +24112 db +24113 dc +24114 dd +24115 ddd +24116 dddd +24121 de +24122 debout +24123 dedans +24124 def +24125 delta +24126 demain +24131 demi +24132 demie +24133 demis +24134 denier +24135 dense +24136 denses +24141 dent +24142 dents +24143 derby +24144 derbys +24145 derme +24146 des +24151 design +24152 dessus +24153 destin +24154 dette +24155 deuil +24156 deuils +24161 deux +24162 devais +24163 devait +24164 devant +24165 devenu +24166 devez +24211 devin +24212 devina +24213 devins +24214 devint +24215 devis +24216 devons +24221 devra +24222 devras +24223 devrez +24224 df +24225 dg +24226 dh +24231 di +24232 diapo +24233 dicta +24234 dicte +24235 dictez +24236 dicton +24241 diesel +24242 dieu +24243 dieux +24244 diffus +24245 digit +24246 digits +24251 digne +24252 digue +24253 dilua +24254 dilue +24255 dinde +24256 dindon +24261 dinghy +24262 dingo +24263 dingos +24264 diode +24265 dira +24266 dirai +24311 dirait +24312 diras +24313 dire +24314 direct +24315 dires +24316 direz +24321 dirige +24322 dirons +24323 dis +24324 discal +24325 disco +24326 dise +24331 disert +24332 dises +24333 disiez +24334 dispos +24335 dit +24336 dite +24341 dites +24342 dito +24343 dits +24344 divan +24345 divin +24346 divisa +24351 divise +24352 dix +24353 dj +24354 dk +24355 dl +24356 dm +24361 dn +24362 do +24363 docile +24364 dock +24365 docks +24366 docte +24411 doctes +24412 dodu +24413 dodue +24414 dodues +24415 dodus +24416 dogme +24421 dogmes +24422 dogue +24423 dogues +24424 doigt +24425 doigts +24426 dois +24431 doit +24432 doive +24433 doives +24434 dollar +24435 dolmen +24436 domina +24441 domine +24442 dompta +24443 don +24444 donc +24445 donjon +24446 donna +24451 donne +24452 donnes +24453 donnez +24454 dons +24455 dont +24456 dopa +24461 dopait +24462 dopant +24463 dope +24464 doper +24465 dopes +24466 dopez +24511 dopons +24512 dora +24513 dorade +24514 dorait +24515 dorant +24516 dore +24521 dorent +24522 dorer +24523 doreur +24524 dorme +24525 dormi +24526 dormir +24531 dors +24532 dort +24533 dorure +24534 dos +24535 dosa +24536 dosage +24541 dosais +24542 dosant +24543 dose +24544 dosent +24545 doser +24546 doses +24551 dosez +24552 dosons +24553 dot +24554 dota +24555 dote +24556 dotent +24561 doter +24562 dotes +24563 dotez +24564 dotons +24565 dots +24566 douane +24611 douant +24612 doubla +24613 double +24614 douce +24615 douces +24616 douche +24621 douer +24622 douta +24623 doute +24624 doutez +24625 douve +24626 douves +24631 doux +24632 douze +24633 doyen +24634 dp +24635 dq +24636 dr +24641 dragon +24642 drain +24643 draine +24644 drame +24645 drap +24646 drapa +24651 drape +24652 drapes +24653 drapez +24654 draps +24655 dressa +24656 dresse +24661 drille +24662 drisse +24663 driver +24664 drogua +24665 droit +24666 drop +25111 drops +25112 dru +25113 drue +25114 drues +25115 drus +25116 ds +25121 dt +25122 du +25123 duc +25124 ducal +25125 ducale +25126 ducs +25131 due +25132 duel +25133 duels +25134 dues +25135 dune +25136 dunes +25141 duo +25142 duos +25143 dupa +25144 dupais +25145 dupait +25146 dupant +25151 dupe +25152 duper +25153 dupera +25154 dupes +25155 dupez +25156 dupons +25161 dur +25162 dura +25163 durait +25164 durci +25165 durcit +25166 dure +25211 durent +25212 durer +25213 durera +25214 dures +25215 durs +25216 dus +25221 dut +25222 duvet +25223 duvets +25224 dv +25225 dw +25226 dx +25231 dy +25232 dynamo +25233 dz +25234 e +25235 ea +25236 eau +25241 eaux +25242 eb +25243 ec +25244 ed +25245 ee +25246 eee +25251 eeee +25252 ef +25253 efface +25254 effara +25255 effare +25256 effet +25261 effets +25262 effila +25263 effile +25264 effort +25265 effroi +25266 efg +25311 eg +25312 ego +25313 eh +25314 ei +25315 eider +25316 ej +25321 ek +25322 el +25323 elfe +25324 elfes +25325 elle +25326 elles +25331 em +25332 embuer +25333 emmena +25334 empan +25335 empara +25336 empli +25341 emplis +25342 emplit +25343 empois +25344 en +25345 encan +25346 encas +25351 encore +25352 encra +25353 encre +25354 encres +25355 encrez +25356 endos +25361 enduis +25362 endure +25363 enfer +25364 enfila +25365 enfile +25366 enfin +25411 enfla +25412 enfle +25413 enfler +25414 enflez +25415 enfoui +25416 enfui +25421 enfuit +25422 enfuma +25423 engin +25424 enivre +25425 enjeu +25426 enjeux +25431 enlisa +25432 ennemi +25433 ennui +25434 ennuie +25435 ennuis +25436 ennuya +25441 enquit +25442 enraya +25443 enraye +25444 enroba +25445 ensuit +25446 entama +25451 entame +25452 enter +25453 entier +25454 entra +25455 entre +25456 entrez +25461 envia +25462 envie +25463 envier +25464 envies +25465 enviez +25466 envoi +25511 envois +25512 envol +25513 envola +25514 envols +25515 enzyme +25516 eo +25521 ep +25522 eq +25523 er +25524 erg +25525 ergot +25526 ergots +25531 ergs +25532 ermite +25533 erra +25534 erre +25535 errer +25536 errera +25541 erres +25542 errez +25543 erriez +25544 ersatz +25545 es +25546 escale +25551 esche +25552 escher +25553 esches +25554 espion +25555 espoir +25556 essai +25561 essaim +25562 essaya +25563 esse +25564 esses +25565 essor +25566 essore +25611 essuya +25612 est +25613 ester +25614 estima +25615 estoc +25616 et +25621 ethnie +25622 eu +25623 eue +25624 eues +25625 euh +25626 eurent +25631 euro +25632 euros +25633 eus +25634 eut +25635 eux +25636 ev +25641 ew +25642 ex +25643 exact +25644 exacte +25645 exacts +25646 exalte +25651 exauce +25652 excite +25653 exclu +25654 excusa +25655 excuse +25656 exerce +25661 exhala +25662 exige +25663 exiger +25664 exiges +25665 exigu +25666 exil +26111 exila +26112 exile +26113 exiles +26114 exils +26115 exista +26116 exocet +26121 exode +26122 expert +26123 expia +26124 expie +26125 expier +26126 expira +26131 expire +26132 exposa +26133 expose +26134 extra +26135 exulte +26136 ey +26141 ez +26142 f +26143 fa +26144 fable +26145 fabula +26146 face +26151 faces +26152 facial +26153 facto +26154 factor +26155 fade +26156 fades +26161 fadeur +26162 fagot +26163 faible +26164 faibli +26165 faim +26166 faire +26211 fais +26212 fait +26213 faite +26214 faites +26215 faits +26216 fakir +26221 fallu +26222 falot +26223 falote +26224 falots +26225 fameux +26226 fan +26231 fana +26232 fanal +26233 fane +26234 fanent +26235 faner +26236 fanes +26241 fange +26242 fanion +26243 fanon +26244 fanons +26245 fans +26246 faon +26251 faons +26252 far +26253 faraud +26254 farce +26255 farces +26256 farci +26261 farcir +26262 fard +26263 farda +26264 farde +26265 fardes +26266 fardez +26311 fards +26312 farine +26313 fars +26314 fart +26315 farts +26316 fasse +26321 fasses +26322 faste +26323 fat +26324 fatal +26325 fats +26326 fauche +26331 faudra +26332 faune +26333 faut +26334 faute +26335 fautes +26336 fauve +26341 faux +26342 fax +26343 faxer +26344 fb +26345 fc +26346 fco +26351 fd +26352 fe +26353 feins +26354 feint +26355 feinte +26356 feints +26361 femme +26362 fend +26363 fende +26364 fendes +26365 fendra +26366 fendre +26411 fends +26412 fendu +26413 fente +26414 fer +26415 fera +26416 ferai +26421 ferais +26422 feras +26423 ferez +26424 feriez +26425 ferma +26426 ferme +26431 fermer +26432 fermez +26433 feront +26434 ferrer +26435 fers +26436 fesse +26441 fesser +26442 festif +26443 feu +26444 feue +26445 feues +26446 feutra +26451 feux +26452 fez +26453 ff +26454 fff +26455 ffff +26456 fg +26461 fgh +26462 fh +26463 fi +26464 fia +26465 fiacre +26466 fiais +26511 fiait +26512 fiance +26513 fiant +26514 fiasco +26515 fibre +26516 fibres +26521 fibule +26522 ficela +26523 ficha +26524 fiche +26525 fichez +26526 fichu +26531 fictif +26532 fie +26533 fief +26534 fiefs +26535 fiel +26536 fient +26541 fier +26542 fiera +26543 fierai +26544 fieras +26545 fiers +26546 fies +26551 fiez +26552 fifre +26553 fige +26554 figea +26555 figer +26556 figes +26561 figez +26562 figue +26563 figura +26564 fiiez +26565 fiions +26566 fil +26611 fila +26612 filait +26613 filant +26614 file +26615 filent +26616 filer +26621 filera +26622 files +26623 filet +26624 filets +26625 filez +26626 filin +26631 fille +26632 filles +26633 film +26634 filma +26635 filme +26636 filmes +26641 films +26642 filon +26643 filons +26644 filou +26645 fils +26646 filtra +26651 filtre +26652 fin +26653 final +26654 finals +26655 finaud +26656 fine +26661 fines +26662 fini +26663 finie +26664 finies +26665 finir +26666 finira +31111 finis +31112 finit +31113 fins +31114 fiole +31115 fioles +31116 fions +31121 firent +31122 firme +31123 fisc +31124 fiscal +31125 fiscs +31126 fit +31131 fixa +31132 fixais +31133 fixait +31134 fixant +31135 fixe +31136 fixer +31141 fixes +31142 fixez +31143 fj +31144 fjord +31145 fjords +31146 fk +31151 fl +31152 flacon +31153 flair +31154 flairs +31155 flambe +31156 flamme +31161 flan +31162 flanc +31163 flans +31164 flapi +31165 flash +31166 flatta +31211 flatte +31212 flegme +31213 flemme +31214 fleur +31215 fleura +31216 fleuri +31221 flippe +31222 flirt +31223 flirts +31224 flood +31225 flore +31226 flores +31231 flot +31232 flots +31233 flou +31234 floua +31235 floue +31236 flous +31241 fluer +31242 fluet +31243 fluide +31244 fluor +31245 fluors +31246 flux +31251 fm +31252 fn +31253 fo +31254 foc +31255 focal +31256 focale +31261 focs +31262 focus +31263 foehn +31264 foetus +31265 foi +31266 foie +31311 foies +31312 foin +31313 foins +31314 foire +31315 fois +31316 foison +31321 fol +31322 folie +31323 folies +31324 folio +31325 folios +31326 foliot +31331 folle +31332 fonce +31333 foncer +31334 fonces +31335 foncez +31336 fond +31341 fonda +31342 fonde +31343 fonder +31344 fondez +31345 fonds +31346 fondu +31351 fondue +31352 fondus +31353 font +31354 fonte +31355 fontes +31356 fonts +31361 foot +31362 for +31363 fora +31364 forage +31365 forain +31366 forais +31411 forait +31412 force +31413 forces +31414 fore +31415 forent +31416 forer +31421 forera +31422 fores +31423 foret +31424 forez +31425 forge +31426 forger +31431 forges +31432 forgez +31433 foriez +31434 forma +31435 forme +31436 formel +31441 former +31442 formes +31443 formez +31444 formol +31445 fors +31446 fort +31451 forte +31452 forts +31453 forum +31454 forums +31455 fosse +31456 fosses +31461 fou +31462 fouet +31463 fouine +31464 fouir +31465 foula +31466 foule +31511 foules +31512 four +31513 fours +31514 fous +31515 foutez +31516 foutu +31521 foutus +31522 fox +31523 foyer +31524 foyers +31525 fp +31526 fq +31531 fr +31532 frac +31533 fracas +31534 fracs +31535 frai +31536 fraie +31541 frais +31542 fraise +31543 franc +31544 fraser +31545 fraya +31546 fraye +31551 frayer +31552 frayes +31553 frayez +31554 frein +31555 freina +31556 freins +31561 fret +31562 frets +31563 friche +31564 frigo +31565 frigos +31566 frime +31611 frimer +31612 fripa +31613 fripe +31614 friper +31615 frira +31616 frirai +31621 friras +31622 frire +31623 frirez +31624 fris +31625 frisa +31626 frise +31631 frisez +31632 frit +31633 frite +31634 frits +31635 froc +31636 froid +31641 front +31642 fronts +31643 frugal +31644 fruit +31645 fs +31646 ft +31651 fu +31652 fucus +31653 fuel +31654 fuels +31655 fugace +31656 fugue +31661 fuguer +31662 fui +31663 fuie +31664 fuies +31665 fuir +31666 fuira +32111 fuirai +32112 fuirez +32113 fuis +32114 fuit +32115 fuite +32116 fuites +32121 full +32122 fulls +32123 fuma +32124 fumage +32125 fumait +32126 fume +32131 fumer +32132 fumes +32133 fumet +32134 fumets +32135 fumeur +32136 fumez +32141 fumier +32142 fumoir +32143 fur +32144 furet +32145 furets +32146 fureur +32151 furia +32152 furie +32153 furies +32154 fusa +32155 fusain +32156 fusait +32161 fuse +32162 fuseau +32163 fuser +32164 fusera +32165 fusil +32166 fut +32211 futur +32212 fuyais +32213 fuyant +32214 fuyez +32215 fuyiez +32216 fuyons +32221 fv +32222 fw +32223 fx +32224 fy +32225 fz +32226 g +32231 ga +32232 gaffe +32233 gaffer +32234 gaffes +32235 gag +32236 gage +32241 gagea +32242 gager +32243 gages +32244 gagez +32245 gagna +32246 gagne +32251 gagner +32252 gagnes +32253 gagnez +32254 gags +32255 gai +32256 gaie +32261 gaies +32262 gain +32263 gaine +32264 gainer +32265 gaines +32266 gains +32311 gais +32312 gala +32313 galant +32314 galas +32315 galbe +32316 galber +32321 galbes +32322 gale +32323 gales +32324 galet +32325 galeux +32326 galon +32331 galop +32332 gamba +32333 gambas +32334 gamet +32335 gamets +32336 gamin +32341 gamine +32342 gamins +32343 gamme +32344 gang +32345 gangs +32346 gangue +32351 ganse +32352 ganses +32353 gant +32354 gants +32355 gara +32356 garant +32361 garce +32362 garda +32363 garde +32364 gardes +32365 gardez +32366 gare +32411 garer +32412 garera +32413 gares +32414 garez +32415 gariez +32416 garni +32421 garnie +32422 garnit +32423 gars +32424 gaule +32425 gava +32426 gavais +32431 gavant +32432 gave +32433 gaver +32434 gaves +32435 gavez +32436 gavial +32441 gaviez +32442 gaz +32443 gazage +32444 gaze +32445 gazer +32446 gazes +32451 gazeux +32452 gazon +32453 gazons +32454 gb +32455 gc +32456 gd +32461 ge +32462 geai +32463 geais +32464 geigne +32465 geins +32466 geint +32511 gel +32512 gela +32513 gelais +32514 gelait +32515 gelant +32516 geler +32521 gelez +32522 geliez +32523 gelons +32524 gels +32525 gemme +32526 gemmer +32531 gendre +32532 genet +32533 genets +32534 genou +32535 genre +32536 genres +32541 gens +32542 gentes +32543 gentil +32544 gerbe +32545 gerber +32546 gerbes +32551 gerce +32552 germa +32553 germe +32554 geste +32555 gf +32556 gg +32561 ggg +32562 gggg +32563 gh +32564 ghi +32565 gi +32566 gibbon +32611 gibet +32612 gibets +32613 gicla +32614 gicle +32615 gifla +32616 gifle +32621 gifler +32622 giflez +32623 gigot +32624 gigue +32625 gilet +32626 gilets +32631 gin +32632 gins +32633 girl +32634 girls +32635 giron +32636 gisait +32641 gisant +32642 gitan +32643 gitane +32644 gitans +32645 givra +32646 givre +32651 givrer +32652 gj +32653 gk +32654 gl +32655 glabre +32656 glace +32661 glacer +32662 glaces +32663 glana +32664 gland +32665 glane +32666 glaner +33111 glanes +33112 glas +33113 glatir +33114 globe +33115 globes +33116 gloire +33121 glose +33122 gloser +33123 gloses +33124 glu +33125 gluant +33126 glus +33131 gm +33132 gn +33133 gnome +33134 gnon +33135 gnons +33136 gnou +33141 gnous +33142 go +33143 goal +33144 goals +33145 goba +33146 gobait +33151 gobe +33152 gober +33153 gobes +33154 gobez +33155 gobons +33156 goder +33161 godet +33162 goitre +33163 golden +33164 golf +33165 golfe +33166 golfs +33211 gomma +33212 gomme +33213 gommez +33214 gond +33215 gonds +33216 gonfle +33221 gong +33222 gongs +33223 goret +33224 gorge +33225 gorger +33226 gorges +33231 gosier +33232 gosse +33233 gouge +33234 gouges +33235 goulot +33236 goulu +33241 goulue +33242 gourd +33243 gourde +33244 gourds +33245 gourou +33246 gousse +33251 gp +33252 gq +33253 gr +33254 gracia +33255 grade +33256 gradin +33261 grain +33262 grains +33263 grand +33264 grandi +33265 grappe +33266 gras +33311 grasse +33312 gratin +33313 gratis +33314 gratta +33315 grava +33316 grave +33321 graver +33322 graves +33323 gravi +33324 gravie +33325 gravis +33326 gravit +33331 grec +33332 grecs +33333 greffe +33334 grenat +33335 grener +33336 grenu +33341 greva +33342 grevez +33343 grief +33344 griefs +33345 griffe +33346 griffu +33351 gril +33352 grill +33353 grils +33354 grimer +33355 grimpa +33356 grimpe +33361 griot +33362 grippe +33363 gris +33364 grisa +33365 grisbi +33366 grise +33411 grises +33412 grive +33413 grives +33414 grog +33415 grogna +33416 grogs +33421 groin +33422 gronda +33423 groom +33424 gros +33425 grosse +33426 grotte +33431 groupa +33432 grouse +33433 gruau +33434 gruaux +33435 grue +33436 grues +33441 gruger +33442 grume +33443 gs +33444 gt +33445 gu +33446 guano +33451 guerre +33452 guet +33453 guette +33454 gueuse +33455 gui +33456 guida +33461 guide +33462 guider +33463 guidez +33464 guigne +33465 guimpe +33466 guis +33511 guise +33512 gv +33513 gw +33514 gx +33515 gy +33516 gypse +33521 gz +33522 h +33523 ha +33524 habile +33525 habit +33526 habita +33531 habits +33532 hacha +33533 hache +33534 hachez +33535 hachis +33536 hacker +33541 haie +33542 haies +33543 haine +33544 hais +33545 hait +33546 haler +33551 haleta +33552 hall +33553 halle +33554 halls +33555 halo +33556 halos +33561 halte +33562 haltes +33563 hamac +33564 hampe +33565 hampes +33566 hanta +33611 hante +33612 hantez +33613 happa +33614 happe +33615 haras +33616 harder +33621 hardi +33622 harem +33623 harems +33624 hargne +33625 haro +33626 haros +33631 harpe +33632 harpes +33633 harpie +33634 hase +33635 hases +33636 haussa +33641 hausse +33642 haut +33643 haute +33644 hautes +33645 hauts +33646 havane +33651 haver +33652 havre +33653 havres +33654 hayon +33655 hayons +33656 hb +33661 hc +33662 hd +33663 he +33664 heaume +33665 hein +33666 hennir +34111 herbe +34112 herber +34113 herbes +34114 hernie +34115 herse +34116 hertz +34121 heur +34122 heure +34123 heures +34124 heurt +34125 heurta +34126 heurts +34131 hf +34132 hg +34133 hh +34134 hhh +34135 hhhh +34136 hi +34141 hiatus +34142 hibou +34143 hic +34144 hideux +34145 hie +34146 hier +34151 hies +34152 hij +34153 hilare +34154 hindi +34155 hippie +34156 hippy +34161 hissa +34162 hisse +34163 hisser +34164 hiver +34165 hj +34166 hk +34211 hl +34212 hm +34213 hn +34214 ho +34215 hobby +34216 hocha +34221 hoche +34222 hocher +34223 hochet +34224 hockey +34225 homard +34226 home +34231 homme +34232 honni +34233 honnie +34234 honnis +34235 honora +34236 honte +34241 horde +34242 horion +34243 hors +34244 hostie +34245 hotte +34246 hotter +34251 houe +34252 houer +34253 houes +34254 houle +34255 hourra +34256 housse +34261 houx +34262 hp +34263 hq +34264 hr +34265 hs +34266 ht +34311 hu +34312 hua +34313 huais +34314 huait +34315 huant +34316 huche +34321 hucher +34322 hue +34323 huent +34324 huer +34325 huera +34326 huerez +34331 hues +34332 huez +34333 hui +34334 huiez +34335 huila +34336 huile +34341 huilez +34342 huis +34343 huit +34344 huma +34345 humait +34346 humant +34351 hume +34352 hument +34353 humer +34354 humes +34355 humeur +34356 humez +34361 humons +34362 humour +34363 humus +34364 hune +34365 hunes +34366 huons +34411 huotte +34412 huppe +34413 hurla +34414 hurle +34415 hurrah +34416 hutte +34421 huttes +34422 hv +34423 hw +34424 hx +34425 hy +34426 hydre +34431 hydres +34432 hymen +34433 hymens +34434 hymne +34435 hz +34436 i +34441 ia +34442 iambe +34443 ib +34444 ibis +34445 ic +34446 ici +34451 ictus +34452 id +34453 idem +34454 ides +34455 idiome +34456 idiot +34461 idoine +34462 idole +34463 idoles +34464 idylle +34465 ie +34466 if +34511 ifs +34512 ig +34513 igloo +34514 igloos +34515 igname +34516 ignare +34521 ignore +34522 iguane +34523 ih +34524 ii +34525 iii +34526 iiii +34531 ij +34532 ijk +34533 ik +34534 il +34535 ilote +34536 ils +34541 im +34542 image +34543 images +34544 imbibe +34545 imbu +34546 imbue +34551 imbus +34552 imita +34553 imite +34554 imitez +34555 imper +34556 impie +34561 impies +34562 impoli +34563 impur +34564 impure +34565 impurs +34566 imputa +34611 impute +34612 in +34613 inapte +34614 inca +34615 incas +34616 incite +34621 index +34622 indexa +34623 indexe +34624 indu +34625 indue +34626 induis +34631 indus +34632 inepte +34633 inerte +34634 infime +34635 infini +34636 influa +34641 influx +34642 infusa +34643 infuse +34644 ingrat +34645 inhuma +34646 inique +34651 initie +34652 injure +34653 innove +34654 inox +34655 input +34656 instar +34661 insu +34662 inter +34663 intima +34664 invita +34665 invite +34666 io +35111 iode +35112 ioder +35113 iodes +35114 ion +35115 ions +35116 iota +35121 iouler +35122 ip +35123 iq +35124 ir +35125 ira +35126 irai +35131 irais +35132 irait +35133 iras +35134 irez +35135 iriez +35136 irions +35141 iris +35142 ironie +35143 irons +35144 iront +35145 irrita +35146 irrite +35151 is +35152 isard +35153 isba +35154 isbas +35155 islam +35156 isola +35161 isole +35162 isoler +35163 issu +35164 issue +35165 issus +35166 it +35211 item +35212 iu +35213 iv +35214 ivraie +35215 ivre +35216 ivres +35221 iw +35222 ix +35223 iy +35224 iz +35225 j +35226 ja +35231 jabler +35232 jabot +35233 jabots +35234 jade +35235 jades +35236 jadis +35241 jaguar +35242 jais +35243 jalon +35244 jalons +35245 jambe +35246 jambes +35251 jambon +35252 jante +35253 jantes +35254 jardin +35255 jarre +35256 jarret +35261 jars +35262 jas +35263 jasa +35264 jasait +35265 jasant +35266 jase +35311 jasent +35312 jaser +35313 jasera +35314 jasper +35315 jatte +35316 jattes +35321 jauge +35322 jauger +35323 jauges +35324 jaugez +35325 jaune +35326 jaunes +35331 jauni +35332 jaunis +35333 java +35334 javas +35335 jazz +35336 jb +35341 jc +35342 jd +35343 je +35344 jean +35345 jeans +35346 jerez +35351 jerk +35352 jerker +35353 jet +35354 jeta +35355 jeter +35356 jetez +35361 jetiez +35362 jeton +35363 jetons +35364 jets +35365 jette +35366 jeu +35411 jeudi +35412 jeun +35413 jeune +35414 jeunes +35415 jeux +35416 jf +35421 jg +35422 jh +35423 ji +35424 jj +35425 jjj +35426 jjjj +35431 jk +35432 jkl +35433 jl +35434 jm +35435 jn +35436 jo +35441 job +35442 jobard +35443 jobs +35444 jockey +35445 joie +35446 joies +35451 joins +35452 joint +35453 jointe +35454 joker +35455 jokers +35456 joli +35461 jolie +35462 jolis +35463 jonc +35464 joncs +35465 jongla +35466 jongle +35511 jonque +35512 joua +35513 jouait +35514 joual +35515 jouant +35516 joue +35521 jouer +35522 jouera +35523 joues +35524 jouet +35525 joueur +35526 jouez +35531 joug +35532 jougs +35533 joui +35534 jouiez +35535 jouir +35536 jouira +35541 jouis +35542 jouit +35543 joule +35544 joules +35545 jour +35546 jours +35551 joute +35552 joutes +35553 jouxte +35554 joyau +35555 joyaux +35556 joyeux +35561 jp +35562 jq +35563 jr +35564 js +35565 jt +35566 ju +35611 jubila +35612 jubile +35613 judas +35614 judo +35615 judoka +35616 juge +35621 jugea +35622 juger +35623 juges +35624 jugez +35625 jugiez +35626 juif +35631 juifs +35632 juin +35633 juive +35634 juives +35635 jumeau +35636 jumela +35641 junior +35642 junte +35643 juntes +35644 jupe +35645 jupes +35646 jupon +35651 jura +35652 jurais +35653 jurait +35654 jurant +35655 jure +35656 jurer +35661 jures +35662 jurez +35663 juron +35664 jurons +35665 jury +35666 jurys +36111 jus +36112 jusque +36113 juste +36114 jute +36115 juter +36116 juteux +36121 jv +36122 jw +36123 jx +36124 jy +36125 jz +36126 k +36131 ka +36132 kaki +36133 kakis +36134 kaolin +36135 kapok +36136 karma +36141 kart +36142 karts +36143 kasher +36144 kayak +36145 kb +36146 kc +36151 kd +36152 ke +36153 kf +36154 kg +36155 kh +36156 ki +36161 kif +36162 kilo +36163 kilos +36164 kilt +36165 kilts +36166 kimono +36211 kir +36212 kit +36213 kits +36214 kiwi +36215 kiwis +36216 kj +36221 kk +36222 kkk +36223 kkkk +36224 kl +36225 klm +36226 km +36231 kn +36232 ko +36233 kola +36234 kolas +36235 kp +36236 kq +36241 kr +36242 krach +36243 kraft +36244 krak +36245 kraks +36246 ks +36251 kt +36252 ku +36253 kv +36254 kvas +36255 kw +36256 kwas +36261 kx +36262 ky +36263 kyste +36264 kystes +36265 kz +36266 l +36311 la +36312 label +36313 labial +36314 lac +36315 lace +36316 lacer +36321 laces +36322 lacet +36323 lacets +36324 lacez +36325 laciez +36326 lacis +36331 lacs +36332 lad +36333 ladre +36334 ladres +36335 lads +36336 lagon +36341 lagons +36342 lagune +36343 laid +36344 laide +36345 laids +36346 laie +36351 laies +36352 laine +36353 lainer +36354 laisse +36355 lait +36356 laits +36361 lama +36362 lamas +36363 lame +36364 lamer +36365 lames +36366 lamine +36411 lampe +36412 lance +36413 lances +36414 land +36415 landau +36416 lande +36421 landes +36422 lange +36423 langue +36424 laper +36425 lapin +36426 lapine +36431 lapis +36432 laps +36433 lapsus +36434 laque +36435 lard +36436 larder +36441 lardon +36442 large +36443 largua +36444 largue +36445 larme +36446 larmes +36451 larron +36452 larve +36453 las +36454 lascar +36455 lascif +36456 laser +36461 lassa +36462 lasse +36463 lasses +36464 lassez +36465 lasso +36466 lassos +36511 latent +36512 latex +36513 latin +36514 latine +36515 latins +36516 latte +36521 lattes +36522 lava +36523 lavage +36524 lavait +36525 lave +36526 laver +36531 laves +36532 lavez +36533 lavis +36534 lavoir +36535 layer +36536 lazzi +36541 lb +36542 lc +36543 ld +36544 le +36545 leader +36546 ledit +36551 legs +36552 lent +36553 lente +36554 lents +36555 les +36556 lest +36561 lesta +36562 leste +36563 lestes +36564 lests +36565 let +36566 lettre +36611 leur +36612 leurs +36613 leva +36614 levage +36615 levain +36616 levais +36621 levait +36622 levant +36623 lever +36624 levers +36625 levez +36626 levons +36631 levure +36632 lf +36633 lg +36634 lh +36635 li +36636 lia +36641 liais +36642 liait +36643 liane +36644 lianes +36645 liant +36646 liants +36651 libre +36652 libres +36653 lice +36654 licher +36655 licite +36656 licol +36661 licols +36662 licou +36663 licous +36664 lie +36665 lied +36666 lieds +41111 lien +41112 liens +41113 lient +41114 lier +41115 liera +41116 lierai +41121 lies +41122 lieu +41123 lieue +41124 lieuse +41125 lieux +41126 liez +41131 lift +41132 lifter +41133 lifts +41134 ligne +41135 ligner +41136 ligote +41141 ligua +41142 ligue +41143 liguer +41144 liguez +41145 liiez +41146 liions +41151 lilas +41152 lima +41153 limais +41154 limait +41155 lime +41156 limer +41161 limera +41162 limes +41163 limez +41164 limier +41165 limite +41166 limoge +41211 limon +41212 limons +41213 lin +41214 linge +41215 lino +41216 linos +41221 lion +41222 lionne +41223 lions +41224 lipide +41225 lippe +41226 lippu +41231 lippue +41232 lira +41233 lirai +41234 liras +41235 lire +41236 lires +41241 lirez +41242 liriez +41243 lis +41244 lisait +41245 lisant +41246 lise +41251 lisent +41252 lises +41253 lisez +41254 lissa +41255 lisse +41256 lisses +41261 lista +41262 liste +41263 listez +41264 lit +41265 liter +41266 litre +41311 litres +41312 lits +41313 livra +41314 livre +41315 livrer +41316 lj +41321 lk +41322 ll +41323 lll +41324 llll +41325 lm +41326 lmn +41331 ln +41332 lo +41333 lob +41334 lobby +41335 lobe +41336 lober +41341 lobes +41342 lobs +41343 local +41344 locale +41345 locher +41346 loden +41351 loess +41352 lofer +41353 loge +41354 logea +41355 logent +41356 loger +41361 loges +41362 logeur +41363 logez +41364 logiez +41365 logis +41366 logo +41411 logos +41412 loi +41413 loin +41414 loir +41415 loirs +41416 lois +41421 long +41422 longe +41423 longer +41424 longes +41425 longs +41426 lopin +41431 lopins +41432 loque +41433 lors +41434 lot +41435 lote +41436 lotes +41441 loti +41442 lotie +41443 loties +41444 lotir +41445 lotira +41446 lotis +41451 lotit +41452 loto +41453 lots +41454 lotte +41455 lottes +41456 lotus +41461 loua +41462 louage +41463 loue +41464 louer +41465 loues +41466 loueur +41511 louez +41512 louiez +41513 loup +41514 loupe +41515 louper +41516 loups +41521 lourd +41522 lourds +41523 loutre +41524 louve +41525 louves +41526 lover +41531 loyal +41532 loyale +41533 loyaux +41534 loyer +41535 loyers +41536 lp +41541 lq +41542 lr +41543 ls +41544 lt +41545 lu +41546 lubie +41551 lucide +41552 lucre +41553 lue +41554 lues +41555 lueur +41556 luge +41561 luger +41562 luges +41563 lui +41564 luira +41565 luire +41566 luise +41611 luit +41612 lump +41613 lumps +41614 lunch +41615 lundi +41616 lune +41621 lunes +41622 lupin +41623 lupins +41624 lurent +41625 luron +41626 lurons +41631 lus +41632 lustra +41633 lustre +41634 lut +41635 luter +41636 luth +41641 luths +41642 lutin +41643 lutta +41644 lutte +41645 lutter +41646 lux +41651 luxa +41652 luxant +41653 luxe +41654 luxent +41655 luxer +41656 luxes +41661 luxez +41662 luxiez +41663 luxure +41664 lv +41665 lw +41666 lx +42111 ly +42112 lynx +42113 lyre +42114 lyres +42115 lys +42116 lyse +42121 lyses +42122 lz +42123 m +42124 ma +42125 mach +42126 madone +42131 mafia +42132 mage +42133 mages +42134 magie +42135 magma +42136 magner +42141 magot +42142 mai +42143 maille +42144 main +42145 mains +42146 maint +42151 mainte +42152 maints +42153 maire +42154 maires +42155 mairie +42156 mais +42161 major +42162 mal +42163 malaxa +42164 malice +42165 malin +42166 malins +42211 malle +42212 malles +42213 malt +42214 malter +42215 malus +42216 maman +42221 mamans +42222 man +42223 manche +42224 manda +42225 mandat +42226 mande +42231 mander +42232 mandez +42233 manga +42234 mange +42235 manger +42236 mania +42241 manie +42242 maniez +42243 manioc +42244 manne +42245 manqua +42246 mante +42251 mantes +42252 manuel +42253 maquer +42254 maquis +42255 marbre +42256 marc +42261 marche +42262 mardi +42263 mare +42264 mares +42265 marge +42266 marges +42311 mari +42312 maria +42313 marie +42314 maries +42315 mariez +42316 marin +42321 marina +42322 marine +42323 maris +42324 mark +42325 marks +42326 marne +42331 marner +42332 marque +42333 marra +42334 marre +42335 marres +42336 marri +42341 marrie +42342 marris +42343 mars +42344 marte +42345 martel +42346 martes +42351 martre +42352 martyr +42353 mas +42354 masqua +42355 massa +42356 masse +42361 masser +42362 massue +42363 mastic +42364 mastoc +42365 masure +42366 mat +42411 match +42412 matchs +42413 mate +42414 mater +42415 mates +42416 math +42421 maths +42422 matin +42423 matir +42424 mats +42425 mature +42426 mauve +42431 mauves +42432 mauvis +42433 maux +42434 maxima +42435 maya +42436 mayas +42441 mazer +42442 mazout +42443 mb +42444 mc +42445 md +42446 me +42451 melon +42452 men +42453 mena +42454 menace +42455 menait +42456 menant +42461 mendia +42462 mendie +42463 mener +42464 meneur +42465 menez +42466 menons +42511 mens +42512 ment +42513 mente +42514 mentez +42515 menti +42516 menton +42521 mentor +42522 menu +42523 menue +42524 menues +42525 menuet +42526 menus +42531 mer +42532 merci +42533 mercis +42534 merder +42535 merise +42536 merlan +42541 merle +42542 merlu +42543 mers +42544 mes +42545 mess +42546 messe +42551 messes +42552 messie +42553 met +42554 mets +42555 mette +42556 mettes +42561 meubla +42562 meugle +42563 meule +42564 meure +42565 meurs +42566 meurt +42611 meus +42612 meut +42613 meute +42614 meutes +42615 meuve +42616 mf +42621 mg +42622 mh +42623 mi +42624 miasme +42625 mica +42626 micas +42631 miche +42632 miches +42633 micmac +42634 micro +42635 micron +42636 micros +42641 midi +42642 midis +42643 mie +42644 miel +42645 miels +42646 mien +42651 mienne +42652 miens +42653 mieux +42654 mignon +42655 migre +42656 migrer +42661 migrez +42662 mijota +42663 mil +42664 milan +42665 mile +42666 miles +43111 milite +43112 mille +43113 milles +43114 millet +43115 mima +43116 mimait +43121 mimant +43122 mime +43123 mimer +43124 mimes +43125 mimez +43126 min +43131 mina +43132 minais +43133 mince +43134 minci +43135 mincie +43136 mincis +43141 mine +43142 minent +43143 miner +43144 mines +43145 minet +43146 mineur +43151 minez +43152 minime +43153 minois +43154 minons +43155 minora +43156 minore +43161 minuit +43162 minus +43163 mioche +43164 mira +43165 mirage +43166 mirait +43211 mirant +43212 mire +43213 mirent +43214 mirer +43215 mirera +43216 mires +43221 mirez +43222 miroir +43223 mis +43224 misa +43225 misait +43226 misant +43231 mise +43232 miser +43233 misera +43234 mises +43235 misez +43236 misiez +43241 misons +43242 miss +43243 missel +43244 misses +43245 mit +43246 mita +43251 mite +43252 mitent +43253 miter +43254 mitera +43255 mites +43256 mitre +43261 mitron +43262 mixa +43263 mixage +43264 mixais +43265 mixait +43266 mixant +43311 mixe +43312 mixent +43313 mixer +43314 mixes +43315 mixez +43316 mixte +43321 mixtes +43322 mj +43323 mk +43324 ml +43325 mm +43326 mmm +43331 mmmm +43332 mn +43333 mno +43334 mo +43335 moche +43336 modal +43341 modale +43342 mode +43343 modela +43344 modem +43345 modes +43346 modula +43351 modus +43352 moelle +43353 moi +43354 moine +43355 moines +43356 moins +43361 moire +43362 mois +43363 moisi +43364 moisie +43365 moisir +43366 moite +43411 moites +43412 moitir +43413 moka +43414 mokas +43415 mol +43416 molle +43421 mollet +43422 molli +43423 moment +43424 momie +43425 momies +43426 mon +43431 monde +43432 monder +43433 mondes +43434 mont +43435 monta +43436 monte +43441 montra +43442 monts +43443 moqua +43444 moque +43445 moquez +43446 moral +43451 mord +43452 morde +43453 mordre +43454 mords +43455 mordu +43456 mordue +43461 morgue +43462 morne +43463 mornes +43464 mors +43465 morse +43466 morses +43511 mort +43512 morte +43513 mortel +43514 morts +43515 morue +43516 morve +43521 mot +43522 motel +43523 motif +43524 motiva +43525 moto +43526 motos +43531 mots +43532 motte +43533 mou +43534 moucha +43535 mouche +43536 moud +43541 moudra +43542 moudre +43543 mouds +43544 moue +43545 moues +43546 moula +43551 moule +43552 moulin +43553 moulu +43554 mourez +43555 mouron +43556 mourut +43561 mous +43562 moussa +43563 mousse +43564 mouvez +43565 moyen +43566 moyeu +43611 moyeux +43612 mp +43613 mq +43614 mr +43615 ms +43616 mt +43621 mu +43622 mua +43623 muais +43624 muait +43625 muant +43626 mue +43631 muent +43632 muer +43633 muera +43634 muerez +43635 mues +43636 muet +43641 muets +43642 muez +43643 mufle +43644 mugi +43645 mugir +43646 mugis +43651 mugit +43652 muiez +43653 mule +43654 mules +43655 mulet +43656 mulot +43661 muni +43662 munie +43663 munir +43664 munira +43665 munis +43666 munit +44111 muons +44112 mur +44113 mura +44114 murais +44115 mural +44116 murale +44121 murals +44122 mure +44123 murent +44124 murer +44125 mures +44126 muret +44131 murez +44132 muriez +44133 murons +44134 murs +44135 mus +44136 musc +44141 muscat +44142 muscle +44143 muscs +44144 muse +44145 museau +44146 muser +44151 muses +44152 musser +44153 muta +44154 mutant +44155 mute +44156 muter +44161 mutera +44162 mutes +44163 mutez +44164 mutiez +44165 mutile +44166 mutin +44211 mutina +44212 mv +44213 mw +44214 mx +44215 my +44216 myope +44221 myrrhe +44222 mythe +44223 mz +44224 n +44225 na +44226 nabab +44231 nababs +44232 nabot +44233 nabote +44234 nacre +44235 nacres +44236 nage +44241 nagea +44242 nager +44243 nages +44244 nagez +44245 nain +44246 naine +44251 nains +44252 nais +44253 naja +44254 najas +44255 nanan +44256 nanti +44261 nantir +44262 nantis +44263 nantit +44264 napalm +44265 nappe +44266 naquit +44311 narra +44312 narre +44313 narres +44314 narrez +44315 naseau +44316 nasse +44321 natal +44322 natale +44323 natif +44324 nation +44325 natte +44326 natter +44331 nattes +44332 naval +44333 navals +44334 navet +44335 navets +44336 navire +44341 navra +44342 navre +44343 navrer +44344 navrez +44345 nazi +44346 nazie +44351 nazies +44352 nazis +44353 nb +44354 nc +44355 nd +44356 ne +44361 nectar +44362 nef +44363 nefs +44364 negro +44365 neige +44366 neiger +44411 nenni +44412 nerf +44413 nerfs +44414 nervi +44415 nervis +44416 net +44421 nets +44422 nette +44423 nettes +44424 neuf +44425 neufs +44426 neutre +44431 neuve +44432 neveu +44433 nez +44434 nf +44435 ng +44436 nh +44441 ni +44442 nia +44443 niable +44444 niais +44445 niait +44446 niant +44451 nicha +44452 niche +44453 nicher +44454 niches +44455 nid +44456 nids +44461 nie +44462 nient +44463 nier +44464 niera +44465 nierai +44466 nies +44511 niez +44512 nigaud +44513 niiez +44514 nimber +44515 ninja +44516 ninjas +44521 nions +44522 nippe +44523 nipper +44524 nique +44525 niveau +44526 nivela +44531 nj +44532 nk +44533 nl +44534 nm +44535 nn +44536 nnn +44541 nnnn +44542 no +44543 noble +44544 nobles +44545 noce +44546 noces +44551 nocif +44552 nocifs +44553 nodule +44554 noeud +44555 noie +44556 noiera +44561 noies +44562 noir +44563 noire +44564 noires +44565 noirs +44566 noise +44611 noises +44612 noix +44613 nom +44614 nomade +44615 nomma +44616 nomme +44621 nommer +44622 noms +44623 non +44624 nonce +44625 nonne +44626 nop +44631 nord +44632 normal +44633 norme +44634 normes +44635 nos +44636 nota +44641 notais +44642 notait +44643 note +44644 notent +44645 noter +44646 notera +44651 notes +44652 notez +44653 notice +44654 notons +44655 notre +44656 notule +44661 noua +44662 noue +44663 nouer +44664 nouera +44665 noues +44666 noueux +45111 nouez +45112 nouiez +45113 nouons +45114 nourri +45115 nous +45116 nover +45121 noya +45122 noyau +45123 noyaux +45124 noyer +45125 noyez +45126 noyiez +45131 noyons +45132 np +45133 nq +45134 nr +45135 ns +45136 nt +45141 nu +45142 nuage +45143 nubile +45144 nue +45145 nues +45146 nui +45151 nuira +45152 nuiras +45153 nuire +45154 nuirez +45155 nuis +45156 nuise +45161 nuit +45162 nuits +45163 nul +45164 nulle +45165 nulles +45166 nuls +45211 nuque +45212 nurse +45213 nus +45214 nv +45215 nw +45216 nx +45221 ny +45222 nylon +45223 nz +45224 o +45225 oa +45226 oasis +45231 ob +45232 obier +45233 objet +45234 objets +45235 oblige +45236 obole +45241 obture +45242 obtus +45243 obus +45244 obvier +45245 oc +45246 occupe +45251 ocre +45252 ocrer +45253 ocres +45254 octal +45255 octane +45256 octave +45261 octet +45262 octroi +45263 od +45264 ode +45265 odes +45266 odeur +45311 odieux +45312 oe +45313 oeil +45314 oeuf +45315 oeufs +45316 oeuvre +45321 of +45322 offert +45323 office +45324 offre +45325 offres +45326 offrez +45331 og +45332 ogive +45333 ogives +45334 ogre +45335 ogres +45336 oh +45341 ohm +45342 ohms +45343 oi +45344 oie +45345 oies +45346 oignon +45351 oisif +45352 oisifs +45353 oison +45354 oisons +45355 oj +45356 ok +45361 okapi +45362 ol +45363 olive +45364 olives +45365 om +45366 ombre +45411 omet +45412 omets +45413 omette +45414 omis +45415 omise +45416 omit +45421 on +45422 onagre +45423 once +45424 onces +45425 oncle +45426 oncles +45431 onde +45432 ondes +45433 ondula +45434 ongle +45435 ont +45436 onyx +45441 onze +45442 oo +45443 ooo +45444 oooo +45445 op +45446 opale +45451 opales +45452 opaque +45453 opina +45454 opine +45455 opiner +45456 opines +45461 opium +45462 opq +45463 opta +45464 opte +45465 optent +45466 opter +45511 optera +45512 optes +45513 optez +45514 optima +45515 option +45516 opus +45521 oq +45522 or +45523 orage +45524 oral +45525 orale +45526 oraux +45531 orc +45532 orcs +45533 ordre +45534 ordure +45535 ores +45536 orge +45541 orges +45542 orgie +45543 orgies +45544 orgue +45545 orme +45546 ormeau +45551 ormes +45552 orna +45553 ornais +45554 ornant +45555 orne +45556 ornent +45561 orner +45562 ornes +45563 ornez +45564 orniez +45565 ornons +45566 oronge +45611 orque +45612 ors +45613 orteil +45614 ortie +45615 orvet +45616 os +45621 osa +45622 osais +45623 osait +45624 osant +45625 oscar +45626 oscars +45631 ose +45632 osent +45633 oser +45634 osera +45635 oses +45636 osez +45641 osier +45642 osiers +45643 osiez +45644 osions +45645 osmose +45646 osons +45651 ot +45652 otage +45653 otages +45654 otarie +45655 otite +45656 otites +45661 ou +45662 ouate +45663 ouater +45664 oubli +45665 oublis +45666 oued +46111 oueds +46112 ouest +46113 oui +46114 ourdi +46115 ourdie +46116 ourdis +46121 ourler +46122 ours +46123 ourse +46124 outil +46125 outils +46126 outra +46131 outre +46132 outrez +46133 ouvre +46134 ouvrer +46135 ouvrez +46136 ov +46141 ovaire +46142 ovale +46143 ovales +46144 ovine +46145 ovni +46146 ovnis +46151 ovule +46152 ovuler +46153 ow +46154 ox +46155 oxyda +46156 oxyde +46161 oxyder +46162 oy +46163 oz +46164 ozone +46165 ozones +46166 p +46211 pa +46212 pacha +46213 pack +46214 packs +46215 pacte +46216 page +46221 pages +46222 pagina +46223 pagine +46224 pagne +46225 pagode +46226 paie +46231 paient +46232 paies +46233 paille +46234 pain +46235 pains +46236 pair +46241 paire +46242 paires +46243 pairs +46244 paix +46245 pal +46246 palace +46251 palan +46252 pale +46253 pales +46254 palet +46255 palier +46256 palme +46261 palmes +46262 palot +46263 palpa +46264 palpe +46265 palpes +46266 palpez +46311 pals +46312 pampa +46313 pampas +46314 pan +46315 panda +46316 panel +46321 panels +46322 paner +46323 panne +46324 pannes +46325 pans +46326 pansa +46331 panse +46332 panser +46333 pansez +46334 pantin +46335 paon +46336 paonne +46341 paons +46342 papa +46343 papal +46344 papale +46345 papas +46346 papaux +46351 pape +46352 papes +46353 papier +46354 paquet +46355 par +46356 para +46361 parada +46362 parade +46363 parafe +46364 paras +46365 parc +46366 parce +46411 parcs +46412 pare +46413 pareil +46414 parer +46415 pares +46416 parez +46421 pari +46422 paria +46423 parias +46424 parie +46425 paris +46426 parla +46431 parle +46432 parles +46433 parmi +46434 paroi +46435 pars +46436 part +46441 parte +46442 parti +46443 partie +46444 partit +46445 parts +46446 paru +46451 parue +46452 parure +46453 parus +46454 parut +46455 pas +46456 pascal +46461 passa +46462 passe +46463 passer +46464 passes +46465 passez +46466 passif +46511 patent +46512 patin +46513 patine +46514 patio +46515 patte +46516 paume +46521 paumes +46522 pause +46523 pauses +46524 pava +46525 pavait +46526 pavant +46531 pave +46532 pavent +46533 paver +46534 paves +46535 paveur +46536 pavez +46541 pavois +46542 pavons +46543 pavot +46544 paya +46545 paye +46546 payent +46551 payer +46552 payera +46553 payes +46554 payeur +46555 payez +46556 payiez +46561 pays +46562 payse +46563 pb +46564 pc +46565 pd +46566 pe +46611 peau +46612 peaux +46613 peina +46614 peine +46615 peiner +46616 peines +46621 peinez +46622 peins +46623 peint +46624 peints +46625 pela +46626 pelage +46631 peler +46632 pelez +46633 peliez +46634 pelle +46635 pelles +46636 pelons +46641 pelote +46642 pencha +46643 penche +46644 pend +46645 pende +46646 pendes +46651 pendra +46652 pends +46653 pendu +46654 pendue +46655 pensa +46656 pense +46661 penses +46662 pensez +46663 pensum +46664 pente +46665 perce +46666 perd +51111 perde +51112 perdre +51113 perds +51114 perdu +51115 perdue +51116 perla +51121 perle +51122 permet +51123 permis +51124 permit +51125 perron +51126 pers +51131 perse +51132 perses +51133 perte +51134 pesa +51135 pesage +51136 pesais +51141 peser +51142 peseta +51143 pesez +51144 pesons +51145 pesta +51146 peste +51151 pestes +51152 pet +51153 petit +51154 peton +51155 petons +51156 pets +51161 peu +51162 peupla +51163 peuple +51164 peur +51165 peurs +51166 peut +51211 peux +51212 pf +51213 pg +51214 ph +51215 phare +51216 phares +51221 phase +51222 phases +51223 phobie +51224 phone +51225 phono +51226 phoque +51231 photo +51232 pi +51233 piaffe +51234 piano +51235 pic +51236 pics +51241 pie +51242 pied +51243 pieds +51244 pies +51245 pieu +51246 pieuse +51251 pieux +51252 pige +51253 piger +51254 piges +51255 pigne +51256 pignon +51261 pila +51262 pilait +51263 pile +51264 piler +51265 piles +51266 pileux +51311 pilez +51312 piliez +51313 pilla +51314 pille +51315 pillez +51316 pilon +51321 pilou +51322 pilous +51323 pilule +51324 pin +51325 pince +51326 pins +51331 pinte +51332 piolet +51333 pion +51334 pions +51335 pipe +51336 pipeau +51341 piper +51342 pipes +51343 piqua +51344 pique +51345 piquer +51346 piques +51351 pire +51352 pires +51353 pis +51354 pisser +51355 pista +51356 piste +51361 pister +51362 pistes +51363 pistez +51364 pistil +51365 piteux +51366 piton +51411 pitons +51412 pitre +51413 pivot +51414 pivote +51415 pivots +51416 pixel +51421 pixels +51422 pizza +51423 pizzas +51424 pj +51425 pk +51426 pl +51431 place +51432 places +51433 placet +51434 placez +51435 plage +51436 plagia +51441 plagie +51442 plaid +51443 plaids +51444 plaie +51445 plaies +51446 plaine +51451 plains +51452 plais +51453 plan +51454 plana +51455 plane +51456 planes +51461 planez +51462 plans +51463 plant +51464 plante +51465 plaqua +51466 plasma +51511 plat +51512 plate +51513 plates +51514 plats +51515 plein +51516 pleins +51521 pleur +51522 pleura +51523 pleure +51524 pleut +51525 pli +51526 plia +51531 pliage +51532 plie +51533 plier +51534 plies +51535 pliez +51536 pliiez +51541 plions +51542 plis +51543 pliure +51544 ploie +51545 plomb +51546 plombe +51551 plot +51552 plots +51553 ploya +51554 ployer +51555 ployez +51556 plu +51561 pluie +51562 plume +51563 plumer +51564 plumes +51565 plus +51566 plut +51611 pm +51612 pn +51613 pneu +51614 pneus +51615 po +51616 poche +51621 pocher +51622 poches +51623 podium +51624 pogrom +51625 poids +51626 poil +51631 poils +51632 poilu +51633 poilue +51634 poilus +51635 poing +51636 poings +51641 point +51642 pointa +51643 points +51644 pointu +51645 poire +51646 pois +51651 poisse +51652 poix +51653 poker +51654 pokers +51655 poli +51656 polie +51661 polio +51662 polios +51663 polir +51664 polis +51665 polit +51666 polka +52111 pollen +52112 polo +52113 polos +52114 pomme +52115 pommer +52116 pompa +52121 pompe +52122 pompez +52123 pompon +52124 ponce +52125 poncez +52126 pond +52131 ponde +52132 pondes +52133 pondre +52134 ponds +52135 pondu +52136 pondue +52141 poney +52142 pont +52143 ponte +52144 ponter +52145 ponts +52146 pool +52151 pools +52152 pope +52153 popes +52154 popote +52155 porc +52156 porcs +52161 pore +52162 pores +52163 porno +52164 pornos +52165 port +52166 porta +52211 porte +52212 porto +52213 ports +52214 posa +52215 pose +52216 poser +52221 poses +52222 posez +52223 posons +52224 posta +52225 postal +52226 poste +52231 postez +52232 pot +52233 potage +52234 pote +52235 potes +52236 potin +52241 potion +52242 pots +52243 pou +52244 pouce +52245 pouces +52246 poudra +52251 poudre +52252 pouf +52253 poufs +52254 poule +52255 poules +52256 poulet +52261 pouls +52262 poumon +52263 poupe +52264 poupes +52265 poupin +52266 poupon +52311 pour +52312 pourra +52313 pourri +52314 pourvu +52315 pousse +52316 poux +52321 pp +52322 ppp +52323 pppp +52324 pq +52325 pqr +52326 pr +52331 prend +52332 presse +52333 pria +52334 priait +52335 prie +52336 prier +52341 priera +52342 pries +52343 priez +52344 prima +52345 primat +52346 prime +52351 primer +52352 prions +52353 pris +52354 prisa +52355 prise +52356 prises +52361 prison +52362 prit +52363 priva +52364 prive +52365 priver +52366 prix +52411 probe +52412 proche +52413 profit +52414 proie +52415 proies +52416 projet +52421 promet +52422 promis +52423 promit +52424 promu +52425 promue +52426 promus +52431 promut +52432 pronom +52433 propre +52434 prose +52435 proue +52436 proues +52441 prude +52442 prune +52443 ps +52444 pt +52445 pu +52446 pua +52451 puait +52452 puant +52453 pub +52454 pubis +52455 public +52456 publie +52461 pubs +52462 puce +52463 puceau +52464 puces +52465 pue +52466 puent +52511 puer +52512 puera +52513 puis +52514 puisa +52515 puise +52516 puiser +52521 puises +52522 puisse +52523 puits +52524 pull +52525 pulls +52526 pulpe +52531 puma +52532 pumas +52533 punch +52534 puni +52535 punie +52536 punir +52541 punira +52542 punis +52543 punit +52544 pur +52545 pure +52546 purent +52551 pures +52552 purge +52553 purgea +52554 purger +52555 purin +52556 purs +52561 pus +52562 put +52563 putain +52564 putois +52565 puzzle +52566 pv +52611 pw +52612 px +52613 py +52614 pyjama +52615 pyrex +52616 pz +52621 q +52622 qa +52623 qb +52624 qc +52625 qd +52626 qe +52631 qf +52632 qg +52633 qh +52634 qi +52635 qj +52636 qk +52641 ql +52642 qm +52643 qn +52644 qo +52645 qp +52646 qq +52651 qqn +52652 qqq +52653 qqqq +52654 qqun +52655 qr +52656 qrs +52661 qs +52662 qt +52663 qu +52664 quai +52665 quais +52666 quand +53111 quant +53112 quart +53113 quarts +53114 quartz +53115 quasi +53116 quatre +53121 que +53122 quel +53123 quels +53124 queue +53125 queux +53126 qui +53131 quidam +53132 quille +53133 quinte +53134 quitus +53135 quo +53136 quoi +53141 quota +53142 quotas +53143 qv +53144 qw +53145 qx +53146 qy +53151 qz +53152 r +53153 ra +53154 rabane +53155 rabat +53156 rabbin +53161 rabiot +53162 rabot +53163 rabote +53164 race +53165 races +53166 racine +53211 racla +53212 racle +53213 raclez +53214 racola +53215 racole +53216 radar +53221 rade +53222 radeau +53223 rader +53224 rades +53225 radia +53226 radie +53231 radio +53232 radios +53233 radis +53234 radium +53235 radius +53236 radota +53241 radoub +53242 rafale +53243 raffut +53244 rafla +53245 rafle +53246 rafler +53251 rafles +53252 raflez +53253 rage +53254 ragea +53255 ragent +53256 rager +53261 ragera +53262 rages +53263 ragez +53264 ragot +53265 ragots +53266 raguer +53311 raid +53312 raide +53313 raidi +53314 raids +53315 raie +53316 raies +53321 rail +53322 railla +53323 raille +53324 rails +53325 rainer +53326 raire +53331 rama +53332 ramait +53333 rame +53334 ramena +53335 rament +53336 ramer +53341 rames +53342 rameur +53343 ramez +53344 rami +53345 ramis +53346 ramone +53351 ramons +53352 rampa +53353 rampe +53354 ramper +53355 rampez +53356 rance +53361 rances +53362 ranch +53363 ranci +53364 rancie +53365 rancir +53366 rancis +53411 rang +53412 range +53413 rangez +53414 rangs +53415 ranime +53416 rapace +53421 raphia +53422 rappel +53423 rapt +53424 rapts +53425 raquer +53426 rare +53431 rares +53432 ras +53433 rasa +53434 rasade +53435 rasage +53436 rasais +53441 rasant +53442 rase +53443 rasent +53444 raser +53445 rases +53446 rasez +53451 rasoir +53452 rasons +53453 rassir +53454 rassit +53455 rat +53456 rata +53461 ratage +53462 ratais +53463 ratant +53464 rate +53465 rater +53466 ratera +53511 rates +53512 ratez +53513 ratio +53514 ration +53515 raton +53516 ratons +53521 rats +53522 ravage +53523 ravale +53524 rave +53525 raves +53526 ravi +53531 ravie +53532 ravies +53533 ravin +53534 ravina +53535 ravir +53536 ravira +53541 ravis +53542 ravisa +53543 ravit +53544 ravoir +53545 raya +53546 rayait +53551 raye +53552 rayer +53553 rayes +53554 rayez +53555 rayon +53556 rayons +53561 raz +53562 razzia +53563 rb +53564 rc +53565 rd +53566 re +53611 rebat +53612 rebord +53613 rebut +53614 rebuta +53615 recel +53616 recoin +53621 record +53622 recoud +53623 recru +53624 recta +53625 recto +53626 rectum +53631 recuit +53632 recul +53633 redira +53634 redire +53635 redis +53636 redit +53641 redits +53642 redoux +53643 refera +53644 refit +53645 reflux +53646 refuge +53651 refus +53652 refuse +53653 reg +53654 regard +53655 regret +53656 regs +53661 rein +53662 reine +53663 reines +53664 reins +53665 rejet +53666 rejeta +54111 relaxa +54112 relent +54113 releva +54114 relia +54115 relie +54116 relira +54121 relis +54122 relise +54123 relit +54124 relu +54125 relue +54126 relui +54131 reluit +54132 relus +54133 relut +54134 remet +54135 remis +54136 remisa +54141 remit +54142 remous +54143 remua +54144 remue +54145 remuer +54146 renais +54151 renard +54152 rend +54153 rende +54154 rendes +54155 rendez +54156 rendit +54161 rendre +54162 rends +54163 rendu +54164 renia +54165 renie +54166 renies +54211 renne +54212 renom +54213 renoms +54214 renoua +54215 rente +54216 renter +54221 rentes +54222 rentra +54223 rentre +54224 renvoi +54225 repaie +54226 repars +54231 repas +54232 repaya +54233 repens +54234 repent +54235 repli +54236 repos +54241 reposa +54242 repose +54243 repris +54244 reprit +54245 repu +54246 repue +54251 repues +54252 repus +54253 ressac +54254 resta +54255 reste +54256 rester +54261 retard +54262 retenu +54263 revint +54264 revis +54265 revit +54266 revois +54311 revoit +54312 revu +54313 revue +54314 revus +54315 rf +54316 rg +54321 rh +54322 rhum +54323 rhume +54324 rhums +54325 ri +54326 riais +54331 riait +54332 riant +54333 riants +54334 ribler +54335 riche +54336 ricin +54341 rida +54342 ridant +54343 ride +54344 rider +54345 rides +54346 rie +54351 rien +54352 riens +54353 rient +54354 ries +54355 rieur +54356 riez +54361 rifle +54362 rifles +54363 rigide +54364 riiez +54365 rima +54366 rime +54411 riment +54412 rimer +54413 rimes +54414 rince +54415 rinces +54416 ring +54421 rings +54422 rions +54423 rioter +54424 riper +54425 rira +54426 rirai +54431 riras +54432 rire +54433 rirent +54434 rires +54435 rirez +54436 ririez +54441 rirons +54442 ris +54443 riser +54444 risqua +54445 risque +54446 rit +54451 rite +54452 rites +54453 rituel +54454 riva +54455 rivage +54456 rivais +54461 rival +54462 rivale +54463 rivant +54464 rive +54465 river +54466 rives +54511 rivet +54512 rivez +54513 riviez +54514 rivons +54515 rixe +54516 rixes +54521 riz +54522 rj +54523 rk +54524 rl +54525 rm +54526 rn +54531 ro +54532 robe +54533 rober +54534 robes +54535 robot +54536 roc +54541 roche +54542 roches +54543 rock +54544 rocker +54545 rocks +54546 rococo +54551 rocs +54552 roda +54553 rodage +54554 rodais +54555 rode +54556 roder +54561 rodes +54562 rodez +54563 rogna +54564 rogne +54565 rogner +54566 rognez +54611 rognon +54612 rogue +54613 roi +54614 rois +54615 roll +54616 romain +54621 roman +54622 rompe +54623 rompes +54624 romps +54625 rompt +54626 rompu +54631 rompue +54632 ronce +54633 ronces +54634 rond +54635 ronde +54636 rondin +54641 ronds +54642 ronfla +54643 ronge +54644 rongea +54645 roque +54646 rosace +54651 rosbif +54652 rose +54653 roser +54654 roses +54655 rosi +54656 rosie +54661 rosir +54662 rosis +54663 rosit +54664 rosse +54665 rosses +54666 rot +55111 roter +55112 rotin +55113 rotins +55114 rotor +55115 rots +55116 rotule +55121 roue +55122 rouer +55123 roues +55124 rouge +55125 rouget +55126 rougi +55131 rougie +55132 rougir +55133 rouir +55134 roula +55135 roule +55136 rouler +55141 roules +55142 roulez +55143 roulis +55144 round +55145 rounds +55146 rousse +55151 routa +55152 route +55153 routes +55154 roux +55155 royal +55156 royale +55161 royaux +55162 rp +55163 rq +55164 rr +55165 rrr +55166 rrrr +55211 rs +55212 rst +55213 rt +55214 ru +55215 rua +55216 ruade +55221 ruais +55222 ruait +55223 ruant +55224 ruban +55225 rubis +55226 ruche +55231 rude +55232 rudes +55233 rudoie +55234 rudoya +55235 rue +55236 ruent +55241 ruer +55242 ruera +55243 rueras +55244 ruerez +55245 rues +55246 ruez +55251 rugby +55252 rugbys +55253 rugi +55254 rugir +55255 rugira +55256 rugis +55261 rugit +55262 ruiez +55263 ruiler +55264 ruina +55265 ruine +55266 ruinez +55311 ruions +55312 rumina +55313 rumine +55314 ruons +55315 rural +55316 rusa +55321 ruse +55322 ruser +55323 rusera +55324 ruses +55325 rusez +55326 rush +55331 rushs +55332 rusiez +55333 russe +55334 russes +55335 rut +55336 rutila +55341 ruts +55342 rv +55343 rw +55344 rx +55345 ry +55346 rythme +55351 rz +55352 s +55353 sa +55354 sabir +55355 sabirs +55356 sable +55361 sabot +55362 sabote +55363 sabra +55364 sabre +55365 sabrer +55366 sabres +55411 sabrez +55412 sac +55413 sache +55414 saches +55415 sacre +55416 sacrer +55421 sacres +55422 sacs +55423 saga +55424 sagas +55425 sage +55426 sages +55431 saille +55432 sailli +55433 sain +55434 saine +55435 saines +55436 sains +55441 saint +55442 sainte +55443 sais +55444 saisi +55445 saisie +55446 saisis +55451 sait +55452 sala +55453 salait +55454 sale +55455 saler +55456 sales +55461 salez +55462 sali +55463 salie +55464 salin +55465 saline +55466 salir +55511 salis +55512 salit +55513 salive +55514 salle +55515 salmis +55516 saloir +55521 salon +55522 salons +55523 saloon +55524 salua +55525 salue +55526 saluez +55531 salut +55532 salve +55533 samba +55534 samedi +55535 sana +55536 sanas +55541 sang +55542 sangs +55543 sans +55544 santon +55545 saoul +55546 saoule +55551 sapa +55552 sapait +55553 sapant +55554 sape +55555 saper +55556 sapera +55561 sapes +55562 sapeur +55563 sapin +55564 saquer +55565 sari +55566 saris +55611 sarrau +55612 sas +55613 satin +55614 satins +55615 satire +55616 satura +55621 sauce +55622 sauces +55623 sauf +55624 saufs +55625 sauge +55626 sauges +55631 saule +55632 saules +55633 sauna +55634 sauner +55635 saur +55636 saura +55641 saurs +55642 saut +55643 sauta +55644 saute +55645 sauts +55646 sauva +55651 sauve +55652 savait +55653 savant +55654 savez +55655 saviez +55656 savon +55661 savons +55662 saxo +55663 saxon +55664 saxos +55665 sb +55666 sbire +56111 sc +56112 scalp +56113 scanda +56114 scande +56115 sceau +56116 scella +56121 scia +56122 sciant +56123 scie +56124 scier +56125 sciera +56126 scies +56131 sciez +56132 sciiez +56133 scion +56134 scions +56135 scoop +56136 score +56141 scorie +56142 scout +56143 scouts +56144 scruta +56145 sd +56146 se +56151 seau +56152 seaux +56153 sec +56154 secs +56155 secte +56156 seiche +56161 sein +56162 seing +56163 seins +56164 seize +56165 sel +56166 self +56211 selfs +56212 selle +56213 seller +56214 selon +56215 sels +56216 sema +56221 semais +56222 semble +56223 semer +56224 semez +56225 semis +56226 semoir +56231 sens +56232 sent +56233 sente +56234 senti +56235 sentir +56236 sentis +56241 seoir +56242 sept +56243 sera +56244 serai +56245 seras +56246 serez +56251 serf +56252 serfs +56253 serge +56254 serin +56255 serons +56256 seront +56261 serpe +56262 serra +56263 serre +56264 serrer +56265 sers +56266 sert +56311 serti +56312 sertie +56313 serval +56314 serve +56315 servi +56316 servit +56321 ses +56322 set +56323 sets +56324 setter +56325 seuil +56326 seuils +56331 seul +56332 seule +56333 seules +56334 seuls +56335 sevra +56336 sevrer +56341 sevrez +56342 sexe +56343 sexes +56344 sexy +56345 seyant +56346 sf +56351 sg +56352 sh +56353 shah +56354 shahs +56355 shako +56356 shoot +56361 shoots +56362 short +56363 shorts +56364 show +56365 shows +56366 si +56411 sic +56412 sied +56413 sien +56414 sienne +56415 siens +56416 sieste +56421 sieur +56422 siffla +56423 sigle +56424 signa +56425 signal +56426 signe +56431 signer +56432 signes +56433 signet +56434 signez +56435 silex +56436 sillon +56441 silo +56442 silos +56443 simoun +56444 singe +56445 singer +56446 sinon +56451 sinus +56452 siphon +56453 sire +56454 sirop +56455 sis +56456 sisal +56461 sise +56462 sises +56463 site +56464 sites +56465 situa +56466 situe +56511 situer +56512 situes +56513 situez +56514 six +56515 sj +56516 sk +56521 skate +56522 ski +56523 skia +56524 skiant +56525 skie +56526 skient +56531 skier +56532 skiera +56533 skies +56534 skieur +56535 skiez +56536 skiff +56541 skiffs +56542 skions +56543 skis +56544 sl +56545 slave +56546 slip +56551 slips +56552 slogan +56553 slow +56554 slows +56555 sm +56556 smash +56561 sn +56562 snack +56563 snob +56564 snobs +56565 so +56566 sobre +56611 sobres +56612 soc +56613 social +56614 socle +56615 socles +56616 socs +56621 soda +56622 sodas +56623 sodium +56624 soeur +56625 soeurs +56626 sofa +56631 sofas +56632 soi +56633 soie +56634 soient +56635 soies +56636 soif +56641 soifs +56642 soigna +56643 soigne +56644 soin +56645 soins +56646 soir +56651 soirs +56652 sois +56653 soit +56654 soja +56655 sojas +56656 sol +56661 solda +56662 solde +56663 soldez +56664 sole +56665 solen +56666 soles +61111 soli +61112 solo +61113 solos +61114 sols +61115 sombra +61116 sombre +61121 somma +61122 somme +61123 sommes +61124 sommet +61125 sommez +61126 son +61131 sonar +61132 sonate +61133 sonda +61134 sonde +61135 sondes +61136 songe +61141 songea +61142 songer +61143 songez +61144 sonna +61145 sonne +61146 sonner +61151 sonnet +61152 sono +61153 sonos +61154 sons +61155 sont +61156 sorbe +61161 sorbes +61162 sors +61163 sort +61164 sorte +61165 sorti +61166 sortie +61211 sortis +61212 sortit +61213 sorts +61214 sosie +61215 sot +61216 sots +61221 sotte +61222 sottes +61223 sou +61224 souci +61225 soucia +61226 soucie +61231 soucis +61232 souda +61233 soude +61234 souder +61235 soudes +61236 souk +61241 souks +61242 soulte +61243 soumet +61244 soumit +61245 soupa +61246 soupe +61251 souper +61252 soupes +61253 soupez +61254 source +61255 sourd +61256 sourde +61261 sourds +61262 souri +61263 souris +61264 sous +61265 soute +61266 soviet +61311 soya +61312 soyas +61313 soyeux +61314 soyez +61315 sp +61316 spasme +61321 sphinx +61322 spire +61323 spires +61324 sport +61325 sports +61326 spot +61331 spots +61332 sq +61333 square +61334 squaw +61335 sr +61336 ss +61341 sss +61342 ssss +61343 st +61344 stable +61345 stade +61346 stades +61351 staff +61352 stage +61353 stages +61354 stagna +61355 stagne +61356 stand +61361 stands +61362 star +61363 stars +61364 statif +61365 statu +61366 statua +61411 statut +61412 steak +61413 steaks +61414 stem +61415 stemm +61416 stemms +61421 stems +61422 stick +61423 stock +61424 stocka +61425 stocke +61426 stop +61431 stoppe +61432 stops +61433 store +61434 stores +61435 strate +61436 strie +61441 stu +61442 stuc +61443 stucs +61444 style +61445 styles +61446 stylet +61451 stylo +61452 su +61453 sua +61454 suais +61455 suait +61456 suant +61461 suave +61462 suaves +61463 subi +61464 subie +61465 subies +61466 subir +61511 subis +61512 subit +61513 subits +61514 suc +61515 suce +61516 sucent +61521 sucer +61522 sucera +61523 suces +61524 sucez +61525 sucra +61526 sucre +61531 sucres +61532 sucs +61533 sud +61534 sue +61535 suent +61536 suer +61541 suera +61542 suerai +61543 sueras +61544 sues +61545 sueur +61546 suez +61551 suffi +61552 suffit +61553 suie +61554 suiez +61555 suif +61556 suint +61561 suinta +61562 suinte +61563 suis +61564 suisse +61565 suit +61566 suite +61611 suive +61612 suives +61613 suivi +61614 suivie +61615 suivis +61616 suivit +61621 suivre +61622 sujet +61623 sujets +61624 sulky +61625 sulkys +61626 sultan +61631 suons +61632 super +61633 supin +61634 sur +61635 sure +61636 surent +61641 sures +61642 surf +61643 surfa +61644 surfai +61645 surfas +61646 surfe +61651 surfil +61652 surfs +61653 surgi +61654 surgie +61655 surir +61656 surjet +61661 surs +61662 sursis +61663 survis +61664 survit +61665 survol +61666 sus +62111 sut +62112 sv +62113 sw +62114 swap +62115 swaps +62116 swing +62121 swings +62122 sx +62123 sy +62124 sympa +62125 sympas +62126 syndic +62131 synode +62132 syrien +62133 sz +62134 t +62135 ta +62136 tabac +62141 tabacs +62142 tabla +62143 table +62144 tabler +62145 tabou +62146 tac +62151 tacha +62152 tache +62153 tachez +62154 tact +62155 tacts +62156 taie +62161 taies +62162 tailla +62163 taille +62164 tain +62165 taira +62166 tairas +62211 taire +62212 tairez +62213 tais +62214 taise +62215 tait +62216 talc +62221 talcs +62222 taler +62223 talon +62224 talons +62225 talus +62226 tamis +62231 tan +62232 tandem +62233 tandis +62234 tango +62235 tangua +62236 tangue +62241 tanin +62242 tank +62243 tanks +62244 tant +62245 tante +62246 tantes +62251 taon +62252 taons +62253 tapa +62254 tapais +62255 tapait +62256 tapant +62261 tape +62262 taper +62263 tapes +62264 tapeur +62265 tapez +62266 tapi +62311 tapie +62312 tapies +62313 tapir +62314 tapira +62315 tapirs +62316 tapis +62321 tapit +62322 tapons +62323 tapota +62324 taquet +62325 taquin +62326 tard +62331 tarda +62332 tarde +62333 tardez +62334 tardif +62335 tare +62336 tarer +62341 tares +62342 targua +62343 tari +62344 tarie +62345 taries +62346 tarif +62351 tarifa +62352 tarife +62353 tarir +62354 taris +62355 tarit +62356 tarot +62361 tarots +62362 tarte +62363 tartes +62364 tartir +62365 tas +62366 tassa +62411 tasse +62412 tasser +62413 tasses +62414 tassez +62415 taule +62416 taupe +62421 taupes +62422 taurin +62423 taux +62424 taxa +62425 taxant +62426 taxe +62431 taxent +62432 taxer +62433 taxes +62434 taxez +62435 taxi +62436 taxis +62441 tb +62442 tc +62443 td +62444 te +62445 teck +62446 teins +62451 teint +62452 tek +62453 teks +62454 tel +62455 telle +62456 tels +62461 tempe +62462 tempes +62463 tempo +62464 tempos +62465 temps +62466 tenais +62511 tenait +62512 tend +62513 tende +62514 tendez +62515 tends +62516 tendu +62521 tendue +62522 teneur +62523 tenez +62524 teniez +62525 tenir +62526 tenon +62531 tenons +62532 tenta +62533 tente +62534 tenter +62535 tentes +62536 tentez +62541 tenu +62542 tenue +62543 tenues +62544 tenus +62545 ter +62546 terme +62551 termes +62552 terne +62553 terni +62554 ternis +62555 ternit +62556 terra +62561 terre +62562 terrer +62563 terri +62564 terril +62565 tertre +62566 tes +62611 test +62612 testa +62613 teste +62614 testes +62615 testez +62616 tests +62621 texan +62622 texte +62623 textes +62624 tf +62625 tg +62626 th +62631 thon +62632 thons +62633 thuya +62634 thuyas +62635 thym +62636 ti +62641 tiare +62642 tibia +62643 tic +62644 tics +62645 tien +62646 tienne +62651 tiens +62652 tient +62653 tierce +62654 tiers +62655 tige +62656 tiges +62661 tigre +62662 tigres +62663 tilde +62664 tildes +62665 tiller +62666 tilt +63111 tilts +63112 timbre +63113 timide +63114 timon +63115 tint +63116 tinta +63121 tinte +63122 tique +63123 tiques +63124 tir +63125 tira +63126 tirade +63131 tirait +63132 tirant +63133 tire +63134 tirent +63135 tirer +63136 tirera +63141 tires +63142 tiret +63143 tirets +63144 tirez +63145 tiroir +63146 tirs +63151 tisane +63152 tison +63153 tisons +63154 tissa +63155 tisse +63156 tisses +63161 tissez +63162 tissu +63163 titan +63164 titane +63165 titans +63166 titra +63211 titre +63212 titrer +63213 tj +63214 tk +63215 tl +63216 tm +63221 tn +63222 to +63223 toast +63224 toc +63225 tocs +63226 toge +63231 toges +63232 toi +63233 toile +63234 toiles +63235 toisa +63236 toise +63241 toiser +63242 toises +63243 toisez +63244 toison +63245 toit +63246 toits +63251 tomba +63252 tombe +63253 tombes +63254 tome +63255 tomes +63256 tomme +63261 ton +63262 tonal +63263 tonals +63264 tond +63265 tonde +63266 tondre +63311 tonds +63312 tondu +63313 tondue +63314 tonna +63315 tonne +63316 tonner +63321 tonnes +63322 tons +63323 tonte +63324 tonus +63325 top +63326 topaze +63331 toper +63332 tops +63333 toque +63334 toquer +63335 tord +63336 torde +63341 tordre +63342 tords +63343 tordu +63344 tordus +63345 torero +63346 toril +63351 torils +63352 toron +63353 torons +63354 tors +63355 torse +63356 torses +63361 tort +63362 torts +63363 torve +63364 tosser +63365 total +63366 totale +63411 totaux +63412 totem +63413 touer +63414 toupet +63415 toupie +63416 tour +63421 tours +63422 tous +63423 tout +63424 toute +63425 toutes +63426 toux +63431 toxine +63432 tp +63433 tq +63434 tr +63435 trac +63436 trace +63441 tract +63442 tracta +63443 tracte +63444 trahi +63445 trahie +63446 trahir +63451 traie +63452 train +63453 trais +63454 trait +63455 traita +63456 traits +63461 tram +63462 trama +63463 trame +63464 trames +63465 trams +63466 transi +63511 trapu +63512 traqua +63513 trauma +63514 treize +63515 trempe +63516 tresse +63521 treuil +63522 tri +63523 tria +63524 triade +63525 triage +63526 triais +63531 tribu +63532 tribun +63533 triche +63534 tricot +63535 trie +63536 trient +63541 trier +63542 triera +63543 tries +63544 triez +63545 triiez +63546 trille +63551 trio +63552 trios +63553 tripe +63554 tris +63555 triste +63556 troc +63561 trocs +63562 trois +63563 troll +63564 trombe +63565 tronc +63566 trop +63611 trope +63612 troqua +63613 troque +63614 trot +63615 trots +63616 trotta +63621 trou +63622 troua +63623 troue +63624 troues +63625 trous +63626 trouve +63631 truand +63632 truc +63633 trucs +63634 truffa +63635 truie +63636 truies +63641 truite +63642 trust +63643 truste +63644 ts +63645 tsar +63646 tsars +63651 tt +63652 ttt +63653 tttt +63654 tu +63655 tua +63656 tuais +63661 tuait +63662 tuant +63663 tuba +63664 tubas +63665 tube +63666 tuber +64111 tubes +64112 tue +64113 tuent +64114 tuer +64115 tuera +64116 tueras +64121 tuerez +64122 tuerie +64123 tues +64124 tueur +64125 tueurs +64126 tueuse +64131 tuez +64132 tuf +64133 tufs +64134 tuiez +64135 tuile +64136 tuiles +64141 tulle +64142 tuner +64143 tuners +64144 tuons +64145 turban +64146 turc +64151 turcs +64152 turent +64153 turf +64154 turfs +64155 tus +64156 tussor +64161 tut +64162 tuv +64163 tuyau +64164 tuyaux +64165 tv +64166 tw +64211 tweed +64212 tweeds +64213 tx +64214 ty +64215 type +64216 typer +64221 types +64222 typhon +64223 typo +64224 typon +64225 typons +64226 typos +64231 tyran +64232 tyrans +64233 tz +64234 u +64235 ua +64236 ub +64241 ubac +64242 ubacs +64243 uc +64244 ud +64245 ue +64246 uf +64251 ug +64252 uh +64253 ui +64254 uj +64255 uk +64256 ukase +64261 ukases +64262 ul +64263 um +64264 un +64265 une +64266 unes +64311 uni +64312 unie +64313 unies +64314 unifia +64315 unifie +64316 union +64321 unique +64322 unir +64323 unira +64324 unirez +64325 unis +64326 unit +64331 uns +64332 uo +64333 up +64334 uq +64335 ur +64336 urge +64341 urgea +64342 urger +64343 urine +64344 urne +64345 urnes +64346 us +64351 usa +64352 usage +64353 usager +64354 usais +64355 usait +64356 usant +64361 usante +64362 usants +64363 use +64364 usent +64365 user +64366 usera +64411 userai +64412 useras +64413 userez +64414 uses +64415 usez +64416 usiez +64421 usina +64422 usine +64423 usiner +64424 usons +64425 usuel +64426 usure +64431 usurpa +64432 ut +64433 utile +64434 utiles +64435 uu +64436 uuu +64441 uuuu +64442 uv +64443 uvw +64444 uw +64445 ux +64446 uy +64451 uz +64452 v +64453 va +64454 vacant +64455 vache +64456 vagin +64461 vagins +64462 vagir +64463 vague +64464 vagues +64465 vaille +64466 vain +64511 vainc +64512 vaincs +64513 vaine +64514 vaines +64515 vains +64516 vais +64521 val +64522 valais +64523 valant +64524 valent +64525 valet +64526 valeur +64531 valez +64532 valgus +64533 vallon +64534 valoir +64535 valons +64536 vals +64541 valsa +64542 valse +64543 valser +64544 valsez +64545 valu +64546 value +64551 valus +64552 valut +64553 valve +64554 vamp +64555 vamper +64556 vamps +64561 van +64562 vanne +64563 vanner +64564 vans +64565 vanta +64566 vante +64611 vanter +64612 vantes +64613 vapeur +64614 vaqua +64615 vaque +64616 vaquer +64621 varan +64622 varech +64623 varia +64624 varie +64625 varus +64626 vas +64631 vase +64632 vases +64633 vaseux +64634 vassal +64635 vaste +64636 vastes +64641 vaut +64642 vaux +64643 vb +64644 vc +64645 vd +64646 ve +64651 veau +64652 veaux +64653 veine +64654 veiner +64655 velu +64656 velue +64661 velus +64662 vend +64663 vende +64664 vendit +64665 vendra +64666 vendre +65111 vends +65112 vendu +65113 veneur +65114 venez +65115 venge +65116 vengea +65121 venger +65122 venges +65123 vengez +65124 venin +65125 venir +65126 venons +65131 vent +65132 venta +65133 vente +65134 ventru +65135 vents +65136 venu +65141 venue +65142 venus +65143 ver +65144 verbe +65145 verbes +65146 verdi +65151 verdir +65152 verdit +65153 verge +65154 verger +65155 verni +65156 vernie +65161 vernis +65162 verra +65163 verre +65164 verres +65165 verrez +65166 verrou +65211 vers +65212 versa +65213 verse +65214 verser +65215 verses +65216 versez +65221 verso +65222 versos +65223 vert +65224 verte +65225 vertes +65226 verts +65231 vertu +65232 verve +65233 vessie +65234 veste +65235 veto +65236 veuf +65241 veufs +65242 veule +65243 veut +65244 veuve +65245 veux +65246 vexa +65251 vexais +65252 vexant +65253 vexe +65254 vexer +65255 vexes +65256 vexez +65261 vexiez +65262 vf +65263 vg +65264 vh +65265 vi +65266 via +65311 viable +65312 viager +65313 viande +65314 vibra +65315 vibre +65316 vice +65321 vices +65322 vichy +65323 vicia +65324 vicie +65325 vida +65326 vidage +65331 vidais +65332 vidait +65333 vidant +65334 vide +65335 vider +65336 videra +65341 vides +65342 videz +65343 vie +65344 vieil +65345 vielle +65346 vienne +65351 viens +65352 vient +65353 vies +65354 vieux +65355 vif +65356 vifs +65361 vigie +65362 vigies +65363 vigile +65364 vigne +65365 vil +65366 vile +65411 viles +65412 villa +65413 villas +65414 ville +65415 vils +65416 vin +65421 viner +65422 vineux +65423 vingt +65424 vins +65425 vint +65426 vinyle +65431 viol +65432 viola +65433 viole +65434 violes +65435 violet +65436 violon +65441 viols +65442 vira +65443 virago +65444 virais +65445 viral +65446 virant +65451 vire +65452 virer +65453 virera +65454 vires +65455 virez +65456 viriez +65461 viril +65462 virons +65463 virus +65464 vis +65465 visa +65466 visage +65511 visais +65512 visait +65513 visant +65514 visas +65515 vise +65516 viser +65521 visera +65522 vises +65523 visez +65524 visiez +65525 vision +65526 visita +65531 vison +65532 visons +65533 vissa +65534 visse +65535 visser +65536 vissez +65541 visuel +65542 vit +65543 vitae +65544 vital +65545 vite +65546 vitre +65551 vitrer +65552 vitres +65553 vivace +65554 vivat +65555 vive +65556 vivent +65561 vives +65562 vivez +65563 vivier +65564 viviez +65565 vivote +65566 vivra +65611 vivrai +65612 vivras +65613 vivre +65614 vj +65615 vk +65616 vl +65621 vm +65622 vn +65623 vo +65624 vocal +65625 vocale +65626 vodka +65631 vodkas +65632 voeu +65633 voeux +65634 vogua +65635 vogue +65636 voguer +65641 vogues +65642 voici +65643 voie +65644 voies +65645 voila +65646 voile +65651 voir +65652 voire +65653 voirie +65654 vois +65655 voit +65656 voix +65661 vol +65662 vola +65663 volait +65664 vole +65665 volent +65666 voler +66111 volera +66112 voles +66113 volet +66114 volets +66115 voleur +66116 volez +66121 vols +66122 volt +66123 volts +66124 volute +66125 vomi +66126 vomie +66131 vomies +66132 vomir +66133 vomis +66134 vomit +66135 vont +66136 vos +66141 vota +66142 votais +66143 votant +66144 vote +66145 votent +66146 voter +66151 votera +66152 votes +66153 votez +66154 votons +66155 votre +66156 voua +66161 vouais +66162 vouait +66163 voue +66164 vouent +66165 vouer +66166 voues +66211 vouez +66212 vouiez +66213 voulu +66214 voulue +66215 vous +66216 voyais +66221 voyeur +66222 voyez +66223 voyiez +66224 voyons +66225 voyou +66226 vp +66231 vq +66232 vr +66233 vrac +66234 vrai +66235 vraie +66236 vrais +66241 vrille +66242 vs +66243 vt +66244 vu +66245 vue +66246 vues +66251 vulve +66252 vus +66253 vv +66254 vvv +66255 vvvv +66256 vw +66261 vwx +66262 vx +66263 vy +66264 vz +66265 w +66266 wa +66311 wagon +66312 waters +66313 watt +66314 watts +66315 wb +66316 wc +66321 wd +66322 we +66323 wf +66324 wg +66325 wh +66326 wi +66331 wj +66332 wk +66333 wl +66334 wm +66335 wn +66336 wo +66341 wp +66342 wq +66343 wr +66344 ws +66345 wt +66346 wu +66351 wv +66352 ww +66353 www +66354 wwww +66355 wx +66356 wxy +66361 wy +66362 wz +66363 x +66364 xa +66365 xb +66366 xc +66411 xd +66412 xe +66413 xf +66414 xg +66415 xh +66416 xi +66421 xj +66422 xk +66423 xl +66424 xm +66425 xn +66426 xo +66431 xp +66432 xq +66433 xr +66434 xs +66435 xt +66436 xu +66441 xv +66442 xw +66443 xx +66444 xxx +66445 xxxx +66446 xy +66451 xyz +66452 xz +66453 y +66454 ya +66455 yacht +66456 yack +66461 yacks +66462 yak +66463 yaks +66464 yard +66465 yards +66466 yb +66511 yc +66512 yd +66513 ye +66514 yeux +66515 yf +66516 yg +66521 yh +66522 yi +66523 yj +66524 yk +66525 yl +66526 ym +66531 yn +66532 yo +66533 yoga +66534 yp +66535 yq +66536 yr +66541 ys +66542 yt +66543 yu +66544 yv +66545 yw +66546 yx +66551 yy +66552 yyy +66553 yyyy +66554 yz +66555 z +66556 za +66561 zb +66562 zc +66563 zd +66564 ze +66565 zen +66566 zeste +66611 zester +66612 zestes +66613 zf +66614 zg +66615 zh +66616 zi +66621 zinc +66622 zincs +66623 zipper +66624 zj +66625 zk +66626 zl +66631 zm +66632 zn +66633 zo +66634 zona +66635 zonas +66636 zone +66641 zones +66642 zoo +66643 zoom +66644 zooms +66645 zoos +66646 zp +66651 zq +66652 zr +66653 zs +66654 zt +66655 zu +66656 zv +66661 zw +66662 zx +66663 zy +66664 zz +66665 zzz +66666 zzzz \ No newline at end of file diff --git a/g1sms/diceware.sh b/g1sms/diceware.sh new file mode 100755 index 0000000..8219568 --- /dev/null +++ b/g1sms/diceware.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +MOTS=$(echo "$1" | grep -E "^\-?[0-9]+$") +# Default to 6 words passphrase +if [[ "$MOTS" == "" ]]; then MOTS=6; fi +WORDCOUNT=${1-$MOTS} +# Download the wordlist +# wget -nc -O ~/.diceware-wordlist http://world.std.com/%7Ereinhold/diceware.wordlist.asc 2> /dev/null +# print a list of the diceware words +cat ./shell/diceware-wordlist.txt | +awk '/[1-6][1-6][1-6][1-6][1-6]/{ print $2 }' | +# randomize the list order +shuf --random-source=/dev/urandom | +# pick the first n words +head -n ${WORDCOUNT} | +# pretty print +tr '\n' ' ' +echo diff --git a/g1sms/functions.sh b/g1sms/functions.sh new file mode 100755 index 0000000..85595a2 --- /dev/null +++ b/g1sms/functions.sh @@ -0,0 +1,672 @@ +#!/bin/bash +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +# G1SMS COMMUN FUNCTIONS + +# TODO: REWRITE AND MAKE FULL IPFS get wallet value through IPNS links +# ipfs cat /ipns/QmUrUdfz5hWJ6354D3N6DT64tbs5CLEndSYYiqrj9Wa4Ax/+33647683646/+33647683646.uidna +################################################################################################################################### + +################################################################################################################################### + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized + +## Récupère les données du profile +[[ -f $MY_PATH/.profile ]] && source $MY_PATH/.profile + +function sms_SEND () { +# sms_SEND ($1=phone, $2=message) + local dest="$1" + local mess="$2" + if [[ ${#dest} -eq 10 || ${#dest} -eq 12 ]]; then + if [[ -d ./wallets/$dest ]]; then + # TEST IF $dest IS ON CURRENT NODE + gammu-smsd-inject TEXT "$dest" -text "$mess" 1>&2 + else + # Send SMS through $dest NODE (TODO: send it like PRINT, TASK, ...) + DESTNODEID=$(cat ./wallets_swarm/$dest/MASTERPHONE.ipfsid) + log "$dest is managed by NODE: $DESTNODEID)" + mkdir "./wallets/.$DESTNODEID/SMS" + echo $mess > "./wallets/.$DESTNODEID/SMS/$dest.sms2send" + I=$(ipfs_node_wallets_add) + fi + else + log ">>>>>>>>>>SMS ERROR BAD DESTINATION $dest" + fi + log ">>>>>>>>>> SENDING SMS $mess TO $dest ($DESTNODEID)" +} + + +################################################################################################################################# +function sms_ERROR () { +# sms_ERROR ($1=phone, $2=message) + local dest="$1" + local mess="[ERREUR] +$2" + if [[ ${#dest} -eq 10 || ${#dest} -eq 12 ]]; then + gammu-smsd-inject TEXT "$dest" -text "$mess" 1>&2 + else + log ">>>>>>>>>>SMS ERROR BAD DESTINATION $dest" + fi + log ">>>>>>>>>> SENDING SMS $mess TO $dest" + # SEND ERROR COPY TO ADMINPHONE + if [[ "$CPERROR" == "YES" ]]; then sms_SEND "$ADMINPHONE" "ADMIN! ERROR ($dest): $mess"; fi +} + + +################################################################################################################################# +function log_history () { + log "__SUB:log_history: history ($1, $2)" + PHONE="$1" + HISTFILE="./history.$IPFSNODEID.log.csv" + + echo "$(date +%Y%m%d), $(date +%H:%M:%S), $1, $2" >> "$HISTFILE" +} + + +################################################################################################################################# +function security () { + +if [[ "$G1SMS" == "YES" ]]; then # ONLY OF gammu is really sending SMS on that NODE + # No Reply to MySelf (or enjoy SMS LOOP of the death) Nobody neither + if [[ "$PHONE" == "$MASTERPHONE" || "$PHONE" == "" ]]; then log "__SUB:security: SMS REJECTED !! $PHONE $TEXT"; exit; fi + + # ADAPT TO YOUR PHONE COMPANY / ADVERT ANNOYANCE + if [[ "$PHONE" == "Orange Info" ]]; then log "__SUB:security: SMS REJECTED !! $PHONE ADVERT $TEXT"; exit; fi + if [[ ${#PHONE} -ne 12 && ${#PHONE} -ne 46 ]]; then log "!! SMS REJECTED !! $PHONE BAD $TEXT"; exit; fi +fi + +# ANTI SPAM SMS (1 mn entre chaque commande) +find /tmp -cmin +1 -type f -name "sms_received_*" -exec rm -f '{}' \; + +# Do not consider SPAM, Delivered notification +if [[ "$CMD" != "DELIVERED" && "$CMD" != "PENDING" ]]; then + if [[ -f "/tmp/sms_received_$PHONE" ]]; then + # Send response SMS + if [[ ! -f "/tmp/sms_SPAM_$PHONE" ]]; then + sms_ERROR "$PHONE" "Je ne le dirai pas 2 fois... Laissez moi au moins 1 minute entre chacune de vos commandes SMS! Autrement je n'y répondrai pas. Merci!" + echo $(date) > "/tmp/sms_SPAM_$PHONE" + fi + log "__SUB:security: ################################" + log "__SUB:security: $PHONE COMMAND REJECTED: $TEXT" + exit + fi + echo "$TEXT" > "/tmp/sms_received_$PHONE" + # Remove SPAM flag older than one day + find /tmp -ctime +1 -type f -name "sms_SPAM_*" -exec rm -f '{}' \; +else + # THIS IS AN AKNOWLEGEMENT + log "__SUB:security: ################################" + log "__SUB:security: $PHONE COMMAND REJECTED: $TEXT" + exit +fi +# Remove SPAM flag older than one day +find /tmp -ctime +1 -type f -name "sms_SPAM_*" -exec rm -f '{}' \; + +} + + +################################################################################################################################# +function ipfs_swarm_wallets_refresh (){ + +# Refresh CURRENT NODE wallets STATUS +I=$(ipfs_node_wallets_add) + +# REFRESH SWARM MEMORY +mkdir -p "./wallets_swarm" +chown -R $YOU "./wallets_swarm" +log "__SUB:ipfs_swarm_wallets_refresh: REFRESHING SWARM $PHONE shared memory..." +if [[ $PHONE ]]; then rm -Rf ./wallets_swarm/$PHONE; fi + +# GET IPNS published wallets from ALL SWARM NODES / TODO: IF NODES MISSING, check ./wallets_swarm/.QmNODES... +#log "__SUB:ipfs_swarm_wallets_refresh: IPFS: ipfs get --output=./wallets_swarm/ /ipns/$IPFSNODEID" +su $YOU -c "ipfs get --output=./wallets_swarm/ /ipns/$IPFSNODEID" +count=1 +# Search for All peers Nodes. TODO: To be changed when Swarm is too bug or not expendanding +#for id in ./wallets/.Qm*/; +for id in $(su $YOU -c "ipfs swarm peers" | awk -F '/' '{print $7}'); +do + count=$((count+1)) + id=$(echo $id | cut -d '.' -f 3 | cut -d '/' -f 1) + log "__SUB:ipfs_swarm_wallets_refresh: IPFS: ipfs get --output=./wallets_swarm/ /ipns/$id" + rm -Rf ./wallets_swarm/.$id + ./shell/timeout.sh -t 20 su $YOU -c "ipfs get --output=./wallets_swarm/ /ipns/$id" +done +log "__SUB:ipfs_swarm_wallets_refresh: ./wallets_swarm/ RENEW from $count peers .........OK!!!" + + +############################################################################" +# TREAT move_g1cents Tasks in ./wallets/.$IPFSNODEID +# IF NODE find in ./wallets_swarm/.$IPFSNODEID/TASK directory && Have it's G1 Wallet already (for natools crypto) +if [[ "$1" != "SIMPLE" && -d ./wallets_swarm/.$IPFSNODEID/TASK && -f "./wallets/.$IPFSNODEID/$IPFSNODEID.authfile.GPGPASS.gpg" ]]; then +############################################################################" +for task in $(ls ./wallets_swarm/.$IPFSNODEID/TASK/*.move_g1cents.*); # ./wallets/.$IPFSNODEID/TASK/$NANODATE.move_g1cents.$DESTPHONE.NODEPUB.crypt OR "done.$NANODATE" FILES +do + FTASK=$( echo $task | cut -d '/' -f 5 ) # "$NANODATE.move_g1cents.$DESTPHONE.NODEPUB.crypt" + TNANO=$( echo $FTASK | cut -d '.' -f 1) # $NANODATE + TTYPE=$( echo $FTASK | cut -d '.' -f 2) # move_g1cents + TDEST=$( echo $FTASK | cut -d '.' -f 3) # $DESTPHONE + log "__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID($FTASK) FOUND TASK $TNANO:$TTYPE:$TDEST " + # MAKE LOCAL .$IPFSNODEID directory + mkdir -p ./wallets/.$IPFSNODEID/TASK/ + # TODO: CHECK BETTER NOT DONE YET and $NANODATE > $TNANO (=> detect NODES writing in the future!!) + if [[ ! -f "./wallets/.$IPFSNODEID/TASK/done.$TNANO" ]]; then # NOT DONE YET: NEW TASK! + tdiff=$(bc -l <<< "$NANODATE - $TNANO") + if [[ $tdiff -gt 0 ]]; then + # GET BACK MY NODE G1 Wallet authfile from my LOCAL ./wallets + echo "${GPGPASS}" | gpg -q -d --output "./NODEG1Wallet.authfile" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "./wallets/.$IPFSNODEID/$IPFSNODEID.authfile.GPGPASS.gpg" + # DECRYPT and CAT move_g1cents VALUE + ./shell/natools.py decrypt -k "./NODEG1Wallet.authfile" -i "$task" -o "/tmp/move_g1cents.$TDEST" + ZENVAL=$(cat "/tmp/move_g1cents.$TDEST") + log "__SUB:ipfs_swarm_wallets_refresh: tdiff=$tdiff .$IPFSNODEID G1 = ./NODEG1Wallet.authfile :decrypt: Found $ZENVAL Zen to ADD" + rm -f "./NODEG1Wallet.authfile" + if [[ $ZENVAL -gt 0 ]]; then + curvalue=$(cat ./wallets/$TDEST/$TDEST.g1cents) + newvalue=$(bc -l <<< "$curvalue + $ZENVAL") + echo $newvalue > ./wallets/$TDEST/$TDEST.g1cents + echo "OK.$tdiff" > ./wallets/.$IPFSNODEID/TASK/done.$TNANO + log "__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID($FTASK) DONE! OPERATION: ($curvalue + $ZENVAL) = $newvalue Zen <=> ./wallets/$TDEST/$TDEST.g1cents:: OK" + # REFRESH ./wallets and PUBLISH + I=$(ipfs_node_wallets_add) + else + echo "KO.$tdiff" > ./wallets/.$IPFSNODEID/TASK/done.$TNANO + log "__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID($FTASK) ERROR! BAD: ($curvalue + $ZENVAL) = $newvalue Zen <=> ./wallets/$TDEST/$TDEST.g1cents :: KO" + I=$(ipfs_node_wallets_add) + sms_SEND "$ADMINPHONE" "ADMIN! TASK ERROR: .$IPFSNODEID($FTASK) ERROR! BAD: ($curvalue + $ZENVAL) = $newvalue Zen <=> ./wallets/$TDEST/$TDEST.g1cents :: KO" + fi + else + # TODO: Bad NODE in the Future task !!! Make better BAD Node detection = Swarm Banish? + echo "KO.$tdiff" > ./wallets/.$IPFSNODEID/TASK/done.$TNANO + log "__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID($FTASK) ERROR! DATE PROBLEM: $NANODATE < $TNANO :: KO" + I=$(ipfs_node_wallets_add) + sms_SEND "$ADMINPHONE" "ADMIN! .$IPFSNODEID($FTASK) ERROR! DATE PROBLEM: $NANODATE < $TNANO :: KO" + fi + fi +done + + log "__SUB:ipfs_swarm_wallets_refresh: REMOVE OLD TASK MARKED AS DONE" + for scan in ./wallets_swarm/.Qm*/TASK/done.*; do + lscan=$(echo $scan | sed s/_swarm//g ) + lid=$(echo $scan | cut -d '/' -f 3 | cut -d '.' -f 2 ) + lnano=$(echo $scan | cut -d '/' -f 5 | cut -d '.' -f 2 ) + if [[ "$lid" != "$IPFSNODEID" ]]; then + log "__SUB:ipfs_swarm_wallets_refresh: CLEANING done OLD TASK ${lscan} SENT to $lid ($lnano.bin)" + rm -f ./wallets/.$lid/TASK/$lnano.* + I=$(ipfs_node_wallets_add) + fi + done +else + log "__SUB:ipfs_swarm_wallets_refresh: .$IPFSNODEID :: NO TASK ! " +############################################################################" +fi +} + + +################################################################################################################################# +function ipfs_node_wallets_add (){ + ########################## + ########################## + IWALLETS=$(su $YOU -c "ipfs add -rHq './wallets' | tail -n 1") + + # CHAIN STATE FOR $IPFSNODEID + echo $IWALLETS > ./wallets/.$IPFSNODEID.wallets.chain + log "__SUB:ipfs_node_wallets_add: NEW './wallets' HASH ipfs ls $IWALLETS" + + # PUBLISH IPNS NODE WALLETS + NODEWALLETS=$(su $YOU -c "ipfs name publish --quieter /ipfs/$IWALLETS") + log "__SUB:ipfs_node_wallets_add: G1smsWallet = ipfs cat /ipns/$NODEWALLETS/$PHONE/$PHONE.g1cents Zen" + + echo $IWALLETS +} + + +################################################################################################################################# +function sms_uid2key (){ + RIBFILE="./wallets/$PHONE/$PHONE.uidrib" + NAMEFILE="./wallets/$PHONE/$PHONE.uidname" + UIDNAFILE="./wallets/$PHONE/$PHONE.uidna" + # New related wallet asked + ASKWALLET="$1" + #For micro payement + PHONE="$2" + PIN="$3" + if -f "$UIDNAFILE"; then UIDNA=$(cat "$UIDNAFILE"); else UIDNA=""; fi + log "__SUB:sms_uid2key: $UIDNA Try to associate $ASKWALLET with $PHONE... SEARCHING..." + + if [[ $UIDNA && "$ASKWALLET" == "$UIDNA" ]]; then + log "__SUB:sms_uid2key: "$ASKWALLET" == "$UIDNA" !!" + sms_SEND "$PHONE" "[G1sms+] $UIDNA est le nom de votre porte monnaie libre pour $PHONE. Il ne peut également être compte maître!" + fi + + # Test if member files exists + if [ -f "$NAMEFILE" ]; then + UIDNAME=$(cat "$NAMEFILE") + log "__SUB:sms_uid2key: ALREADY $UIDNAME related Wallet for $PHONE Wallet change to $ASKWALLET !!" + if [["$UIDNAME" != "$ASKWALLET" ]]; then + sms_SEND "$ADMINPHONE" "ADMIN! INFO: $PHONE Wallet associé à $UIDNAME change en $ASKWALLET !!" + sms_SEND "$PHONE" "[G1sms+] Votre portefeuille maitre va passer de $UIDNAME à $ASKWALLET!" + fi + fi + + # Search fo duplicate + DUP=$(grep -Rwl "$ASKWALLET" ./wallets/*/*.uidname | cut -f 3 -d '/') + if [[ "$DUP" != "" && "$DUP" != "$PHONE" ]]; then + sms_SEND "$ADMINPHONE" "ADMIN! INFO: $PHONE prend le même $ASKWALLET, que $DUP" + sms_SEND "$DUP" "Vous devez savoir que $ASKWALLET est associé à un autre téléphone que le votre également!" + fi + + ########################################################### + # FIND ASKWALLET into wallets, wallest_swarm OR duniter (silkaj) + DESTMEM="$VIRDEST" + # SEARCH IN WALLETS + LOCAL=$(grep -Rwl "$ASKWALLET" ./wallets/*/*.uidna | cut -f 3 -d '/') + if [[ "$LOCAL" != "" ]]; then + # LOCAL G1sms account + DESTRIB=$(cat ./wallets/$LOCAL/$LOCAL.pub) + DESTPHONE=$LOCAL + log "__SUB:sms_uid2key: FOUND LOCAL ($MASTERPHONE) G1sms+ wallet: $DESTRIB ($LOCAL)" + else + # SEARCH IN WALLETS SWARM + INSWARM=$(grep -Rwl "$ASKWALLET" ./wallets_swarm/*/*.uidna | cut -f 3 -d '/') + if [[ "$INSWARM" != "" ]]; then + REMOTENODE=$(cat ./wallets_swarm/$INSWARM/MASTERPHONE.sms) + DESTRIB=$(cat ./wallets_swarm/$INSWARM/$INSWARM.pub) + DESTPHONE=$INSWARM + log "__SUB:sms_uid2key: FOUND SWARM ($REMOTENODE) G1sms+ wallet: $DESTRIB ($INSWARM)" + else + # SEARCH WITH SILKAJ + log "__SUB:sms_uid2key: GETTING FROM SILKAJ MEMBER ID" + DESTRIB=$(./silkaj/silkaj id "$ASKWALLET" | grep -w "$ASKWALLET" | awk '{print $2}') + log "__SUB:sms_uid2key: OUT OFF SWARM MEMBER wallet: $DESTRIB" + # GET CESIUM+ geoPoint DATA (TODO: cron for GCHANGE SMS Alert) + curl -s ${CESIUM}/user/profile/${DESTRIB} | jq '._source.geoPoint' > "./wallets/$PHONE/$PHONE.uidgeo.json" + log "__SUB:sms_uid2key: GET CESIUM+ geoPoint and AVATAR : $(cat ./wallets/$PHONE/$PHONE.uidgeo.json)" + curl -s ${CESIUM}/user/profile/${DESTRIB} | jq '._source.avatar._content' | sed 's/\"//g' | base64 -d > "./wallets/$PHONE/$PHONE.avatar.png" + fi + fi + + if [ "$DESTRIB" != "" ]; then + echo "$DESTRIB" > "$RIBFILE" + echo "$ASKWALLET" > "$NAMEFILE" + log "__SUB:sms_uid2key: NEW EXTERNAL RELATED $DESTRIB / FOR MEMBER OR WALLET = $ASKWALLET - INIT 0.1 TX" + INIT=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="0.1" --output=$DESTRIB --comment="[G1sms+] Porte Monnaie $(cat $UIDNAFILE) -> $(cat $NAMEFILE)" -y) + log "__SUB:sms_uid2key: INIT = $INIT | Create Connection with related Wallet." + log_history "$PHONE" "MEMBER, $ASKWALLET" + sms_SEND "$ADMINPHONE" "ADMIN! LOG: $PHONE Nouveau compte lié $UIDNA -- $ASKWALLET ($INIT)" + else + sms_SEND "$ADMINPHONE" "ADMIN! LOG: $PHONE / $ASKWALLET ABSENT" + fi + + log "__SUB:sms_uid2key: $MEMBER($DESTRIB)" + echo "$DESTRIB" +} + + +################################################################################################################################# +function sms_INIT_ACCOUNT () { +log "__SUB:sms_INIT_ACCOUNT: ($1=phone, $2=NOSMS)" + PHONE="$1" + UNKNOWN=0 + # TODO Optimize GLOBAL/local variables use, use more function array output ?! + # Initiate PHONE settings files and values + IPFSNODEIDFILE="./wallets/$PHONE/MASTERPHONE.ipfsid" # Contains G1sms+ NODE IPFS id + SMSNODE="./wallets/$PHONE/MASTERPHONE.sms" # Contains G1sms+ SMS phone number + PINFILE="./wallets/$PHONE/$PHONE.pin" # Contains phone wallet diceware password + GPGPINFILE="./wallets/$PHONE/$PHONE.pin.gpg" # Contains g1smsnode cypher phone wallet diceware password + AUTHCRYPTFILE="./wallets/$PHONE/$PHONE.authfile.crypt" # Crypt with $NODE_G1PUBKEY + PUBKEYFILE="./wallets/$PHONE/$PHONE.pub" # Contains phone wallet public key (RIB) + UNITFILE="./wallets/$PHONE/$PHONE.unit" # Contains phone wallet prefered unit (LOVE,G1,DU) + + RIBFILE="./wallets/$PHONE/$PHONE.uidrib" # Contains phone wallet related UID Pubkey + NAMEFILE="./wallets/$PHONE/$PHONE.uidname" # Contains the member UID related to wallet + MAILFILE="./wallets/$PHONE/$PHONE.email" # Contains the member EMAIL (Send BILLET) + GPGMAILFILE="./wallets/$PHONE/$PHONE.email.gpg" # Contains the member EMAIL (Send BILLET) + UIDNAFILE="./wallets/$PHONE/$PHONE.uidna" # Contains the G1sms+ UID Name for recursive VIR + GEOFILE="./wallets/$PHONE/$PHONE.uidgeo.json" # Contains the member GeoPoint from member Cesium+ related to wallet + + RECFILE="./wallets/$PHONE/VIREMENTS" # File showing recurrent payements are left to be done with this G1sms Wallet + GPGRECFILE="./wallets/$PHONE/VIREMENTS.gpg" # Cypher file with GPGPASS (Node .Identity.PrivKey) + G1COUNTFILE="./wallets/$PHONE/$PHONE.g1cents" # Last sms_COUNT.sh call value + CHAINFILE="./wallets/$PHONE/$PHONE.chain" # Contains wallet last IPFS hash before ZEN value change + + DABUIDF="./wallets/$PHONE/uidna.G1TAGNODE" # Contains G1Dab Name + # GET CURRENT NODE UIDNA (default DABUID) + NODEUIDNA=$(cat "./wallets/.$IPFSNODEID/$IPFSNODEID.uidna") + [[ $NODEUIDNA == "" ]] && NODEUIDNA=$(cat "./wallets/.$IPFSNODEID/_uidna") +###################################################################### + # (NO PIN) = FIRST ACCOUNT: Create wallet + if [ ! -f "$PINFILE" ]; then + # NOSMS mode? + if [[ $2 == "NOSMS" ]]; then UNKNOWN="unknown"; return; fi + + ####################### + # Create Account Files + ####################### + mkdir -p "./wallets/$PHONE/" + PIN=$(./shell/diceware.sh | xargs) + PUBKEY=$(./silkaj/silkaj generate_auth_file --auth-scrypt -salt="$PHONE" -password="$PIN") + + # BACKUP authfile available to authfile or PIN owner (DOUBLON AVEC PIN) TEST + log "__SUB:sms_INIT_ACCOUNT: ./shell/natools.py encrypt -p $PUBKEY -i ""./authfile"" -o ""$AUTHCRYPTFILE""" + ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "./authfile" -o "$AUTHCRYPTFILE" + rm -f ./authfile + log "__SUB:sms_INIT_ACCOUNT: !! G1 Wallet CREATED: $PHONE $PIN : $PUBKEY" + + ####################### + # GIVE NAME TO WALLET + ####################### + # 4 derniers chiffres du numéro de téléphone + TAIL=${PHONE:8:4} + # No UIDNA yet. Create new + UIDNA=$(./shell/diceware.sh 1 | xargs) + # Check if already existing among all swarm wallets + while [[ $(grep -Rwl $UIDNA$TAIL ./wallets_swarm/*/*.uidna) ]]; do UIDNA=$(./shell/diceware.sh 1 | xargs); done + echo "$UIDNA$TAIL" > "$UIDNAFILE" + + ####################### + # ACTIVATE G1SMS WALLET + ####################### + # log "$NODE_G1AUTHFILE $PUBKEY THIRD_PARTY_MANAGER:$NODE_G1PUBKEY" + TX_IN=$(./silkaj/silkaj transaction --auth-file -file="$NODE_G1AUTHFILE" --amount=3.24 --output=$PUBKEY --comment="[G1sms+] $UIDNA$TAIL 3RD:$NODE_G1PUBKEY " -y) + log "__SUB:sms_INIT_ACCOUNT: G1 Wallet TX IN: $TX_IN" + sleep 2 + TX_OUT=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount=0.1 --output=$NODE_G1PUBKEY --comment="[G1sms+] $UIDNA$TAIL 3RD:$NODE_G1PUBKEY:ACK" -y) + log "__SUB:sms_INIT_ACCOUNT: G1 Wallet TX OUT: $TX_OUT" + + ################ + # GPG cypher PIN (ONLY CREATOR NODE CAN ACCESS IT !) + ################ + echo "$PIN" > "$PINFILE" + echo "${GPGPASS}" | gpg -q --output "$GPGPINFILE" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "$PINFILE" + PIN=$(cat "$PINFILE" | xargs) + [[ "$PIN" != "" ]] && echo "" > "$PINFILE" || log "SYSTEM ERROR :: PIN EMPTY !!! GPG???" + + echo "114" > "$G1COUNTFILE" + echo "$PUBKEY" > "$PUBKEYFILE" + echo "$COIN" > "$UNITFILE" + echo "$MASTERPHONE" > "$SMSNODE" + log_history "$PHONE" "NEW, $PUBKEY" + + # ADD WALLET TO IPFS + I=$(ipfs_node_wallets_add) + fi + + + ################################################# + # PUBLISH G1sms+ WALLET PROPERTIES MAIN PROCESS + ################################################# +###################################################################### + if [[ ! -f "$GPGPINFILE" ]] + then + # ------------8<------------------ + # WALLET MIGRATION -> CRYPT PIN (For Old G1sms clear PIN WALLETs...) + # ADD NEW PARAMS TO WALLET + ####################### + # 4 derniers chiffres du numéro de téléphone + echo "$MASTERPHONE" > "$SMSNODE" + TAIL=${PHONE:8:4} + # No UIDNA yet. Create new + UIDNA=$(./shell/diceware.sh 1 | xargs) + # Check if already existing among all swarm wallets + while [[ $(grep -Rwl $UIDNA$TAIL ./wallets_swarm/*/*.uidna) ]]; do UIDNA=$(./shell/diceware.sh 1 | xargs); done + echo "$UIDNA$TAIL" > "$UIDNAFILE" + + PIN=$(cat "$PINFILE" | xargs) + log "__SUB:sms_INIT_ACCOUNT: Old G1sms wallet ;) SECURITY HOLE... Chiffrage PGP du PIN !!!" + echo "${GPGPASS}" | gpg -q --output "$GPGPINFILE" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "$PINFILE"; + ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "$PINFILE" -o "$PINFILE.$NODE_UIDNA.crypt" + else + # ------------>8------------------ + log "__SUB:sms_INIT_ACCOUNT: Déchiffrage PGP PIN..." + # GPG decypher PIN + # TODO make decypher less stress on filesystem, use /tmp and ramdisk + echo "${GPGPASS}" | gpg -d -q --output "$PINFILE" --yes --pinentry-mode loopback --passphrase-fd 0 "$GPGPINFILE" + PIN=$(cat "$PINFILE" | xargs) + [[ "$PIN" == "" && -f "$PINFILE.$NODE_UIDNA.crypt" ]] && ./shell/natools.py decrypt -k "$NODE_G1AUTHFILE" -i "$PINFILE.$NODE_UIDNA.crypt" -o "$PINFILE" && PIN=$(cat "$PINFILE"); + [[ "$PIN" != "" ]] && echo "" > "$PINFILE" || log "SYSTEM ERROR :: PIN EMPTY !!! GPG???" + fi + + # CYPHER EMAIL FILE + if [[ ! -f "$GPGMAILFILE" ]]; then + # ------------8<------------------ + log "__SUB:sms_INIT_ACCOUNT: NO EMAIL .gpg file, CREATING it" + if [ -f "$MAILFILE" ]; then + MAIL=$(cat "$MAILFILE"); + echo "${GPGPASS}" | gpg -q --output "$GPGMAILFILE" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "$MAILFILE"; + else + MAIL=""; + fi + # ------------>8------------------ + else + log "__SUB:sms_INIT_ACCOUNT: DECODING EMAIL .gpg... " + echo "${GPGPASS}" | gpg -d -q --output "$MAILFILE" --yes --pinentry-mode loopback --passphrase-fd 0 "$GPGMAILFILE" + MAIL=$(cat "$MAILFILE"); + [[ $MAIL == "" && -f "$MAILFILE.node.crypt" ]] && ./shell/natools.py decrypt -k "$NODE_G1AUTHFILE" -i "$MAILFILE.node.crypt" -o "$MAILFILE" && MAIL=$(cat "$MAILFILE"); + # EMPTY CLEAR EMAIL FILE + [[ $MAIL != "" ]] && echo "" > "$MAILFILE" || log "SYSTEM ERROR :: MAIL EMPTY !!! GPG???" + fi + + # ------------8<------------------ + # REMOVE OLD HISTORY FILES + rm -f ./wallets/$PHONE/$PHONE.hist + # ------------>8------------------ + + # PUBLISH GLOBAL VARS FROM ACCOUNT FILES + echo $IPFSNODEID > $IPFSNODEIDFILE + PUBKEY=$(cat "$PUBKEYFILE" | xargs) + UNIT=$(cat "$UNITFILE" | xargs) + if [ -f "$G1COUNTFILE" ]; then AMOUNTG1=$(bc <<< "scale=2; $(cat $G1COUNTFILE) / 100"); fi + if [ -f "$NAMEFILE" ]; then MEMBER=$(cat "$NAMEFILE"); else MEMBER=""; fi + if [ -f "$RIBFILE" ]; then MEMRIB=$(cat "$RIBFILE"); else MEMRIB=""; fi + if [ -f "$UIDNAFILE" ]; then UIDNA=$(cat "$UIDNAFILE"); else UIDNA=""; fi + if [ -f "$DABUIDF" ]; then DABID=$(cat "$DABUIDF"); else DABID="$NODEUIDNA"; fi + + + AMOUNTDU=$(bc <<< "scale=2; $AMOUNTG1 / $DUFACTOR") + AMOUNTLOVE=$(bc <<< "$AMOUNTG1 * 100 / $DUFACTOR") + + case "$UNIT" in + G1) + AMOUNT=$AMOUNTG1 + ;; + DU) + AMOUNT=$AMOUNTDU + ;; + *) + AMOUNT=$AMOUNTLOVE + ;; + esac + log "__SUB:sms_INIT_ACCOUNT: $AMOUNTG1 = $AMOUNT $UNIT" + + # LOG # TODO REMOVE PIN LOG!! + log "#####################" + log "PHONE: $PHONE" + log "PIN: $PIN" + log "PUBKEY: $PUBKEY" + log "G1: $AMOUNTG1" + log "AMOUNT: $AMOUNT $UNIT" + log "UIDNA: $UIDNA" + log "MEMBER: $MEMBER" + log "MEMRIB: $MEMRIB" + log "MAIL: $MAIL" + log "DABID: $DABID" + log "#####################" + + + log "__SUB:sms_INIT_ACCOUNT: END" +} + + +################################################################################################################################# +function check_account (){ +log "__SUB:check_account: SILKAJ...... max 30 sec....." +AMOUNTG1=$(./shell/timeout.sh -t 30 ./silkaj/silkaj amount "$PUBKEY") +AMOUNTDU=$(bc <<< "scale=2; $AMOUNTG1 / $DUFACTOR") +AMOUNTLOVE=$(bc <<< "$AMOUNTG1 * 100 / $DUFACTOR") + +case "$UNIT" in + G1) + AMOUNT=$AMOUNTG1 + ;; + DU) + AMOUNT=$AMOUNTDU + ;; + *) + AMOUNT=$AMOUNTLOVE + ;; +esac +G1cents=$(echo "$AMOUNTG1*100" | bc -l | awk '{print int($0)}') + +log "__SUB:check_account: $PHONE: $AMOUNTG1 = $AMOUNT $UNIT ($G1cents) - $PUBKEY" + +if [[ "$G1cents" != "" ]]; then + NN=$(cat "./wallets/$PHONE/$PHONE.n") + ((NN++)) + echo "$NN" > "./wallets/$PHONE/$PHONE.n" + echo $G1cents > "./wallets/$PHONE/$PHONE.g1cents" + # REFRESH NODE IPFS wallets & PUBLISH + I=$(ipfs_node_wallets_add) + # Register modification + echo "$I" > "./wallets/$PHONE/$PHONE.chain" +else + # BAN actual Duniter Node in case of silkaj timeout. + export NEWDUNITER=$(./shell/checknodes.sh 'BAN') + log "__SUB:check_account: !!! SILKAJ IS TOO SLOW !!! => NEW DUNITER SERVER: $NEWDUNITER" +fi + +declare -a aaa +aaa=( "$AMOUNTG1" "$AMOUNT" "$UNIT" ) +log "__SUB:check_account: $(declare -p aaa)" +echo ${aaa[@]} +} + + +################################################################################################################################# +function make_accounting (){ +# CONVERT AMOUNT UNIT to VIR G1 +case "$UNIT" in +G1) + VIR=$AMOUNT; + ;; +DU) + VIR=$(bc -l <<< "scale=2; $AMOUNT * $DUFACTOR") + ;; +LOVE) + VIR=$(bc -l <<< "scale=2; $AMOUNT * $DUFACTOR / 100") + ;; +*) + VIR=$(bc -l <<< "scale=2; $AMOUNT * $DUFACTOR / 100") + ;; +esac + +########################################################### +# GET G1sms wallet AMOUNTG1 and CHECK for right balance +log "__SUB:make_accounting: LOCAL $VIR amount for $PHONE : $PUBKEY" +# Try to ask silkaj. If timeout, use SWARM last known $PHONE.g1cents value +AMOUNTG1=$(./shell/timeout.sh -t 30 ./silkaj/silkaj amount "$PUBKEY") +if [[ "$AMOUNTG1" == "" ]]; then AMOUNTG1=0; fi +# TAX AND MINIMUM WALLET ACCOUNT CALCULATION +PERCENT=0$(bc -l <<< "scale=2; $VIR / $SWARMCOMM") +MIN=$(bc -l <<< "$AMOUNTG1 - $PERCENT - $LIMIT") +CHARGE=$(bc -l <<< "scale=2; $VIR + $PERCENT + $LIMIT") +TESTMIN=$( echo "${VIR} < ${MIN}" | bc -l ) +log "__SUB:make_accounting: TEST $AMOUNT $UNIT :: $VIR + $PERCENT + $LIMIT = $CHARGE < $AMOUNTG1 ? $TESTMIN" + +declare -a myarray +myarray=( "$TESTMIN" "$VIR" "$PERCENT" "$CHARGE") +log "__SUB:make_accounting: $(declare -p myarray)" +echo ${myarray[@]} +} + +################################################################################################################################# +function move_g1cents (){ + # MODIFY $PHONE.g1cents value according to current silkaj + # TODO MAKE ALL SILKAJ TX CALL HERE. OR REMOVE??? + # USE TASK COMMUNICATION BETWEEN NODES. + phonesrc=$1 + pubkeydest=$2 + zenvalue=$3 + log "__SUB:move_g1cents: $phonesrc ($zenvalue) -> $pubkeydest :: $G1COUNTFILE ::" + + ### CHANGE INPUT VALUE #### + curvalue=$(cat ./wallets/$phonesrc/$phonesrc.g1cents | cut -d '.' -f 1) + newvalue=$(bc -l <<< "$curvalue - $zenvalue") + echo $newvalue > ./wallets/$phonesrc/$phonesrc.g1cents + log "__SUB:move_g1cents: DEBIT: OK APPLY $curvalue - $zenvalue = $newvalue TO ./wallets/$phonesrc/$phonesrc.g1cents" + + ### CHANGE OUTPUT VALUE #### + # TEST IF $dest is a wallets_ G1sms PUBKEY? + winnerphone=$(grep -Rwl "$pubkeydest" ./wallets_swarm/*/*.pub | cut -d '.' -f 2 | cut -d '/' -f 3) + if [[ $winnerphone ]]; then + # GET INFORMATON ON MANAGER NODE + NODEID=$(cat ./wallets_swarm/$winnerphone/MASTERPHONE.ipfsid) + + if [[ "$NODEID" == "$IPFSNODEID" ]]; then + # ACTUAL NODE IS WALLET MANAGING NODE ;) + curvalue=$(cat ./wallets/$winnerphone/$winnerphone.g1cents | cut -d '.' -f 1) + newvalue=$(bc -l <<< "$curvalue + $zenvalue") + echo $newvalue > ./wallets/$winnerphone/$winnerphone.g1cents + log "__SUB:move_g1cents: CREDIT: OK APPLY $curvalue + $zenvalue = $newvalue TO ./wallets/$winnerphone/$winnerphone.g1cents" + else + # MUST ASK MANAGER NODE TO CORRECT g1cents FOR $winnerphone WALLET + # WRITE TASK TO .$NODEID CHANNEL + mkdir -p ./wallets/.$NODEID/TASK/ + # USE natools with NODEPUB crypt + echo "$zenvalue" > "/tmp/move_g1cents.$winnerphone" + # GET NODE G1sms Wallet PUBKEY + NODEPUB=$(cat ./wallets_swarm/.$NODEID/$NODEID.pub) + ./shell/natools.py encrypt -p $NODEPUB -i "/tmp/move_g1cents.$winnerphone" -o "./wallets/.$NODEID/TASK/$NANODATE.move_g1cents.$winnerphone.NODEPUB.crypt" + log "__SUB:move_g1cents: CREDIT: WRITE TASK TO ./wallets/.$NODEID/$NANODATE.move_g1cents.$winnerphone.NODEPUB.crypt " + rm -f /tmp/move_g1cents.$winnerphone + fi + else + log "__SUB:move_g1cents: ERROR: NO $pubkeydest WALLET FOUND" + fi + # UPDATE MY new ./wallet STATUS to SWARM + I=$(ipfs_node_wallets_add) +} + + +################################################################################################################################# +# Contact database management +function add_contact(){ + userDB="gammu" + pwdDB=$(cat /etc/gammu-smsdrc | grep "password =" | awk '{ print $3 }' || exit 1) + local sql="mysql -N -u$userDB -p$pwdDB gammu -e" + + local PHONE=$1 + local MEMBERUID=$2 + + [[ -z $MEMBERUID ]] && MEMBERUID=$PHONE + + [[ -z $($sql "SELECT * FROM pbk_groups WHERE ID='1'") ]] && $sql "INSERT INTO pbk_groups (ID, Name, id_user, is_public) VALUES ('1', '$(grep "ADRESSE" $MY_PATH/../.profile | awk -F= '{ print $2 }' | tr -d '"')', '1', 'false')" + + if [[ -z $($sql "SELECT * FROM pbk WHERE Number=$PHONE") ]]; then + $sql "INSERT INTO pbk (GroupID, Name, Number, id_user, is_public) VALUES ('1', '$MEMBERUID', '$PHONE', '1', 'false')" || exit 1 + local id_user=$($sql "SELECT ID FROM pbk WHERE Number=$PHONE" || exit 1) + $sql "INSERT INTO user_group (id_group, id_pbk, id_pbk_groups, id_user) VALUES ('$id_user', '$id_user', '1', '1')" || exit 1 + else + log "${red}Contact already exist$c_" + fi + +} + +function rm_contact(){ + userDB="gammu" + pwdDB=$(cat /etc/gammu-smsdrc | grep "password =" | awk '{ print $3 }' || exit 1) + local sql="mysql -N -u$userDB -p$pwdDB gammu -e" + + local PHONE=$1 + local MEMBERUID=$2 + + [[ -z $MEMBERUID ]] && MEMBERUID=$PHONE + + if [[ ! -z $($sql "SELECT * FROM pbk WHERE Number=$PHONE") ]]; then + local id_user=$($sql "SELECT ID FROM pbk WHERE Number=$PHONE" || exit 1) + $sql "DELETE FROM pbk WHERE Number=$PHONE" || exit 1 + $sql "DELETE FROM user_group WHERE id_group='$id_user'" || exit 1 + else + log "${red}Contact doesn't exist$c_" + fi + +} diff --git a/g1sms/g1.png b/g1sms/g1.png new file mode 100644 index 0000000000000000000000000000000000000000..e96366eafb3c09a847895b49388afbe72124b7a2 GIT binary patch literal 33870 zcmV)cK&ZcoP)I*?T@dq_d0NG)@j#RIABZ=!3eO80fUJ`5}KeiqcGBho}TG&`h==_-{=1EzE!7A zPmd&|36ibz`J7L`r}}iCI#o~jJ-;Ws!qbl@^k{$nqS&}*9YWSE6OnF2qL36Mi3oFWC8`yd5~qG1-gVtOC8H1dIXUrR8xdIMESA`Z5%zI*J$Ql zdBL6b>AUdwAM*4i_|6{Pf7m|d#Oy*jA7P8YRzpPsKC_@t`~R>NaHE` z4O`$z9p0uEEm^@NYrzKL?**Qoi?E|Mi#ue&}1X>NGr|1S}4@ixf2 zxaE7nwosda=0J|-UC_*bZn%{q^4QNm=#z8IM@D~59e*RjvF6Kmw^v@frxoBS_UL^2 zGMcaOG2rq)J|n@pe+Tjg;N?L4!~|bKGf<1#3^TL|X>34-F2D?LMH(BC+7wcoMrtz< zk09~z>49(gGGr&vY~CwHdK|aBAMHGVTi%arKZF?-jzjYn+M6Ta|6a0(K86?p zi68x1d1YKcc;Cp&@A#SOJ$PCH&V}{=%&vOm^m!Kk5|K><)W##O{cDMuNMkMWrt3+z zzI6qDw?G&45UP7XcY{0T;f6$&GKD8hA)Uds1GOGLndhqVY!NdJ)XQ71**xjpzlS}1 zGn%*j`;n8WqLbJA4f?~1`TFoR-|juF0B7N`^y!NjeZ{>V?tFU3^Hj|{Kwn2m0X~XM zXbvvLOk7Sh^WDT#-;G)GoE297LDb#n15VXZ=S@${%GqQa3C9j3y^3h$i*Sp z22D?34}XgM@Mo}dUj~U06FoW`1|JsDcMrc}&sSI8qo)<%G(P4&`f{dT`huD$tb1$e@@N@3}yXEOHM+v$F4 zXFbQgLe;z&kI{6FBGvau*W9UFGQyjH&y2isPjB&~&t&wv+xw)` z(+co7q0is#*e)u+p+;WwShPlMn`q=B;`3fdyy2CY;qxoMK7_bCP`4L!|0(IibN8r& zS*y4Q)t)DP;^0ZE z0E?g6$=EA*)B4oT>r~|r1=c-EsXXE`NJgn$_H)D=UyUSV6~#D!<~M`R1`1RA$)U4L z**wA;kV`-h0n6v^97sSeLXztU)goy32ae3hKS5U+uTRegoY8K8y3H(ek-oHz0bZV!t8% z(ui|?ZYjtN61@b`|FiEHCbVF}8PJe#nHGB59KDLXIYwvhk z0R~|EH@=IxyO)@L<6SKM-L6-v^4BP1kC>FnmPj_gj@q_gzzl8Z^V;qfNI&D*9L@Wj z_LBJO(qWLXPLU<-1(~w+`m}u7JLUaSjvL3DMy|c% z=3{?-8B-UJAXk3#X$2^FWBt+<$U?EoFGkqy>b3Kh6ZztYRI0y&sFq(f1 z&F@5{{uJz8$su{Qs{Iz?4vPk6<;iuP>Y-WkQY3yUNE6i2`T9?h&wiQ5*ueSj=6L*H zlNa8WJsENa=TrgOAKk^!Yww`-4;K!(PV+{P*PRNIq83a-ZR;DUUGh^%Z9EvxhavwW z*stS-CVEPVeg7MdAhqk!^v23Je{!C)k|Sm##MdCv4p1dM@MolZe+SjnC(%wBW+)0D zHjU-CjJ))|b|C}*<`kgy(QS;pb|3oxU1=7#bZ!%oU8lxKIZ~gZ`P}ysP3$T!sb-&m z{Oh1yFZ>dYmo+(0jkRiq#4l7Nf$SeeiJt=J?@&#UcpFlCi}%Az_t5^z|AuyFAGQ2i zRqq%(Jozkn+dsS3C$};3{rmpyD8S;!wlQ|?K3X5$w#l0K^Pm^`{EYOwt3*(Bh{VJj zUrzJczuC7$_8>0(n?M&v=h$+uwARJLtZ@CS`nB>srt!nL-lr5jEQ5dhWcOeeWF4md zBVeX+y*WDn@}t((oH)Vy>9oveg#;#X*=WB?PcL( z+jc_yH^2@=Po^hbiW%BKeaAaUHoYqRbq`HHjb>jgg-i;k>M!?MTo+<&5TbrdA_fgH zjEGdkzW7^3R8bt@e2KH!peFeqT<@^H*LE@B>sZJ2&#QSDb}__JpFtcSN^}4 z#@asC@BIa8XPR?r>C=xvf#VPq0{F_ytvXdwz zx*Tb|5nM*^?*Bn=-ya|*9=yLNt=)WtdCACiciggg(@w_Dq7s}n1(?5S2NT!rVez9o zUZEnNpsc=ywmQB6NDs>cy^K97N;@E=d9a9%S^d@<5^Gsqa}{`b?}{q9g^Z5{zex>S&tja|3< z3kx6J$@pt`|LakJ#Sd>|>~;H?ziG$!3i3&ip_7C|Etneh?LR~P;(s5m&l1}GFq(gx zb6>9$hjR$yNlfVSDqa^)k&4w{jRvg51PYijmD-EY?x)08p}O#U8}b+#PrZi)Gl?|b zh(s5XJ@_#?x4jcw8jQusypop&T|l{h{I$D3ceXsi8CQT4AKAv__4`=*(506-liZF- zZBY38=y~Ys|3y4~WneuYKs$fZXL!z;bu+=@M~IkU*-bbufqkm1i>&CtIm;^6Tv040 zzCw|vxa`Zp`nzyV!dfj7`i-AjXh=b7NaKf)co+HM&$0ZqpFvayME<0;x-^Q-<)g2; zWAFUOb~178?x(H-%zx-oCVt>9PJCqB#Ujzy(NI}cl;etkI;1|$@KwJbC{ED)HeBZ~ zp9HtFu=t@FhU!x)$K>Q^2>jFqORtW84~cKOSIvn>e?VRDTWGdleCyt)M{LnC4rN&!j+mUF*Wi`2dkX}k)1;&yF+ z^=HI&jv~ga-eu+~@LL6W`NZ|RXA1~@rhx5ff9Oq@A=edylxkl9-R2>0zd%G)iKd^! z(DQx|)0hUexX%00d{24lw4VkZ2piAbx^UicY4x?pGiX!_KN9(g3JSdwZS5UjCSB}+ zs%T(<)F~M81W^$Sh#)5NN`qy1^HpfJgysukk|Z?fThuvn9CTB3AqVHjt#|^-g2}Z$ z(WE&uPJMDrB$5z1=vlm0-^n^c)6ZeFO*Hv>X*}~Cw7>R$mN@~m@_sF8X6a%8F}IRg7Bx<_6H&V)+vIdv$d8Lc)z+f zxLk3W)AU4#?tF`EF%>Zei3}3QJ}?#`j*U*77fWYpLOb*GB50r4ln@m}4IRDU4bq$Y zrgo2g(`$;eWqtr_QMKS4$;bwcOw97!ouV!SXK`s8XEQ_$^@(9^OpQ^W8YikHB60NO z1V)-6^{X+>*ONZ@LE7K^Zyo|yWrLGC`@T3)>%K%@y+5lK**$4Jz})-3i{9S*qlLZk z`w+RZ5)%2#;4)~gWAsHgBK0-Cs<8b*$i4w2i1aU=a5mR?tFKWxCPYkxW@vZ5MY`A{ zTj-E?a={oRPKX*cBnk>*e7w*cGdi@kE~b$%JX9B{U821c2c$3kii#r{-YO<;k}dBS zQ)>ikXfV#9>Pm$f+VmQRH@!^q`~MVe@6&Ep6Ll7e4JK=&&XO)IOK-jf`wvkYZEAgD zgxdHB^~q689E*oZdX}%}Dr-s5-d9i}YMXBWYP7%cUrK@RJAi(04CaONY2%M{o*$ii z-xUhqdh&XJg^%oD{Q5nd_|UHZThL$D(()Hv2uNdwkr(|LW@IZkhh6?du=`hJOi$)c z&ip#=V|^2oE%vna&{< zUjhA<$sgGB&V|3-!T9Uv;1Np6- z`_kWl_0`~dRu}F&Mt8O)CP^?!0#S@aF~&sYTEuu|5QB+?;qi!Mtl=}nk?~4l47f1C zEq)2<@;vE+k8v7nzmII;Hq93I3MR}Mk_eNGQX6|F_3`cG5B)Xn_}9Z!6F-a>&B+yQ zOI@6GsLRp3-N)0GGB8%BsP)13@cK16vUwd*qb3EpaL(aS<7&*%4J?2C7c{&7li~;Z zaxyyOUYk?;6zRxb|P6**AS7 z#XvUT?5>drRYUjalD21C^o}n>6pKk}ND>p77@`Cd#Yh~L(5QGOvC+m@ET&NlLhl1) z9{`8^KrwyJY(kO?aBdW-Z6s?S0NX8!pD+SOGqiIMd;F`YO~E-o5RF2!YCpO{m{srK_}3Ti$3B#PFj$7xPa(wH8XqB!kbU4PVJnlHpOU(52>ewy^a zCy{t)^_+sgj)zUeRTHndT1f2dvXI&Y+w-iKzl z({Fq^HxDsFw%F6TJqK~A3KC&z-s+1h0DQf+^f0r+#xes))87|8ao8j^l%`;y-=Q7mg2$rlC zYZga>>!Eq(1zH6cpb)O_5pasLp`fE#*NIEdBN-YJRXvAyAtxGsBSgDc{_@*2J93MN ziB4HNgz5*4L~k}GOGjU~_X&Uc6PCb#`kfn?di@^I=nbmeAi?5^20X8h+WD`ew)I*c z)30)$ezaCJKO$*7<%?EOVpfNAwPp_Rk=aQe{l45d-~@^^j`+z}sCVgi?M0^IQ= z?DE5NEZ%p7yq!zbsC%K06HMgszKQ&6i6Tr?3mzaShVg-Lw%{~c&Z&*oMBc7W~Y{4zx zh3o#&3Xb>mXCH}XF!kqn%$VPU%kM*M3rvj5oF2RNUb3Z*NF+$DhKXvJI6;yGiTbd| zL!bioBp&v}v4=R~v&5~tIy$nZhN;D3>IunY!w1PG6w8??2!9dKYe(BVb!b^6!duH+DJ#WbFe zMC(vHN49VWN5B4ARl6)m>UngNAW1FY{Ddfuk*MY^eH0YJ#QoRC&(kmH&vZd)AL#1X z`XNjdNi>=ekJi1%2uU$ds}`Byx=QmoLVieH`wqbgsus1@TXgHafQBb|hReLgcUcCx z_XI9a!R6$gl-WBM$va(|o9oQHU<`FVpHK^!zoG0UCLaF}z`o4sTp95*31a zmb%Q;VrrKm@yl8K?3-27mJGI#4n`}2yK2o3?)}Q+EtPm;F~DE%x*yRkE1RZGGQ#L9 zK14LU3AgYCwdsfDtk?64VB0-CcE^5fClyn#5hYFPQ`;HZ^b(@xI@I-0+rf4YkS*=S zriZ}Ph-%G}1?vBd%iSN1#1O@}RD96e6I%Pb)S5Mh*3KaHA)@+XpiM&#L=4in7@{$> z^%Z{uZC;i;cm)Vhs8E7D!&M-VOFdiEdU#P=N0-I*QtBHLCZ0KhF&2p(al?Y9{_j;w zFQAo}pkRl59-)W{e7*n+F2EvFuj%9^TQK#ya8{WjB^tg4O~+aI_#2S=Sl9$)l_q`1 z15%#j$qq=Bxrp0$`6A|_l_^=?5+0- z&WXf=i4;su-Z@C;*cY+w`!KaJqQ(@_@D^&5S5lk2g19yY^n4MU5r_p-!k`EfMPUon z$QRAI2x73|^2sAe}SabO}h_~`$9C5v<)V86d!+#GcX9xJ6dkHkKNQlZzrHwN% zxGuHQnLQ!3;f6-Fnw)YTz-eC#n%zY_`TdyTQF;fzf|%%3CVc!IKd?4=_lIWx@vK3h zxxd`83*lctM*2m30=7$S%PSfE?%xB~BcFc{nm^qCn6nZ|LF@h_x^UpINaATfF@lLC zlp7NmpBN$`YD`fZy@Yu9LZaadh-x#4g3XWNvcr%cL+u<&3Z{lJwXg+gjLQu+jXnP# z#i)(w9nDBaE&|)ebxu$ltq~1JM2#`b=yu%Vt*C2O8AcLLVETkMmZ)H{a3T z@nza`EnF{^s0l+C)EU}R!}ffifNF+lPJJAZ%#V!>NYERm!V`qR*bRCDieR~bNLIa9 zu%Om4vT2h8Utc>SFS)1ceB(0TJj3 zQSB0z?)er`y@5$0nj0=sQ?H43?(`5Plr{LO&pd2^9gIohH-*Am-Hv1t#N zXAEy`Ftj;ABZs)m|E9IFN>HU1ja6}Kp^Y9r^&$;@qq>B z94`0oADUUC!yDJh*@Qw8uS3jtv+xf;3t9IO;s^Io zN#skHiTfGeC`llWk>Dvrma)Biu)RA$awHn}Ie>T)Q@fC;ezD&`kKB6|V^Aw4J?e|y zEb+)XYGaewG=r!?ea#lh78kX1bV>3~j&^fw>aZEOEXLUey}3p0%ywCNutocDOR`o^ zoO4K|#A7j&S58oyP6AR<&me^|3Ng@_C<1Qht7=vIn^Trg32;Zt_@sbIAgJg-BT|35 z1@sn|Mbv3+cvuD|bDXjJD`1x~Bj#!FJrI%0iR2SAuiy93vA?{OcYkQ^ z%s`;ozua-BAeXK@SJRkc{F)D8n$u**eh=)uq1yUPmsf$yay@a^gLIEANYsoy%n6p? z7hjqZ0-0ElxaOZxQo50R*tm`RG<1n$sG?b_b z$)pf9@Y&*`3_^39`k**U9E~v$@lXiOf>&^e(}7mZVj4>UjrvfhfJT7zR^P`SKYdq=Q&2V?5s8f5MJ$y>+BmXSFBYZ#_YF~^oNbC#JOjHQJ@j`Dx_E)?T zRB28TUxOniK?zAPl7RF5PcTTd1`}^VqUkUwD@L{mM3VpjAOJ~3K~$XynPOkLX`+#^ zJA96_OBgeR+Adl50n{y{nj_?WEN@e9#a)VXJ#amo7RfDN`k>CoC2_;i7}5Um@I=#~ z2)4`~X{iZ;>n{Xmz#F(S2rj5lwZ5d<Pkl;Fv@|qRPZc8sl-NW7C}(6{ zTTR+ zh1mQ39GqwjWE_}4OcN7&hY8K|k!gf|02$NV%|m`-8MVvUd;ymo$7XZb?qO_p zh@@dihGU}Gc?Bv2Sry~_l~Vlor9Xhq|Nr7ExRQwtG^!r~BL*}~q)=CUbyJpA7z`S^ z_S(me3*eOi&g^~1py_^Uo3EsMPZP1d{_a477JUMVenfwcUy z1QRSiCPpY;d;G737Z88UZvYV?Bxnhf63_aG01ZrhJ`!yV+X>0Zc}opN`gR$zS;&tE zIy8(usjc(BkEhYvRAtn=R}5T=Y6rEqqxKfm9t~FAq6BC}V1P6<&=mb8TCw;=olh~g zg?`aoL7i&uHNv-VAUIr{z`FGjgE3^OfNMk0cCr@XQYp{offM8%VHxNN}cM%%>6Uk6IV0q%d5l zHr3F#tRY62LgJl>nJgkmupP?DZc_IOqw zSX&3pi;?Csp;ZRzKXC-RXwLUr~<^MV(G634WkNSnL*Y@5|qP>OCPFj&k z@5(M!>%MR1hxdJW_OC8u=8bngu^8a!jXNI}*s!vMRhlzQe*cG&q)v9^7b~plnF0S| zgx-9MxjhFw#xJPNqz`L6`-7)I%VQxX2$09u_Jk7W!n#K>LR`KkN`N@T0x^(;4lm6Jc{}WE z-}4G(dl0XI`bKD807KiLzByR$1wTwI{VFcsL%$HndQ2a5y$pIoVyuh_w9+)AE1069 zY9P%EDD>i=L~Io6T{E_CGz>dMVG&TN;LSM)4X=MW%l-aaW=!mf!a(e zxW0frQD6A|@xXmY!Sb6B{6-$;_}BfPV!ZHE1jZ7DO}D2o$%~OF>`B)8hSJ(2#KX|M z46~SeOfxflVRr zg3WxOZH8do55ee_0VbqqzK^{3e#jpPGmVOLj1Hi%lVDG%8$yf5lgj%8Me3{#O5pEB z35NnaGEuA(7oIN?3INZ943ukzXy5Sw>Csy%U1NjqiA3Kv^_D$<{77El5k0_(8!xG4 zTDuoGZ)Kp5O__e{9AwRTl0$q@B4FzP88olUz|^N~jZsgcd;&OaX@? zQznE;#z$hrcm{}q0V3%qwTvH-C1#4Kel-$r^H8OIt8)CG1=E1xOCTAC{6UBlkXnCt zl*UzHPeA^#KOS#_?%q(dAB5WZ3^4H&B%8d#NMMo>?-4rRhTi@Dv+Z)AMN`N-kS{`g z6HL7pCSP1`5o>!N$Mrsmx`j~KLzy|%YQOM`*kFJus(Of!HP(mJ=}?>Az25t^^h+?dOxHOLT5kp9sr||3`2Gp4*nJ#{acv17N%Z9 zRDTU7c{Z;1VO;hv!G%hHe{l6y-D7_bZ3d=wo8UP_5r^+`L&N4D9uAqvuT?xd1WIRq zUXtMWz4*`Gv9YdgFf4*(Vsrewtt4^Zo z@(xq4|9hg*4P-~(gQf@1DDz{}Opo4nHzpEq{bN&N`jQ2T0|W|6U=q`ZJ;5N0kuv2k zk+;^~+7DWN-vECeQS%3VaJ%$5<@gtbyyIK-MkXL`mNh^FqthkwH@^NXFk{gDR;VWe z%m~yjg!b2hS1SVJN{gdQ%T`B!0TQTfhQ_53jR%j>_H5hYSE2RwFj>NRc;u{yRTsV! zhIV?qoP8DB`Ga8n2Q7Yy_p3}%kv%So=FqZN;3PN{JVNOSGKZ?_#Dy0U#qpV)zaob2 zz6Z5;@QzUKx+<~!cgDCIrr)x!z1nY2*%a^8OsmSv`!pKm1+1-qKBl=AmmNWS_j!h) z5@4OqH3$p$97G~QS+nUwnj{E#>|ci#VBh#{I9d2Z#!w1UT#8zmuw9Y(F?}Z4K|K7E z;4<99zXlKgjbK|aGz62Aki_1CV?%{m$lR99PvV8$E_mEe!1nnpxVDEonufnAl)zS| zKZpOVJ+Q~2^);CN6PW!oXnzA-#|PC@*TUvsg6V7h|1@=92-mw0zWoDm};@p}wj~N1$w3*Y_h)7%}Q7RBD+3-9h8OF}OUsVT9zn;dm2y|vo zXxi>bKaef5y8aEu3?45_AF7G1LikPSMm7?<#S-sYMKLCn-!`wsBv(S~A5;#12+1>H zcmjsTA*p*|?c*u>{fLV7TmUfX|`f**1N#ovj5#*iO{ zg$Mjiif15M3&}=k?t-xwL-!tN-3H6w_LS;@UxE|=2wUC`L)(aleihq&FPh&DYD)SO zQ&@gb6ROKpd>xU5Yvw>r1rCYg@^Bv%P=go;fsnAhuB3|#nv9IenUIa5t|=OAlB}5| zJ-q1ec|}&kx(U1nc<*YnMNd+Ihu-;I;A<%67iE>w43i9#Y`6+s8`r+wo8L1uCqQ#$ z`N*75z@4ZMV@kYVB)&|6_sz+e-}L)R`yE0W?D8%Q(p@P!8%@Bpr#TObcNBl5v>deFxL zMSdb0hT&(!_={lTC6FG4h0nu@&%xfe!nXg34DTXt{wMPGucG!YU!vhc^{4ZD5%>&o z$QhWR1g4?{qCQ(3XlbM1;-a+JV8u}k18bj{m$9K?Ofl!@49JOEM{Ub`O%ELqRkLbI z5sqI3-h1DFegW|1Q^x@Mhu?+##5bA!U)x^bh`zLH{q)Etre6PP@)LiHUHm6bjlG^| zN29QOXjT^w9+9XXmw|1R6zoq}NB9Q!xRM7b-MS2{F;XcBCX_VPF!4I#p|>H?TJ(Xp zt1KQC8e_0#EtCx~0qYl=?S~S8SRyvUZ);#wX5bOQq&H%eQ;L`UTM8LpH3qn)e#8fz8vP7frOJx@Lr!he)n2KVza0WTPX7}j@AOzYcvMU+8c1k) zIrC7*<5JW20H#89mO?HA!e1Qshb$(VA|CzEh$PB^x2w!QAPkSfnn|Bg78me772L0t z0wm7@v}HGXr&3 zCW&ax&Wi2zDECb}t#T4X*jS>8hE^4IKyE!m`%eI0nV5ZK7U<|7T{fd}d^@oIBrVF8 znSR6HV}^wE@OwibcLuC~WSG0-9?i2<%4~03OgIbHJ}%bukA==JDJ?#$3V-PZqJ(7R zU0{sLzW)H-jxfC*h9*LyDehZ+?`kU6KQ8%bKlv>@YF8-HI-&bTZ>brG=qr}rm32Ii z>;;NrS>Nibp9@r4{_=Ne|1%3lr=)Kph=zPV;{0ENiSI$(Jo)l3gC6fE!;}>RwFXBk zYUTIkdz|7@7c$16xo3zpWQ^llLq|8AcbZ2qdKS%PM?ibzb1gb|&H7~C>W@Q_VdwOZ z>^|{`ERZwN_W_e9Mc>X5jcp~GxCq<66I`z!l~>d3r(xZjZ;@wN*oUr2WCZ~(kcR0q z4<*$DobPgn7mj^)@Os_ z&0vp)Y;RVn%dcAhyf4_*XYoHvPhl&bqrw)g79*7F)tGM6FT%@Dz`h@Y6Q4uO1o6;+ zq`xnjl5~&@aoH@kyC1CIBf*T- zk=Q&EYcy#c-}i_#=)-@yD+YO~Ds`#+6H!0yp|<5EJ~-{(RUVg0x$P5O7t~hw#DaQS zvQo=amNN8REXG%RmVs>%tVxCWDQ?g}BFqvG{|F{|7JA>$D$9q2u~8Tu2`5uPipshS zPPG!4Rs}MJXstpl*h4}1^FaZo@|wK=o|S?w6?%0*@T-hbMG*=Zc2c_jRNUXVXNX$2 zBGDy8jUOqSX9nRAC0z8Qs|zo>0xkt8T2$g{5OH&peSLw~w6UR43~U0|FW_hp9t%x|&QJf(Tbb*OFOI`<5q zCtbmXJl=H(XtX=OAR;DAbii*zUCH)hjK3e1h8HR5Iy1;!m-w}~dEzj&t1-2g;SRq; zW%irGGTxBWP7f{VX2h3qdb=4{z^eF6(&HV zLcq0x{i{k?#0cLB!fkH^(lnp^p*Tr=oK+}gHUkJP1^m7an>Iswe<9^m^MQ#VyDlZn*aedb+3Lx(S zQ8%e@(a8w~#f)wu8r_U`@9}f%mBFH^)36qV*6eXn=PFQ#P~I&4Sv^Mk)}?}UN}ON1 z@%|{B@?J)3h=<;aUHTuG`#vj-PQvI|5VEwA%qoN{t0+O`xKtrg4w5KlT5v}dH!lNF zsmSoU)K_<=ZRjn-@)EQcpuOl{XKl#36--|_2VD_NSMvo$rdhs2486Pu9{5c^v#9?vmO57hQlGnmEAqC+(F(`dS1qkI1h8Y9B^cm+CSzK(~epYReBEOruD zAF1Fq7u=(Pc)brW)4joO=YGIdnnIq24KDlyxW1jM2E;3{ywQHvHqyQqaJJ$FYzbW+ z*TXbCTQq(ZGWjx0@_bzS*%0^>@&h3@FqPUN6KaP{g_tV5tO`cJ8TH;-L#92BNL%wX z#>YdE;c7A2unFUdwxmUfX*HR>TVf$+*Yyh{oW-{|?zPqQ;K_je&b3BCF?A zf?JRk6e(sf6JI7M4Pcb+!hAp29;o(pXm-R~{A?Dr?LjlFk3p6cqOrQSU#EDdEoA&% z6$L0U0m71&d*B_dw49XfaW9Sl_~?>SBDJSSaT&_2{DaAh^n>IYeaJ-q(vYd_uV z*MUXy>x8KBHnjB-m1DQU#2Tp8SKwypTW{_5h291D!wOtqD1sP>)+_0^y}%zn=%J16 zhT^uYY*bg9;?fkGrr2JF?WW|t+;6Cz6%Fqd7N|&irEL$Dvd#+OKMixL(xY(rMz0U` z*Q@`Yl}l38*cU8N1$Sy$J5So2N{mBy&*NMlrVmrIbuCHp>&l6n>La)_ERi)(Z ziwh`4%}=G+%~S?DRT&)NCyD5@^lW^n%&{^~WU{OJ2}! z_e%h=zRPQab8>xAIZ3sSLP3%t;_01ahi~>10`&BjH-VBZw^UUnT8;TBt^UfAhDz{D zUnUFaUQ(mc5K@00vj1I5uEOM4U*JVnV9M$s`oh9Df`B>tQ)Yu(vOVaoQ}ht@=EPfX zKb>Onpy-JQp|^xME53sYAFvfl<<$2D^jwGq!cU16BbM=vR@Yu)sf}78s|3U;5XFNK zZsk{b%&~xwEgt9KAHP+X4$jKPYbKc3H8xPaAjY46wFb~{Z7k*Rt#V>>;S~zP!inEe zGhHBCK8oZuHEU)nb!k$jAD*yW88E{M%&w5(0Y*r!2fn25g1C%`g;y2YBozzqcU@^> zYLOq+G1#PaTGlRiq)Tlv##@1s`KhuBrh+G>AK0p}qJg~<7f2BpPa)k!SllnfNl124 zW;Zc1SPon6=u*6?9hjfQS7jF3)k$IY5S;fKXzvs3BI*piCG_w

@=VM13VSiNQqB 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Ⓢ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 literal 0 HcmV?d00001 diff --git a/g1sms/good.nodes.txt b/g1sms/good.nodes.txt new file mode 100644 index 0000000..214199d --- /dev/null +++ b/g1sms/good.nodes.txt @@ -0,0 +1,6 @@ +duniter.moul.re:443 +g1.duniter.fr:443 +g1.duniter.org:443 +g1.le-sou.org:443 +g1.monnaielibreoccitanie.org:443 +g1.presles.fr:443 diff --git a/g1sms/init.sh.old b/g1sms/init.sh.old new file mode 100755 index 0000000..ca20a67 --- /dev/null +++ b/g1sms/init.sh.old @@ -0,0 +1,83 @@ +#!/bin/bash +################################################################## +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: GPL (http://www.google.com/search?q=GPL) +################################################################## + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +source $MY_PATH/.install/.GPATH + +# Adapter les valeurs au contexte spatio-temporel du NODE G1SMS +function log () { +# log ($1=text) + if [ "$DOLOG" == "YES" ] + then + echo "$PHONE:$1" >> /tmp/g1sms.log + fi +} + + +################################################################################################################################### +fn_exists() { + # appended double quote is an ugly trick to make sure we do get a string -- if $1 is not a known command, type does not output anything + [ `type -t $1`"" == 'file' ] +} +# ATOMATIC gammu-smsd-inject desactivation if no gammu is installed on system +if ! fn_exists gammu-smsd-inject; then +log ":p) DESACTIVATION ENVOI DE SMS .............." +function gammu-smsd-inject () { + log "$PHONE: >>> SENDING SMS $4 TO $2 " +} +else +export G1SMS="YES" +fi + + + export YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1); + cd $GPATH + ################################################################## + # Activate logging to /tmp/g1sms.log (YES/NO) + export DOLOG="YES" + export CPERROR="NOYES" + ################################################################## + # Country Node Phone international prefix (TODO Worldwide) + export COUNTRY="+33" + ################################################################## + # DU has a G1 value changed every 6 month! + # ./_DU Updated by cron_CODE.backup.sh + if [[ -f "./_DU" ]]; then export DUFACTOR=$(bc <<< "scale=2; $(cat "./_DU") / 100"); else log "__SUB:init.sh: FAILING TO FIND ./_DU EXIT!!!"; exit; fi + ################################################################## + # Choose Default Unit: G1, DU, LOVE (DU cents), ZEN (G1 cents) + export COIN="G1" + ################################################################## + # Limit and commission values + export LIMIT=2 # Solde minimum = 2 G1 + # FIXED COMMISSION SYSTEM + export COMMISSION=1 # transaction commission amount (G1) + export BILLCOM=20 + ################################################################## + # COMMISSION PARTS FROM TX FOR NODE & G1SMS NETWORK + # PART COMMISSION SYSTEM + export SWARMCOMM=10 + # TODO: NODE G1sms Wallet can receive rewards from SWARM or WALLETS/FILES + export NODECOMM=10 + ################################################################## + # SMS SIM Card Phone Number + export MASTERPHONE="+33651136520" + export ADRESSE="G1_Fablab_Toulouse" + export G1DAB="NO" + ################################################################## + # ADMIN COMMAND PHONE ORIGIN + export ADMINPHONE="+33647683646" + export ADMINPSEUDO="Fred" + ################################################################## + # DUNITER/CESIUM+ DEFAULT SERVERS + export DUNITER="https://g1.duniter.org" + export CESIUM="https://g1.data.le-sou.org" + + # TODO Use latest Silkaj from "sudo fredp3 install silkaj" + # export SILKAJ="/usr/local/bin/silkaj" + source $GPATH/shell/init_keys.sh + diff --git a/g1sms/init_keys.sh b/g1sms/init_keys.sh new file mode 100755 index 0000000..35127e1 --- /dev/null +++ b/g1sms/init_keys.sh @@ -0,0 +1,148 @@ +#!/bin/bash +################################################################## +# Author: Fred (support@qo-op.com) +# Version: 0.2 +# License: GPL (http://www.google.com/search?q=GPL) +################################################################## +# CHECK & WARN | CREATE Keys (gpg encrypt, G1wallet, IPNS publish) +################################################################## + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +if [[ -f $MY_PATH/.install/.GPATH ]]; then source $MY_PATH/.install/.GPATH; fi +if [[ -f $MY_PATH/../.install/.GPATH ]]; then source $MY_PATH/../.install/.GPATH; fi + +YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) +IPFSNODEID=$(su $YOU -c "ipfs id -f='\n'") +NANODATE=$(date -u +%s%N) #1569692075385428020 + +################################################################## +# G1sms+ Node KEYS (G1wallet, gpg, IPNS) +################################################################## +export GPGPASS=$(cat "/home/$YOU/.ipfs/config" | jq '.Identity.PrivKey' | sed s/\"//g) #" +if [ ! $GPGPASS ]; then echo "FATAL ERROR:: IPFS Node.Identity.PrivKey GPGPASS EMPTY"; exit; fi + +# GET SWARM KEY G1sms+ .ipfs/swarm.key +export SWARMKEY=$(cat "/home/$YOU/.ipfs/swarm.key" | tail -n 1) +if [ ! $SWARMKEY ]; then echo "FATAL ERROR:: .ipfs/swarm.key EMPTY"; exit; fi + +################################################################## +# G1sms+ Swarm KEYS +################################################################## +# G1sms Service - G1Wallet +# +# CLEF G1 DU SWARM +SWARM_G1PUBKEY=$(cat "${GPATH}/g1sms.pub.key") +SWARM_G1AUTHFILE="${GPATH}/g1sms.priv.key" + +# CLEF G1 NODE = CLEF G1 SWARM !! +if [[ ! -e "./g1sms.preoni.pub.key" && -f "./g1sms.priv.key" ]]; then + log "__SUB:initkeys.sh: Linking preoni Keys to SWARM G1 Keys" + ln -s ./g1sms.priv.key ./g1sms.preoni.priv.key + ln -s ./g1sms.pub.key ./g1sms.preoni.pub.key +elif [[ ! -f ./g1sms.preoni.priv.key ]]; then + # CREATE NODE G1 KEYS AND FILES + mkdir -p ./wallets/.$IPFSNODEID/TASK + ################################################ + # GIVE NAME TO NODE G1 WALLET: "0000diceware" + # CREATE "preoni" KeyS & ./wallets/.Qm***/_files + ################################################ + # 4 derniers chiffres du MASTERPHONE + diceware + PRE=${MASTERPHONE:8:4} + ZUID=$(./shell/diceware.sh 1 | xargs) + # Check if already existing among all swarm wallets + while [[ $(grep -Rwl "$PRE$ZUID" ./wallets_swarm/.*/_uidna) ]]; do ZUID=$(./shell/diceware.sh 1 | xargs); done + NODE_UIDNA="$PRE$ZUID" + NODE_PIN=$(./shell/diceware.sh | xargs) + + NODE_G1PUBKEY=$(./silkaj/silkaj generate_auth_file --auth-scrypt -salt="$NODE_UIDNA" -password="$NODE_PIN") + if [[ ! $NODE_G1PUBKEY ]]; then log "PROBLEME CREATION DU WALLET G1 POUR $NODE_UIDNA = $IPFSNODEID"; exit; fi + log "__SUB:initkeys.sh: NODE G1WALLET CESIUM: $NODE_UIDNA / $NODE_PIN CREATED..." + + # WRITE NODE_UIDNA + echo "$NODE_UIDNA" > "./wallets/.$IPFSNODEID/_uidna" ################# _uidna + + ############ SYSTEM MODIFY hosts & hostname ################ + # WRITE NODE uidna NAME TO /etc/hosts & .Qm*/_uidna file + echo "127.0.0.101 $NODE_UIDNA" >> "/etc/hosts" + echo $NODE_UIDNA > "/etc/hostname" + ############################################################ + + # BACKUP AUTHFILE FOR FOR SWARM USE (TODO: Refine Swarm, Node access): GIVES SMARM WITHDRAW ACTION + ./shell/natools.py encrypt -p $SWARM_G1PUBKEY -i "./authfile" -o "./wallets/.$IPFSNODEID/_authfile.swarm.crypt" + + echo $NODE_G1PUBKEY > "./wallets/.$IPFSNODEID/_pub" ################# _pub + echo $IPFSNODEID > "./wallets/.$IPFSNODEID/_ipfsid" ################# _ipfsid + log "__SUB:initkeys.sh: [ADMIN] G1sms+ CREATE G1WALLET FOR: $IPFSNODEID: _pub = $NODE_G1PUBKEY " + + # BACKUP $IPFSNODEID config ################# _ipfsconfig.swarm.crypt : GIVES SMARM NODE RESTORE ACTION + ./shell/natools.py encrypt -p $SWARM_G1PUBKEY -i "/home/$YOU/.ipfs/config" -o "./wallets/.$IPFSNODEID/_ipfsconfig.swarm.crypt" + log "__SUB:initkeys.sh: [ADMIN] BACKUP IPFS NODE CONFIG to ./wallets/.$IPFSNODEID/_ipfsconfig.swarm.crypt" + + # Cyper & Empty PIN + echo "${NODE_PIN}" > "./wallets/.$IPFSNODEID/_pin" ################# _pin / _pin.node.crypt / _pin.gpg + ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "./wallets/.$IPFSNODEID/_pin" -o "./wallets/.$IPFSNODEID/_pin.node.crypt" + echo "${GPGPASS}" | gpg -q --output "./wallets/.$IPFSNODEID/_pin.gpg" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "./wallets/.$IPFSNODEID/_pin" + echo "" > "./wallets/.$IPFSNODEID/_pin" + + echo "314" > "./wallets/.$IPFSNODEID/_g1cents" ################# _g1cents + echo $NANODATE > "./wallets/.$IPFSNODEID/_nanodate" ################# _nanodate + + # SILKAJ INIT G1 NODE WALLET + TX_IN=$(./silkaj/silkaj transaction --auth-file -file="$SWARM_G1AUTHFILE" --amount=3.24 --output=$NODE_G1PUBKEY --comment="[G1sms+] G1NODE ($ADMINPSEUDO) $NODE_UIDNA $IPFSNODEID" -y) + TX_OUT=$(./silkaj/silkaj transaction --auth-scrypt -salt="$NODE_UIDNA" -password="$NODE_PIN" --amount=0.1 --output=$SWARM_G1PUBKEY --comment="[G1sms+] G1NODE ($ADMINPSEUDO) $NODE_UIDNA $IPFSNODEID:ACK" -y) + + log "__SUB:initkeys.sh: [ADMIN] NODE G1sms+ $NODE_UIDNA : ls ./wallets/.$IPFSNODEID" + gammu-smsd-inject -l TEXT "$ADMINPHONE" -text "[ADMIN] G1sms+ NODE $NODE_UIDNA ($IPFSNODEID)" 1>&2 + gammu-smsd-inject -l TEXT "$ADMINPHONE" -text "$NODE_G1PUBKEY" 1>&2 + + # CREATE preoni FILES + mv ./authfile ./g1sms.preoni.priv.key + echo $NODE_G1PUBKEY > ./g1sms.preoni.pub.key +fi + +NODE_UIDNA=$(cat "./wallets/.$IPFSNODEID/_uidna") +## INIT NODE G1 PUB & PRIV KEY +NODE_G1PUBKEY=$(cat "${GPATH}/g1sms.preoni.pub.key") +NODE_G1AUTHFILE="${GPATH}/g1sms.preoni.priv.key" + +########################################################## +# MEMORIZE NODE NANODATE EXECUTION TIME (for ntpdate regular sync) +if [[ -f ./wallets/.$IPFSNODEID/_nanodate ]]; then + last=$(cat ./wallets/.$IPFSNODEID/_nanodate) + timediff=$( echo "${NANODATE} - ${last}" | bc -l ) + # NODE TIME SYNC 600 milliards de nanosecondes = 600 s = 10 mn + if [[ $timediff -gt 600000000000 ]]; then + # RUN & LOG ntpdate + log "__SUB:ntpdate pool.ntp.org: $timediff $(ntpdate pool.ntp.org)" + export NANODATE=$(date -u +%s%N) + fi + echo $NANODATE > ./wallets/.$IPFSNODEID/_nanodate +fi + +################################################################ +#INFORM ABOUT NODE CAPACITIES +export NODEPUB=$(cat "./wallets/.$IPFSNODEID/_pub") + +## IS IT A SMS NODE (gammu-smsd is installed)?? +if [[ $G1SMS ]]; then + echo $MASTERPHONE > "./wallets/.$IPFSNODEID/_sms" +else + if [ -f "./wallets/.$IPFSNODEID/_sms" ]; then rm -f "./wallets/.$IPFSNODEID/_sms"; fi +fi + +## IS THERE USB PRINTER CONNECTED? +if [[ -e "/dev/usb/lp0" ]]; then + log "G1CORE: IMPRESSION G1Tag ACTIF .............." + echo $ADRESSE > "./wallets/.$IPFSNODEID/_where" +fi + +## IS THERE SERIAL QR CODE READER CONNECTED? +if [[ -e "/dev/ttyACM0" ]]; then + log "G1CORE: SCAN G1Tag ACTIF .............." + export G1TX="YES" + echo "/dev/ttyACM0" > "./wallets/.$IPFSNODEID/_scan" +else + if [ -f "./wallets/.$IPFSNODEID/_scan" ]; then rm -f "./wallets/.$IPFSNODEID/_scan"; fi +fi + diff --git a/g1sms/manual_BILLETS_PERIMES.sh b/g1sms/manual_BILLETS_PERIMES.sh new file mode 100755 index 0000000..b7d84ec --- /dev/null +++ b/g1sms/manual_BILLETS_PERIMES.sh @@ -0,0 +1,64 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +# TODO: Before June 2020: Get "./billets/$bpath/note.authfile.GPGPASS.gpg" for automatic Payback +# Search for old G1Billets for final CHK : Forget & Transfer G1 ? +source ./shell/init.sh +source ./shell/functions.sh + +# Existence days number can be $1 +if [[ "$1" ]]; then vieux="$1"; else vieux=210; fi +if [[ "$2" ]]; then dest="$2"; else dest=$NODE_G1PUBKEY; fi + +echo "Recherche de G1Billets plus vieux que $vieux jours." +Nbillets=$(find billets/ -daystart -mtime +$vieux -type f -name "*.pubkey" | wc -l) +echo "$Nbillets G1Billets trouvés..." + +for result in $(find billets/ -daystart -mtime +$vieux -type d -name "*"); do + billetname=$(echo $result | cut -d '/' -f 2) + if [[ $billetname && "$billetname" != "MEMBERS" ]]; then + ((Nbillets --)) + numero=$(echo $billetname | sed s/_/\ /g ) + creator=$(cat "$result/note.creator") + value=$(cat "$result/note.value") + unit=$(cat "$result/note.unit") + pubkey=$(cat "$result/note.pubkey") + salt=$(cat "$result/note.salt") + secret=$(cat "$result/note.secret") + + solde=$(/usr/local/bin/silkaj -p duniter-g1.p2p.legal:443 balance $pubkey | grep Quantitative | cut -d '=' -f 2 | cut -d ' ' -f 2) + + # GET creator member wallet ($dest) and refund if still at initial G1 value (lost or unused BILL). + virement=$solde + [[ -f "$result/note.g1" ]] && initialvalue=$(cat "$result/note.g1") && if [[ $solde -eq $initialvalue ]]; then virement=$solde; else virement=1; fi + [[ -f "$result/note.memrib" ]] && dest=$(cat "$result/memrib") + + echo ">>> $billetname $pubkey créé par $creator, valeur initiale $virement G1 (initialement $initialvalue G1)." + echo ">>> Virer à $dest $virement G1 du G1billet !! ID / Pass:" + echo $numero + echo $secret $salt + echo "/usr/local/bin/silkaj tx --amount=\"$virement\" --output=\"$dest\"" + + if [[ "$virement" == "0.0" ]]; then + echo "G1Billet déjà vide, suppression de $result"; rm -Rf $result; + else + PAY=$(/usr/local/bin/silkaj -p duniter-g1.p2p.legal:443 tx --amount="$virement" --output="$dest" --comment="[G1Billet] $numero" -y) + if [[ ! $(echo $PAY | grep "successfully sent") ]]; then + echo "!!!! ERREUR: $virement Something Wrong happened with $result. Moving to /tmp/ERROR_BILL_$billetname (please check or remove)" + mkdir -p /tmp/ERROR_BILL_$billetname + mv $result/* /tmp/ERROR_BILL_$billetname + else + echo $PAY + echo "OK! On supprime $result et continue avec le billet $Nbillets" + echo + rm -Rf $result + fi + fi + else + echo "MEMBER:" $result + fi +done + diff --git a/g1sms/natools.py b/g1sms/natools.py new file mode 100755 index 0000000..5149743 --- /dev/null +++ b/g1sms/natools.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 + +import os, sys, duniterpy.key, libnacl.sign + +def getargv(arg:str, default:str="", n:int=1, args:list=sys.argv) -> str: + if arg in args and len(args) > args.index(arg)+n: + return args[args.index(arg)+n] + else: + return default + +def read_data(data_path, b=True): + if data_path == "-": + if b: + return sys.stdin.read().encode() + else: + return sys.stdin.read() + else: + if b: + return open(os.path.expanduser(data_path), "rb").read() + else: + return open(os.path.expanduser(data_path), "r").read() + +def write_data(data, result_path): + (sys.stdout if result_path == "-" else open(os.path.expanduser(result_path), "wb")).write(data) + +def encrypt(data, pubkey): + return duniterpy.key.PublicKey(pubkey).encrypt_seal(data) + +def decrypt(data, privkey): + return duniterpy.key.SigningKey.from_seedhex(privkey).decrypt_seal(data) + +def sign(data, privkey): + return duniterpy.key.SigningKey.from_seedhex(privkey).sign(data) + +def verify(data, pubkey): + try: + return libnacl.sign.Verifier(duniterpy.key.PublicKey(pubkey).hex_pk()).verify(data) + except ValueError: + exit(1) + +def show_help(): + print("""Usage: +python3 natools.py [options] + +Commands: + encrypt Encrypt data + decrypt Decrypt data + sign Sign data + verify Verify data + +Options: + -i Input file path (default: -) + -k Privkey file path (default: authfile.key) + -p Pubkey (base58) + -o Output file path (default: -) + +Note: "-" means stdin or stdout. +""") + +if __name__ == "__main__": + + if "--help" in sys.argv: + show_help() + exit() + + data_path = getargv("-i", "-") + privkey_path = getargv("-k", "authfile.key") + pubkey = getargv("-p") + result_path = getargv("-o", "-") + + try: + if sys.argv[1] == "encrypt": + write_data(encrypt(read_data(data_path), pubkey), result_path) + elif sys.argv[1] == "decrypt": + write_data(decrypt(read_data(data_path), read_data(privkey_path, False)), result_path) + elif sys.argv[1] == "sign": + write_data(sign(read_data(data_path), read_data(privkey_path, False)), result_path) + elif sys.argv[1] == "verify": + write_data(verify(read_data(data_path), pubkey), result_path) + else: + show_help() + except Exception as e: + sys.stderr.write("Error: ", e, "\n") + show_help() + exit(1) diff --git a/g1sms/nodes.txt b/g1sms/nodes.txt new file mode 100644 index 0000000..87579bf --- /dev/null +++ b/g1sms/nodes.txt @@ -0,0 +1,11 @@ +duniter.moul.re:443 +duniter.dethegeek.eu.org:443 +g1.presles.fr:443 +g1.duniter.fr:443 +monit.g1.nordstrom.duniter.org:443 +g1.le-sou.org:443 +g1.duniter.org:443 +g1.monnaielibreoccitanie.org:443 +follow.the.white-rabbit.net:443 +g1.acostey.fr:443 +duniter.acostey.fr:443 diff --git a/g1sms/parle.sh b/g1sms/parle.sh new file mode 100755 index 0000000..ed99fd9 --- /dev/null +++ b/g1sms/parle.sh @@ -0,0 +1,12 @@ +#!/bin/bash +f=$(echo "$1" | sed 's/ //g' ) +echo "parle.sh: $1 | $2 = $f" >> /tmp/parle.log 2>&1 +if [[ "$2" == "" ]]; then + lang="fr-FR" +else + lang="en-US" +fi +if [[ ! -f "/tmp/$lang_${f}.wav" ]]; then + pico2wave -l $lang -w /tmp/$lang_${f}.wav "$1" +fi +aplay -q /tmp/$lang_${f}.wav diff --git a/g1sms/sms_ABO.sh b/g1sms/sms_ABO.sh new file mode 100755 index 0000000..28ff437 --- /dev/null +++ b/g1sms/sms_ABO.sh @@ -0,0 +1,49 @@ +#!/bin/bash +################################################################## +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: GPL (http://www.google.com/search?q=GPL) +################################################################## +# Commande SMS: sms_ABO.sh +# ABO "$SERVICE" "$YESNO" +# Gère les Abonnements aux communications PUSH SMS +################################################################## +# TODO: Create information Channels and moderate OPT IN/OUT +source ./shell/init.sh +source ./shell/functions.sh +log "__SUB:sms_ABO.sh: START ($1=PHONE, $2=SERVICE)" +PHONE=$1 +SERVICE=$2 + +sms_INIT_ACCOUNT "$PHONE" + +case "$SERVICE" in + ON) + log "Abonnement Kalkun" + add_contact $PHONE $MEMBER && log "${c_green}Contact has been added to database$c_" || log "${c_red}Contact can't be added to database$c_"; + sms_SEND "$PHONE" "$MEMBER votre inscription annuaire est active" + ;; + OFF) + log "Retrait Kalkun" + rm_contact $PHONE $MEMBER && log "${c_green}Contact has been deleted from database$c_" || log "${c_red}Contact can't be deleted database$c_"; + sms_SEND "$PHONE" "$MEMBER retrait annuaire prise en compte..." + ;; + + MARCHE) + log "Avertissement G1 marchés" + # PARAMS could be "$distance" to Member GeoPoint... + ;; + GCHANGE) + log "Création Alerte Annonce GCHANGE" + # PARAMS could be "$distance#$keyword" to search gchange.fr near Member GeoPoint... + ;; + INFO) + log "Abonnement Newsletter" + # PARAMS could be "$distance#$keyword" to search gchange.fr near Member GeoPoint... + ;; + *) + # AIDE : ABO GCHANGE 100#maison... + log "Renvoyez AIDE..." + sms_SEND "$PHONE" "Cette commande est inactive..." + ;; +esac diff --git a/g1sms/sms_ADMIN.sh b/g1sms/sms_ADMIN.sh new file mode 100755 index 0000000..dd45b7f --- /dev/null +++ b/g1sms/sms_ADMIN.sh @@ -0,0 +1,89 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +# Accessible seulement pour ADMINPHONE. +# Permet de lancer des paquets de SMS aux membres, wallets, ... +# TODO Add OptIN/OUT options (./shell/sms_ABO.sh) + Extand ADMIN functions... +source ./shell/init.sh +source ./shell/functions.sh +log "__SUB:sms_ADMIN.sh: START ($1=CMD, $2=MESSAGE)" + +CMD="$1" +MESSAGE="$2" + +case "$CMD" in + + USR) + log "__SUB:sms_ADMIN.sh: Send message to phone Member or Wallet UIDNA" + # Get it from first MESSAGE message word... + towoo=$(echo $MESSAGE | cut -d ' ' -f 1) + + SEARCH=$(grep -Rwl "$towoo" ./wallets_swarm/*/*.uidna* | tail -n 1 | cut -f 3 -d '/') + if [[ "$SEARCH" != "" ]]; then + REMOTENODE=$(cat ./wallets_swarm/$SEARCH/MASTERPHONE.sms) + DESTRIB=$(cat ./wallets_swarm/$SEARCH/$SEARCH.pub) + DESTPHONE=$SEARCH + log "__SUB:sms_ADMIN.sh: FOUND $towoo on NODE ($REMOTENODE) G1sms+ wallet: $DESTRIB : $DESTPHONE)" + + if [[ "$DESTPHONE" == "$ADMINPHONE" || "$DESTPHONE" == "$MASTERPHONE" ]]; then continue; fi + sms_SEND "$DESTPHONE" "$MESSAGE" + sms_SEND "$ADMINPHONE" "ADMIN OK!! Message: $MESSAGE envoyé à $towoo: $DESTPHONE" + fi + ;; + + + MEM) + log "__SUB:sms_ADMIN.sh: Send $MESSAGE message to All NODE members" + for f in ./wallets/*/*.uidname; do + uid=$(cat $f); + num=$(echo $f | cut -d '/' -f3); + if [[ "$num" == "$ADMINPHONE" || "$num" == "$MASTERPHONE" ]]; then continue; fi + log "__SUB:sms_ADMIN.sh: Send SMS to $num: $uid" + sms_SEND "$num" "$uid, $MESSAGE" + sleep 5 + done + sms_SEND "$ADMINPHONE" "ADMIN! Message envoyé aux $(cat ./wallets/*/*.uidname | wc -l) membres de ce NODE" + ;; + + ALL) + log "__SUB:sms_ADMIN.sh: Send $MESSAGE message to All NODE G1sms wallets" + for f in ./wallets/*; do + num=$(echo $f | cut -d '/' -f3); + if [[ "$num" == "$ADMINPHONE" || "$num" == "$MASTERPHONE" ]]; then continue; fi + log "__SUB:sms_ADMIN.sh: Send SMS to $num" + sms_SEND "$num" "$MESSAGE" + sleep 5 + done + sms_SEND "$ADMINPHONE" "ADMIN! Message envoyé aux $(ls ./wallets/ | cut -d '/' -f3 | wc -l) possesseur de G1sms Wallets de ce NODE" + ;; + + SWARM) + log "__SUB:sms_ADMIN.sh: Send $MESSAGE message to All SWARM G1sms wallets" + for f in ./wallets_swarm/+33*; do + num=$(echo $f | cut -d '/' -f3); + if [[ "$num" == "$ADMINPHONE" || "$num" == "$MASTERPHONE" ]]; then continue; fi + log "__SUB:sms_ADMIN.sh: Send SMS to $num" + sms_SEND "$num" "$MESSAGE" + sleep 5 + done + sms_SEND "$ADMINPHONE" "ADMIN! Message: $MESSAGE envoyé aux $(ls ./wallets_swarm/ | cut -d '/' -f3 | wc -l) PHONE G1sms Wallets du SWARM" + ;; + + *) + log "__SUB:sms_ADMIN.sh: Send back ERRORs message to Admin" + if [ -f "/tmp/ERROR.CRON" ]; then + text=$(cat "/tmp/ERROR.CRON") + rm -f "/tmp/ERROR.CRON" + fi + sms_SEND "$ADMINPHONE" "USR / MEM / ALL / SWARM +$text" + ;; +esac + +sms_SEND "$ADMINPHONE" "ADMIN! JOB FINISHED" + +log "__SUB:sms_ADMIN.sh: END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +exit diff --git a/g1sms/sms_AIDE.sh b/g1sms/sms_AIDE.sh new file mode 100755 index 0000000..0bd21ad --- /dev/null +++ b/g1sms/sms_AIDE.sh @@ -0,0 +1,33 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +source ./shell/init.sh +source ./shell/functions.sh +log "X sms_AIDE.sh ($1=phone)" + +sms_INIT_ACCOUNT "$1" "NOSMS" + +MESS="[Aide] +N Pseudo (membre ou nom de portefeuille) : Création portefeuille +U G1/DU/LOVE : Unité +S : Solde +P 06nnnnnnnn 300 : Payer 300 à 06nnnnnnnn" +# Send response SMS +sms_SEND "$1" "$MESS" + +MESS="EMAIL moi@email : Indiquer son email +VIR 50 Pseudo : Virer 50 à Pseudo (membre ou Portefeuille SMS)" +sms_SEND "$1" "$MESS" + +MESS="REC 50 Dest S 4 : Virer 50 à Dest pendant 4 Semaines (J/S/M/A) +BILL n : Recevoir 6 G1Billets remplis de n LOVE par email! +https://g1sms.fr - $ADMINPSEUDO ($ADMINPHONE)" +sms_SEND "$1" "$MESS" + +log "END sms_AIDE.sh" +log "~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + +exit diff --git a/g1sms/sms_BILLET.sh b/g1sms/sms_BILLET.sh new file mode 100755 index 0000000..0680cac --- /dev/null +++ b/g1sms/sms_BILLET.sh @@ -0,0 +1,180 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +# Create and print 6 G1Billets de nn LOVE +source ./shell/init.sh +source ./shell/functions.sh +log "__SUB:sms_BILLET.sh: ($1=phone, $2=VALbillet)" + +phone="$1" +VALbillet="$2" +# 6 BILLETS DE $VALbillet LOVE PAR SMS !! +NBbillets=6 + +# Initialise PHONE, PIN, PUBKEY, UNIT, HIST + MEMBER + MEMRIB +... +sms_INIT_ACCOUNT "$phone" "NOSMS" + +# FIXED LOVE UNIT (6 month maximum validity) +UNIT="LOVE" + +log "__SUB:sms_BILLET.sh: MEMBER? $PHONE => $MEMBER" + +if [[ $UNKNOWN == "unknown" || "$MEMBER" == "" ]]; then + sms_ERROR "$phone" "Porte-monnaie non identifié. +Envoyez N suivi de votre pseudo membre (en respectant Majuscule et minuscule)." + exit +fi + +if [[ $MAIL == "" ]]; then + sms_ERROR "$phone" "Impossible de réaliser votre commande. +Envoyez \"EMAIL votre_email\" pour pouvoir recevoir vos billets..." + exit +fi + +if [ $VALbillet -lt 10 ]; then + sms_ERROR "$phone" "Montant minimum 10 $UNIT !!" + exit +fi + +if [ $VALbillet -gt 1000 ]; then + sms_ERROR "$phone" "Montant maximum: 1000 $UNIT !!" + exit +fi + +# Get AMOUNTG1, AMOUNTLOVE, AMOUNTDU +AMOUNTG1=$(./silkaj/silkaj amount "$PUBKEY") +AMOUNTDU=$(bc -l <<< "scale=2; $AMOUNTG1 / $DUFACTOR") +AMOUNTLOVE=$(bc -l <<< "scale=0; $AMOUNTG1 * 100 / $DUFACTOR") + +# Convert amount to G1 unit +amount=$(bc <<< "$NBbillets * $VALbillet") +VIR=$(bc -l <<< "scale=2; $amount * $DUFACTOR / 100") + +# Need at least $MIN G1 available! $BILLCOM G1 commission +MIN=$(bc -l <<< "$AMOUNTG1 - $LIMIT - $BILLCOM") +testmin=$( echo "${VIR} < ${MIN}" | bc -l ) +log "__SUB:sms_BILLET.sh: TEST : $VIR < $MIN ? $testmin" + +# silkaj NODE CHANGE !!! +#SILKAJNODE=$(./shell/checknodes.sh) +#log "NEW SILKAJ NODE: $SILKAJNODE" + +if [[ "$testmin" -eq "1" ]] +then + # Clean MEMBER directory + rm -f ./billets/MEMBERS/$MEMBER/*.jpg + boucle=0; + while [ $boucle -lt $NBbillets ] + do + # Creation du numéro de billet + NUMBER=$(./shell/diceware.sh 2 | xargs) + bpath=$(echo $NUMBER | sed 's/ /_/g') + + # Cas d'un billet existant + while [ -d "./billets/$bpath" ] + do + NUMBER=$(./shell/diceware.sh 2 | xargs) + bpath=$(echo $NUMBER | sed 's/ /_/g') + done + + SECRET=$(./shell/diceware.sh 4 | xargs) + + boucle=$(bc -l <<< "$boucle + 1") + + log "__SUB:sms_BILLET.sh: ->BILLET:$PHONE:$NUMBER:$VALbillet:$UNIT" + # CREATE "NUMBER SECRET" ACCOUNT for G1 transfert + TRANSAC=$(bc -l <<< "scale=2; $VIR / $NBbillets") + BILLETPUBKEY=$(./silkaj/silkaj generate_auth_file --auth-scrypt -salt="$NUMBER" -password="$SECRET") + # COPY authfile for Usage in 6 month... + log "__SUB:sms_BILLET.sh: authfile KEY : ./billets/$bpath/note.authfile.GPGPASS.gpg" + mkdir -p "./billets/$bpath" + echo "${GPGPASS}" | gpg -q --output "./billets/$bpath/note.authfile.GPGPASS.gpg" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "./authfile" + ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "./authfile" -o "./billets/$bpath/note.authfile.$NODE_UIDNA.crypt" + rm -f "./authfile" + + log_history $PHONE "G1BILLET, $TRANSAC, $BILLETPUBKEY" + sleep 3 + # Fill BILLET with TRANSAC amount + PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$TRANSAC" --output="$BILLETPUBKEY" --comment="G1Billet $NUMBER" -y) + if [[ "$(echo $PAY | cut -d '|' -f 1)" != "KO" ]]; then + # NOTES ARE FILES STORED IN DICEWARE COMPOSED SUBDIR + echo "$(date +%Y%m%d)" > "./billets/$bpath/note.creationdate" + echo "$MEMBER" > "./billets/$bpath/note.creator" + echo "$MEMRIB" > "./billets/$bpath/note.memrib" + echo "$NUMBER" > "./billets/$bpath/note.number" + echo "$PHONE" > "./billets/$bpath/note.phone" + echo "$SECRET" > "./billets/$bpath/note.secret" + echo "$VALbillet" > "./billets/$bpath/note.love" + echo "$TRANSAC" > "./billets/$bpath/note.g1" + echo "$BILLETPUBKEY" > "./billets/$bpath/note.pubkey" + log "Remplissage: $TRANSAC G1... $BILLETPUBKEY = $PAY" + + # CREATION FICHIER IMAGE BILLET + $(./shell/sms_BILLET_MAKE.sh "$NUMBER" "$SECRET" "$VALbillet" "$UNIT" "$TRANSAC" "$BILLETPUBKEY" "$MEMBER" "$TRANSAC" "$PHONE") + log "./shell/sms_BILLET_MAKE.sh \"$NUMBER\" \"$SECRET\" \"$VALbillet\" \"$UNIT\" \"$TRANSAC\" \"$BILLETPUBKEY\" \"$MEMBER\" \"$TRANSAC\" \"$PHONE\"" + + # Transaction to create Link BILLET <-> MEMBER RIB => Decrease BILLET value ! + sleep 2 + # PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$NUMBER" -password="$SECRET" --amount="0.05" --output="$MEMRIB" --comment="THIRD_PARTY_MANAGER:$NODE_G1PUBKEY:G1SMS:BILLET:$VALbillet:$UNIT:$NUMBER" -y) + else + sms_ERROR "$PHONE" "Un problème est survenu. Contactez $ADMINPSEUDO au $ADMINPHONE" + # Copy & Send produced files + zip /tmp/$PHONE_Bills_$bpath.zip ./billets/MEMBERS/$MEMBER/*.* + mpack -s "[G1sms+]_G1Billets ($bpath) Erreur... création G1Billets..." -d /tmp/message_body.txt /tmp/$PHONE_Bills_$bpath.zip $MAIL && mv /tmp/$PHONE_Bills_$bpath.zip ./billets/MEMBERS/$MEMBER/ && log "__SUB:sms_BILLET.sh: ALERT sent....." + + log "__SUB:sms_BILLET.sh: ERROR SILKAJ $(cat ./silkaj/src/constants.py)" + exit + fi + done + + # + G1SMS Commission + sleep 2 + COM=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$BILLCOM" --output="$NODE_G1PUBKEY" --comment="[G1sms+] Achat G1Billets" -y) + + # POUR IMPRIMER LES BILLETS! Brancher votre imprimante, configurer cups, activer code lp ;) + num=$(date +%Y%m%d) + log "__SUB:sms_BILLET.sh: PRINT $num $MEMBER" + montage ./billets/MEMBERS/$MEMBER/*.jpg -tile 2x3 -geometry 964x459 /tmp/$PHONE_Bills_$bpath.pdf && rm -f ./billets/MEMBERS/$MEMBER/*.jpg && log "__SUB:sms_BILLET.sh: PDF made /tmp/$PHONE_Bills_$bpath.pdf" + cd /tmp && zip $PHONE_Bills_$bpath.zip $PHONE_Bills_$bpath.pdf && log "__SUB:sms_BILLET.sh: Zip DONE :: /tmp$PHONE_Bills_$bpath.zip !!" && cd - + # rm -f /tmp/$PHONE_Bills_$bpath.pdf + + # SEND EMAIL ZIP attached + echo "Commande #$NANODATE/$bpath +>> Planche de 6 G1Billets : $VALbillet LOVE << +Envoyez-nous vos remarques... + +https://g1sms.fr" > /tmp/message_body.txt + + mpack -s "[G1sms+]_G1Billets ($bpath) A IMPRIMER et détruire cet email..." -d /tmp/message_body.txt /tmp/$PHONE_Bills_$bpath.zip $MAIL && log "__SUB:sms_BILLET.sh: EMAIL sent....." + + log "__SUB:sms_BILLET.sh: G1Billets $PHONE_Bills_$bpath.pdf envoyé par email à $MEMBER : $MAIL " + mess="[G1SMS] +$NBbillets G1Billets de $VALbillet $UNIT ($TRANSAC G1) créé(s). +Envoyés vers $MAIL, vérifiez vos SPAM... +Support: $ADMINPSEUDO ($ADMINPHONE) +" + + sms_SEND "$phone" "$mess" + # ADMIN ALERT SMS + TODO Add ADMINEMAIL parameter in "install.sh" + sms_SEND "$ADMINPHONE" "$MEMBER vient de créer $NBbillets G1Billets de $VALbillet $UNIT ($TRANSAC G1): $MAIL" + cat ./email.txt | sed s/EMAIL/frenault@linkeo.com/g | sed s/SUBJECT/Creation_G1Billets/g | sed s/MESSAGE/"$MEMBER ($PHONE) vient de creer $NBbillets G1Billets de $VALbillet $UNIT ($TRANSAC G1) vers $MAIL"/g | ssmtp "frenault@linkeo.com" + +##################################### +# Amount too High, solde insuffisant +else + text="Solde: $AMOUNTLOVE LOVE ($AMOUNTG1 G1 = $AMOUNTDU DU) +Insuffisant pour créer $NBbillets billet(s) de $VALbillet $UNIT +(= $VIR G1 + Commission $BILLCOM G1)" + sms_ERROR "$phone" "$text" + + sms_SEND "$phone" "Rechargez votre porte-monnaie! +https://g1.duniter.fr/api/#/v1/payment/$PUBKEY?amount=$VIR" +fi + +log "__SUB:sms_BILLET.sh: END sms_BILLET.sh" +log "~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + +exit diff --git a/g1sms/sms_BILLETCHK.sh b/g1sms/sms_BILLETCHK.sh new file mode 100755 index 0000000..b0e0c1d --- /dev/null +++ b/g1sms/sms_BILLETCHK.sh @@ -0,0 +1,76 @@ +#!/bin/bash +# If 4 words provided => Check if Billet exists and return BILLET AMOUNT VALUE +# If 7 words provided => if Billet exists, transfer AMOUNT to PHONE & destroy BILLET +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +source ./shell/init.sh +source ./shell/functions.sh +log "X sms_BILLETCHK.sh $0" + +PHONE="$1" +CODE="$2 $3" +SEC="$4 $5 $6 $7" + +# Construct billet path +bpath=$(echo "$CODE" | sed 's/ /_/g') + +if [ -d "./billets/$bpath" ] +then + SECRET=$(cat "./billets/$bpath/note.secret") + SALT=$(cat "./billets/$bpath/note.salt") + VALbillet=$(cat "./billets/$bpath/note.value") + UNIT=$(cat "./billets/$bpath/note.unit") + BILLETPUBKEY=$(cat "./billets/$bpath/note.pubkey") + + AMOUNTG1=$(./silkaj/silkaj amount "$BILLETPUBKEY") + log "Billet: $AMOUNTG1 ($VALbillet $UNIT): $BILLETPUBKEY" + + # NO GOOD SECRET + if [[ "$SEC" != "$SECRET" ]]; then + # SEND ACTUAL BILLET VALUE + mess="[G1SMS] +Billet de $VALbillet $UNIT Valide! +Valeur: $AMOUNTG1 G1 +https://www.g1sms.fr/contact" + sms_SEND "$PHONE" "$mess" + log "BILLETCHK: $VALbillet $UNIT ($AMOUNTG1 G1)" + log_history $PHONE "BILLET_CHK, $AMOUNTG1, $bpath" + else + # TRANSFER & DESTROY + sms_INIT_ACCOUNT "$PHONE" "NOSMS" + if [[ "$UNKNOWN" == "unknown" ]]; then + # Account creation + sms_INIT_ACCOUNT "$PHONE" + fi + log "./silkaj/silkaj transaction --auth-scrypt -salt=\"$CODE\" -password=\"$SEC$SALT\" --amount=\"$AMOUNTG1\" --output=\"$PUBKEY\" --comment=\"THIRD_PARTY_MANAGER:$NODE_G1PUBKEY:G1SMS:ENCAISSEMENT:$CODE\" -y" + PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$CODE" -password="$SEC$SALT" --amount="$AMOUNTG1" --output="$PUBKEY" --comment="THIRD_PARTY_MANAGER:$NODE_G1PUBKEY:ENCAISSEMENT:$CODE" -y) + + if [[ "$(echo $PAY | cut -d '|' -f 1)" != "KO" ]]; then + # DESTROY BILLET + rm -Rf ./billets/$bpath + # DESTROY PUBLIC CACHE in /tmp + if [ -d "/tmp/billets_valides/$bpath" ]; then + rm -Rf /tmp/billets_valides/$bpath + fi + + SOLDE=$(./silkaj/silkaj amount "$PUBKEY") + + mess="[G1SMS] +ENCAISSEMENT de $VALbillet $UNIT ($AMOUNTG1 G1) +dans portefeuille $UIDNA ($PHONE) +OK! +Solde: $SOLDE G1" + sms_SEND "$PHONE" "$mess" + log "BILLETCHK DESTROY: $VALbillet $UNIT ($AMOUNTG1 G1)" + log "=> $PUBKEY" + log_history $PHONE "BILLET_CHK, $AMOUNTG1, $bpath, $PUBKEY" + else + sms_ERROR "$PHONE" "Erreur! Transaction Impossible! Valeur du G1Billet $AMOUNTG1 G1. Contactez $ADMINPSEUDO : $ADMINPHONE" + fi + fi +else + sms_SEND "$PHONE" "BILLET \"$CODE\" INCONNU !!" + log_history $PHONE "BILLET_CHK, ERROR, $bpath" +fi + +log "END sms_BILLETCHK.sh" +log "~~~~~~~~~~~~~~~~~~~~~~~~~~~~" diff --git a/g1sms/sms_BILLET_MAKE.sh b/g1sms/sms_BILLET_MAKE.sh new file mode 100755 index 0000000..18c1493 --- /dev/null +++ b/g1sms/sms_BILLET_MAKE.sh @@ -0,0 +1,129 @@ +#!/bin/bash +# Make Billet fabrique l'image de 6 billets de monnaie libre +# Date de validité de 6 mois à compter du premier jour du mois courant +############################################################################ +# INSTALLER convert et qrencode: sudo apt install imagemagick qrencode +# IMPRIMANTE (http://smspi:631/) : sudo apt install printer-driver-all cups +# https://junise.wordpress.com/2015/04/12/install-online-cups-printer-in-raspberry-pi/ +############################################################################ +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +# TEST: +# ./shell/sms_BILLET_MAKE.sh "nu me ro test" "se cr et" 100 LOVE 10.04 "https://g1sms.fr" G1SMS TEST +############################################################################ +source "./shell/init.sh" +source "./shell/functions.sh" + +NUMERO="$1" +SECRET="$2" +MONTANT="$3" +UNIT="$4" +JUNE="$5" +NOTERIB="$6" +MEMBER="$7" +TRANSAC="$8" +PHONE="$9" +log "X sudo ./shell/sms_BILLET_MAKE.sh \"$1\" \"$2\" \"$3\" \"$4\" \"$5\" \"$6\" \"$7\" \"$8\"" + +if [[ "$NOTERIB" == "" || "$MEMBER" == "" ]] +then + log "ERROR MAKE BILLET" + exit +fi + +# VALIDITY? Calculate 6 month period dates +cm=$(date +%m) +cy=$(date +%Y) +valid=$(bc <<< "$cm + 6") +if [ $valid -gt 12 ] +then + valid=$(bc <<< "$valid - 12") + year=$(bc <<< "$cy + 1") +else + year=$cy +fi +valid="0${valid:0:2}" +# ADD VALIDITY to convert: -pointsize 20 -draw 'text 380,410 "'"A encaisser avant le 01/$valid/$year"'"' \ + +# ADD Avatar on G1 Logo SouthEast +if [[ $(file "./wallets/$PHONE/$PHONE.avatar.png" | grep 'PNG') ]]; then + composite -compose Over -gravity East -geometry +15+0 -dissolve 33% "./wallets/$PHONE/$PHONE.avatar.png" "./shell/Oeuro.jpg" "/tmp/$NUMERO.jpg" + composite -compose Over -gravity West -geometry +15+0 -dissolve 33% "./wallets/$PHONE/$PHONE.avatar.png" "/tmp/$NUMERO.jpg" "/tmp/$NUMERO.jpg" +else + composite -compose Over -gravity East -geometry +15+0 -dissolve 33% "./shell/G1Anar.png" "./shell/Oeuro.jpg" "/tmp/$NUMERO.jpg" + composite -compose Over -gravity West -geometry +15+0 -dissolve 33% "./shell/G1Anar.png" "/tmp/$NUMERO.jpg" "/tmp/$NUMERO.jpg" +fi + +# Add G1Billet_LOVE.png logo (250px) +composite -compose Over -gravity SouthWest -geometry +50+50 -dissolve 70% "./shell/G1Billet_LOVE.png" "/tmp/$NUMERO.jpg" "/tmp/$NUMERO.jpg" + +# Prepare BILLET qrcode verification URL +qrencode -s 3 -o "/tmp/$NUMERO_NOTERIB.png" "$NOTERIB" + +# BILL PUBKEY means Someone can Add amount to it !!! +# Add verification QRCode +composite -compose Over -gravity NorthEast -geometry +50+25 "/tmp/$NUMERO_NOTERIB.png" "/tmp/$NUMERO.jpg" "/tmp/$NUMERO.jpg" + +# Add June logo +case "$MONTANT" in + 10) + convert "./shell/g1.png" -fuzz 20% -fill grey -opaque '#e5912b' "/tmp/g1.png" + ;; + 20) + convert "./shell/g1.png" -fuzz 20% -fill green -opaque '#e5912b' "/tmp/g1.png" + ;; + 50) + convert "./shell/g1.png" -fuzz 20% -fill orange -opaque '#e5912b' "/tmp/g1.png" + ;; + 100) + convert "./shell/g1.png" -fuzz 20% -fill blue -opaque '#e5912b' "/tmp/g1.png" + ;; + 200) + convert "./shell/g1.png" -fuzz 20% -fill purple -opaque '#e5912b' "/tmp/g1.png" + ;; + 500) + convert "./shell/g1.png" -fuzz 20% -fill red -opaque '#e5912b' "/tmp/g1.png" + ;; + 1000) + convert "./shell/g1.png" -fuzz 20% -fill black -opaque '#e5912b' "/tmp/g1.png" + ;; + *) + cp "./shell/g1.png" "/tmp/g1.png" + ;; +esac +composite -compose Over -gravity SouthEast -geometry +20+20 -dissolve 90% "/tmp/g1.png" "/tmp/$NUMERO.jpg" "/tmp/$NUMERO.jpg" + +DUPART=$(bc -l <<< "scale=2; $MONTANT / 100") +# ADD 0 to <1 DUPART +testdu=$( echo "${DUPART} < 1" | bc -l ) +if [[ "$testdu" -eq "1" ]]; then + DUPART="0${DUPART}" +fi + +SIMPLEPHONE=$(echo $MASTERPHONE | sed 's/\+33/0/g') + +convert -font 'Liberation-Sans' \ +-pointsize 120 -fill black -draw 'text 200,220 "'"$DUPART DU"'"' \ +-pointsize 45 -draw 'text 550,270 "'"$MONTANT $UNIT"'"' \ +-pointsize 35 -draw 'text 50,60 "'"https://g1sms.fr _ G1Billet _ $JUNE G1"'"' \ +-pointsize 30 -draw 'text 60,100 "'"Identifiant: $NUMERO"'"' \ +-pointsize 22 -fill black -draw 'text 380,340 "'"Code Secret: $SECRET"'"' \ +-pointsize 22 -fill black -draw 'text 260,408 "'"Porte Monnaie Libre!! A utiliser avant le 01/$valid/$year"'"' \ +-pointsize 20 -draw 'text 15,442 "'"Utilisation: CHK $NUMERO (+ code secret) par SMS au $SIMPLEPHONE ou https://cesium.app"'"' \ +"/tmp/$NUMERO.jpg" "/tmp/BILL.$year.$valid.$NUMERO.$MONTANT.$UNIT.jpg" + +# Payable par SMS en envoyant les codes grattant la case comportant le SECRET +# "CHK $NUMERO $SECRET" + +if [[ "$TRANSAC" == "TEST" ]]; then + exit +else + # Move billet to MEMBER folder 6 month later + mkdir -p "./billets/MEMBERS/$MEMBER/" + mv "/tmp/BILL.$year.$valid.$NUMERO.$MONTANT.$UNIT.jpg" "./billets/MEMBERS/$MEMBER/" + # Clean TEMP files + rm "/tmp/$NUMERO_NOTERIB.png" + rm "/tmp/$NUMERO.jpg" +fi + +log "END sms_BILLET_MAKE.sh" +log "~~~~~~~~~~~~~~~~~~~~~~~~~~~~" diff --git a/g1sms/sms_COUNT.sh b/g1sms/sms_COUNT.sh new file mode 100755 index 0000000..db68e8c --- /dev/null +++ b/g1sms/sms_COUNT.sh @@ -0,0 +1,77 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +source ./shell/init.sh +source ./shell/functions.sh +log "X sms_COUNT.sh ($1=phone $2=NOSMS)" +PHONE=$1 +TODAY=$(date '+%Y%m%d') +# Initialise PHONE, PIN, PUBKEY, UNIT +sms_INIT_ACCOUNT "$PHONE" "NOSMS" +if [[ $UNKNOWN == "unknown" && "$PHONE" != "" ]]; then + sms_ERROR "$PHONE" "Porte-monnaie inconnu. Envoyez N (suivi de votre Pseudo membre) pour le créer." + exit +fi + +# Check account amount +declare -a accounting +accounting=($(check_account)) +log "$(declare -p accounting)" +AMOUNTG1=${accounting[0]} +AMOUNT=${accounting[1]} +UNIT=${accounting[2]} + +# SEARCH FOR VIREMENT +if [[ -f ./wallets/$PHONE/VIREMENTS.gpg ]]; then + echo "FOUND $file decrypting with Node key" + echo "${GPGPASS}" | gpg -d -q --output "/tmp/VIREMENTS.$PHONE" --yes --pinentry-mode loopback --passphrase-fd 0 "$file" + declare -a LIST + num=0 + cat /tmp/VIREMENTS.$PHONE | while read LIST; do + if [[ ${LIST[0]} -gt $TODAY ]]; then + ((num++)) + todo="$todo +${LIST[0]}: ${LIST[3]} G1 vers ${LIST[5]}" + fi + done + rm "/tmp/VIREMENTS.$PHONE" +fi + +# LOG +log "Solde = $AMOUNTG1 ($UNIT)" + +# If script control only run: NOSMS +if [ "$2" != "NOSMS" ]; then + if [[ "$AMOUNT" != "" ]]; then + mess="[G1sms+] +ID: $UIDNA +$AMOUNT $UNIT ($AMOUNTG1 G1) +=> $MEMBER +$MEMRIB +https://cesium.app" + # Send response SMS + sms_SEND "$PHONE" "$mess" + sms_SEND "$PHONE" "$PUBKEY" + + # CHECK NEXT VIREMENTS + if [[ $num -gt 0 ]]; then + sms_SEND "$PHONE" "Reste $num Virements récurrents +$(echo $todo | head -n 2) +... + +$(echo $todo | tail -n 1)"; + fi + log_history $PHONE "SOLDE, $AMOUNTG1" + else + sms_ERROR "$PHONE" "Problème de dialogue silkaj, Serveur $NEWDUNITER... Essayez dans 1 minute SVP..." + fi +else + echo $AMOUNTG1 +fi + +log "END sms_COUNT.sh" +log "~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +exit diff --git a/g1sms/sms_DESTROY.sh b/g1sms/sms_DESTROY.sh new file mode 100755 index 0000000..4b53d1c --- /dev/null +++ b/g1sms/sms_DESTROY.sh @@ -0,0 +1,78 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +source ./shell/init.sh +source ./shell/functions.sh +log "${c_yellow}__SUB:sms_DESTROY.sh: START ($1=phone, $2=uid)$c_" + +PHONE="$1" +MEMBERUID="$2" +TODAY=$(date '+%Y%m%d') + +if [[ -f "./wallets/$PHONE/VIREMENTS" ]]; then +# CHECK IF ALL DONE. + log "__SUB:sms_DESTROY.sh: FOUND "./wallets/$PHONE/VIREMENTS" decrypting with Node key" + echo "${GPGPASS}" | gpg -d -q --output "/tmp/VIREMENTS.$PHONE" --yes --pinentry-mode loopback --passphrase-fd 0 "./wallets/$PHONE/VIREMENTS.gpg" + for next in $(cat /tmp/VIREMENTS.$PHONE | cut -d ' ' -f 1); do + if [[ $next -ge $TODAY ]]; then + log "__SUB:sms_DESTROY.sh: VIREMENT $next >= $TODAY" + sms_ERROR "$PHONE" "Votre portefeuille comporte des virements non réglés... FERMETURE IMPOSSIBLE!" + exit + else + log "__SUB:sms_DESTROY.sh: VIREMENT $next ${c_green}OK$c_" + fi + done +fi + +# Initialise PHONE, PIN, PUBKEY, UNIT ... +sms_INIT_ACCOUNT "$PHONE" +if [[ "$MEMBERUID" == "DON" || "$MEMBERUID" == "" || "$MEMBERUID" == "$MEMBER" ]]; then + # OK THAT GUYS KNOWS something (TODO Secure better with double authentification, with email or second phone number...) + # IF no Dest PubKey (no member) or DON, then NODE_G1PUBKEY is collecting LOVE money. + if [[ $MEMRIB == "" || "$MEMBERUID" == "DON" ]]; then MEMBER=$ADMINPSEUDO; MEMRIB=$NODE_G1PUBKEY; fi + + AMOUNTG1=$(./silkaj/silkaj amount "$PUBKEY") + GETLIMIT=$(bc <<< "$AMOUNTG1 - $LIMIT") + PAY=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$GETLIMIT" --output="$MEMRIB" --comment="[G1sms+] Wallet DESTROY $MEMBER $MEMBERUID" -y) + sleep 5 + back=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$LIMIT" --output="$NODEPUB" --comment="[G1sms+] Wallet DESTROY Send $LIMIT To NODE" -y) + + if [[ "$(echo $PAY | cut -d '|' -f 1)" != "KO" && "$PAY" != "" && "$(echo $back | cut -d '|' -f 1)" != "KO" ]]; then + # DESTROY FILESYSTEM AND G1sms WALLET SWARM REFERENCE + if [[ "$PHONE" != "" ]]; then +# SEND SMS BEFORE DELETE FOLDER +mess="[G1sms+] $PAY +Portefeuille détruit! +Viré vers $MEMBER +$MEMRIB + +Merci, à bientôt. +$ADMINPSEUDO @ $NODEUIDNA +$back" +sms_SEND "$PHONE" "$mess" + + rm -Rf ./wallets/$PHONE; + rm -Rf ./wallets_swarm/$PHONE; + cents=$(echo $(bc -l <<< "scale=0; $GETLIMIT * 100") | cut -d '.' -f 1) + move_g1cents "$PHONE" "$MEMRIB" "$cents" + cents=$(echo $(bc -l <<< "scale=0; $LIMIT * 100") | cut -d '.' -f 1) + move_g1cents "$PHONE" "$NODEPUB" "$cents" + I=$(ipfs_node_wallets_add) + log "__SUB:sms_DESTROY.sh: WALLET DESTROYED : $PHONE / $UIDNA / $MEMBER : ${c_green}OK$c_" + fi + else + new=$(./shell/checknodes.sh "BAN") + sms_ERROR "$PHONE" "Problème de payement avec silkaj (changement de serveur $new): $PAY"; + log "${c_red}__SUB:sms_DESTROY.sh: END WITH ERRORS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~$c_" + exit + fi +fi + +# Remove contact from database +rm_contact $PHONE $MEMBERUID && log "${c_green}Contact has been deleted from database$c_" || log "${c_red}Contact can't be deleted database$c_" + +log "${c_yellow}__SUB:sms_DESTROY.sh: END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~$c_" +exit diff --git a/g1sms/sms_EMAIL.sh b/g1sms/sms_EMAIL.sh new file mode 100755 index 0000000..f70b16b --- /dev/null +++ b/g1sms/sms_EMAIL.sh @@ -0,0 +1,58 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +# sudo apt install ssmtp mpack +# Configure in /etc/ssmtp +# Send email with file attachement: mpack -s "Logo G1Tag" /home/pi/G1sms+/G1Tag.png dest@email.ext + +source ./shell/init.sh +source ./shell/functions.sh + +log "__SUB:sms_EMAIL.sh.sh: START ($1=phone, $2=mail)" + +phone="$1" +mail="$2" + +MAILFILE="./wallets/$phone/$phone.email" # Contains the member EMAIL (Send BILLET) + +# Initialise PHONE, PIN, PUBKEY, UNIT ... +sms_INIT_ACCOUNT "$phone" "NOSMS" +if [[ $UNKNOWN == "unknown" || "$MEMBER" == "" ]]; then + sms_ERROR "$phone" "Porte-monnaie non identifié. +Envoyez N suivi de votre pseudo membre (en respectant Majuscule et minuscule)." + exit +fi + +if [[ "$mail" != "" ]]; then + echo "$mail" > "$MAILFILE" + ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "$MAILFILE" -o "$MAILFILE.node.crypt" + echo "" > "$MAILFILE" + log "__SUB:sms_EMAIL.sh.sh: EMAIL $MEMBER ($PHONE) NOUVEAU: $mail... Publishing to IPFS" + ipfs_node_wallets_add +else + mail=$MAIL +fi + +# SEND EMAIL WITH ssmtp +SUBJECT="[G1sms+] $MEMBER, Message de votre portefeuille monnaie libre $UIDNA ($PHONE)" +MESSAGE="Bonjour $MEMBER\n\nVotre porte-monnaie G1sms $UIDNA ($PHONE) a choisi votre email comme contact.\nPour commander vos G1Billets, envoyez par SMS à $MASTERPHONE :\nBILL 10/20/50/100/200/500/1000\n\n\nA bientot <3\n$ADMINPSEUDO ($ADMINPHONE)" +cat ./email.txt | sed s/EMAIL/"${mail}"/g | sed s/SUBJECT/"${SUBJECT}"/g | sed s/MESSAGE/"${MESSAGE}"/g | ssmtp ${mail} +mpack -s "[G1sms+] $PHONE, $UIDNA :: Envoyer 'BILL nnn' à $MASTERPHONE pour fabriquer des G1Billets (ci-joint exemple de verso)" ./Dos_G1Billets.odt ${mail} + +log "__SUB:sms_EMAIL.sh.sh: Send welcome EMAIL to $mail via ssmtp" +log_history $PHONE "EMAIL, $mail" + +mess="[G1sms+] +$MEMBER +Votre email est : $mail +Mettez le à jour, si cela est nécessaire..." + +sms_SEND "$phone" "$mess" + + +log "END sms_EMAIL.sh" +log "~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +exit diff --git a/g1sms/sms_ERROR.sh b/g1sms/sms_ERROR.sh new file mode 100755 index 0000000..6bac774 --- /dev/null +++ b/g1sms/sms_ERROR.sh @@ -0,0 +1,16 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +source ./shell/init.sh +source ./shell/functions.sh +log "X sms_ERROR.sh ($1=phone, $2=message)" + +MESS="Commande inconnue $2." + +# Send response SMS +$(sms_ERROR "$1" "$MESS") + +exit diff --git a/g1sms/sms_G1TAG.sh b/g1sms/sms_G1TAG.sh new file mode 100755 index 0000000..8e7bef9 --- /dev/null +++ b/g1sms/sms_G1TAG.sh @@ -0,0 +1,302 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.2020 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +########################################################################################### +# == G1tag == +# IPFS ZEN WALLETS +# RJ: READ G1Tag +# BJ: WRITE G1Tag +# WRITE ACCESS ONLY for B possessor and NODE G1Tag Creator +# TODO: MAKE http API for G1Tag accessible through local ipfs gateway !!!! +# https://github.com/typicode/lowdb USE json and ipfs DAG??! +# +# TAG 250 => Imprime un G1Tag rempli de 250 UNIT +# TAG 2 100 => Imprime 100 G1Tag BON de 2 UNIT +# PHONE any ./wallets/IDs +# TODO: for multi-channel -> Use HASHLINK + UIDNA + NODE_UIDNA + AMOUNT ... +########################################################################################### +source ./shell/init.sh +source ./shell/functions.sh +log "__SUB:sms_G1TAG.sh: START ($1=PHONE, $2=AMOUNT, $3=NUMBER)" + +PHONE=$1 +AMOUNT=$2 +if [[ "$AMOUNT" == "" ]]; then AMOUNT=0; fi +NUMBER=$3 +# DEFAULT TYPE IS PRINTED G1TAG +# BUT COULD BE USED TO CARRY VALUE INTO IPFS STORED FILES +# FIRST ATTEMPT IS TO COPY YOUTUBE INTO M4A AND LEND THEM G1. +TYPE=$4 # This is the type of passenger: YOUTUBE, NODE (EMPTY = default means sticker printed G1Tag) +# Give ipfs hash of any External ID like YOUTUBEID ;) +PASSENGER=$5 + +# == G1tag == +# IPFS G1sms Wallet to TAG creation/relation manager +# TODO Modulate access to TAGs with IPNS publish key cypher +# A/R: (G1TagID) +# B: (GPG Key for HUMAN WRITE access) +# J: (IPNS link to G1tag storage) +# MASTER: Global SWARM Access +############################################################################################### +# Initialize PHONE, PIN, PUBKEY, UNIT, MEMBER, MEMRIB, EMAIL, etc... +sms_INIT_ACCOUNT "$PHONE" "NOSMS" + +if [[ $UNKNOWN == "unknown" ]]; then + sms_ERROR "$PHONE" "Porte-monnaie inconnu. Envoyez N (suivi de votre Pseudo membre) pour le créer." + log "__SUB:sms_G1TAG.sh: Porte-monnaie inconnu" + exit +fi + +########################################################### +# CALCULATE if wallet have enough for VIR+PERCENT +AMOUNT=$2 # BE CAREFULL AMOUNT was changed by 1st sms_INIT_ACCOUNT!! +if [[ "$AMOUNT" == "" ]]; then AMOUNT=0; fi +if [[ ! $PASSENGER && "$NUMBER" != "" ]]; then + # MULTI TAG NUMBER ($NUMBER = How many tags to print) + AMOUNT=$(bc -l <<< "$AMOUNT * $NUMBER") +else + NUMBER=1 +fi +VIR=0 +accounting=($(make_accounting)) +log "__SUB:sms_G1TAG.sh: $(declare -p accounting)" +testmin=${accounting[0]} +VIR=${accounting[1]} +PERCENT=${accounting[2]} +CHARGE=${accounting[3]} +if [[ $testmin -eq 0 ]]; then + sms_SEND "$PHONE" "Le solde de votre Porte-monnaie est insuffisant. Minimum requis = ${CHARGE} + ${PERCENT} (+ ${LIMIT}) G1! Rechargez avec https://cesium.app" + exit +fi + +##### IS G1DAB NODE? +if [[ ! $PASSENGER && ! $G1DAB ]]; then + if [[ -f ./wallets/$PHONE/ipfsid.G1TAGNODE ]]; then + DABnode=$(cat ./wallets/$PHONE/ipfsid.G1TAGNODE) + if [[ "$DABnode" == "$IPFSNODEID" ]]; then + sms_ERROR "$PHONE" "IMPRIMANTE G1Tag sur $DABnode non détectée!! Choisissez un autre G1Dab..." + log "__SUB:sms_G1TAG.sh: IMPRIMANTE G1Tag non détectée!!" + exit + fi + fi +fi + +# TODO: SEARCH PROXIMITY DAB LOCATION (GeoPoint + GPS)... +# for node in ./wallets_swarm/.*/*.where; do +# done +########################################################### +# silkaj NODE CHANGE !!! +#SILKAJNODE=$(./shell/checknodes.sh) +#log "NEW SILKAJ NODE: $SILKAJNODE" + +########################################### +# PAY VIR + PERCENT G1 +ML=$(bc -l <<< "scale=2; $VIR + $PERCENT") +PAY=$(./shell/timeout.sh -t 29 ./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$ML" --output="$NODE_G1PUBKEY" --comment="[G1sms+] ACHAT $3 G1Tag(s) - $2 $UNIT" -y) +if [[ "$PAY" == "" || "$(echo $PAY | cut -d '|' -f 1)" == "KO" ]]; then + # new=$(./shell/checknodes.sh "BAN") + sms_ERROR "$PHONE" "Il est survenu un problème lors de votre virement: $PAY / Silkaj: $new"; + exit +else + cents=$(echo $(bc -l <<< "scale=0; $ML * 100") | cut -d '.' -f 1) + move_g1cents "$PHONE" "$NODE_G1PUBKEY" "$cents" +fi + +############################################# +log "__SUB:sms_G1TAG.sh: CREATE $NUMBER x $2 $UNIT G1Tag(s) for $MEMBER ($PHONE) : PAYEMENT $ML G1 to $NODE_G1PUBKEY: $PAY" +c=0 +while [[ $c -lt $NUMBER ]]; do + ((c++)) + # Nom du G1Tag imprimé du le QRCode RJ + AA=$(./shell/diceware.sh 6 | xargs); # Nom = Diceware de 6 mots + RR=$(echo ${AA} | sed s/\ //g ); # Nom concaténé + PR=$(echo ${AA} | cut -d ' ' -f 1 ); # Prénom du G1Tag + # Create Unique G1tag in all SWARM! + while [[ $(ls ./wallets_swarm/.Qm*/TAG/${RR}) ]]; do + AA=$(./shell/diceware.sh 6 | xargs); RR=$(echo ${AA} | sed s/\ //g ); PR=$(echo ${AA} | cut -d ' ' -f 1 ); + done + # Clef de chiffrage PGP imprimée sur le QRCode BJ + BB=$(date +%N | sha256sum | base64 | head -c 32) #YjY4MDc3OTVjNmUxN2JhYWVjYmU3MDcy + # BB=$(openssl rand -base64 32 | base64) #Yk8yMnVtdzZmendJbHNoK2Q0b0liakRpNHNJUk9UQW5Dd042cFdDODlJTT0K + +# G1Tag init : Nom et usage des fichiers du G1Tag +# TODO CHECK _nanodate to detect bad nodes/tx behaviour... and banish them) +TAGDATE="./TAG/${RR}/TAG_nanodate" # Nanodate notification (ntpdate in init.sh for NODE sync in case of +TAGNODEID="./TAG/${RR}/TAG_nodeid" # G1sms+ NODE IPFS ID managing that G1Tag +TAGID="./TAG/${RR}/TAG_id" #Nom du TAG +TAGCURRENCY="./TAG/${RR}/TAG_currency" # ZEN (0.01 G1) +TAGAMOUNT="./TAG/${RR}/TAG_amount" # Tag amount. It is! +TAGTYPE="./TAG/${RR}/TAG_type" # G1 Tag type +TAGPASSENGER="./TAG/${RR}/TAG_passenger" # Reference to G1Tag owner/counter put in "./wallets/.$IPFSNODEID/TAG/${J}" +# ... GESTION DE LA CLEF DE PUBLICATION IPNS ".ipfs/keystore/${RR}" ... +TAGPUBLISH_B_GPG="./TAG/${RR}/TAG_publishkey.B.gpg" # ipns publish key B PGP cyphered +TAGPUBLISH_PHONE_CRYPT="./TAG/${RR}/TAG_publishkey.phone.crypt" # natools.py crypt with creator G1sms Wallet PUBKEY +TAGPUBLISH_NODE_CRYPT="./TAG/${RR}/TAG_publishkey.$NODE_UIDNA.crypt" # natools.py crypt with NODE G1sms Wallet PUBKEY +TAGPUBLISH_SWARM_CRYPT="./TAG/${RR}/TAG_publishkey.swarm.crypt" # natools.py crypt with SWARM G1sms Wallet PUBKEY +TAGN="./TAG/${RR}/TAG_n" # Tag modification number (0 first) +TAGIPNS="./TAG/${RR}/TAG_ipns" # /ipns/Qm... link to last G1Tag version +TAGCHAIN="./TAG/${RR}/TAG_chain" # contains IPFS current ipfs hash + + # WRITE MULTITAG FILES with AMOUNT + mkdir -p ./TAG/${RR} + + log "__SUB:sms_G1TAG.sh: G1Tag: $RR / ${NANODATE}" + log "__SUB:sms_G1TAG.sh: MEMRIB: $MEMRIB" + log "__SUB:sms_G1TAG.sh: A: ${AA}" + log "__SUB:sms_G1TAG.sh: B: ${BB}" + log "__SUB:sms_G1TAG.sh: USER_KEY: $TAGPUBLISH_B_GPG" + log "__SUB:sms_G1TAG.sh: PHONE G1WALLET_KEY: $TAGPUBLISH_PHONE_CRYPT" + log "__SUB:sms_G1TAG.sh: NODE G1WALLET_KEY: $TAGPUBLISH_NODE_CRYPT" + log "__SUB:sms_G1TAG.sh: SWARM G1WALLET_KEY: $TAGPUBLISH_SWARM_CRYPT" + #################### + + #################################################### + # IPFS files are created and calculated immutable I + #################################################### + # A or R is Human readable G1tag Name + echo "${AA}" > "$TAGID" + echo "0" > "$TAGN" + echo "${NANODATE}" > "$TAGDATE" + echo "${IPFSNODEID}" > "$TAGNODEID" + echo "${TYPE}" > "$TAGTYPE" + + echo "ZEN" > "$TAGCURRENCY" + ZEN=$(bc -l <<< "$2 * 100") # TODO, Test. Unit != G1 may lead to miss calculation BUG?? + echo "${ZEN}" > "$TAGAMOUNT" + + # Création de la clef ${R} IPNS qui permet de publier des changements sur le TAG! + if [[ ! -f "/home/$YOU/.ipfs/keystore/${RR}" ]]; then + su $YOU -c "ipfs key gen -t rsa -s 2048 ${RR}" + fi + + # GIVE QRCODE BJ ACCESS TO G1TAG + # Enregistrement de la clef de publication IPNS du wallet ${R} cryptée par B + echo "${BB}" | gpg -q --output "$TAGPUBLISH_B_GPG" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "/home/$YOU/.ipfs/keystore/${RR}" + + # GIVE PHONE CREATOR G1WALLET ACCESS TO ZEN TAG + # Enregistrement de la clef de publication chiffrée par $PUBKEY la clef publique du portefeuille G1 createur. + ./shell/natools.py encrypt -p $PUBKEY -i "/home/$YOU/.ipfs/keystore/${RR}" -o "$TAGPUBLISH_PHONE_CRYPT" + + # GIVE NODE_UIDNA ACCESS TO ZEN TAG + ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "/home/$YOU/.ipfs/keystore/${RR}" -o "$TAGPUBLISH_NODE_CRYPT" + + # GIVE SWARM ACCESS TO ZEN TAG + ./shell/natools.py encrypt -p $SWARM_G1PUBKEY -i "/home/$YOU/.ipfs/keystore/${RR}" -o "$TAGPUBLISH_SWARM_CRYPT" + + ########################################################### + # TAG IPFS STORAGE & G1Tag IPNS PUBLISHING + ########################################################### + I=$(su $YOU -c "ipfs add -qr ./TAG/${RR} | tail -n 1") + # MEMORIZE FOR CHAINING FUTURE CHANGES ( Block0 TAG version has no file published ;) + echo "${I}" > "$TAGCHAIN" + # Activate chain + I=$(su $YOU -c "ipfs add -qr ./TAG/${RR} | tail -n 1") + # IPFS Hash for Immutable G1tag data + J=$(su $YOU -c "ipfs name publish -k ${RR} --quieter /ipfs/${I}") + echo "${J}" > "$TAGIPNS" + + # KEEP G1Tag J MEMORY in NODE ./wallets/.$IPFSNODEID/TAG/ (TODO: OPTIMIZE SWARM SYNC and REPUBLISH) + mkdir -p "./wallets/.$IPFSNODEID/TAG/" + # WRITE PASSENGER to J Link (G1Tag is stick to it: PHONE, NODE, FILE ) + # TODO USE SHA256 ID !!! + echo "$PHONE" > "./wallets/.$IPFSNODEID/TAG/${J}" + if [[ $PASSENGER ]]; then + HPASSENGER=$(echo -n $PASSENGER | sha256sum | cut -d ' ' -f 1) + echo "$HPASSENGER" > "./wallets/.$IPFSNODEID/TAG/${J}"; + fi + + ########################################################### + log "__SUB:sms_G1TAG.sh: TAG: ipfs ls /ipns/${J}" + if [[ ! $PASSENGER ]]; then + # QR CODE LECTURE + qrencode -s 5 -o "./TAG/${RR}/TAG_READ.png" "RJ:${RR}#${J}" + log "__SUB:sms_G1TAG.sh: CREATE READ QRCODE -> RJ: ${RR} # ipfs ls /ipns/${J}" + + # QR CODE ECRITURE + qrencode -s 5 -o "./TAG/${RR}/TAG_WRITE.png" "BJ:${BB}#${J}" + log "__SUB:sms_G1TAG.sh: CREATE WRITE QRCODE [] BJ: ${BB} # ipfs ls /ipns/${J}" + + # COMPOSE G1TAG PRINT + TAG_READ.png + TAG_WRITE.png + composite -compose Over -resize 133% -gravity West "./TAG/${RR}/TAG_READ.png" "./shell/g1tag.png" "./TAG/${RR}/${RR}.png" + + composite -compose Over -gravity SouthEast "./TAG/${RR}/TAG_WRITE.png" "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" + + # ADD Avatar in the Center +# if [[ $(file "./wallets/$PHONE/$PHONE.avatar.png" | grep 'PNG') ]]; then +# composite -compose Over -resize 150% -gravity Center "./wallets/$PHONE/$PHONE.avatar.png" "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" +# else +# composite -compose Over -resize 100% -gravity Center "./shell/G1Anar.png" "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" +# fi + + + convert -pointsize 60 -fill black -gravity Center -draw 'text 0,-100 "'"$2"'"' "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png"; + + convert -pointsize 40 -fill black -gravity NorthEast -draw 'text 80,0 "'"${PR}"'"' "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" + # WRITE G1Tag RR + convert -pointsize 40 -fill black -gravity SouthWest -draw 'text 3,0 "'"${RR}"'"' "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" + + # ROTATION (FIXE AVATAR & CHIFFRE)? + # convert "./TAG/${RR}/${RR}.png" -rotate -180 "./TAG/${RR}/${RR}.png" + # QL-700 PRINT PREPARE + + if [[ -f "./wallets/$PHONE/ipfsid.G1TAGNODE" ]]; then + destnode=$(cat "./wallets/$PHONE/ipfsid.G1TAGNODE") + if [[ "$destnode" == "" || "$destnode" == "$IPFSNODEID" ]]; then + log "__SUB:sms_G1TAG.sh: Local PRINT ${RR} # ipfs ls /ipns/${J}" + brother_ql_create --model QL-700 "./TAG/${RR}/${RR}.png" --label-size 62 > "./TAG/${RR}/${RR}.bin" + brother_ql_print "./TAG/${RR}/${RR}.bin" /dev/usb/lp0 + else + # PRINT ON ANOTHER G1Dab. Send files to G1Tag Printer TODO: Could use DESTNODEPUB instead of NODE_G1PUBKEY ? + log "__SUB:sms_G1TAG.sh: Remote PRINT :: ./wallets/.$destnode/PRINT/${RR}.bin " + mkdir -p "./wallets/.$destnode/PRINT/" + # TODO: USE $DEST_G1PUBKEY is better + ./shell/natools.py encrypt -p $NODE_G1PUBKEY -i "./TAG/${RR}/${RR}.png" -o "./wallets/.$destnode/PRINT/${RR}.bin" + fi + else + # + log "__SUB:sms_G1TAG.sh: Becoming default PRINTER :: $IPFSNODEID" + echo "$IPFSNODEID" > "./wallets/$PHONE/ipfsid.G1TAGNODE" + brother_ql_create --model QL-700 "./TAG/${RR}/${RR}.png" --label-size 62 > "./TAG/${RR}/${RR}.bin" + brother_ql_print "./TAG/${RR}/${RR}.bin" /dev/usb/lp0 + destnode="$IPFSNODEID" + fi + fi +done + +#################################################### +# PRINT $PHONE WALLET PUBKEY +#################################################### +if [[ "$destnode" == "" || "$destnode" == "$IPFSNODEID" ]]; then + qrencode -s 5 -o "/tmp/G1PubQR.$PHONE.png" "$(cat ./wallets/$PHONE/$PHONE.pub)" + composite -compose Over -gravity West "/tmp/G1PubQR.$PHONE.png" "./shell/g1tag.png" "/tmp/G1PubQR.$PHONE.png" + + if [[ $(file "./wallets/$PHONE/$PHONE.avatar.png" | grep 'PNG') ]]; then + composite -compose Over -gravity Center "./wallets/$PHONE/$PHONE.avatar.png" "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" + fi + if [[ -f ./wallets/$PHONE/$PHONE.uidrib ]]; then + qrencode -s 6 -o "/tmp/G1MemQR.$PHONE.png" "$(cat ./wallets/$PHONE/$PHONE.uidrib)"; + composite -compose Over -gravity SouthEast "/tmp/G1MemQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" && rm /tmp/G1MemQR.$PHONE.png + fi + + convert -pointsize 40 -fill black -gravity NorthEast -draw 'text 100,0 "'"G1 $MEMBER"'"' "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" + convert -pointsize 40 -fill black -gravity SouthWest -draw 'text 10,0 "'"$UIDNA"'"' "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" + #convert -pointsize 60 -fill black -gravity Center -draw 'text 350,80 "'"$PHONE"'"' "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" + brother_ql_create --model QL-700 "/tmp/G1PubQR.$PHONE.png" --label-size 62 > "/tmp/G1PubQR.$PHONE.bin" + brother_ql_print "/tmp/G1PubQR.$PHONE.bin" /dev/usb/lp0 + rm -f /tmp/G1PubQR.* +fi + +# Send dest SMS +mess_dest="[G1sms+] +Vos $NUMBER G1Tag(s) de $2 $UNIT sont imprimé(s). +Veuillez les récupérer ici: +$ADRESSE +Merci" +sms_SEND "$PHONE" "$mess_dest" + +ipfs_node_wallets_add + +log "__SUB:sms_G1TAG.sh: END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +exit diff --git a/g1sms/sms_NEW.sh b/g1sms/sms_NEW.sh new file mode 100755 index 0000000..4bfa424 --- /dev/null +++ b/g1sms/sms_NEW.sh @@ -0,0 +1,60 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +source ./shell/init.sh +source ./shell/functions.sh +log "${c_yellow}X sms_NEW.sh ($1=phone, $2=uid)$c_" + +PHONE="$1" +MEMBERUID="$2" + +# Initialise PHONE, PIN, PUBKEY, UNIT +sms_INIT_ACCOUNT "$PHONE" +if [[ "$MEMBERUID" != "" && "$MEMBERUID" != "N" && "$MEMBERUID" != "D" && "$MEMBERUID" != "NOUV" ]]; then + # UID RECEIVED in SMS + VIRDEST=$MEMBERUID + MEMRIB=$(sms_uid2key "$MEMBERUID" "$PHONE" "$PIN") + if [[ $MEMRIB == "" ]]; then exit; fi + MEMBER="$MEMBERUID" +fi + +sms_INIT_ACCOUNT "$PHONE" "NOSMS" +# Check account amount +countvalues=($(check_account)) +log "$(declare -p countvalues)" +AMOUNTG1=${countvalues[0]} +AMOUNT=${countvalues[1]} +UNIT=${countvalues[2]} + +mess="[G1sms+] +Id: $UIDNA +Solde: $AMOUNT $UNIT +DAB: $DABID +--- +https://cesium.app +* Identifiant =" +sms_SEND "$PHONE" "$mess" +sleep 2 +sms_SEND "$PHONE" "$PHONE" +sleep 2 +sms_SEND "$PHONE" "* Mot de passe =" +sleep 2 +sms_SEND "$PHONE" "$PIN" +sleep 2 +sms_SEND "$PHONE" "* Clef Publique (RIB) =" +sleep 2 +sms_SEND "$PHONE" "$PUBKEY" +sleep 2 +[[ $MEMRIB != "" ]] && sms_SEND "$PHONE" "Compte relié? $MEMBER $MAIL +$MEMRIB" + +# Add contact to database +add_contact $PHONE $MEMBERUID && log "${c_green}Contact has been added to database$c_" || log "${c_red}Contact can't be added to database$c_" + +log "${c_yellow}END sms_NEW.sh$c_" +log "~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +exit + diff --git a/g1sms/sms_PAY.sh b/g1sms/sms_PAY.sh new file mode 100755 index 0000000..d989cc9 --- /dev/null +++ b/g1sms/sms_PAY.sh @@ -0,0 +1,98 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +source ./shell/init.sh +source ./shell/functions.sh +log "__SUB:sms_PAY.sh: START ($1=PHONE, $2=PHONEDEST, $3=AMOUNT)" + +phone="$1" +PHONEDEST="$2" + +# Initialise PHONE, PIN, PUBKEY, UNIT +sms_INIT_ACCOUNT "$phone" "NOSMS" +pin=$PIN +if [[ $UNKNOWN == "unknown" ]]; then + sms_ERROR "$phone" "Porte-monnaie inconnu. Envoyez N (suivi de votre Pseudo membre) pour le créer." + exit +fi + +########################################################### +# CALCULATE if wallet have enough for VIR+PERCENT +AMOUNT="$3" +accounting=($(make_accounting)) +log "__SUB:sms_PAY.sh: $(declare -p accounting)" +testmin=${accounting[0]} +VIR=${accounting[1]} +PERCENT=${accounting[2]} +CHARGE=${accounting[3]} +if [[ $testmin -eq 0 ]]; then + sms_ERROR "$phone" "Solde de votre Porte-monnaie G1sms insuffisant. Minimum: $CHARGE G1! Rechargez avec https://Cesium.app" + exit +fi + +# Add COUNTRY code to PHONEDEST + PHONEDEST INIT +PHONEDEST="$COUNTRY${PHONEDEST:1:10}" + +# CHECK if PHONEDEST have an account in IPFS G1sms+ SWARM +if [[ -f "./wallets_swarm/$PHONEDEST/$PHONEDEST.pub" ]] +then + PUBKEYDEST=$(cat "./wallets_swarm/$PHONEDEST/$PHONEDEST.pub") + UNITDEST=$(cat "./wallets_swarm/$PHONEDEST/$PHONEDEST.unit") +else + # NO, then create NEW Wallet + sms_INIT_ACCOUNT "$PHONEDEST" + # Refreshed new values + PUBKEYDEST="$PUBKEY" + UNITDEST="$UNIT" +fi + +# Payement +PAY=$(./shell/timeout.sh -t 20 ./silkaj/silkaj transaction --auth-scrypt -salt="$phone" -password="$pin" --amount="$VIR" --output="$PUBKEYDEST" --comment="[G1sms+] PAY" -y) +if [[ "$(echo $PAY | cut -d '|' -f 1)" == "KO" || "$PAY" == "" ]]; then + sms_ERROR "$phone" "Problème de payement avec silkaj (changement de serveur $new): $PAY"; + log "__SUB:sms_PAY.sh: Problème de payement avec silkaj $new : $PAY" + exit +else + # OK: Sync g1cents TODO check move_g1cents function and generalize on all silkaj transactions + cents=$(echo $(bc -l <<< "scale=0; $VIR * 100") | cut -d '.' -f 1) + move_g1cents "$phone" "$PUBKEYDEST" "$cents" +fi + +sleep 2 + +# + G1SMS Commission +COM=$(./shell/timeout.sh -t 20 ./silkaj/silkaj transaction --auth-scrypt -salt="$phone" -password="$pin" --amount="$PERCENT" --output="$NODE_G1PUBKEY" --comment="[G1sms+] Commission" -y) +if [[ "$(echo $COM | cut -d '|' -f 1)" == "KO" || "$PAY" == "" ]]; then + new=$(./shell/checknodes.sh "BAN") + sms_ERROR "$phone" "Problème de payement avec silkaj (changement de serveur $new): $COM"; + log "__SUB:sms_PAY.sh: Problème de payement avec silkaj $new : $COM" + exit +else + # OK: Sync g1cents + cents=$(echo $(bc -l <<< "scale=0; $PERCENT * 100") | cut -d '.' -f 1) + move_g1cents "$phone" "$NODE_G1PUBKEY" "$cents" +fi + +# LOG ACCOUNT HISTORY EVENTS +log "__SUB:sms_PAY.sh: $1 => $2 = $3 $UNIT / SILKAJ == TxPay $PAY + TxCom $COM /" +log_history $phone "PAY, $VIR, $PHONEDEST, $PUBKEYDEST" + +# Send response SMS +mess_src="[G1sms+] +Envoi de $VIR G1 vers $PHONEDEST effectué! ++ Commission: $PERCENT G1" +sms_SEND "$phone" "$mess_src" + +# Send dest SMS +mess_dest="[G1sms+] Bonjour. +Un(e) ami(e) ($phone) vient de vous envoyer $VIR G1 sur votre portefeuille G1sms! +Envoyez D pour (D)étail. +A pour (A)ide..." +sms_SEND "$PHONEDEST" "$mess_dest" + + +log "__SUB:sms_PAY.sh: END ~~~~~~~~~~~~~~~~~~~~~~~~~~ " +exit diff --git a/g1sms/sms_REC.sh b/g1sms/sms_REC.sh new file mode 100755 index 0000000..911e01d --- /dev/null +++ b/g1sms/sms_REC.sh @@ -0,0 +1,170 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +# RECORD RECURRENT PAYEMENTS WITH "Cesium+ ID" Pubkey TODO cron ./wallets/$PHONE/VIREMENTS, Fusion avec sms_VIR.sh +################################################################################ +source ./shell/init.sh +source ./shell/functions.sh +log "__SUB:sms_REC.sh: START ($1=PHONE, $2=VIRDEST, $3=AMOUNT, $4=PERIOD, $5=TIME)" + +PHONE="$1" +VIRDEST="$2" +AMOUNT=$3 +PERIOD="$4" +TIME=$5 + +case "$PERIOD" in +J|D) + PERIOD="jour"; + NEXTDATE="days"; + ;; +S|W) + PERIOD="semaine"; + NEXTDATE="weeks"; + ;; +M) + PERIOD="mois"; + NEXTDATE="months"; + ;; +A|Y) + PERIOD="année"; + NEXTDATE="years"; + ;; +*) + sms_ERROR "$PHONE" "Erreur sur la période de votre virement! Jour, Semaine, Mois, Année? Valeur: J,S,M,A (ex: REC 10 Fred J 3)" + exit; + ;; +esac + +########################################################### +# Initialise PHONE, PIN, PUBKEY, UNIT +sms_INIT_ACCOUNT "$PHONE" "NOSMS" +if [[ $MEMBER == "" ]]; then MEMBER=$UIDNA; fi +########################################################### +# CHECK FOR ERRORS +if [[ $UNKNOWN == "unknown" ]]; then + sms_ERROR "$PHONE" "Porte-monnaie inconnu. Envoyez N (suivi de votre Pseudo membre) pour le créer." + exit +fi +if [[ "$MEMBER" == "" ]]; then + sms_ERROR "$PHONE" "Aucun membre associé à votre Portefeuille!? Envoyer N suivi de votre Pseudo membre pour activer les virements récurrents..." + exit +fi + +########################################################### +# CALCULATE if wallet have enough for VIR+PERCENT +AMOUNT=$(bc -l <<< "$3 * $TIME") +accounting=($(make_accounting)) +log "__SUB:sms_REC.sh: $(declare -p accounting)" +testmin=${accounting[0]} +VIR=$(bc -l <<< "scale=2; ${accounting[1]} / $TIME") +PERCENT=${accounting[2]} +CHARGE=${accounting[3]} +if [[ $testmin -eq 0 ]]; then + sms_ERROR "$PHONE" "Votre Porte-monnaie G1sms doit comporter un solde suffisant! Au minimum $CHARGE G1! Rechargez par Cesium (ou contactez https://g1sms.fr)." + exit +fi + +########################################################### +# TODO Unify REC and VIR +# FIND VIRDEST into wallets, wallest-swarm OR duniter (silkaj) +if [[ "$VIRDEST" == "" || "$VIRDEST" == "$MEMBER" ]]; then + # VIR TO MEMBER PHONE OWNER + DESTMEM="$MEMBER" + DESTRIB="$MEMRIB" + log "__SUB:sms_REC.sh: SEND TO MEMBER related wallet!!! $DESTRIB " +else + log "__SUB:sms_REC.sh: SEARCH $VIRDEST related wallet!!! $DESTRIB " + DESTMEM="$VIRDEST" + # SEARCH IN WALLETS + LOCAL=$(grep -Rwl "$DESTMEM" ./wallets/*/*.uidname | tail -n 1 | cut -f 3 -d '/') + if [[ "$LOCAL" == "" ]]; then LOCAL=$(grep -Rwl "$DESTMEM" ./wallets/*/*.uidna | tail -n 1 | cut -f 3 -d '/'); fi + if [[ "$LOCAL" != "" ]]; then + # LOCAL G1sms account + DESTRIB=$(cat ./wallets/$LOCAL/$LOCAL.pub) + DESTPHONE=$LOCAL + log "__SUB:sms_REC.sh: FOUND LOCAL ($MASTERPHONE) G1sms+ wallet: $DESTRIB ($LOCAL)" + else + # SEARCH IN WALLETS SWARM (MEMBER THEN UIDNA) + INSWARM=$(grep -Rwl "$DESTMEM" ./wallets_swarm/*/*.uidname | tail -n 1 | cut -f 3 -d '/') + if [[ "$INSWARM" == "" ]]; then INSWARM=$(grep -Rwl "$DESTMEM" ./wallets_swarm/*/*.uidna | tail -n 1 | cut -f 3 -d '/'); fi + if [[ "$INSWARM" != "" ]]; then + REMOTENODE=$(cat ./wallets_swarm/$INSWARM/MASTERPHONE.sms) + DESTRIB=$(cat ./wallets_swarm/$INSWARM/$INSWARM.pub) + DESTPHONE=$INSWARM + log "__SUB:sms_REC.sh: FOUND SWARM ($REMOTENODE) G1sms+ wallet: $DESTRIB ($INSWARM)" + else + # SEARCH WITH SILKAJ + DESTRIB=$(./silkaj/silkaj id "$DESTMEM" | grep -w "$DESTMEM" | awk '{print $2}') + log "__SUB:sms_REC.sh: OUT OFF SWARM MEMBER wallet: $DESTRIB" + fi + fi +fi + +# ADD DATES TO VIREMENTS +if [[ "$DESTRIB" != "" ]]; then + log "__SUB:sms_REC.sh: TRAITEMENT DU VIREMENT DE $AMOUNT $UNIT = 1ER VIREMENT de $VIR G1 vers $VIRDEST ($DESTRIB) $TIME FOIS. OK..." + PAY=$(./shell/timeout.sh -t 20 ./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$VIR" --output="$DESTRIB" --comment="[G1sms+] REC 1/$TIME ($PERIOD)" -y) + if [[ "$(echo $PAY | cut -d '|' -f 1)" == "KO" || "$PAY" == "" ]]; then + new=$(./shell/checknodes.sh "BAN") + sms_ERROR "$PHONE" "Problème de payement avec silkaj (changement de serveur $new): $PAY"; + log "__SUB:sms_REC.sh: END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + exit + else + cents=$(echo $(bc -l <<< "scale=0; $VIR * 100") | cut -d '.' -f 1) + move_g1cents "$PHONE" "$DESTRIB" "$cents" + fi + log "__SUB:sms_REC.sh: UPDATE ./wallets/$PHONE/VIREMENTS with FUTURE PAYEMENTS? $PAY" + + ########### MAKE ./wallets/$PHONE/VIREMENTS for NEXT ONES + if [[ -f "./wallets/$PHONE/VIREMENTS.gpg" ]]; then + # DECYPHER FILE FOR CHANGE + echo "${GPGPASS}" | gpg -d -q --output "./wallets/$PHONE/VIREMENTS" --yes --pinentry-mode loopback --passphrase-fd 0 "./wallets/$PHONE/VIREMENTS.gpg" + fi + # WRITE NEW LINES INTO AN ARRAY FILE: VIREMENTS + boucle=$((TIME - 1)) + num=0 + while [[ boucle -gt 0 ]]; do + $((boucle --)) + $((num ++)) + NEXT=$(date --date="$num $NEXTDATE" '+%Y%m%d') + # ADD NEW LINE IN VIREMENTS + echo "$NEXT $MEMBER $PHONE $VIR $DESTRIB $DESTMEM $MEMBER#$TIME#$AMOUNT#$DESTMEM $boucle " >> ./wallets/$PHONE/VIREMENTS + + done + # CYPHER FILE + echo "${GPGPASS}" | gpg -q --output "./wallets/$PHONE/VIREMENTS.gpg" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "./wallets/$PHONE/VIREMENTS" + # EMPTY CLEAR FILE + log "__SUB:sms_REC.sh: $(cat ./wallets/$PHONE/VIREMENTS)" + echo "" > ./wallets/$PHONE/VIREMENTS + ########### + + log "__SUB:sms_REC.sh: .....................................OK!!!" + + # SEND ACK SMS + log "__SUB:sms_REC.sh: VIREMENTS RECURRENTS $MEMBER#$TIME#$AMOUNT#$DESTMEM => $VIR G1 pour $DESTMEM (pendant $TIME $PERIOD) + AJOUT" + mess="[G1sms+] +Virement de $VIR G1 pour $DESTMEM (pendant $TIME $PERIOD) +Total: $AMOUNT $UNIT + +$MEMBER#$TIME#$AMOUNT#$DESTMEM +$DESTRIB" + + sms_SEND "$PHONE" "$mess" + + log_history "$PHONE" "REC, $VIR, $DESTRIB, $DESTMEM, $PERIOD, $TIME" + # Send DESTPHONE sms + if [[ "$DESTPHONE" != "" ]]; then + sms_SEND "$DESTPHONE" "[G1sms+] Bonjour $DESTMEM. Vous recev(r)ez un payement de $VIR G1 (pendant $TIME $PERIOD) de la part du portefeuille: $MEMBER $UIDNA." + fi + +else + log "__SUB:sms_REC.sh: ERROR $MEMBER: $DESTMEM DESTRIB NOT FOUND" + mess="[G1sms+] Virement annulé... +Destinataire: $DESTMEM inconnu! Vérifiez son existence." + sms_SEND "$PHONE" "$mess" +fi + +log "__SUB:sms_REC.sh: END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" diff --git a/g1sms/sms_SETUNIT.sh b/g1sms/sms_SETUNIT.sh new file mode 100755 index 0000000..145ddcf --- /dev/null +++ b/g1sms/sms_SETUNIT.sh @@ -0,0 +1,44 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +source ./shell/init.sh +source ./shell/functions.sh +log "X sms_SETUNIT.sh ($1=phone, $2=unit)" + +phone="$1" +unit="$2" +UNITFILE="./wallets/$phone/$phone.unit" + +# Initialise PHONE, PIN, PUBKEY, UNIT, HIST +sms_INIT_ACCOUNT "$phone" "NOSMS" + +if [[ $UNKNOWN == "unknown" ]]; then + sms_ERROR "$phone" "Porte-monnaie inconnu. Envoyez N (suivi de votre Pseudo membre) pour le créer." + exit +fi + +# No unit received +if [[ $unit == "U" || $unit == "" ]]; then + if [[ -f "$UNITFILE" ]]; then + unit=$(cat "$UNITFILE") + else + unit="$COIN"; + fi +fi + +echo "$unit" > "$UNITFILE" +log "G1sms wallet new $unit... IPFS SWARM publishing..." +ipfs_node_wallets_add + +mess="[G1sms+] +Unité de votre portefeuille: $unit" + +sms_SEND "$phone" "$mess" + +log "END sms_SETUNIT.sh" +log "~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + +exit diff --git a/g1sms/sms_VIR.sh b/g1sms/sms_VIR.sh new file mode 100755 index 0000000..63bd94c --- /dev/null +++ b/g1sms/sms_VIR.sh @@ -0,0 +1,104 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +source ./shell/init.sh +source ./shell/functions.sh +log "__SUB:sms_VIR.sh: START ($1=phone, $2=AMOUNT, $3=VIRDEST)" + +phone="$1" +AMOUNT="$2" +VIRDEST="$3" + +# Initialise PHONE, PIN, PUBKEY, UNIT +sms_INIT_ACCOUNT "$phone" "NOSMS" +if [[ $MEMBER == "" ]]; then MEMBER=$UIDNA; fi +member=$MEMBER +if [[ "$AMOUNT" == "" ]]; then + sms_ERROR "$phone" "Montant incorrect!! +Ex: +VIR 100, pour virer 100 $UNIT vers votre compte relié. +VIR 100 $ADMINPSEUDO, pour virer 100 $UNIT au membre administrateur de ce NODE G1sms+ ;)" + exit +fi + +########################################################### +# CALCULATE if wallet have enough for VIR+PERCENT +AMOUNT="$2" +accounting=($(make_accounting)) +log "__SUB:sms_VIR.sh: $(declare -p accounting)" +testmin=${accounting[0]} +VIR=${accounting[1]} +PERCENT=${accounting[2]} +if [[ $testmin -eq 0 ]]; then + sms_ERROR "$PHONE" "Solde de votre Porte-monnaie G1sms insuffisant. Minimum $VIR + $LIMIT G1! Rechargez par Cesium." + exit +fi + +########################################################### +# FIND VIRDEST into wallets, wallest-swarm OR duniter (silkaj) +if [[ "$VIRDEST" == "" || "$VIRDEST" == "$MEMBER" ]]; then + # VIR TO MEMBER PHONE OWNER + DESTMEM="$MEMBER" + DESTRIB="$MEMRIB" + log "__SUB:sms_VIR.sh: SEND TO MEMBER related wallet!!! $DESTRIB " +else + log "__SUB:sms_VIR.sh: SEARCH $VIRDEST related wallet!!! $DESTRIB " + DESTMEM="$VIRDEST" + # SEARCH IN WALLETS + LOCAL=$(grep -Rwl "$DESTMEM" ./wallets/*/*.uidname | tail -n 1 | cut -f 3 -d '/') + if [[ "$LOCAL" == "" ]]; then LOCAL=$(grep -Rwl "$DESTMEM" ./wallets/*/*.uidna | tail -n 1 | cut -f 3 -d '/'); fi + if [[ "$LOCAL" != "" ]]; then + # LOCAL G1sms account + DESTRIB=$(cat ./wallets/$LOCAL/$LOCAL.pub) + DESTPHONE=$LOCAL + log "__SUB:sms_VIR.sh: FOUND LOCAL ($MASTERPHONE) G1sms+ wallet: $DESTRIB ($LOCAL)" + else + # SEARCH IN WALLETS SWARM (MEMBER THEN UIDNA) + INSWARM=$(grep -Rwl "$DESTMEM" ./wallets_swarm/*/*.uidname | tail -n 1 | cut -f 3 -d '/') + if [[ "$INSWARM" == "" ]]; then INSWARM=$(grep -Rwl "$DESTMEM" ./wallets_swarm/*/*.uidna | tail -n 1 | cut -f 3 -d '/'); fi + if [[ "$INSWARM" != "" ]]; then + REMOTENODE=$(cat ./wallets_swarm/$INSWARM/MASTERPHONE.sms) + DESTRIB=$(cat ./wallets_swarm/$INSWARM/$INSWARM.pub) + DESTPHONE=$INSWARM + log "__SUB:sms_VIR.sh: FOUND SWARM ($REMOTENODE) G1sms+ wallet: $DESTRIB ($INSWARM)" + else + # SEARCH WITH SILKAJ + DESTRIB=$(./silkaj/silkaj id "$DESTMEM" | grep -w "$DESTMEM" | awk '{print $2}') + log "__SUB:sms_VIR.sh: OUT OFF SWARM MEMBER wallet: $DESTRIB" + fi + fi +fi + +if [[ "$DESTRIB" != "" ]]; then + PAY=$(./shell/timeout.sh -t 30 ./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount="$VIR" --output="$DESTRIB" --comment="[G1sms+] VIR $VIR G1" -y) + if [[ "$(echo $PAY | cut -d '|' -f 1)" != "KO" && "$PAY" != "" ]]; then + log "__SUB:sms_VIR.sh: VIREMENT VERS $DESTMEM OK" + mess="[G1sms+] $MEMBER +Virement de $AMOUNT $UNIT ($VIR G1) +vers $DESTMEM ($DESTRIB) +OK! +$PAY" + sms_SEND "$PHONE" "$mess" + log_history "$PHONE" "VIR, $VIR, $DESTRIB, $DESTMEM" + # Send DESTPHONE sms + if [[ "$DESTPHONE" != "" ]]; then + sms_SEND "$DESTPHONE" "Bonjour $DESTMEM. Vous venez de recevoir un virement de $AMOUNT $UNIT ($VIR G1) de la part de $member portefeuille $UIDNA" + fi + cents=$(echo $(bc -l <<< "scale=0; $VIR * 100") | cut -d '.' -f 1) + move_g1cents "$PHONE" "$DESTRIB" "$cents" + else + new=$(./shell/checknodes.sh "BAN") + sms_SEND "$ADMINPHONE" "ADMIN! Problème de payement avec silkaj (changement de serveur $new): $PAY"; + fi +else + log "__SUB:sms_VIR.sh: ERROR $MEMBER: $DESTMEM DESTRIB NOT FOUND" + mess="[G1sms+] Virement annulé... +Membre: $DESTMEM inconnu! Vérifiez son existence." + sms_SEND "$PHONE" "$mess" +fi + +log "__SUB:sms_VIR.sh: END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +exit diff --git a/g1sms/sms_WHERE.sh b/g1sms/sms_WHERE.sh new file mode 100755 index 0000000..b998159 --- /dev/null +++ b/g1sms/sms_WHERE.sh @@ -0,0 +1,56 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +################################################################################ +# is there ADMINPSEUDO-UIDNATAIL in ./wallets_swarm/.*/*.uidna ?" +source ./shell/init.sh +source ./shell/functions.sh +log "__SUB:sms_WHERE.sh: START ($1=PHONE $2=askeduidna)" + +phone="$1" +askeduidna="$2" + +# Initialise PHONE, PIN, PUBKEY, UIDNA, UIDNAFILE ... +sms_INIT_ACCOUNT "$phone" "NOSMS" +if [[ "$UNKNOWN" == "unknown" ]]; then + sms_ERROR "$phone" "Porte-monnaie non identifié! +Envoyez N pour créer votre portefeuille G1sms" + exit +fi + +if [[ "$askeduidna" == "" ]]; then #SELF + if [[ -f "./wallets/.$IPFSNODEID/$IPFSNODEID.uidna" ]]; then + nodeuidnafile="./wallets/.$IPFSNODEID/$IPFSNODEID.uidna" + uidna=$(cat $nodeuidnafile) + fi +else + nodeuidnafile=$(grep -Rwl "$askeduidna" ./wallets_swarm/.*/*.uidna) + uidna=$(cat $nodeuidnafile) +fi + +if [[ -f $nodeuidnafile && "$uidna" != "" ]]; then + ipfsnodeid=$(echo $nodeuidnafile | cut -d '/' -f 3 | cut -d '.' -f 2 ) + echo $uidna > ./wallets/$PHONE/uidna.G1TAGNODE + echo $ipfsnodeid > ./wallets/$PHONE/ipfsid.G1TAGNODE + log "__SUB:sms_WHERE.sh: Distributeur de G1Tag $uidna : $ipfsnodeid " + I=$(ipfs_node_wallets_add) + log_history $PHONE "G1TagNode, $uidna, $ipfsnodeid" +else + log "__SUB:sms_WHERE.sh: ERROR Distributeur de G1Tag $askeduidna inconnu ???" + sms_ERROR "$PHONE" "Désolé. Aucun Distributeur de G1Tag : $askeduidna !!!" + log "__SUB:sms_WHERE.sh: END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + exit +fi + +mess="[G1sms+] $MEMBER +Votre distributeur de G1Tag par défaut est +$uidna ($ipfsnodeid), situé: +$(cat ./wallets_swarm/.$ipfsnodeid/$ipfsnodeid.where)" + +sms_SEND "$PHONE" "$mess" + + +log "__SUB:sms_WHERE.sh: END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +exit diff --git a/g1sms/tag_LOAD_passenger.sh b/g1sms/tag_LOAD_passenger.sh new file mode 100755 index 0000000..fdde8d7 --- /dev/null +++ b/g1sms/tag_LOAD_passenger.sh @@ -0,0 +1,164 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +########################################################################################### +# LOAD MUSIC FILE IN G1TAG... + SHELL OPCODE INJECTED INTO G1TAG +# sudo pip3 install duniterpy +########################################################################################### +# ipfs ls /ipns/QmY6ooFcsGXY4VSindqKMz9GvrprFXY32RrsTmqvVTYQX5 +# QmZ3RfWk1u5LEGYLHA633B5TNJy3Du27K6Fny9wcxpowGS 4 TAG_amount +# QmXizDydPuiBd1V7JBVY5kdppShm9xdk2aoYj7c8V8Foxe 47 TAG_chain +# QmeHHBZKtLJHr11rwXKeimwDE4i3nLMy2VPkWZsNaFasg1 4 TAG_currency +# QmSjBDpjnoxnQT5RWRnyLxqwE3ovSRVb7xjwZoiufZAv3E 39 TAG_id +# QmUQcSjQx2bg4cSe2rUZyQi6F8QtJFJb74fWL7D784UWf9 2 TAG_n +# QmdbdBWv4SygqaaeWHAvABiQAa3faf4ncfSyzRnx8BDdCc 20 TAG_nanodate +# QmbN6gNM2vjLj7yaJ6xJcySDxmuSK2eB9ZDv5dpj2bo5pM 47 TAG_nodeid +# QmXaMzRqhEs4cQMRN18FWaCeqGmrDBfV8hTkbfQuBCXnnA 1243 TAG_publishkey.swarm.crypt +# QmWHsRZCTSjSxnp1Qm8WcmHNNQTJwDS2ukLE7NTccc3Kp9 1304 TAG_publishkey.B.gpg +# TAG_passenger, TAG_file is used to attach G1Tag to file. +# ADD A PASSENGER FILE (Web2.0ID) INTO a G1Tag + Add INIT credit/debit values to live in SWARM. +# GRAB a G1Tag CAPSULE + PUT A PASSENGER MUSIC FILE IN IT +#### TODO USE "ipfs dag" + json +# { +# "type": "REC_YOUTUBE", +# "search": "${MUSICFILE}", +# "id": "vLXHXGoXuBU", +# "title": "Tale Of Us - Oliver Koletzki - Miss Monique - More Artist • New Life III (DifferentSound Mix)", +# "size": 123, +# "debit": 10, +# "credit": 1, +# "file": { +# "ld": "LDhashIPFS", +# "sd": "SDhashIPFS", +# "hd": "HDhashIPFS" +# }, +# "g1tag": "RR", +# "ipns": "J", +# "ld": "ZEN", +# "sd": "ZEN", +# "hd": "EUR" +# } +# +############################################################################################################# +# ./shell/tag_LOAD_passenger.sh G1TagIPNS FileID MusicFile MASTERKEY +JSOURCE=$1 +TUBEID=$2 +MUSICFILE=$3 +KEYFILE=$4 +# EXTENSION (Define Debit for Hosting / Credit for Reading) +DEB=$5 +CRED=$6 +if [[ ! $DED ]]; then DED=10; fi +if [[ ! $CRED ]]; then CRED=1; fi +if [[ ! -f "$KEYFILE" || ! -f "$MUSICFILE" || ! -f "./g1sms.pub.key" ]]; then "Do you know what you are doing? MUSICFILE=$MUSICFILE? KEYFILE=$KEYFILE?"; exit; fi + +############################################# +############## INIT & root check +NANODATE=$(date -u +%s%N) +echo "__SUB:tag_LOAD_passenger.sh: LOAD \"$MUSICFILE\" into REC G1Tag $JSOURCE indexed by $TUBEID (using $KEYFILE)... $NANODATE" +if [[ "$USER" != "root" ]]; then echo "__SUB:tag_LOAD_passenger.sh: Hey, $USER you must be root. 'sudo ./shell/tag_LOAD_passenger.sh ...' ?"; exit; fi + +############################################# +############## CHECK ipfs daemon user +YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) +if [[ "$YOU" == "" || "$YOU" == "root" ]]; then echo "__SUB:tag_LOAD_passenger.sh: BAD IPFS. Aucune installation IPFS satisfaisante ici... Ciao $YOU !"; exit; fi +IPFSNODEID=$(su $YOU -c "ipfs id -f='\n'") + +###################################################### +############## EXTRACT $JSOURCERR key, amount, nodeid +JSOURCERR=$(su $YOU -c "ipfs cat /ipns/$JSOURCE/TAG_id | sed s/\ //g"); +if [[ "$JSOURCERR" == "" ]]; then echo "__SUB:tag_LOAD_passenger.sh: G1TAG DETRUIT. Aucun G1Tag /ipns/$JSOURCERR ici... Ciao."; exit; fi +mkdir -p ./TAG/${JSOURCERR}; rm -f ./TAG/${JSOURCERR}/* +echo "__SUB:tag_LOAD_passenger.sh: LOG. Hey You get a G1Tag!! GET IT now: ipfs get --output=./TAG/${JSOURCERR}/ /ipns/$JSOURCE" +chown -R $YOU ./TAG/${JSOURCERR}/ +su $YOU -c "ipfs get --output=./TAG/${JSOURCERR}/ /ipns/$JSOURCE" 2>&1 +JSOURCEPUBLISHKEY="./TAG/${JSOURCERR}/TAG_publishkey.swarm.crypt" +JSOURCEVALUE=$(cat ./TAG/${JSOURCERR}/TAG_amount) +TAGNODEID=$(cat ./TAG/${JSOURCERR}/TAG_nodeid) +TAGPASSENGER="./TAG/${JSOURCERR}/TAG_passenger" # contains HASH for PASSENGER FILE (CRYPT & PUBLISH) + +############################################# +# CAN IT LOAD PASSENGER ? +if [[ ! -f $TAGPASSENGER ]]; then + echo "__SUB:tag_LOAD_passenger.sh: G1TAG transmis pas encore transformé en REC TAG... Ciao $YOU !"; + exit +else + passenger=$(cat $TAGPASSENGER) + if [[ "$passenger" != "READY" ]]; then echo "__SUB:tag_LOAD_passenger.sh: REC TAG not READY ($passenger)!"; exit; # COMMENT TO ALLOW REWRITE + fi +fi + +############################################# +# ONLY CREATOR NODE CAN LOAD G1TAG +if [[ "$IPFSNODEID" != "$TAGNODEID" ]]; then + echo "__SUB:tag_LOAD_passenger.sh: Ce G1Tag est géré par $TAGNODEID (vous êtes $IPFSNODEID)" + exit +fi + +############################################# +############## EXTRACT $JSOURCERR PUBLISH KEY +if [[ -f "$KEYFILE" ]]; then + ./shell/natools.py decrypt -k "$KEYFILE" -i "$JSOURCEPUBLISHKEY" -o "/home/$YOU/.ipfs/keystore/$JSOURCERR" +else + echo "__SUB:tag_LOAD_passenger.sh: KO. La clef $KEYFILE fournie pour ce G1Tag $JSOURCERR est inexistante. Procurez-vous un portefeuille monnaie libre sur https://g1sms.fr" + exit +fi + +############################################# +############## G1TAG OPERATION +NN=$(cat ./TAG/${JSOURCERR}/TAG_n); ((NN++)); echo "$NN" > "./TAG/${JSOURCERR}/TAG_n" + +TAGTYPE="./TAG/${JSOURCERR}/TAG_type" # contains PASSENGER TYPE ("" = G1, YOUTUBE, any "REC SRC") +TAGPASSENGERID="./TAG/${JSOURCERR}/TAG_passenger_id" # contains PASSENGER ID (depending TYPE) YoutubeID, + +TAGPASSENGERCRYPT="./TAG/${JSOURCERR}/TAG_passenger.crypt" # contains HASH for PASSENGER FILE natools crypt with MASTERKEY +TAGPASSENGERDEBIT="./TAG/${JSOURCERR}/TAG_passenger_debit" # Countains amount Passenger is Paying Daily to SWARM IPFS Nodes (PIN) +TAGPASSENGERCREDIT="./TAG/${JSOURCERR}/TAG_passenger_credit" # Countains amount Node G1Tag must pay to PLAY file passenger +TAGPASSENGERSIZE="./TAG/${JSOURCERR}/TAG_passenger_size" # contains File Size in Mo + +echo "REC" > $TAGTYPE +echo "$TUBEID" > $TAGPASSENGERID + +IFILE=$(su $YOU -c "ipfs add \"${MUSICFILE}\" | tail -n 1") +if [[ ! $IFILE ]]; then exit; fi +echo "$IFILE" > $TAGPASSENGER +# ONLY SWARM KEY CAN DECRYPT IPFS LINK TO FILE (TODO: Glue better) +NODE_G1PUBKEY=$(cat "./g1sms.pub.key") +./shell/natools.py encrypt -p "$NODE_G1PUBKEY" -i "$TAGPASSENGER" -o "$TAGPASSENGERCRYPT" +echo "LOADED" > $TAGPASSENGER + +echo "$DEB" > $TAGPASSENGERDEBIT +echo "$CRED" > $TAGPASSENGERCREDIT + +############################################# +echo "${NANODATE}" > "./TAG/${JSOURCERR}/TAG_nanodate" +I=$(su $YOU -c "ipfs add -qr ./TAG/${JSOURCERR} | tail -n 1") +# RECORD TAG_chain And HASH again before publish +echo "$I" > "./TAG/${JSOURCERR}/TAG_chain" +I=$(su $YOU -c "ipfs add -qr ./TAG/${JSOURCERR} | tail -n 1") +# IPNS $JSOURCERR PUBLISH +J=$(su $YOU -c "ipfs name publish -k ${JSOURCERR} --quieter /ipfs/${I}") +# TODO rm "/home/$YOU/.ipfs/keystore/$JSOURCERR" + +# WRITE FILE REC INDEX IN NODE G1TAG REF. +mkdir -p ./wallets/.$IPFSNODEID/TAG/ +echo "$TUBEID" > "./wallets/.$IPFSNODEID/TAG/${J}.youtubeid" + +########################## +# REFRESH SWARM +########################## +IWALLETS=$(su $YOU -c "ipfs add -rHq './wallets' | tail -n 1") + +# CHAIN STATE FOR $IPFSNODEID +echo $IWALLETS > ./wallets/.$IPFSNODEID.wallets.chain +echo "__SUB:tag_LOAD_passenger.sh: NEW './wallets' HASH ipfs ls $IWALLETS" + +# PUBLISH IPNS NODE WALLETS +NODEWALLETS=$(su $YOU -c "ipfs name publish --quieter /ipfs/$IWALLETS") +echo "__SUB:tag_LOAD_passenger.sh: YOUTUBE REC G1 TAG LOADED ($TAGPASSENGERCRYPT) <<<<<< https://youtube.com/watch?v=$TUBEID" +echo "__SUB:tag_LOAD_passenger.sh: ipfs cat /ipns/$NODEWALLETS/.$IPFSNODEID/TAG/${J}.youtubeid" +exit +echo "__SUB:tag_LOAD_passenger.sh: ZEN BALANCE: $JSOURCEVALUE Zen. HEB: $DEB / PLAY: $CRED" +exit diff --git a/g1sms/tag_OP.sh b/g1sms/tag_OP.sh new file mode 100755 index 0000000..59ccb2a --- /dev/null +++ b/g1sms/tag_OP.sh @@ -0,0 +1,168 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.2020 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +########################################################################################### +# tag_OP.sh OPERATION ON G1TAG... +# sudo pip3 install duniterpy +########################################################################################### +# ipfs ls /ipns/QmY6ooFcsGXY4VSindqKMz9GvrprFXY32RrsTmqvVTYQX5 +# QmZ3RfWk1u5LEGYLHA633B5TNJy3Du27K6Fny9wcxpowGS 4 TAG_amount +# QmXizDydPuiBd1V7JBVY5kdppShm9xdk2aoYj7c8V8Foxe 47 TAG_chain +# QmeHHBZKtLJHr11rwXKeimwDE4i3nLMy2VPkWZsNaFasg1 4 TAG_currency +# QmSjBDpjnoxnQT5RWRnyLxqwE3ovSRVb7xjwZoiufZAv3E 39 TAG_id +# QmUQcSjQx2bg4cSe2rUZyQi6F8QtJFJb74fWL7D784UWf9 2 TAG_n +# QmdbdBWv4SygqaaeWHAvABiQAa3faf4ncfSyzRnx8BDdCc 20 TAG_nanodate +# QmbN6gNM2vjLj7yaJ6xJcySDxmuSK2eB9ZDv5dpj2bo5pM 47 TAG_nodeid +# QmXaMzRqhEs4cQMRN18FWaCeqGmrDBfV8hTkbfQuBCXnnA 1243 TAG_publishkey.swarm.crypt +# QmWHsRZCTSjSxnp1Qm8WcmHNNQTJwDS2ukLE7NTccc3Kp9 1304 TAG_publishkey.B.gpg +# ... +# TAG_passenger, TAG_file is used to attach G1Tag to file. +# +# TRANSFERT ZEN FROM G1Tag to G1Tag + +# G1Tag J References IPNS G1 Tag link +JSOURCE=$1 +JDEST=$2 +# Zen Amount to transfert +VALUE=$3 +# Needed to Open ipfs publish Key +KEYFILE=$4 + +############################################ +############## INIT & root check +NANODATE=$(date -u +%s%N) +echo "__SUB:tag_OP.sh: TRANSFER from $JSOURCE (1) to $JDEST (2) G1Tag = $VALUE (3) using \"$KEYFILE\" (4)... GO... $NANODATE" +if [[ "$USER" != "root" ]]; then echo "__SUB:tag_OP.sh: Hey, $USER you must at least be admin of your system. sudo -s ?"; exit; fi + +############################################# +############## CHECK ipfs daemon user +YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) +if [[ "$YOU" == "" || "$YOU" == "root" ]]; then echo "__SUB:tag_OP.sh: BAD IPFS. Aucune installation IPFS satisfaisante ici... Ciao $YOU !"; exit; fi +IPFSNODEID=$(su $YOU -c "ipfs id -f='\n'") + +############################################# +############## SOURCE EXTRACTION +JSOURCERR=$(su $YOU -c "ipfs cat /ipns/$JSOURCE/TAG_id | sed s/\ //g"); +############################################# +############## GOOD or BAD ? +if [[ "$JSOURCERR" == "" ]]; then echo "__SUB:tag_OP.sh: G1TAG DETRUIT. Aucun G1Tag /ipns/$JSOURCERR ici... Ciao."; exit; fi +echo "__SUB:tag_OP.sh: LOG. SOURCE G1Tag OK!! GREAT... Retrieving it all: ipfs get --output=./TAG/${JSOURCERR}/ /ipns/$JSOURCE" +mkdir -p ./TAG/${JSOURCERR}; rm -f ./TAG/${JSOURCERR}/* +chown -R $YOU ./TAG/${JSOURCERR}/ +su $YOU -c "ipfs get --output=./TAG/${JSOURCERR}/ /ipns/$JSOURCE" +JSOURCEPUBLISHKEY="./TAG/${JSOURCERR}/TAG_publishkey.swarm.crypt" +JSOURCEVALUE=$(cat ./TAG/${JSOURCERR}/TAG_amount); + +############################################# +############## No JDEST, then return $JSOURCEVALUE +if [[ "$JDEST" == "" ]]; then echo "__SUB:tag_OP.sh: OK. G1Tag $JSOURCE VALUE = $JSOURCEVALUE Zen"; exit; fi + +############################################# +############## TEST IF $VALUE IS AVAILABLE +FINALSOURCE=$( echo "${JSOURCEVALUE} - ${VALUE}" | bc -l ) +if [[ $FINALSOURCE -lt 0 ]]; then echo "__SUB:tag_OP.sh: KO. La valeur de ce G1Tag ne peut pas être : $FINALSOURCE Zen... Ciao $YOU !"; exit; fi + +############################################# +############## EXTRACT $JSOURCERR PUBLISH KEY +if [[ -f $KEYFILE && ! -f "/home/$YOU/.ipfs/keystore/$JSOURCERR" ]]; then + ./shell/natools.py decrypt -k "$KEYFILE" -i "$JSOURCEPUBLISHKEY" -o "/home/$YOU/.ipfs/keystore/$JSOURCERR" +else + if [[ ! -f $KEYFILE ]]; then + echo "__SUB:tag_OP.sh: KO. La clef de dévérouillage pour $JSOURCERR est inexistante. Contact: https://g1sms.fr" + fi +fi + +############################################# +############## DESTINATION EXTRACTION +JDESTRR=$(su $YOU -c "ipfs cat /ipns/$JDEST/TAG_id | sed s/\ //g"); +if [[ "$JDESTRR" == "" ]]; then echo "__SUB:tag_OP.sh: BAD G1TAG. Aucun G1Tag /ipns/$JDESTRR ici... Ciao."; exit; fi +mkdir -p ./TAG/${JDESTRR}; rm -f ./TAG/${JDESTRR}/* +echo "__SUB:tag_OP.sh: LOG. Hey You get a G1Tag!! GREAT... ipfs get --output=./TAG/${JDESTRR}/ /ipns/$JDEST" +chown -R $YOU ./TAG/${JDESTRR}/ +su $YOU -c "ipfs get --output=./TAG/${JDESTRR}/ /ipns/$JDEST" +JDESTPUBLISHKEY="./TAG/${JDESTRR}/TAG_publishkey.swarm.crypt" +JDESTVALUE=$(cat ./TAG/${JDESTRR}/TAG_amount); +FINALDEST=$(echo "${JDESTVALUE} + ${VALUE}" | bc -l) +# EXTRACT $JSOURCERR PUBLISH KEY to "/home/$YOU/.ipfs/keystore/JSOURCE" +# EXTRACT PUBLISH KEY +if [[ -f $KEYFILE && ! -f "/home/$YOU/.ipfs/keystore/$JDESTRR" ]]; then + ./shell/natools.py decrypt -k "$KEYFILE" -i "$JDESTPUBLISHKEY" -o "/home/$YOU/.ipfs/keystore/$JDESTRR" +else + if [[ ! -f $KEYFILE ]]; then + echo "__SUB:tag_OP.sh: KO. La clef de dévérouillage pour $JDESTRR est inexistante. Contact: https://g1sms.fr" + fi +fi + +###################################################################################################### +if [[ -f "/home/$YOU/.ipfs/keystore/$JDESTRR" && -f "/home/$YOU/.ipfs/keystore/$JSOURCERR" ]]; then +# IF PUBLISH key for BOTH G1TAG exists +############################################# +############## SOURCE OPERATION +NN=$(cat ./TAG/${JSOURCERR}/TAG_n); ((NN++)); echo "$NN" > "./TAG/${JSOURCERR}/TAG_n" +############################################# +# Destroy B Access ?!! +#rm -f ./TAG/${JSOURCERR}/TAG_publishkey.B.gpg +echo "$FINALSOURCE" > "./TAG/${JSOURCERR}/TAG_amount" +echo "${NANODATE}" > "./TAG/${JSOURCERR}/TAG_nanodate" # TODO: ACTIVATE NANODATE CONTROL / NODES MEDIANTIME +echo "${IPFSNODEID}" > "./TAG/${JSOURCERR}/TAG_writerid" + +if [[ "$JSOURCE" == "$JDEST" ]]; then + # PUT "READY" IN TAG_passenger (can now be loaded with a file), now actual IPFSNODEID is creator + echo "READY" > "./TAG/${JSOURCERR}/TAG_passenger" + echo "${IPFSNODEID}" > "./TAG/${JSOURCERR}/TAG_nodeid" + echo "__SUB:tag_OP.sh: ${IPFSNODEID} NODE created REC TAG. ${JSOURCERR}. READY to LOAD_passenger now!!" +fi + +SOURCENODEID=$(cat "./TAG/${JSOURCERR}/TAG_nodeid") +I=$(su $YOU -c "ipfs add -qr ./TAG/${JSOURCERR} | tail -n 1") +# RECORD TAG_chain And HASH again +echo "$I" > "./TAG/${JSOURCERR}/TAG_chain" +I=$(su $YOU -c "ipfs add -qr ./TAG/${JSOURCERR} | tail -n 1") +# IPNS $JSOURCERR PUBLISH +J=$(su $YOU -c "ipfs name publish -k ${JSOURCERR} --quieter /ipfs/${I}") +# CLEAN IPFS keystore +if [[ "${SOURCENODEID}" != "${IPFSNODEID}" ]]; then + rm -f "/home/$YOU/.ipfs/keystore/$JSOURCERR" +fi +echo "__SUB:tag_OP.sh: G1Tag $JSOURCERR value ($FINALSOURCE) :: su $YOU -c \"ipfs cat /ipns/$JSOURCE/TAG_amount\"" + +if [[ "$JSOURCE" != "$JDEST" ]]; then + ############################################# + ############## DESTINATION OPERATION + NN=$(cat ./TAG/${JDESTRR}/TAG_n); ((NN++)); echo "$NN" > "./TAG/${JDESTRR}/TAG_n" + ############################################# + # Destroy B Access ?!! + #rm -f ./TAG/${JDESTRR}/TAG_publishkey.B.gpg + echo "${FINALDEST}" > "./TAG/${JDESTRR}/TAG_amount" + ############################################################################################################################## + if [[ $FINALSOURCE -eq 0 ]]; then + echo "OK. G1Tag ${JSOURCERR} is empty destroying it!!"; + rm -f "./TAG/${JDESTRR}/TAG_id"; + fi + ############################################################################################################################## + echo "${NANODATE}" > "./TAG/${JDESTRR}/TAG_nanodate" + echo "${IPFSNODEID}" > "./TAG/${JDESTRR}/TAG_writerid" + DESTNODEID=$(cat "./TAG/${JDESTRR}/TAG_nodeid") + I=$(su $YOU -c "ipfs add -qr ./TAG/${JDESTRR} | tail -n 1") + # RECORD TAG_chain And HASH again + echo "$I" > "./TAG/${JDESTRR}/TAG_chain" + I=$(su $YOU -c "ipfs add -qr ./TAG/${JDESTRR} | tail -n 1") + # IPNS $JDESTRR PUBLISH + J=$(su $YOU -c "ipfs name publish -k ${JDESTRR} --quieter /ipfs/${I}") + if [[ "${DESTNODEID}" != "${IPFSNODEID}" ]]; then + rm -f "/home/$YOU/.ipfs/keystore/$JDESTRR" + fi + echo "__SUB:tag_OP.sh: G1Tag $JDESTRR value ($FINALDEST) :: su $YOU -c \"ipfs cat /ipns/$JDEST/TAG_amount\"" +fi + +echo "__SUB:tag_OP.sh: DONE. G1Tag balance updated: +$JSOURCERR (/ipns/$JSOURCE) : $JSOURCEVALUE => $FINALSOURCE +$JDESTRR (/ipns/$JSDEST) : $JDESTVALUE) => $FINALDEST" + +else + echo "__SUB:tag_OP.sh: NO OPERATION DONE" + +fi +###################################################################################################### diff --git a/g1sms/tag_PLAY_passenger.sh b/g1sms/tag_PLAY_passenger.sh new file mode 100755 index 0000000..39a42a9 --- /dev/null +++ b/g1sms/tag_PLAY_passenger.sh @@ -0,0 +1,68 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +########################################################################################### +# Find and PLAY (cat) passenger File OF G1Tag / REC TAG +# sudo pip3 install duniterpy +# READERID is PHONE or IPFSNODEID (G1 ./wallets/* ) +# JSOURCE is G1Tag IPNS link with PASSENGER +########################################################################################### +READERID=$1 +JSOURCE=$2 +KEYFILE="./g1sms.priv.key" +NODE_G1PUBKEY=$(cat "./g1sms.pub.key") + +if [[ ! $READERID || ! $JSOURCE || ! -f "$KEYFILE" || ! $NODE_G1PUBKEY ]]; then "Something is wrong! Do you know what you are doing?"; exit; fi + +NODEG1TAG=$(cat "./wallets_swarm/.$READERID/TAG/$READERID") # Contains IPNS link to Node G1Tag +if [[ ! $NODEG1TAG ]]; then + # INIT NODE G1TAG WITH 1000 zen + echo "__SUB:tag_PLAY_passenger.sh: $READERID ne possède pas de G1Tag sudo ./shell/sms_G1TAG.sh \"$READERID\" \"10\" \"1\" \"NODE\" \"$READERID\" " + exit +fi + +############################################# +############## INIT & root check +NANODATE=$(date -u +%s%N) +echo "__SUB:tag_PLAY_passenger.sh: $READERID IS READING $JSOURCE" + +############################################# +############## CHECK ipfs daemon user +YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) +if [[ "$USER" != "root" ]]; then echo "__SUB:tag_PLAY_passenger.sh: Hey, $USER you must able to be root for now (try if sudo access is ok)"; fi +if [[ "$YOU" == "" || "$YOU" == "root" ]]; then echo "__SUB:tag_PLAY_passenger.sh: BAD IPFS. Aucune installation IPFS satisfaisante ici... Ciao $USER !"; exit; fi +IPFSNODEID=$(su $YOU -c "ipfs id -f='\n'") + +############################################# +JSOURCERR=$(su $YOU -c "ipfs cat /ipns/$JSOURCE/TAG_id | sed s/\ //g"); +if [[ "$JSOURCERR" == "" ]]; then echo "__SUB:tag_PLAY_passenger.sh: G1TAG DETRUIT. Aucun G1Tag /ipns/$JSOURCERR ici... Ciao."; exit; fi +mkdir -p ./TAG/${JSOURCERR}; rm -f ./TAG/${JSOURCERR}/* +echo "__SUB:tag_PLAY_passenger.sh: FOUND G1Tag... GETTING IT: ipfs get --output=./TAG/${JSOURCERR}/ /ipns/$JSOURCE" +chown -R $YOU ./TAG/${JSOURCERR}/ +su $YOU -c "ipfs get --output=./TAG/${JSOURCERR}/ /ipns/$JSOURCE" +JSOURCEPUBLISHKEY="./TAG/${JSOURCERR}/TAG_publishkey.swarm.crypt" + +TAGZEN=$(cat "./TAG/${JSOURCERR}/TAG_amount"); +DEB=$(cat "./TAG/${JSOURCERR}/TAG_passenger_debit") +CRED=$(cat "./TAG/${JSOURCERR}/TAG_passenger_credit") + +############################################## +# MAKE TRANSACTIONS +NODEZEN=$(cat "./wallets/$READERID/$READERID.g1cents") +uidna=$(cat "./wallets/$READERID/$READERID.uidna") +if [[ $ZEN -gt $CRED ]]; then + REZ=$((TAGZEN + CRED)) + + #echo "$REZ" > "./TAG/${JSOURCERR}/TAG_amount" + # TODO READER NEEDS ITS G1TAG + #./shell/tag_OP.sh "$READERIDTAG" "J2TAG" "$CRED" $KEYFILE +else + echo "Désolé ;( $READERID vous manquez de ZEN ($ZEN) pour vous payer la lecture de $JSOURCE ($CRED)" + echo "Rechargez avec un VIREMENT vers $uidna" +fi + + +# READ PASSENGER + diff --git a/g1sms/tag_READ.sh b/g1sms/tag_READ.sh new file mode 100755 index 0000000..1f4a2a7 --- /dev/null +++ b/g1sms/tag_READ.sh @@ -0,0 +1,250 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +########################################################################################### +########################################################################################### +echo "__SUB:tag_READ.sh: QRCODE READER : START" +source ./shell/init.sh +source ./shell/functions.sh + +# DOUCHETTE ES TU LA? +if [ ! $G1TX ]; then ./shell/parle.sh "Branchez votre lecteur de QR code!"; exit; fi + +# TABLEAU MEMOIRE DE SCAN +declare -a act +declare -a obj +declare -a val +./shell/parle.sh "Lecteur de G1 Tag. OK. Prêt" + +cat /dev/ttyACM0 | while read line; do + lon=${#line} + pref=$(echo $line | cut -d ":" -f 1) + qrvalue=$(echo $line | cut -d ":" -f 2) + log "__SUB:tag_READ.sh: SCAN /dev/ttyACM0 ($lon) :: $line" + + case $pref in + RJ) + ./shell/parle.sh "R J" + R=$(echo $qrvalue | cut -d '#' -f 1) + J=$(echo $qrvalue | cut -d '#' -f 2) + log "__SUB:tag_READ.sh: Lecture G1Tag $R $J" + # + ID=$(su $YOU -c "ipfs cat /ipns/$J/TAG_id"); + if [[ "$ID" == "" ]]; then + ./shell/parle.sh "G1 Tag déjà capturé, veuillez le détruire!"; + sms_SEND "$ADMINPHONE" "ADMIN! FRAUDE G1Tag RJ $R $J" + # TODO: ENQUETER auprès du CREATEUR de ce G1 Tag !! + continue + fi + RR=$(echo $ID | sed s/\ //g) + FID=$(echo $ID | awk '{print toupper($1)}') + RVALUE=$(su $YOU -c "ipfs cat /ipns/$J/TAG_amount"); + CURRENCY=$(su $YOU -c "ipfs cat /ipns/$J/TAG_currency" | awk '{print tolower($1)}') + if [[ "$CURRENCY" == "zen" ]]; then CUR="zène"; else CUR=$CURRENCY; fi # Correction du défaut de prononciation. + PASSENGER=$(su $YOU -c "ipfs cat /ipns/$J/TAG_passenger"); + if [[ "$PASSENGER" != "" ]]; then + ./shell/parle.sh "Rec Tag Machine $PASSENGER! Valeur $RVALUE $CUR"; + else + G1VAL=$(bc -l <<< "scale=2; $RVALUE / 100" | cut -d '.' -f 1) + log "__SUB:tag_READ.sh: G1Tag $FID. Valeur $RVALUE $CURRENCY = $G1VAL G1" + ./shell/parle.sh "G1 Tag $FID. Valeur $RVALUE $CUR convertible en $G1VAL June" + fi + cmd="RJ" + CASHBACK="" + val+=("$RVALUE") + ;; + + BJ) + ./shell/parle.sh "B J" + BB=$(echo $qrvalue | cut -d '#' -f 1) + J=$(echo $qrvalue | cut -d '#' -f 2) + log "__SUB:tag_READ.sh: Ouverture G1Tag $BB $J" + # + ID=$(su $YOU -c "ipfs cat /ipns/$J/TAG_id"); + FID=$(echo $ID | awk '{print toupper($1)}') + if [[ "$ID" == "" ]]; then + ./shell/parle.sh "G1 Tag inconnu! veuillez le détruire!"; + # sms_SEND "$ADMINPHONE" "ADMIN! FRAUDE G1Tag BJ $B $J" + # TODO: ENQUETER auprès du CREATEUR de ce G1 Tag !! + continue + fi + RR=$(echo $ID | sed s/\ //g) + BVALUE=$(su $YOU -c "ipfs cat /ipns/$J/TAG_amount") + CURRENCY=$(su $YOU -c "ipfs cat /ipns/$J/TAG_currency" | awk '{print tolower($1)}') + if [[ "$CURRENCY" == "zen" ]]; then CUR="zène"; else CUR=$CURRENCY; fi # Correction du défaut de prononciation. + PASSENGER=$(su $YOU -c "ipfs cat /ipns/$J/TAG_passenger"); + # DIG PUBLISHING KEY + if [[ -f /home/$YOU/.ipfs/keystore/$RR ]]; then + log "__SUB:tag_READ.sh: Clef de publication IPFS $RR déjà présente" + else + rm /tmp/TAG_publishkey.B.gpg + su $YOU -c "ipfs get -o /tmp/ /ipns/$J/TAG_publishkey.B.gpg" + # CHECK IF OK + gpg -d --output /tmp/ipns.key --pinentry-mode=loopback --passphrase $BB /tmp/TAG_publishkey.B.gpg + if [[ ! -f /tmp/ipns.key ]]; then + ./shell/parle.sh "Erreur. Problème de déchiffrage PGP ${FID}! Vérifiez vos logs"; + log "__SUB:tag_READ.sh: ERROR! gpg -d --output /tmp/ipns.key --pinentry-mode=loopback --passphrase $BB /tmp/TAG_publishkey.B.gpg" + continue + fi + mv /tmp/ipns.key /home/$YOU/.ipfs/keystore/$RR + log "__SUB:tag_READ.sh: Récupération de la clef de publication $RR" + ./shell/parle.sh "Récupération clef de publication du G1 Tag ${FID}" + fi + if [[ "$PASSENGER" != "" ]]; then + log "__SUB:tag_READ.sh: !!!! REC Tag = $BVALUE $CURRENCY" + ./shell/parle.sh "Rec Tag Machine! Valeur $BVALUE $CUR"; + else + log "__SUB:tag_READ.sh: Ce G1 Tag contient $BVALUE $CURRENCY" + ./shell/parle.sh "Ce G1 Tag contient $BVALUE $CUR" + fi + cmd="BJ" + val+=("$BVALUE") + ;; + + *) + if [[ $lon -eq 44 ]]; then + ./shell/parle.sh "Portefeuille G1?" + J=$qrvalue + if [[ "$J" != "${obj[0]}" ]]; then + VALUE=$(./shell/timeout.sh -t 15 ./silkaj/silkaj amount $J) + + if [[ "$(echo $VALUE | cut -d ':' -f 1)" != "Error" && "$VALUE" != "" ]]; then + log "__SUB:tag_READ.sh: Ce compte monnaie libre contient $VALUE G1" + ./shell/parle.sh "Ce compte monnaie libre contient $VALUE G1" + CASHBACK="$J" + cmd="G1" + val+=("$VALUE") + else + log "__SUB:tag_READ.sh: ERREUR QR code illisible. longueur $J = ${#J}" + if [[ "$VALUE" == "" ]]; then + DUNITER=$(./shell/checknodes.sh 'BAN') + echo "TIMEOUT. CHANGE SILKAJ SERVER: $DUNITER" + ./shell/parle.sh "Temps dépassé. Changement de serveur $DUNITER" + CASHBACK="" + else + ./shell/parle.sh "QR code inconnu." + CASHBACK="" + fi + fi + else + ./shell/parle.sh "Ce compte monnaie libre contient ${val[0]} G1" + fi + else + ./shell/parle.sh "QR code de type inconnu" + fi + + ;; + + esac + + ############################################################### + # APRES G1 CASHBACK : G1 Tag BJ WRITE => ENCAISSEMENT + if [[ "${cmd}" == "BJ" && "$CASHBACK" != "" && -f /home/$YOU/.ipfs/keystore/${RR} ]]; then + ./shell/parle.sh "Encaissement du G1 Tag" + log "__SUB:tag_READ.sh: G1 tag de $BVALUE G1 ! /ipns/$J Virement vers $CASHBACK? " + + ./shell/parle.sh "vers portefeuille G1" + # ipfs get G1Tag vers ./TAG/${RR} + mkdir -p ./TAG/${RR}; rm -f ./TAG/${RR}/*; chown -R $YOU ./TAG/${RR}/ + log "__SUB:tag_READ.sh: ipfs get --output=./TAG/${RR} /ipns/$J" + su $YOU -c "ipfs get --output=./TAG/${RR} /ipns/$J" + + if [[ $(cat ./TAG/${RR}/TAG_passenger) != "" ]]; then ./shell/parle.sh "Impossible à encaisser. REC Tag ${FID}. $(cat ./TAG/${RR}/TAG_passenger) de Valeur $BVALUE "; continue; fi + + # Make Silkaj TX + G1VAL=$(bc -l <<< "scale=2; $BVALUE / 100" | cut -d '.' -f 1) + log "__SUB:tag_READ.sh: Silkaj TX $SWARM_G1AUTHFILE ($G1VAL) -> $CASHBACK" + PAY=$(./silkaj/silkaj transaction --auth-file -file="$SWARM_G1AUTHFILE" --amount=$G1VAL --output=$CASHBACK --comment="[G1sms+] CAPTURE G1Tag $RR" -y) + + log "__SUB:tag_READ.sh: Silkaj output = $PAY" + if [[ "$(echo $PAY | cut -d '|' -f 1)" == "KO" ]]; then + new=$(./shell/checknodes.sh "BAN") + sms_ERROR "$ADMINPHONE" "Il est survenu un problème avec un virement. Retour silkaj: $PAY ... $new"; + ./shell/parle.sh "Erreur de virement. Changement de serveur Duniter. Veuillez recommencer" + else + # ENCAISSEMENT G1Tag + ./shell/parle.sh "Transfert du Tag ${FID} de $G1VAL G1 vers portefeuille OK" + # CAPTURE / DESTRUCTION du G1 Tag + echo "0" > "./TAG/${RR}/TAG_amount" + echo "${J}" > "./TAG/${RR}/TAG_ipns" + + # Iterate + if [[ -f ./TAG/${RR}/TAG_n ]]; then NN=$(cat ./TAG/${RR}/TAG_n); ((NN++)); else NN=0; fi + + # TAG_actions + echo "$NN" > "./TAG/${RR}/TAG_n" + echo "${NANODATE}" > "./TAG/${RR}/TAG_nanodate" + echo "${IPFSNODEID}" > "./TAG/${RR}/TAG_writerid" + + # EMPTY G1TAG ID AND REMOVE PUBLISHKEYS + echo "" > "./TAG/${RR}/TAG_id" + rm -f ./TAG/TAG_publishkey.* + + log "__SUB:tag_READ.sh: Destruction G1Tag TAG_id $NN.${NANODATE} (par NODE ${IPFSNODEID}) => Value = 0" + I=$(su $YOU -c "ipfs add -qr ./TAG/${RR} | tail -n 1") + # TAG_chain + echo "$I" > "./TAG/${RR}/TAG_chain" + I=$(su $YOU -c "ipfs add -qr ./TAG/${RR} | tail -n 1") + # IPNS $RR PUBLISH + J=$(su $YOU -c "ipfs name publish -k ${RR} --quieter /ipfs/${I}") + + log "__SUB:tag_READ.sh: Destruction de ce G1 Tag publish -k ${RR} --quieter /ipfs/${I} :: ipfs ls /ipns/$J" + ./shell/parle.sh "${FID} G1 Tag vide. Merci de détruire ce G1 Tag!" + + # CLEAN IPFS keystore: remove NOT created NODE keys + SOURCENODEID=$(cat "./TAG/${RR}/TAG_nodeid") + if [[ "${SOURCENODEID}" != "${IPFSNODEID}" ]]; then + rm -f /home/$YOU/.ipfs/keystore/${RR} + fi + fi + else + # AJOUT MEMOIRE SCAN + ./shell/parle.sh "Mémorisation" + act+=("$cmd") + obj+=("$J") + fi + + + # FLUSH MEMOIRE 2 SCAN + if [[ ${#act[@]} -eq 2 ]]; then + echo "${act[@]}" + echo "${obj[@]}" + echo "${val[@]}" + ############################################################### + # PRESENTATION RJ puis BJ différents Tag WRITE = TRANSFERT G1 TAG + if [[ "${act[0]}" == "RJ" && "${act[1]}" == "BJ" && "${obj[0]}" != "${obj[1]}" ]]; then + PASSENGER=$(su $YOU -c "ipfs cat /ipns/${obj[1]}/TAG_passenger"); + if [[ "$PASSENGER" != "" ]]; then + ./shell/parle.sh "Rec Tag Machine non transférable!"; + else + log "__SUB:tag_READ.sh: Transfert de G1 Tag à G1 Tag. $BVALUE $CUR" + ./shell/parle.sh "Transfert de ${val[1]} $CUR vers le G1 Tag ${FID}" + log "__SUB:tag_READ.sh: $(./shell/tag_OP.sh ${obj[1]} ${obj[0]} ${val[1]} $SWARM_G1AUTHFILE)" + fi + CASHBACK="" + fi + ############################################################### + # PRESENTATION BJ identiques TRANSFORMATION G1 TAG en REC TAG + if [[ "${act[0]}" == "BJ" && "${act[1]}" == "BJ" && "${obj[0]}" == "${obj[1]}" ]]; then + PASSENGER=$(su $YOU -c "ipfs cat /ipns/${obj[0]}/TAG_passenger"); + if [[ "$PASSENGER" != "" ]]; then + ./shell/parle.sh "Déjà Rec Tag Machine!"; + else + log "__SUB:tag_READ.sh: Transformation du G1 Tag en Rec Tag. ${val[0]} = ${val[1]}" + ./shell/parle.sh "Transformation du G1 Tag ${val[0]} $CUR en Rec Tag chargé de ${FID}..." + log "__SUB:tag_READ.sh: $(./shell/tag_OP.sh ${obj[0]} ${obj[0]} 0 $SWARM_G1AUTHFILE)" + fi + CASHBACK="" + fi + + act=() + obj=() + val=() + ./shell/parle.sh "Nouveau cycle de lecture." + fi + + ./shell/parle.sh "Flasher un QR code" + +done diff --git a/g1sms/tag_READ_X.sh b/g1sms/tag_READ_X.sh new file mode 100755 index 0000000..d783b0e --- /dev/null +++ b/g1sms/tag_READ_X.sh @@ -0,0 +1,286 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +########################################################################################### +########################################################################################### +# Lit les données reçues depuis un lecteur de QR Code branché en USB/SERIE (/dev/ttyACM0) +# Interpète les G1QRcodes et les G1Tag (R/W) +# Saisie du montant à transférer par pavé numérique +########################################################################################### +echo "__SUB:tag_READ_X.sh: QRCODE READER : START" +source ./shell/init.sh +source ./shell/functions.sh + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +function log () { + echo "$line +$1" >> /tmp/tag_READ_X.log +} + +SWARM_G1AUTHFILE="${MY_PATH}/../g1sms.priv.key" +if [ ! -f $SWARM_G1AUTHFILE ]; then echo "ERREUR CLEF DECHIFFRAGE!"; exit; fi +# TODO G1TAG: USE CREATOR NODE KEY FILE INSTEAD OF SWARM_G1AUTHFILE SWARM KEY + +# DOUCHETTE ES TU LA? +if [ ! $G1TX ]; then echo "Branchez votre lecteur de QR code!"; exit; fi +./shell/tools/4LETTER.scroll.py "G1TX START" +./shell/tools/4LETTER.clock.py & +clockpid=$! +# TABLEAU MEMOIRE DE SCAN +declare -a act +declare -a obj +declare -a val + +cat /dev/ttyACM0 | while read line; do + kill $clockpid + + lon=${#line} + pref=$(echo $line | cut -d ":" -f 1) + qrvalue=$(echo $line | cut -d ":" -f 2) + log "__SUB:tag_READ_X.sh: SCAN /dev/ttyACM0 ($lon) :: $line" + + case $pref in + RJ) + R=$(echo $qrvalue | cut -d '#' -f 1) + J=$(echo $qrvalue | cut -d '#' -f 2) + log "__SUB:tag_READ_X.sh: Lecture G1Tag $R $J" + # IPFS READ + ID=$(su $YOU -c "ipfs cat /ipns/$J/TAG_id"); + if [[ "$ID" == "" ]]; then + ./shell/tools/4LETTER.scroll.py ">> BAD G1TAG <<" + continue + fi + # Get First R Tag name word and remove space for RR + FID=$(echo $ID | awk '{print toupper($1)}') + RR=$(echo $ID | sed s/\ //g) + + ./shell/tools/4LETTER.scroll.py "${#act[@]} $FID > " + RVALUE=$(su $YOU -c "ipfs cat /ipns/$J/TAG_amount"); + CURRENCY=$(su $YOU -c "ipfs cat /ipns/$J/TAG_currency" | awk '{print tolower($1)}') + + PASSENGER=$(su $YOU -c "ipfs cat /ipns/$J/TAG_passenger"); + if [[ "$PASSENGER" != "" ]]; then + ./shell/tools/4LETTER.scroll.py "G1TAG PASSENGER $RVALUE ZEN" + else + G1VAL=$(bc -l <<< "scale=2; $RVALUE / 100" | cut -d '.' -f 1) + log "__SUB:tag_READ_X.sh: G1Tag $FID. Valeur $RVALUE $CURRENCY = $G1VAL G1" + ./shell/tools/4LETTER.scroll.py "$RVALUE ZEN *** $G1VAL G1" + fi + cmd="RJ" + CASHBACK="" + val+=("$RVALUE") + ;; + + BJ) + BB=$(echo $qrvalue | cut -d '#' -f 1) + J=$(echo $qrvalue | cut -d '#' -f 2) + log "__SUB:tag_READ_X.sh: Ouverture G1Tag $BB $J" + # + ID=$(su $YOU -c "ipfs cat /ipns/$J/TAG_id"); + if [[ "$ID" == "" ]]; then + ./shell/tools/4LETTER.scroll.py ">> BAD G1TAG <<" + continue + fi + FID=$(echo $ID | awk '{print toupper($1)}') + RR=$(echo $ID | sed s/\ //g) + + ./shell/tools/4LETTER.scroll.py "${#act[@]} $FID TX >>" + BVALUE=$(su $YOU -c "ipfs cat /ipns/$J/TAG_amount") + CURRENCY=$(su $YOU -c "ipfs cat /ipns/$J/TAG_currency" | awk '{print tolower($1)}') + + PASSENGER=$(su $YOU -c "ipfs cat /ipns/$J/TAG_passenger"); + # DIG PUBLISHING KEY + if [[ -f /home/$YOU/.ipfs/keystore/$RR ]]; then + log "__SUB:tag_READ_X.sh: Clef de publication IPFS $RR déjà présente" + else + rm /tmp/TAG_publishkey.B.gpg + su $YOU -c "ipfs get -o /tmp/ /ipns/$J/TAG_publishkey.B.gpg" + ./shell/tools/4LETTER.scroll.py "** GPG **" + gpg -d --output /tmp/ipns.key --pinentry-mode=loopback --passphrase $BB /tmp/TAG_publishkey.B.gpg + # CHECK IF OK + if [[ ! -f /tmp/ipns.key ]]; then + ./shell/tools/4LETTER.scroll.py ">> BAD GPG KEY <<" + continue + fi + mv /tmp/ipns.key /home/$YOU/.ipfs/keystore/$RR + log "__SUB:tag_READ_X.sh: Récupération de la clef de publication $RR" + fi + if [[ "$PASSENGER" != "" ]]; then + log "__SUB:tag_READ_X.sh: !!!! $FID REC Tag = $BVALUE $CURRENCY" + ./shell/tools/4LETTER.scroll.py "G1TAG PASSENGER $BVALUE ZEN" + else + G1VAL=$(bc -l <<< "scale=2; $BVALUE / 100" | cut -d '.' -f 1) + log "__SUB:tag_READ_X.sh: Ce G1 Tag $FID contient $BVALUE $CURRENCY" + ./shell/tools/4LETTER.scroll.py "$BVALUE ZEN *** $G1VAL G1 MAX" + fi + cmd="BJ" + val+=("$BVALUE") + ;; + + *) + if [[ $lon -eq 44 ]]; then + ./shell/tools/4LETTER.scroll.py "PORTEFEUILLE G1 >>>>>>>> ${#act[@]}" & + J=$qrvalue + if [[ "$J" != "${obj[0]}" ]]; then + VALUE=$(./shell/timeout.sh -t 25 ./silkaj/silkaj amount $J) + + if [[ "$(echo $VALUE | cut -d ':' -f 1)" != "Error" && "$VALUE" != "" ]]; then + log "__SUB:tag_READ_X.sh: Ce compte monnaie libre contient $VALUE G1" + NOPOINT=$(echo $VALUE | cut -d '.' -f 1) + ./shell/tools/4LETTER.scroll.py " $NOPOINT G1 *** $NOPOINT G1 " + CASHBACK="$J" + cmd="G1" + val+=("$VALUE") + else + if [[ "$VALUE" == "" ]]; then + DUNITER=$(./shell/checknodes.sh 'BAN') + log "__SUB:tag_READ_X.sh: ERREUR TIMEOUT. CHANGE SILKAJ SERVER: $DUNITER" + ./shell/tools/4LETTER.scroll.py "ERREUR TIMEOUT SILKAJ" + ./shell/timeout.sh -t 1 ./shell/tools/4LETTER.spinner.py + CASHBACK="" + else + log "__SUB:tag_READ_X.sh: ERREUR QRCODE ILLISIBLE. longueur $J = ${#J}" + ./shell/tools/4LETTER.scroll.py "ERREUR QRCODE INCONNU" + ./shell/timeout.sh -t 1 ./shell/tools/4LETTER.spinner.py + CASHBACK="" + fi + fi + else + ./shell/tools/4LETTER.scroll.py " 2 X " + fi + else + ./shell/tools/4LETTER.scroll.py "ERREUR QRCODE INCONNU" + fi + + ;; + + esac + + ############################################################### + # APRES G1 CASHBACK : G1 Tag BJ WRITE => ENCAISSEMENT + if [[ "${cmd}" == "BJ" && "$CASHBACK" != "" && -f /home/$YOU/.ipfs/keystore/${RR} ]]; then + ./shell/tools/4LETTER.scroll.py "ZEN -> G1" + log "__SUB:tag_READ_X.sh: G1 tag de $BVALUE G1 ! /ipns/$J Virement vers $CASHBACK? " + + ./shell/tools/4LETTER.spinner.py & + spinnerpid=$! + + # ipfs get G1Tag vers ./TAG/${RR} + mkdir -p ./TAG/${RR}; rm -f ./TAG/${RR}/*; chown -R $YOU ./TAG/${RR}/ + log "__SUB:tag_READ_X.sh: ipfs get --output=./TAG/${RR} /ipns/$J" + su $YOU -c "ipfs get --output=./TAG/${RR} /ipns/$J" + + if [[ $(cat ./TAG/${RR}/TAG_passenger) != "" ]]; then ./shell/tools/4LETTER.scroll.py "IMPOSSIBLE TAG PASSENGER $BVALUE ZEN"; continue; fi + + # Make Silkaj TX + G1VAL=$(bc -l <<< "scale=2; $BVALUE / 100" | cut -d '.' -f 1) + log "__SUB:tag_READ_X.sh: Silkaj TX $SWARM_G1AUTHFILE ($G1VAL) -> $CASHBACK" + PAY=$(./silkaj/silkaj transaction --auth-file -file="$SWARM_G1AUTHFILE" --amount=$G1VAL --output=$CASHBACK --comment="[G1sms+] G1Tag $RR ZEN -> G1" -y) + + log "__SUB:tag_READ_X.sh: Silkaj output = $PAY" + # Stop 1LETTER.spinner.py + kill $spinnerpid + + if [[ "$(echo $PAY | cut -d '|' -f 1)" == "KO" && "$PAY" != "" ]]; then + new=$(./shell/checknodes.sh "BAN") + sms_ERROR "$ADMINPHONE" "Il est survenu un problème avec un virement. Retour silkaj: $PAY ... $new"; + ./shell/tools/4LETTER.scroll.py "ERREUR SILKAJ ERREUR" + else + # ENCAISSEMENT G1Tag + ./shell/tools/4LETTER.scroll.py "VIR ${FID} $G1VAL G1 -> OK " + # CAPTURE / DESTRUCTION du G1 Tag + echo "0" > "./TAG/${RR}/TAG_amount" + echo "${J}" > "./TAG/${RR}/TAG_ipns" + + # Iterate + if [[ -f ./TAG/${RR}/TAG_n ]]; then NN=$(cat ./TAG/${RR}/TAG_n); ((NN++)); else NN=0; fi + + # TAG_actions + echo "$NN" > "./TAG/${RR}/TAG_n" + echo "${NANODATE}" > "./TAG/${RR}/TAG_nanodate" + echo "${IPFSNODEID}" > "./TAG/${RR}/TAG_writerid" + + # EMPTY G1TAG ID AND REMOVE PUBLISHKEYS + echo "" > "./TAG/${RR}/TAG_id" + rm -f ./TAG/TAG_publishkey.* + + log "__SUB:tag_READ_X.sh: Destruction G1Tag TAG_id $NN.${NANODATE} (par NODE ${IPFSNODEID}) => Value = 0" + I=$(su $YOU -c "ipfs add -qr ./TAG/${RR} | tail -n 1") + # TAG_chain + echo "$I" > "./TAG/${RR}/TAG_chain" + I=$(su $YOU -c "ipfs add -qr ./TAG/${RR} | tail -n 1") + # IPNS $RR PUBLISH + J=$(su $YOU -c "ipfs name publish -k ${RR} --quieter /ipfs/${I}") + + log "__SUB:tag_READ_X.sh: Destruction de ce G1 Tag publish -k ${RR} --quieter /ipfs/${I} :: ipfs ls /ipns/$J" + ./shell/tools/4LETTER.scroll.py "DETRUIRE G1TAG ${FID}" + + # CLEAN IPFS keystore: remove NOT created NODE keys + SOURCENODEID=$(cat "./TAG/${RR}/TAG_nodeid") + if [[ "${SOURCENODEID}" != "${IPFSNODEID}" ]]; then + rm -f /home/$YOU/.ipfs/keystore/${RR} + fi + fi + else + # AJOUT MEMOIRE SCAN + ./shell/timeout.sh -t 1 ./shell/tools/4LETTER.spinner.py + act+=("$cmd") + obj+=("$J") + fi + + + # FLUSH MEMOIRE 2 SCAN + if [[ ${#act[@]} -eq 2 ]]; then + echo "${act[@]}" + echo "${obj[@]}" + echo "${val[@]}" + ############################################################### + # PRESENTATION RJ puis BJ différents Tag WRITE = TRANSFERT G1 TAG + if [[ "${act[0]}" == "RJ" && "${act[1]}" == "BJ" && "${obj[0]}" != "${obj[1]}" ]]; then + PASSENGER=$(su $YOU -c "ipfs cat /ipns/${obj[1]}/TAG_passenger"); + if [[ "$PASSENGER" != "" ]]; then + ./shell/tools/4LETTER.scroll.py "IMPOSSIBLE TAG PASSENGER"; + else + ########################################################### + # READ KEYBOARD VALUE !!! 4 DIGIT REMOVING LEADING 0 + COMBIEN=$(./shell/tools/matrixKeypad.py | sed 's/^0*//') + if [[ $COMBIEN -le ${val[1]} ]]; then + COMBIENZEN=$(bc -l <<< "$COMBIEN * 100") + log "__SUB:tag_READ_X.sh: Transfert de G1 Tag à G1 Tag. $COMBIEN" + ./shell/tools/4LETTER.scroll.py "G1TAG ${FID} -> TX $COMBIENZEN ZEN *** $COMBIEN G1" + log "__SUB:tag_READ_X.sh: ./shell/tag_OP.sh ${obj[1]} ${obj[0]} $COMBIENZEN $SWARM_G1AUTHFILE" + ./shell/tag_OP.sh ${obj[1]} ${obj[0]} $COMBIENZEN "$SWARM_G1AUTHFILE" + else + ./shell/tools/4LETTER.scroll.py "ERREUR $COMBIEN > VALEUR DE ${FID} *** ${val[1]} ZEN" + fi + fi + CASHBACK="" + fi + ############################################################### + # PRESENTATION BJ identiques TRANSFORMATION G1 TAG en REC TAG + if [[ "${act[0]}" == "BJ" && "${act[1]}" == "BJ" && "${obj[0]}" == "${obj[1]}" ]]; then + PASSENGER=$(su $YOU -c "ipfs cat /ipns/${obj[0]}/TAG_passenger"); + if [[ "$PASSENGER" != "" ]]; then + ./shell/tools/4LETTER.scroll.py "DEJA TAG PASSENGER"; + else + log "__SUB:tag_READ_X.sh: Transformation du G1 Tag en Rec Tag. ${val[0]} = ${val[1]}" + ./shell/tools/4LETTER.scroll.py "TRASNFORMATION G1TAG ${val[0]} ZEN EN PASSENGER ${FID}"; + log "__SUB:tag_READ_X.sh: $(./shell/tag_OP.sh ${obj[0]} ${obj[0]} 0 $SWARM_G1AUTHFILE)" + fi + CASHBACK="" + fi + + act=() + obj=() + val=() + # END OF 2-PASS READ + ./shell/timeout.sh -t 2 ./shell/tools/4LETTER.spinner.py + fi + + ./shell/tools/4LETTER.blink.py + ./shell/tools/4LETTER.clock.py & + clockpid=$! +done diff --git a/g1sms/tag_READ_XY.sh b/g1sms/tag_READ_XY.sh new file mode 100644 index 0000000..da8c145 --- /dev/null +++ b/g1sms/tag_READ_XY.sh @@ -0,0 +1,300 @@ +#!/bin/bash +################################################################################ +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) +########################################################################################### +########################################################################################### +# Lit les données reçues depuis un lecteur de QR Code branché en USB/SERIE (/dev/ttyACM0) +# Interpète les G1QRcodes et les G1Tag (R/W) +# Saisie du montant à transférer par pavé numérique +########################################################################################### +echo "__SUB:tag_READ_XY.sh: QRCODE READER : START" +function log () { + echo "$line +$1" >> /tmp/tag_READ_XY.log +} +source ./shell/init.sh +source ./shell/functions.sh +############################################## +# NODE ENVIRONEMENT DETECTION +############################################## +YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1); +IPFSNODEID=$(su $YOU -c "ipfs id -f='\n'") +NODE_UIDNA=$(cat "./wallets/.$IPFSNODEID/_uidna") + +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized + +SWARM_G1PUBKEY=$(cat "${GPATH}/g1sms.pub.key") +SWARM_G1AUTHFILE="${GPATH}/g1sms.priv.key" +if [[ ! -f $SWARM_G1AUTHFILE ]]; then echo "ERREUR CLEF DECHIFFRAGE!"; exit; fi + +## INIT NODE G1 PUB & PRIV KEY +NODE_G1PUBKEY=$(cat "${GPATH}/g1sms.preoni.pub.key") +NODE_G1AUTHFILE="${GPATH}/g1sms.preoni.priv.key" + + +if [[ ! -e "/dev/ttyACM0" ]]; then echo "Branchez votre lecteur de QR code!"; exit; fi +############################################## + +# DOUCHETTE ES TU LA? +./shell/tools/4LETTER.scroll.py "G1TX START" +./shell/tools/4LETTER.clock.py & +clockpid=$! + +# TABLEAU MEMOIRE DE SCAN +declare -a act +declare -a obj +declare -a val + +cat /dev/ttyACM0 | while read line; do + kill $clockpid + + lon=${#line} + pref=$(echo $line | cut -d ":" -f 1) + qrvalue=$(echo $line | cut -d ":" -f 2) + log "__SUB:tag_READ_X.sh: SCAN /dev/ttyACM0 ($lon) :: $line" + + case $pref in + RJ) + R=$(echo $qrvalue | cut -d '#' -f 1) + J=$(echo $qrvalue | cut -d '#' -f 2) + log "__SUB:tag_READ_X.sh: Lecture G1Tag $R $J" + # IPFS READ + ID=$(su $YOU -c "ipfs cat /ipns/$J/TAG_id"); + if [[ "$ID" == "" ]]; then + ./shell/tools/4LETTER.scroll.py ">> BAD G1TAG <<" + continue + fi + # Get First R Tag name word and remove space for RR + FID=$(echo $ID | awk '{print toupper($1)}') + RR=$(echo $ID | sed s/\ //g) + + ./shell/tools/4LETTER.scroll.py "${#act[@]} $FID > " + RVALUE=$(su $YOU -c "ipfs cat /ipns/$J/TAG_amount"); + CURRENCY=$(su $YOU -c "ipfs cat /ipns/$J/TAG_currency" | awk '{print tolower($1)}') + + PASSENGER=$(su $YOU -c "ipfs cat /ipns/$J/TAG_passenger"); + if [[ "$PASSENGER" != "" ]]; then + ./shell/tools/4LETTER.scroll.py "G1TAG PASSENGER $RVALUE ZEN" + else + G1VAL=$(bc -l <<< "scale=2; $RVALUE / 100" | cut -d '.' -f 1) + log "__SUB:tag_READ_X.sh: G1Tag $FID. Valeur $RVALUE $CURRENCY = $G1VAL G1" + ./shell/tools/4LETTER.scroll.py "$RVALUE ZEN *** $G1VAL G1" + fi + cmd="RJ" + CASHBACK="" + val+=("$RVALUE") + ;; + + BJ) + BB=$(echo $qrvalue | cut -d '#' -f 1) + J=$(echo $qrvalue | cut -d '#' -f 2) + log "__SUB:tag_READ_X.sh: Ouverture G1Tag $BB $J" + # + ID=$(su $YOU -c "ipfs cat /ipns/$J/TAG_id"); + if [[ "$ID" == "" ]]; then + ./shell/tools/4LETTER.scroll.py ">> BAD G1TAG <<" + continue + fi + FID=$(echo $ID | awk '{print toupper($1)}') + RR=$(echo $ID | sed s/\ //g) + + ./shell/tools/4LETTER.scroll.py "${#act[@]} $FID TX >>" + BVALUE=$(su $YOU -c "ipfs cat /ipns/$J/TAG_amount") + CURRENCY=$(su $YOU -c "ipfs cat /ipns/$J/TAG_currency" | awk '{print tolower($1)}') + + PASSENGER=$(su $YOU -c "ipfs cat /ipns/$J/TAG_passenger"); + # DIG PUBLISHING KEY + if [[ -f /home/$YOU/.ipfs/keystore/$RR ]]; then + log "__SUB:tag_READ_X.sh: Clef de publication IPFS $RR déjà présente" + else + rm /tmp/TAG_publishkey.B.gpg + su $YOU -c "ipfs get -o /tmp/ /ipns/$J/TAG_publishkey.B.gpg" + ./shell/tools/4LETTER.scroll.py "** GPG **" + gpg -d --output /tmp/ipns.key --pinentry-mode=loopback --passphrase $BB /tmp/TAG_publishkey.B.gpg + # CHECK IF OK + if [[ ! -f /tmp/ipns.key ]]; then + ./shell/tools/4LETTER.scroll.py ">> BAD GPG KEY <<" + continue + fi + mv /tmp/ipns.key /home/$YOU/.ipfs/keystore/$RR + log "__SUB:tag_READ_X.sh: Récupération de la clef de publication $RR" + fi + if [[ "$PASSENGER" != "" ]]; then + log "__SUB:tag_READ_X.sh: !!!! $FID REC Tag = $BVALUE $CURRENCY" + ./shell/tools/4LETTER.scroll.py "G1TAG PASSENGER $BVALUE ZEN" + else + G1VAL=$(bc -l <<< "scale=2; $BVALUE / 100" | cut -d '.' -f 1) + log "__SUB:tag_READ_X.sh: Ce G1 Tag $FID contient $BVALUE $CURRENCY" + ./shell/tools/4LETTER.scroll.py "$BVALUE ZEN *** $G1VAL G1 MAX" + fi + cmd="BJ" + val+=("$BVALUE") + ;; + + *) + if [[ $lon -eq 44 ]]; then + ./shell/tools/4LETTER.scroll.py "PORTEFEUILLE G1 >>>>>>>> ${#act[@]}" & + J=$qrvalue + if [[ "$J" != "${obj[0]}" ]]; then + VALUE=$(./shell/timeout.sh -t 25 ./silkaj/silkaj amount $J) + + if [[ "$(echo $VALUE | cut -d ':' -f 1)" != "Error" && "$VALUE" != "" ]]; then + log "__SUB:tag_READ_X.sh: Ce compte monnaie libre contient $VALUE G1" + NOPOINT=$(echo $VALUE | cut -d '.' -f 1) + ./shell/tools/4LETTER.scroll.py " $NOPOINT G1 *** $NOPOINT G1 " + CASHBACK="$J" + cmd="G1" + val+=("$VALUE") + else + if [[ "$VALUE" == "" ]]; then + DUNITER=$(./shell/checknodes.sh 'BAN') + log "__SUB:tag_READ_X.sh: ERREUR TIMEOUT. CHANGE SILKAJ SERVER: $DUNITER" + ./shell/tools/4LETTER.scroll.py "ERREUR TIMEOUT SILKAJ" + ./shell/timeout.sh -t 1 ./shell/tools/4LETTER.spinner.py + CASHBACK="" + else + log "__SUB:tag_READ_X.sh: ERREUR QRCODE ILLISIBLE. longueur $J = ${#J}" + ./shell/tools/4LETTER.scroll.py "ERREUR QRCODE INCONNU" + ./shell/timeout.sh -t 1 ./shell/tools/4LETTER.spinner.py + CASHBACK="" + fi + fi + else + ./shell/tools/4LETTER.scroll.py " 2 X " + fi + else + ./shell/tools/4LETTER.scroll.py "ERREUR QRCODE INCONNU" + fi + + ;; + + esac + + ############################################################### + # APRES G1 CASHBACK : G1 Tag BJ WRITE => ENCAISSEMENT + if [[ "${cmd}" == "BJ" && "$CASHBACK" != "" && -f /home/$YOU/.ipfs/keystore/${RR} ]]; then + ./shell/tools/4LETTER.scroll.py "ZEN -> G1" + log "__SUB:tag_READ_X.sh: G1 tag de $BVALUE G1 ! /ipns/$J Virement vers $CASHBACK? " + + ./shell/tools/4LETTER.spinner.py & + spinnerpid=$! + + # ipfs get G1Tag vers ./TAG/${RR} + mkdir -p ./TAG/${RR}; rm -f ./TAG/${RR}/*; chown -R $YOU ./TAG/${RR}/ + log "__SUB:tag_READ_X.sh: ipfs get --output=./TAG/${RR} /ipns/$J" + su $YOU -c "ipfs get --output=./TAG/${RR} /ipns/$J" + + if [[ $(cat ./TAG/${RR}/TAG_passenger) != "" ]]; then ./shell/tools/4LETTER.scroll.py "IMPOSSIBLE TAG PASSENGER $BVALUE ZEN"; continue; fi + + # Make Silkaj TX + G1VAL=$(bc -l <<< "scale=2; $BVALUE / 100" | cut -d '.' -f 1) + log "__SUB:tag_READ_X.sh: Silkaj TX $SWARM_G1AUTHFILE ($G1VAL) -> $CASHBACK" + PAY=$(./silkaj/silkaj transaction --auth-file -file="$SWARM_G1AUTHFILE" --amount=$G1VAL --output=$CASHBACK --comment="[G1sms+] G1Tag $RR ZEN -> G1" -y) + + log "__SUB:tag_READ_X.sh: Silkaj output = $PAY" + # Stop 1LETTER.spinner.py + kill $spinnerpid + + if [[ "$(echo $PAY | cut -d '|' -f 1)" == "KO" && "$PAY" != "" ]]; then + new=$(./shell/checknodes.sh "BAN") + sms_ERROR "$ADMINPHONE" "Il est survenu un problème avec un virement. Retour silkaj: $PAY ... $new"; + ./shell/tools/4LETTER.scroll.py "ERREUR SILKAJ ERREUR" + else + # ENCAISSEMENT G1Tag + ./shell/tools/4LETTER.scroll.py "VIR ${FID} $G1VAL G1 -> OK " + # CAPTURE / DESTRUCTION du G1 Tag + echo "0" > "./TAG/${RR}/TAG_amount" + echo "${J}" > "./TAG/${RR}/TAG_ipns" + + # Iterate + if [[ -f ./TAG/${RR}/TAG_n ]]; then NN=$(cat ./TAG/${RR}/TAG_n); ((NN++)); else NN=0; fi + + # TAG_actions + echo "$NN" > "./TAG/${RR}/TAG_n" + echo "${NANODATE}" > "./TAG/${RR}/TAG_nanodate" + echo "${IPFSNODEID}" > "./TAG/${RR}/TAG_writerid" + + # EMPTY G1TAG ID AND REMOVE PUBLISHKEYS + echo "" > "./TAG/${RR}/TAG_id" + rm -f ./TAG/TAG_publishkey.* + + log "__SUB:tag_READ_X.sh: Destruction G1Tag TAG_id $NN.${NANODATE} (par NODE ${IPFSNODEID}) => Value = 0" + I=$(su $YOU -c "ipfs add -qr ./TAG/${RR} | tail -n 1") + # TAG_chain + echo "$I" > "./TAG/${RR}/TAG_chain" + I=$(su $YOU -c "ipfs add -qr ./TAG/${RR} | tail -n 1") + # IPNS $RR PUBLISH + J=$(su $YOU -c "ipfs name publish -k ${RR} --quieter /ipfs/${I}") + + log "__SUB:tag_READ_X.sh: Destruction de ce G1 Tag publish -k ${RR} --quieter /ipfs/${I} :: ipfs ls /ipns/$J" + ./shell/tools/4LETTER.scroll.py "DETRUIRE G1TAG ${FID}" + + # CLEAN IPFS keystore: remove NOT created NODE keys + SOURCENODEID=$(cat "./TAG/${RR}/TAG_nodeid") + if [[ "${SOURCENODEID}" != "${IPFSNODEID}" ]]; then + rm -f /home/$YOU/.ipfs/keystore/${RR} + fi + fi + else + # AJOUT MEMOIRE SCAN + ./shell/timeout.sh -t 1 ./shell/tools/4LETTER.spinner.py + act+=("$cmd") + obj+=("$J") + fi + + + # FLUSH MEMOIRE 2 SCAN + if [[ ${#act[@]} -eq 2 ]]; then + echo "${act[@]}" + echo "${obj[@]}" + echo "${val[@]}" + ############################################################### + # PRESENTATION RJ puis BJ différents Tag WRITE = TRANSFERT G1 TAG + if [[ "${act[0]}" == "RJ" && "${act[1]}" == "BJ" && "${obj[0]}" != "${obj[1]}" ]]; then + PASSENGER=$(su $YOU -c "ipfs cat /ipns/${obj[1]}/TAG_passenger"); + if [[ "$PASSENGER" != "" ]]; then + ./shell/tools/4LETTER.scroll.py "IMPOSSIBLE TAG PASSENGER"; + else + ########################################################### + # READ KEYBOARD VALUE !!! 4 DIGIT REMOVING LEADING 0 + COMBIEN=$(./shell/tools/matrixKeypad.py | sed 's/^0*//') + if [[ $COMBIEN -le ${val[1]} ]]; then + COMBIENZEN=$(bc -l <<< "$COMBIEN * 100") + log "__SUB:tag_READ_X.sh: Transfert de G1 Tag à G1 Tag. $COMBIEN" + ./shell/tools/4LETTER.scroll.py "G1TAG ${FID} -> TX $COMBIENZEN ZEN *** $COMBIEN G1" + log "__SUB:tag_READ_X.sh: ./shell/tag_OP.sh ${obj[1]} ${obj[0]} $COMBIENZEN $SWARM_G1AUTHFILE" + ./shell/tag_OP.sh ${obj[1]} ${obj[0]} $COMBIENZEN "$SWARM_G1AUTHFILE" + else + ./shell/tools/4LETTER.scroll.py "ERREUR $COMBIEN > VALEUR DE ${FID} *** ${val[1]} ZEN" + fi + fi + CASHBACK="" + fi + ############################################################### + # PRESENTATION BJ identiques TRANSFORMATION G1 TAG en REC TAG + if [[ "${act[0]}" == "BJ" && "${act[1]}" == "BJ" && "${obj[0]}" == "${obj[1]}" ]]; then + PASSENGER=$(su $YOU -c "ipfs cat /ipns/${obj[0]}/TAG_passenger"); + if [[ "$PASSENGER" != "" ]]; then + ./shell/tools/4LETTER.scroll.py "DEJA TAG PASSENGER"; + else + log "__SUB:tag_READ_X.sh: Transformation du G1 Tag en Rec Tag. ${val[0]} = ${val[1]}" + ./shell/tools/4LETTER.scroll.py "TRASNFORMATION G1TAG ${val[0]} ZEN EN PASSENGER ${FID}"; + log "__SUB:tag_READ_X.sh: $(./shell/tag_OP.sh ${obj[0]} ${obj[0]} 0 $SWARM_G1AUTHFILE)" + fi + CASHBACK="" + fi + + act=() + obj=() + val=() + # END OF 2-PASS READ + ./shell/timeout.sh -t 2 ./shell/tools/4LETTER.spinner.py + fi + + ./shell/tools/4LETTER.blink.py + ./shell/tools/4LETTER.clock.py & + clockpid=$! +done diff --git a/g1sms/timeout.sh b/g1sms/timeout.sh new file mode 100755 index 0000000..5c19d2e --- /dev/null +++ b/g1sms/timeout.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# +# The Bash shell script executes a command with a time-out. +# Upon time-out expiration SIGTERM (15) is sent to the process. If the signal +# is blocked, then the subsequent SIGKILL (9) terminates it. +# +# Based on the Bash documentation example. + +# Hello Chet, +# please find attached a "little easier" :-) to comprehend +# time-out example. If you find it suitable, feel free to include +# anywhere: the very same logic as in the original examples/scripts, a +# little more transparent implementation to my taste. +# +# Dmitry V Golovashkin + +scriptName="${0##*/}" + +declare -i DEFAULT_TIMEOUT=9 +declare -i DEFAULT_INTERVAL=1 +declare -i DEFAULT_DELAY=1 + +# Timeout. +declare -i timeout=DEFAULT_TIMEOUT +# Interval between checks if the process is still alive. +declare -i interval=DEFAULT_INTERVAL +# Delay between posting the SIGTERM signal and destroying the process by SIGKILL. +declare -i delay=DEFAULT_DELAY + +function printUsage() { + cat < 0)); do + sleep $interval + kill -0 $$ || exit 0 + ((t -= interval)) + done + + # Be nice, post SIGTERM first. + # The 'exit 0' below will be executed if any preceeding command fails. + kill -s SIGTERM $$ && kill -0 $$ || exit 0 + sleep $delay + kill -s SIGKILL $$ +) 2> /dev/null & + +exec "$@" diff --git a/g1sms/tools/4LETTER.blink.py b/g1sms/tools/4LETTER.blink.py new file mode 100755 index 0000000..5f77418 --- /dev/null +++ b/g1sms/tools/4LETTER.blink.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +import time +import fourletterphat + +fourletterphat.clear() + +fourletterphat.print_str("SCAN") +fourletterphat.set_blink(fourletterphat.HT16K33_BLINK_HALFHZ) +fourletterphat.show() +time.sleep(1) +fourletterphat.set_blink(fourletterphat.HT16K33_BLINK_OFF) +fourletterphat.print_str("CODE") +fourletterphat.show() +time.sleep(0.5) diff --git a/g1sms/tools/4LETTER.clear.py b/g1sms/tools/4LETTER.clear.py new file mode 100755 index 0000000..059c6c6 --- /dev/null +++ b/g1sms/tools/4LETTER.clear.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +import fourletterphat +fourletterphat.clear() diff --git a/g1sms/tools/4LETTER.clock.py b/g1sms/tools/4LETTER.clock.py new file mode 100755 index 0000000..138cd59 --- /dev/null +++ b/g1sms/tools/4LETTER.clock.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python + +import time +import fourletterphat + +while True: + fourletterphat.clear() + + str_time = time.strftime("%H%M") + + # Display the time + fourletterphat.print_number_str(str_time) + + # Blink the middle decimal point + # int(time.time() % 2) will alternate 1 0 1 0 + # which we can use to directly set the point + fourletterphat.set_decimal(1, int(time.time() % 2)) + + fourletterphat.show() + time.sleep(0.1) diff --git a/g1sms/tools/4LETTER.scroll.py b/g1sms/tools/4LETTER.scroll.py new file mode 100755 index 0000000..c77897f --- /dev/null +++ b/g1sms/tools/4LETTER.scroll.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python +import sys +import fourletterphat + +# if bad number of arguments... +if len(sys.argv) != 2: + + # display command usage + print(""" + Usage: + python 4LETTER.scroll.py "message a afficher" + """) + + # exit with status code error + exit(1) + +# Get message from arguments +message = sys.argv[1] +fourletterphat.scroll_print( message ) + diff --git a/g1sms/tools/4LETTER.spinner.py b/g1sms/tools/4LETTER.spinner.py new file mode 100755 index 0000000..2e4ca45 --- /dev/null +++ b/g1sms/tools/4LETTER.spinner.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +import time +import fourletterphat as flp + +spinner = ["|", "/", "-", "\\"] + +while True: + for i in range(4): + for s in spinner: + s = s * 4 + flp.clear() + flp.print_str(s) + flp.show() + time.sleep(0.1) diff --git a/g1sms/tools/G1_IPFS_pishrink.sh b/g1sms/tools/G1_IPFS_pishrink.sh new file mode 100644 index 0000000..cd7ebb2 --- /dev/null +++ b/g1sms/tools/G1_IPFS_pishrink.sh @@ -0,0 +1,332 @@ +#!/bin/bash +########################################################### +# FORK of pishrink.sh +# SHRINK IMAGE OF YOUR RASPIAN PI SD CARD +# +# + TODO: THIS SCRIPT RESET IPFS / G1 Keys / SWARM config +# AND RUN CONFIG on FIRST IMG BOOT in /etc/rc.local +########################################################### +version="v0.1.3" + +CURRENT_DIR=$(pwd) +SCRIPTNAME="${0##*/}" +LOGFILE=${CURRENT_DIR}/${SCRIPTNAME%.*}.log + +function info() { + echo "$SCRIPTNAME: $1..." +} + +function error() { + echo -n "$SCRIPTNAME: ERROR occured in line $1: " + shift + echo "$@" +} + +function cleanup() { + if losetup "$loopback" &>/dev/null; then + losetup -d "$loopback" + fi + if [ "$debug" = true ]; then + local old_owner=$(stat -c %u:%g "$src") + chown "$old_owner" "$LOGFILE" + fi + +} + +function logVariables() { + if [ "$debug" = true ]; then + echo "Line $1" >> "$LOGFILE" + shift + local v var + for var in "$@"; do + eval "v=\$$var" + echo "$var: $v" >> "$LOGFILE" + done + fi +} + +function checkFilesystem() { + info "Checking filesystem" + e2fsck -pf "$loopback" + (( $? < 4 )) && return + + info "Filesystem error detected!" + + info "Trying to recover corrupted filesystem" + e2fsck -y "$loopback" + (( $? < 4 )) && return + +if [[ $repair == true ]]; then + info "Trying to recover corrupted filesystem - Phase 2" + e2fsck -fy -b 32768 "$loopback" + (( $? < 4 )) && return +fi + error $LINENO "Filesystem recoveries failed. Giving up..." + exit -9 + +} + +help() { + local help + read -r -d '' help << EOM +Usage: $0 [-sdrzh] imagefile.img [newimagefile.img] + + -s: Don't expand filesystem when image is booted the first time + -d: Write debug messages in a debug log file + -r: Use advanced filesystem repair option if the normal one fails + -z: Gzip compress image after shrinking +EOM + echo "$help" + exit -1 +} + +usage() { + echo "Usage: $0 [-sdrpzh] imagefile.img [newimagefile.img]" + echo "" + echo " -s: Skip autoexpand" + echo " -d: Debug mode on" + echo " -r: Use advanced repair options" + echo " -z: Gzip compress image after shrinking" + echo " -h: display help text" + exit -1 +} + +should_skip_autoexpand=false +debug=false +repair=false +gzip_compress=false + +while getopts ":sdrzh" opt; do + case "${opt}" in + s) should_skip_autoexpand=true ;; + d) debug=true;; + r) repair=true;; + z) gzip_compress=true;; + h) help;; + *) usage ;; + esac +done +shift $((OPTIND-1)) + +if [ "$debug" = true ]; then + info "Creating log file $LOGFILE" + rm "$LOGFILE" &>/dev/null + exec 1> >(stdbuf -i0 -o0 -e0 tee -a "$LOGFILE" >&1) + exec 2> >(stdbuf -i0 -o0 -e0 tee -a "$LOGFILE" >&2) +fi + +echo "${0##*/} $version" + +#Args +src="$1" +img="$1" + +#Usage checks +if [[ -z "$img" ]]; then + usage +fi +if [[ ! -f "$img" ]]; then + error $LINENO "$img is not a file..." + exit -2 +fi +if (( EUID != 0 )); then + error $LINENO "You need to be running as root." + exit -3 +fi + +#Check that what we need is installed +for command in parted losetup tune2fs md5sum e2fsck resize2fs; do + command -v $command >/dev/null 2>&1 + if (( $? != 0 )); then + error $LINENO "$command is not installed." + exit -4 + fi +done + +#Copy to new file if requested +if [ -n "$2" ]; then + info "Copying $1 to $2..." + cp --reflink=auto --sparse=always "$1" "$2" + if (( $? != 0 )); then + error $LINENO "Could not copy file..." + exit -5 + fi + old_owner=$(stat -c %u:%g "$1") + chown "$old_owner" "$2" + img="$2" +fi + +# cleanup at script exit +trap cleanup ERR EXIT + +#Gather info +info "Gatherin data" +beforesize=$(ls -lh "$img" | cut -d ' ' -f 5) +parted_output=$(parted -ms "$img" unit B print | tail -n 1) +partnum=$(echo "$parted_output" | cut -d ':' -f 1) +partstart=$(echo "$parted_output" | cut -d ':' -f 2 | tr -d 'B') +loopback=$(losetup -f --show -o "$partstart" "$img") +tune2fs_output=$(tune2fs -l "$loopback") +currentsize=$(echo "$tune2fs_output" | grep '^Block count:' | tr -d ' ' | cut -d ':' -f 2) +blocksize=$(echo "$tune2fs_output" | grep '^Block size:' | tr -d ' ' | cut -d ':' -f 2) + +logVariables $LINENO tune2fs_output currentsize blocksize + +#Check if we should make pi expand rootfs on next boot +if [ "$should_skip_autoexpand" = false ]; then + #Make pi expand rootfs on next boot + mountdir=$(mktemp -d) + mount "$loopback" "$mountdir" + + if [ "$(md5sum "$mountdir/etc/rc.local" | cut -d ' ' -f 1)" != "0542054e9ff2d2e0507ea1ffe7d4fc87" ]; then + echo "Creating new /etc/rc.local" + mv "$mountdir/etc/rc.local" "$mountdir/etc/rc.local.bak" + #####Do not touch the following lines##### +cat <<\EOF1 > "$mountdir/etc/rc.local" +#!/bin/bash +do_expand_rootfs() { + ROOT_PART=$(mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p') + + PART_NUM=${ROOT_PART#mmcblk0p} + if [ "$PART_NUM" = "$ROOT_PART" ]; then + echo "$ROOT_PART is not an SD card. Don't know how to expand" + return 0 + fi + + # Get the starting offset of the root partition + PART_START=$(parted /dev/mmcblk0 -ms unit s p | grep "^${PART_NUM}" | cut -f 2 -d: | sed 's/[^0-9]//g') + [ "$PART_START" ] || return 1 + # Return value will likely be error for fdisk as it fails to reload the + # partition table because the root fs is mounted + fdisk /dev/mmcblk0 < /etc/rc.local && +#!/bin/sh +echo "Expanding /dev/$ROOT_PART" +resize2fs /dev/$ROOT_PART +rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local + +EOF +reboot +exit +} +raspi_config_expand() { +/usr/bin/env raspi-config --expand-rootfs +if [[ $? != 0 ]]; then + return -1 +else + rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local + reboot + exit +fi +} +raspi_config_expand +echo "WARNING: Using backup expand..." +sleep 5 +do_expand_rootfs +echo "ERROR: Expanding failed..." +sleep 5 +rm -f /etc/rc.local; cp -f /etc/rc.local.bak /etc/rc.local; /etc/rc.local +exit 0 +EOF1 + #####End no touch zone##### + chmod +x "$mountdir/etc/rc.local" + fi + umount "$mountdir" +else + echo "Skipping autoexpanding process..." +fi + +#Make sure filesystem is ok +checkFilesystem + +if ! minsize=$(resize2fs -P "$loopback"); then + rc=$? + error $LINENO "resize2fs failed with rc $rc" + exit -10 +fi +minsize=$(cut -d ':' -f 2 <<< "$minsize" | tr -d ' ') +logVariables $LINENO minsize +if [[ $currentsize -eq $minsize ]]; then + error $LINENO "Image already shrunk to smallest size" + exit -11 +fi + +#Add some free space to the end of the filesystem +extra_space=$(($currentsize - $minsize)) +logVariables $LINENO extra_space +for space in 5000 1000 100; do + if [[ $extra_space -gt $space ]]; then + minsize=$(($minsize + $space)) + break + fi +done +logVariables $LINENO minsize + +#Shrink filesystem +info "Shrinking filesystem" +resize2fs -p "$loopback" $minsize +if [[ $? != 0 ]]; then + error $LINENO "resize2fs failed" + mount "$loopback" "$mountdir" + mv "$mountdir/etc/rc.local.bak" "$mountdir/etc/rc.local" + umount "$mountdir" + losetup -d "$loopback" + exit -12 +fi +sleep 1 + +#Shrink partition +partnewsize=$(($minsize * $blocksize)) +newpartend=$(($partstart + $partnewsize)) +logVariables $LINENO partnewsize newpartend +if ! parted -s -a minimal "$img" rm "$partnum"; then + rc=$? + error $LINENO "parted failed with rc $rc" + exit -13 +fi + +if ! parted -s "$img" unit B mkpart primary "$partstart" "$newpartend"; then + rc=$? + error $LINENO "parted failed with rc $rc" + exit -14 +fi + +#Truncate the file +info "Shrinking image" +if ! endresult=$(parted -ms "$img" unit B print free); then + rc=$? + error $LINENO "parted failed with rc $rc" + exit -15 +fi + +endresult=$(tail -1 <<< "$endresult" | cut -d ':' -f 2 | tr -d 'B') +logVariables $LINENO endresult +if ! truncate -s "$endresult" "$img"; then + rc=$? + error $LINENO "trunate failed with rc $rc" + exit -16 +fi + +if [[ $gzip_compress == true ]]; then + info "Gzipping the shrunk image" + if [[ ! $(gzip -f9 "$img") ]]; then + img=$img.gz + fi +fi + +aftersize=$(ls -lh "$img" | cut -d ' ' -f 5) +logVariables $LINENO aftersize + +info "Shrunk $img from $beforesize to $aftersize" diff --git a/g1sms/tools/G1_TUX_keygen.py b/g1sms/tools/G1_TUX_keygen.py new file mode 100755 index 0000000..395d75f --- /dev/null +++ b/g1sms/tools/G1_TUX_keygen.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 + +""" + CopyLeft 2019 Pascal Engélibert + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +""" + +import sys +from duniterpy.key import SigningKey + +def getargv(arg, default=""): + if arg in sys.argv and len(sys.argv) > sys.argv.index(arg)+1: + return sys.argv[sys.argv.index(arg)+1] + else: + return default + +if __name__ == "__main__": + + if "--help" in sys.argv or not "-i" in sys.argv or not "-o" in sys.argv: + print("""Duniter MiniTools: Mass Keygen +CopyLeft 2019 Pascal Engélibert + +Usage: +python3 keygen.py -i -o +Format: CSV ; Separator: tab +""") + exit() + + infile = open(getargv("-i"), "r") + outfile = open(getargv("-o"), "w") + + i = 0 + while True: + line = infile.readline() + if line == "": + break + i += 1 + if "\n" in line: + line = line[:len(line)-1] + + cols = line.split("\t") + while "" in cols: + cols.remove("") + if len(cols) < 2: + print("Error (line "+str(i)+"): less than 2 columns! (at least 2 expected)") + break + + key = SigningKey.from_credentials(cols[0], cols[1]) + outfile.write(cols[0]+"\t"+cols[1]+"\t"+key.pubkey+"\n") + + infile.close() + outfile.close() diff --git a/g1sms/tools/G1_TUX_natools.py b/g1sms/tools/G1_TUX_natools.py new file mode 100755 index 0000000..5149743 --- /dev/null +++ b/g1sms/tools/G1_TUX_natools.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 + +import os, sys, duniterpy.key, libnacl.sign + +def getargv(arg:str, default:str="", n:int=1, args:list=sys.argv) -> str: + if arg in args and len(args) > args.index(arg)+n: + return args[args.index(arg)+n] + else: + return default + +def read_data(data_path, b=True): + if data_path == "-": + if b: + return sys.stdin.read().encode() + else: + return sys.stdin.read() + else: + if b: + return open(os.path.expanduser(data_path), "rb").read() + else: + return open(os.path.expanduser(data_path), "r").read() + +def write_data(data, result_path): + (sys.stdout if result_path == "-" else open(os.path.expanduser(result_path), "wb")).write(data) + +def encrypt(data, pubkey): + return duniterpy.key.PublicKey(pubkey).encrypt_seal(data) + +def decrypt(data, privkey): + return duniterpy.key.SigningKey.from_seedhex(privkey).decrypt_seal(data) + +def sign(data, privkey): + return duniterpy.key.SigningKey.from_seedhex(privkey).sign(data) + +def verify(data, pubkey): + try: + return libnacl.sign.Verifier(duniterpy.key.PublicKey(pubkey).hex_pk()).verify(data) + except ValueError: + exit(1) + +def show_help(): + print("""Usage: +python3 natools.py [options] + +Commands: + encrypt Encrypt data + decrypt Decrypt data + sign Sign data + verify Verify data + +Options: + -i Input file path (default: -) + -k Privkey file path (default: authfile.key) + -p Pubkey (base58) + -o Output file path (default: -) + +Note: "-" means stdin or stdout. +""") + +if __name__ == "__main__": + + if "--help" in sys.argv: + show_help() + exit() + + data_path = getargv("-i", "-") + privkey_path = getargv("-k", "authfile.key") + pubkey = getargv("-p") + result_path = getargv("-o", "-") + + try: + if sys.argv[1] == "encrypt": + write_data(encrypt(read_data(data_path), pubkey), result_path) + elif sys.argv[1] == "decrypt": + write_data(decrypt(read_data(data_path), read_data(privkey_path, False)), result_path) + elif sys.argv[1] == "sign": + write_data(sign(read_data(data_path), read_data(privkey_path, False)), result_path) + elif sys.argv[1] == "verify": + write_data(verify(read_data(data_path), pubkey), result_path) + else: + show_help() + except Exception as e: + sys.stderr.write("Error: ", e, "\n") + show_help() + exit(1) diff --git a/g1sms/tools/G1_gen_pubkey.py b/g1sms/tools/G1_gen_pubkey.py new file mode 100755 index 0000000..0a543f5 --- /dev/null +++ b/g1sms/tools/G1_gen_pubkey.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +import sys +from duniterpy.key import SigningKey + + +def generate_public_key(salt: str, password: str) -> str: + """ + Return public key from credentials + + :param salt: Salt passphrase, using quotes if space in it + :param password: Password + """ + # Create key object + # key = SigningKey(salt, password) + key = SigningKey.from_credentials(salt, password) + # SigningKey.save_private_key("private.key", "./") + return key.pubkey + +if __name__ == '__main__': + + # if bad number of arguments... + if len(sys.argv) != 3: + + # display command usage + print(""" + Usage: + python gen_pubkey.py salt password + """) + + # exit with status code error + exit(1) + + # capture arguments + _salt = sys.argv[1] + _password = sys.argv[2] + + # display the public key + print(generate_public_key(_salt, _password)) + + # exit with status code ok + exit(0) + diff --git a/g1sms/tools/G1_request_cesium_profile.py b/g1sms/tools/G1_request_cesium_profile.py new file mode 100755 index 0000000..27f9d41 --- /dev/null +++ b/g1sms/tools/G1_request_cesium_profile.py @@ -0,0 +1,32 @@ +import asyncio +import json +import sys +from duniterpy.api.client import Client + +ES_CORE_ENDPOINT = "ES_CORE_API g1.data.duniter.fr 443" +ES_USER_ENDPOINT = "ES_USER_API g1.data.duniter.fr 443" + +async def main(): + """ + Main code (synchronous requests) + """ + # Create Client from endpoint string in Duniter format + client = Client(ES_USER_ENDPOINT) + + # Get entry + # pubkey = input("\nEnter a public key to get the user profile: ") + # pubkey = "DsEx1pS33vzYZg4MroyBV9hCw98j1gtHEhwiZ5tK7ech" + pubkey = sys.argv[1] + + # Get the profil of a public key (direct REST GET request) + # print("\nGET user/profile/{0}/_source:".format(pubkey)) + # response = await client.get('tx/history/{0}'.format(pubkey.strip(' \n'))) + response = await client.get('user/profile/{0}/_source'.format(pubkey.strip(' \n'))) + print(json.dumps(response)) + + # Close client aiohttp session + await client.close() + +# Latest duniter-python-api is asynchronous and you have to use asyncio, an asyncio loop and a "as" on the data. +# ( https://docs.python.org/3/library/asyncio.html ) +asyncio.get_event_loop().run_until_complete(main()) diff --git a/g1sms/tools/G1_send_transaction.py b/g1sms/tools/G1_send_transaction.py new file mode 100755 index 0000000..6f819b5 --- /dev/null +++ b/g1sms/tools/G1_send_transaction.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +import asyncio +import getpass +import sys +import silkaj.money, silkaj.tx, silkaj.auth +from duniterpy.key import SigningKey + +# CONFIG ####################################### + +# You can either use a complete defined endpoint : [NAME_OF_THE_API] [DOMAIN] [IPv4] [IPv6] [PORT] +# or the simple definition : [NAME_OF_THE_API] [DOMAIN] [PORT] +# Here we use the secure BASIC_MERKLED_API (BMAS) +BMAS_ENDPOINT = "BMAS g1.duniter.org 443" + +# Version of the transaction document +TRANSACTION_VERSION = 10 + +################################################ + + +def sendTransaction(sender_keys, receiver_pubkey, amount, comment): + sender_amount = silkaj.money.get_amount_from_pubkey(sender_keys.pubkey)[0] + assert sender_amount >= amount, "not enough money" + silkaj.tx.generate_and_send_transaction(sender_keys.hex_seed().decode(), sender_keys.pubkey, amount, [receiver_pubkey], comment) + + +if __name__ == '__main__': + """ + Main code + """ + # if bad number of arguments... + if len(sys.argv) != 6: + + # display command usage + print(""" + Usage: + ./g1_send_transaction.py phone pin dest amount comment + """) + + # exit with status code error + exit(1) + + # capture arguments + _salt = sys.argv[1] + _password = sys.argv[2] + _dest = sys.argv[3] + _amount = sys.argv[4] + _comment = sys.argv[5] + + # create keys from credentials + sender_keys = SigningKey(_salt, _password) + pubkey_from = sender_keys.pubkey + + print("txstatus = sendTransaction(sender_keys, _dest, _amount, _comment)") diff --git a/g1sms/tools/matrixKeypad.py b/g1sms/tools/matrixKeypad.py new file mode 100755 index 0000000..ba1c3d4 --- /dev/null +++ b/g1sms/tools/matrixKeypad.py @@ -0,0 +1,41 @@ +#! /usr/bin/python +import fourletterphat +from matrixKeypad_RPi_GPIO import keypad +from time import sleep + +# Initialize the keypad class +kp = keypad() + +fourletterphat.print_str(" G1?") +fourletterphat.show() + +def digit(): + # Loop while waiting for a keypress + r = None + while r == None: + r = kp.getKey() + return r + +#print ("Please enter a 4 digit code: ") + +# Getting digit 1, printing it, then sleep to allow the next digit press. +d1 = digit() +#print (d1) +sleep(0.25) + +d2 = digit() +#print (d2) +sleep(0.25) + +d3 = digit() +#print (d3) +sleep(0.25) + +d4 = digit() +#print (d4) + +# printing out the assembled 4 digit code. +print "%s%s%s%s"%(d1,d2,d3,d4) +fourletterphat.clear() +fourletterphat.scroll_print("OK %s%s%s%s"%(d1,d2,d3,d4)) +sleep(2) diff --git a/g1sms/tools/matrixKeypad_RPi_GPIO.py b/g1sms/tools/matrixKeypad_RPi_GPIO.py new file mode 100755 index 0000000..c162fcc --- /dev/null +++ b/g1sms/tools/matrixKeypad_RPi_GPIO.py @@ -0,0 +1,102 @@ +# ##################################################### +# Python Library for 3x4 matrix keypad using +# 7 of the avialable GPIO pins on the Raspberry Pi. +# +# This could easily be expanded to handle a 4x4 but I +# don't have one for testing. The KEYPAD constant +# would need to be updated. Also the setting/checking +# of the colVal part would need to be expanded to +# handle the extra column. +# +# Written by Chris Crumpacker +# May 2013 +# +# main structure is adapted from Bandono's +# matrixQPI which is wiringPi based. +# https://github.com/bandono/matrixQPi?source=cc +# ##################################################### + +import RPi.GPIO as GPIO + +class keypad(): + # CONSTANTS + KEYPAD = [ + [1,2,3], + [4,5,6], + [7,8,9], + ["*",0,"#"] + ] + + ROW = [18,23,24,25] + COLUMN = [5,6,13] + + def __init__(self): + GPIO.setmode(GPIO.BCM) + + def getKey(self): + + # Set all columns as output low + for j in range(len(self.COLUMN)): + GPIO.setup(self.COLUMN[j], GPIO.OUT) + GPIO.output(self.COLUMN[j], GPIO.LOW) + + # Set all rows as input + for i in range(len(self.ROW)): + GPIO.setup(self.ROW[i], GPIO.IN, pull_up_down=GPIO.PUD_UP) + + # Scan rows for pushed key/button + # A valid key press should set "rowVal" between 0 and 3. + rowVal = -1 + for i in range(len(self.ROW)): + tmpRead = GPIO.input(self.ROW[i]) + if tmpRead == 0: + rowVal = i + + # if rowVal is not 0 thru 3 then no button was pressed and we can exit + if rowVal <0 or rowVal >3: + self.exit() + return + + # Convert columns to input + for j in range(len(self.COLUMN)): + GPIO.setup(self.COLUMN[j], GPIO.IN, pull_up_down=GPIO.PUD_DOWN) + + # Switch the i-th row found from scan to output + GPIO.setup(self.ROW[rowVal], GPIO.OUT) + GPIO.output(self.ROW[rowVal], GPIO.HIGH) + + # Scan columns for still-pushed key/button + # A valid key press should set "colVal" between 0 and 2. + colVal = -1 + for j in range(len(self.COLUMN)): + tmpRead = GPIO.input(self.COLUMN[j]) + if tmpRead == 1: + colVal=j + + # if colVal is not 0 thru 2 then no button was pressed and we can exit + if colVal <0 or colVal >2: + self.exit() + return + + # Return the value of the key pressed + self.exit() + return self.KEYPAD[rowVal][colVal] + + def exit(self): + # Reinitialize all rows and columns as input at exit + for i in range(len(self.ROW)): + GPIO.setup(self.ROW[i], GPIO.IN, pull_up_down=GPIO.PUD_UP) + for j in range(len(self.COLUMN)): + GPIO.setup(self.COLUMN[j], GPIO.IN, pull_up_down=GPIO.PUD_UP) + +if __name__ == '__main__': + # Initialize the keypad class + kp = keypad() + + # Loop while waiting for a keypress + digit = None + while digit == None: + digit = kp.getKey() + + # Print the result + print digit diff --git a/g1sms/tools/matrixKeypad_RPi_GPIO.pyc b/g1sms/tools/matrixKeypad_RPi_GPIO.pyc new file mode 100755 index 0000000000000000000000000000000000000000..6d3fee136dfab590afe9fe37c97b3938c434ac4d GIT binary patch literal 2215 zcmb_cU2hvz5S_bguM@|P)1)m;6e=MqVL+-C3Gsjs3Qdp`HMPyA#)?t3va(CE&iZrL zs*9Yb^28(mpueI23m$kyf^%k*xD9y$#oBv3JNNF)nYlA#|5?l*{PxF-W4ZX*_}|8g zPXRt2BaukgNZW{SiJukUmS03(iyXBr32gB*a%Rccm%yU7o#8iaN2Z$+IFz~jqXZf0 z=JbFgqitznue#S)2Zv<`&ceU(t0ffAf>*w??qT^Z+=qr> z5tynlL&y>|h8(2@!XhBy;m<-qDt;WULJU73JRqzSihyID33s0CJkxV}A`YUT%20|z`~{@S>7W->hGC_;75C!L zEAeR%MU`YQh~i4GlZ?aZQ@sMuZG;{@JRZJE7?$US{V?&ok08h7Dn_X@crK-W4;$0( z$sP%qU9v|2yDz?yb0eVG&0K8EjI8rLE3Yjvl$>ijC>rdH?n`UB{f^BAW<+g%D(BWa zHWy@Or8aT@sk1yx7&Gch3l(#2%XIHXLtB@ImXtzj2rkY+7PVn(CBLP4*ciR#)0%1h zogo`yD5DuNGF~eKIz8sF~f#By2j+T&ftP!Eg;FMsGn+LB3c=ms5M)yIPf>f7i;dPOqOp^qTNUjoG5 zG#ln2@RN*VHqCugFh%=;$(syy_J-N`mp-3%F4J<=xxeD&zt$?sAgv=Ot<~#|ivGR1 zQFB*~dfmhk8kM7tS5SPeSeK*r7838? zg`Fl=Ofq62u}HNtyO@prPA~AhgbY0o!*~+m)#bQP36q@59&kS-(B7PvO81L_BvtT^HQgbLe&`Zk2&PighDIsL+&yCXG1Oj+Mpk3 kpZMWPm?-_*Vy+avPP6sR8eGQ9fReRVEr7XWN@m6W2Mhm(Jpcdz literal 0 HcmV?d00001