From fb9e76ff99360910ab3ce39c68610457e9bc1cb7 Mon Sep 17 00:00:00 2001 From: SwayStar123 Date: Sun, 17 Sep 2023 20:26:43 +0530 Subject: [PATCH] initial commit --- .../src_6/.docs/src-5-logo-dark-theme.png | Bin 0 -> 20263 bytes .../src_6/.docs/src-5-logo-light-theme.png | Bin 0 -> 23249 bytes standards/src_6/Forc.toml | 5 + standards/src_6/README.md | 87 ++++++++ standards/src_6/src/src_6.sw | 188 ++++++++++++++++++ 5 files changed, 280 insertions(+) create mode 100644 standards/src_6/.docs/src-5-logo-dark-theme.png create mode 100644 standards/src_6/.docs/src-5-logo-light-theme.png create mode 100644 standards/src_6/Forc.toml create mode 100644 standards/src_6/README.md create mode 100644 standards/src_6/src/src_6.sw diff --git a/standards/src_6/.docs/src-5-logo-dark-theme.png b/standards/src_6/.docs/src-5-logo-dark-theme.png new file mode 100644 index 0000000000000000000000000000000000000000..6808e847963c9ae9130efd09e6f5e77ed1c829cc GIT binary patch literal 20263 zcmeIZcUY6n)-O!2QVa;FbV5-&p-a&S(wp>N6GU1<3rNR+G(qVdg8~++NYPM&fT#oz zL3$tp0ty5WY0|zMpJ(rP@9R6~eAjzj=bZ1KjTmyz%)Mr<->fyWX3d%;Q)3+_h6@a2 zWMoWwx>`5M$S9J5?|pPMz~}e%mp;Is?mHGXK{s7d{D=U5xR(!%KPU_VTX9?a zGS4di+yl&;Tb$>RBbV7R(5L6@f@NO+VkwXZUy@3T^X}{{?RkDTrJ;toCXRoPa_-06 zlVw5Ss9bit?$BN&%X;K`9|0Bf>8VWrj{<6Wg5vN8bY6dTGRFGXr&O0Sad-)Ld{3mIaBIm@!KV05a*=*6{1V=5rncKX$ zRMtl^m|BqkOAVQ2BN0;fxwFdScDH%AtmW_}=l6H20%qo_EN@o@n;gGII62!cs#d## z>l1}_Suu|i|M^nr0}%)!iEw#P0_4^zu^|T*r0@ z@_Tux3tB4}$rvH7!)|%$-U)!2-!ZmuzvJz$;vuN1!JrnZ3J~yx1-bHv`ug| zCw0MFK|u&rX=xM+C53`W`3HDP%c`iTNXy7c%gIRsEhGcO{DNFVCH(@0PD%VlLkkw@ z9^i!t^78lNKc(sF<{uoSE+`1p^Z$cCUxbm-Kgs(A{*3~FhjgebLRwZzM%vd``d{A& z4AKq(i2Tja|L~1K3&2dJZ^8oog9F@Q+95E%AfbOHp`&MH`cDd{B6)iGBK`;kfcI~m zdAR?x9U?fu=T93CcWIap%oiXU2=FKSZ|#G;;Qs~Izwvfj^GBS2Wd!K%pY;E&^*?0) z(->%FWTdL)?;d>Gsh*a);3>bV9{%oL9;$!7D#?4O$jQTGB;}Riz=xs=L{eE9c$8D{ zfV;^^01~n=NjEt;1xXcG z1$Pw{S%9X8>%WjN3Gf26($(i*xjH4~0gzIZk%7TIlw2j1+?7wc@sO8vg~@tI%DXDa z%fpowTp_Z5adSEjs@F{Q)CJ|FWd0EUQ)24l8U*(b@KqNya&_l7G5@a`3ol=od64TV zYO;#TiZY6d@(M~avdT*G3jfu}3KkFuXxu4LSs5va{GS>RchwsJNmoE~ynJ0fVbTac z&p#EXk10d^qs;B_vKjnZhs@DTxu0j3*7XJP|>Vl`N@t>0XXSESvPadv8u3D}^ zFrYUXIf$x^BJgV=qoOLWqzX}xJbnC^_WmAT@UZ`{)~D9PulCoN>v{zO{fGT2`pcxu zVaUIp{(AKB`eRG{{C})M)z$qk5dvL9U><+?1Ze$L<$lZ6&l3hrAAjrXKgzxS2fCmH zkyVzJl~t7VaFtb&l$V1kNh-^^dq_fHu5NNN5H}T9S*3rc9_SAbLb(ROu6Y7D0$2h1 z`3Eb0F+(rE;LuC|-Wqiab~-!&V3IO&l5$EGGBT=ivZ@O5;=mUGFzNpbBFaGIU@9ug zl8O)oB}sWV1w~0$Hx(sG4>=VXC0Dq-jEvh~>i$mv|K}oFd--|zqXPdILIQFspK65y zL{(1l|B86-a>^=z(M!VI-4%dY!A%x0WJP63H<*f&oQfjE4Y0v~ACv#Ncz+q;|3W%N zK+pf7^Gbi~{NF>UCVe{Z|3hijr2k)P{a1s3Stx*^|EmmGfPnQ(`kxEh-#P(|$N$Nn zzs>3YWEcGW|LNqvh3|jh`VU5sjsK%v|AFhjg}{HS@qe`Ie;Zs3|FtEC`2mhB z3fS=C3lvL%%`%OffsPj0$?3mGZIzio2|YsBHjs>rk?r(9Iaxsw7f?tWq-Uf}yF^37 zA`R9(s`Dfx<0sS8x@HkNxmJwIbF_SYqPdQLVkn}H5zR9Ftc$suOy?DJ(AMSN?(;Jx~-T8q#8omSh zTSsbxYWnbgDev00T~x<8G%J)&;D76ff7i#CUz9q$<(arr6?|x$Ambr8x()av=V||% z$ne89f7u%BNyWW-y{266lk&XMngfHtRrMnjs(1ZTdP8MkU*nqONd@*q>eqAzY4#`H zsAgZuMF>GFSvg%bx#?K2%bEp^r`srwxrEao&Uc28B~Vbt+%Rf;x}oaK zbJBq>14J7Vho1GOnB`GsUFCP7s8f*PZlzu}d0mwUUGR*lxC&5PX2OjB&g6*Lwjny= zxLu-M?2YQ5f+oKQB{2fHl(|9cgPkaSX3pl(b2G2frhfXxa0=H5)-;GOZi0#^<09=M zZd84WqL%NlY1vvTc?HD*KdRvmuIM@YJR@om$}Y2)$$u5NaqduslrPwh{DHk}G=44( z7XnKD^8`w^mrEvwSPA%^c9Ez7eI^leHzu~g_|E{*_eg%&@#px{G7^3Bb%`)2{*)$| z{m&otA9)4P4@}wrG=W0R{tT?H*dK=J=(Yb)F@xT&{#HWCbM;1U4LHyX?WfAb?mQ>P zR(qc_%y1&uHrX8nyspK^namrl=j6yuhN3&p-9 z%C_&T2+@dWM&u=4tAl;ollw%o=0rp)koB9r8lVV)j%uBX2bHB=i514(#~CRbc29>il+xqLclc3@;fi6)OhhD+24C}}vqWUR z+Cz@V=IqzR>a7cO^@(irn|P|7q!W=-%cAcoDQDW7m-pc9iYS({G!q<(F~iB@)6?R7 zbbgA~d6el!kS*QZxFQo?LVh&r=DY*qp5Tu=w<$x^jl1YjpL9B$Xg4RtxHjXhXX3&6 z$)F@7GcYNB--k#*gL5JT>x&;e4PZg2lbY+^_?~xf|6-Ogf4f+z$Yn@Pf?-S#XX+^P z7dV^~PZ(*v`2!s(nHsX%ZszIALq#^_@k?Ynl}ci%(SbYDEa_RhJYUdvXi zdW+`lbU!3kh)z%9C3x}8rRhRCD`N3?2|oG62QDKFRYD$R(vXJj0$HGgNJ}wzCKnBb z(8R9|I>p1W+cZ&)j=AF0-b+dp_T&yr_+Mda#9K{e3yO2_c3@wz!%18ROfS2|8}Z2pZ+0Ani}smpmIY zdv~##bPiO9qj(FItBLJBHbhSP-eazow&b*<81~*MN`A~ZqeWot(lupsM8(|4I3xV; z{R9X@xH$4#;vT=3AnHT@8O)8jySP$hM+vi&>xf<<*M9a*;Tn$>FmG(~ZU0N4Sw8CD zFr1loVmB#|;gBly9l->J>c_Hf>%FMB`b!uyZm5gMONJyXMUCJJUO%tSwFfJnRjo1X zisV4heUM9PND|*AANv{wxu~c{eo>Jl(r{(*{K_KJ{az$jXMdfj43zWCbYv>lnU8v| zTW;M?c_WgDL}^+yNS{s|`%mFxfzi;7V=5P&-wLgUx6UoS@gXE@rObI>Ch4$#>`xW$ zfIYuE;3uB@HHwndcRteUnZr@P85vIk60Gm={W55l2}+*a076NNKFf$wrIfQYw#2PND zD*8vIy?Zz34jOCwf(=tch`lp(QGK47cP=S2X4dMNi^dEgH*aDvsQeUXL4)h}xji*q zxJk6c{57v)=h>WR+y220`4`+l>B23Anc$i#8eV}c+-uNoE?3w)ctWuigTdTYsNtMM z>f_k92UrzxP+^%aw@uHzeIeBBb!&rDc3+O@2k27PvDImAu*yqNDvo|T$C%UokO~zz zHq*af15-qPbAqlf#=mNm6w170w7&SD1$0Mg%D%1e-U>%}ia8y!fcm>3QHnUawC!g zSBt#3JEJApl){rdA8*-G`>4MDZgsn5kuZ{=CS>#B9ox&obpDn?m>&Ll>nFFBR}{yu znD&@9%pu{e_hkLwl~%?~#qePd=!gwCJ@m|sm-09vU74?C&70Hyn6@MBgp$d3?;-kM{dl3e4*5w)WkA_l z5=O0rm6^D5e)@Be5BIMcsA#$EDy2+Zh7?{Tos$wHhDH-fm;C@Ma|?4`g?BV8;77i# z@Z7GJa&5BjYuK#R_&rL4+Co4L-I`2(@-D0srmrE)G#DIAL;}yPtx13WWZEjM2(CF( zHcU`UA=+7Ddulj4+o<;=GT0oR1SfTN6Q?EV}8Z*qXv|K?(?0w2ryHNTwm9E8-VcO_;X z_%-JYbZ1{0%22*b^cz5}$)UTm@6qLS$G6nFbVp}BXNExp*!icBFi?OJs#kQ5Qshzx zWxLHs+L!r90wTkQ(jOo-9V3~hsXVYIy_VvR{E6f&mZiHfUYCv+ZbHJavNfVvtgLzDt*YmI)%nnAkN;Y=eFF)}%5>uqGr^Lps>-SY~#*ERCzO;*h zusOKzlUNl!`XZ&61NtQK=1-$dsTCDB*@v6NB0?%5NSMC9tc3}8soSa?G4NaHc-}-0 z=~ybmUMW3bw>muZJU$gFN6$mW=yjo;zE!$sZ*2aqDib8e8O$9{f#~BnQB>@iEv1tP z*p0=F#SZKFh4I}GD~kpTfQb}DABepzJa+FaF?CNiFEqc$vy+|pf^@9Bah*5^s`@U! z&%-F0c zwS3mayV!M>qU#&u!Z7&_|IH;m)Ja6MuDCcg0S^~J8( zUC?yvevNHY-i|xY`Gbd)Xl7W6p$@Ik@nZ{Ngvcjb!*J&XKhpR3mplUInwLZiCKBX$ zKYMLP+#N7F=-Gj-0pa4(C8g+)}rTKeg(z#~Cuz165& zyv+~N^|EEhtearJ4q}lt)e5|1#mCTuhp&DR^hHP;|Uv{&OU|)--3BP`Us?T?{AFY*Wu*5}I z?q!x#-BCI#_tHS}Jz^Jw8?Xek^C>ngr4;@4jm18e5u=_WKSAuWWZBR~iZCQn8nph} zp&}u6hrMmUB)VzxBI^W}dHT&e$EZ{`iK)V#>#5;iYI_(ymlDGcxXZoKGL$V!cMxFq z@P`6Oj0x3^VT}%F=hysZV7O!wB&KWrZc}v45?5!&9t~#xW3Y#u^{1gttq-a-RfS`q zj=YzG$l1`MGEZg$*&UN}sucz|QzO%{NKNLP%NVYCh0NoA zOX0jNXS3fVt)tl4+#j$7(yY+PCm*TdH{Mk3>m<&Q=8ESIU}Hg>LT0h88e=jk)b25C z@>rMX|D~Nn9A6uYgpHF%&93rY#*Bx{pPds95$G!M`C08%Y<=*}2Ji;iJ2OJh2yl4l zKs^f_qzBJ*5+XD)s4akVajuZbcc5SgF992n=L=Ne<(Y?Wt83ZH{E%>oC{yqef8li3 zI>(dHcTX22qfwyP@ldHQkLBn@q7{q8cK_Q-L|ny$OKFJsSxmW=95Wwub3 zQ#Y%va9s#oGmU$9KYiXQVyPf_D>Zm40VLP)GD&=RF8A5{qqvFKpq`r2=ftn-#cr$D zgjr3!BxHvf)GFIPBGmjr)AzsN$KAA?f|N>azq)G-5lo&wwBK)jB5mg^QHt1|f2RI! z=dIoI5WAQ@H{JVaH)$6fvkNWxJnr_`(cw;awh%C{U>{b^e=J1L^aI`)HQ@Fi zNXHA;=M!g2eLrs0jn7kwNDE4C(?Mu<`31d7 z#{@^M2{%z0xB-j5E|k8=Q4g*cLD@pPcZI|_QTO#yLPTJsUYa<##!#diJRoSJbPtmz zu6MpPAVQdNvnh93E#uv~FbGbX(H*QI&9Ek0e|c|rQTL6UVfVllPP6vBZg6izRQBM? z`L>pIGc;9-ozS*j6~k8{@k4|_P9 zH7|9INantHK7LsEMP`eiQ`5YDljQ92Q)4%~ou`zYg(F9;cd`DZhyjLkQc1jTWfLwZ zC8D4Lgn&&3%sV1E8n;W1UR}N(!@|+(?puL$-plI0Eb}so{nuZobdm95qJpNRijz zA_aJO`p!rFeh1>2U|<9>P*Js|dke#V1yL@U$@HNrbN_*E%3UB00;Nq?vyPb9~O zdczj7GVu0yz~So;gbv0chKQ5};Ra*M8nMm85`VZT$Lsq-<_sy)`4jPkLqA~wv$YV^ zi2z0eb`z=AN$Aa+NP)F>ga=Dn35=16=1*i24oQuBfqWYflxCi(sJz$cuOX7g1fKU< zquzH$zwR5*`<-4muF;d0{B6w|(iQ`0(JV-$2G8Fe_bss4lg%31n{Bvgr|5r&yJ2qX zXFN#x`Z9nI#Lg?LF)5ajw`Y*wBg(OSaXXkvc$JdoIU#y+Kxft^hUkB|)Bn&W2F6T2nT!ye~Ha_*6RxPFN_S#tRKeR=QA1zxSW zoUMkEPnXvl*{3w>QkQI)yz2}0&LJ#V1naS3wz|4y_C;=dja2-j+3 z?1@;)kWZ7=^Gu82=!u~Ikl9*v2cofQ2RVSxHCIm<4c&Q|^<=YH&-r)ZTnZ$+Zv6@Zx^cZSkfr zr0F%48p^3l)?b5Hiw&RtH1!2nmu*7HBMbbEWkYi1itH_`dM=kSDYxI-C;+={1`}7= z`3MSQ123iNV>_uJ8$opfmSUg=VMGN{qmZ>yF4jXBVRaT{U6a~YSo#=)xjW>UT_))a z5oqb~USAYQbUSa#vIMF&G64AqO&L8CC2u(QI^}}2z^hzw8?iSBEqj=p^cRegUJJx@ z_zsjjdeWdB{R%DPu%9+u-T96qD9Lyj^T>pnB~G0!BE=)Q9%iY;ND1k|g!Z zPZIOUL@39=Ont7L-M!Lsq99tLXZ&P|l(bS&FhOH5fY)f{co7@CuxkMp_L5kSx|6>x zMdNc1$-3AVyQF9B&@v(@JB1DV$dS_>u~o80IOIoMA~k<)FGC9>XwJT@Vo4z_CS}#q z-fDZ9)IJ|I&`cuHIEiM3U(PkfziD0Y9 zzC+#;I&2og()DGVCV!;O7>aFWq8(%J5su`D(zt3bwwTMh3e`Qg^V4rCT+vn4w10gd z2KdK9fg?+3x1F!@JfUQ(ymrw|89CCPm!sGPkT9xZVFYthoJ46hq_72~Pi&dRCoq|0 zSLKBuBvF#FkaIoY90P|h@uu<(Koo^CLaYo=Ho% zX2$kiDIMFQ=d4WijdnLTn;17z7Z{%6Z%6{yg-)rRC4N`M!wV(#+}SEyC{egS4u-ucawTf;Qs*at)Q?Uq^1&(}k$m zela*8wC9LClNOQmsD@+ju2biKR1{;8O`7P=eoWUnk9|;u+Iqf6{ab0;-+lg_r~WiH z%mkRlC(vg`Fs9VVqR7nb;1H>?2UYI_P^8%iUvVr$&jCH=yt-^Bp^%M)GAL1MxYs8W zUHE)K)z7-eyXrzFUz9%GGqEq>Ub}m;!2%muSj{!kY~Ze=c&Kq9tK-Bpz|sw9y=wQI z@&;um%4MzfV^#46KOtSa-HgjQ0nR;~P4?au+TdeD(8N{)`QydB+Wv zSwpA`ef;=hJ4i})#or7FO8W~M;-11s=4c9}@Sw=<}Sp_EQefiRUU)FkrQR(p!mtq)Z$xW^YMUR z`1re_gGv_B*kH~ts+eepEjbM%`9>7oY@r3bq;y*5`+$>bMqi}A8N^eflcDv1hY&d> zc`TW$jpW(zkcAErbTT^5P0|n(G}=Wh`5I;FLp3&P(Jk`<9nBil5+S>K1^XICM&IuJ z+NRa1t2iI-3Jbuts-OCSz1heo1`e;;cg2xTZVUP4KL~0v$zN>iQCm)8$np%eA)Nss zBqu#2oXn=gWjSZG?U~BEnOURUtcbPkrl7CFUirZW41HeJWqYsQ_RN)2`QyKw8z+Pk za~OK1l0Uwz&tYz=W$cMXKe_*%>+$!zF&e|Fcm!~RcTDkVvLp5AvqjUNcze2KJ0@`4@fcdNxieY|#p zO+NaHo=tX)w{PF;7ACaTZ3(~nwX_yrey)_u=GoLsaNH&hBwV_VZG#&6a4i787D{CA zZy{;Z_sGo-qbI$lD2KnhaOZ=%X{a9N-PcnSiE<@z?Pk}awhGZ)FAR_!@o8zC=kMIU z2<*7oNs9vL$;647{!F@HVVGXkVV{Tk#?@rae21iYAdGgBhxNJXK|;f> z-dyUEq%K=!-r#oY2)^X`U08m__)kYG+Z$s<_2aU9M;AC>a&L#YKn_w0!B+Q%3ac_f z&=L5kZ6Lh{Yy#azQewE08l+{&FC+(UQvZn)Hk54(Ir6F`2utmyBQY`Ym; z1h^e8s#j|8(6+)CvGUowo|emb%mOyk85^(i%RkO2HU#6U!xEUv8*m{~n3jhwVbWS+ zq;v6`ehce20xXNGdO7DBbhC7nHGJXGat;0k6RuS0!=cc%?ydc$Csj}QPI_;J^u0@T znp_WTl-Dx~e#w>KuE-P0-W*@`1|cb=QK-=l2G^uMX+UkAi8~O`TVMQw>jFab&WQ&M zHx6~4#q|}20Ras?Kz}c^Fzf}qt>+8gHSe#Q&d)B@3pxkTE`LU@P5DShxI3|Zuo8$ZZzLf8l;%v zsTR}=SGosMCIRs!s{*&l2SyGP#RD__=B9>#mmq|R^vH<$HH4nSdS-1>?->)X12ME( zYSL|Tgr5dxnG`M3vT|pxox8&x#Mh!8rd{zmoN|AjEz{=e0ft*rb@`Q@scQN$~E z`C?%2KB+2&k&_g*B$KaBRp`4~Gt=G(| z;3;0~2J1ZziP2G)d?;!RH$^L34zlEuy5YoVU8nKAMksYwzB;)?AH*jbYFm^5MZ3kJ zb5`3Pnus~^)ta{CZ?A{mZ-093?oBC-4wy6Q4K5zC)+1(E)$Fkl;*+t|#4opE}w~!CdacUM0 z7GKFe^!q9t7F9ZU6v4Wm3F8=rP42Sc6cOdX^;khWpxu%yRn zrB&pDoB;NGsrIctrTFPhaR6i>Xh^h^i=r;PQt}9cX?qH>fz-wZZ_#{K^$&^|;^pl~ z*m=Ag7obhzeEXJNnu_lHZ>2W}$K~T4Sbw9Z`--AHrLda}(*VY78{gIV?DiKWOHB{Y z?7R2Z)HDc(UHs7H*KW4Zt5=}h8vf!|+Gh_OpKW(k#wa8>4yB)U5B28YAZ7YSL3sJ1 zTiHsrkABnDop4-QTtYE_WjO4jOEi8~$8&vAB)}eY<^4ObYA!K~XDvUM3prT<`sK$< zrO3R>MRX_XuufmOYr4L8d$A~M9(5WT3!H9yWJ-ZjLY>G6i1>zl)a)3?C-;BE<{#EH zI&cj1g1R@s^J zlIJsi&l^RHd7_(9uIsuTSS8QDey49HQWf;%lDEQ{ zy-X}$<}0^YEQ=6$9n8dbN7rQNWy3i{A$BlXc2sZd_rYAF;q9ld0rjusjdv5m6ce0q zqeO#FUV&dveeZY7sb7U5Mb{G`1W=M$d#HNMsJF&VekdzTrG@qAXw zddfXrsDN)z^$4@GK+DnR<=9zXO)V=BsN9Y&n4(#z`*6)_0eSo$Um`uE zA}t0Lo5{VJ+Vtk&CN#ni(`%j1CzUdNB$W|d<(25RX+y-qL&DQ?7nO+?aebObRloS2 z`y_MppswBYK0f1;ge|3U@PhNG<4xEwKXALTjyJgnx9>z)p?T(m)i{+0@iXu1M@4%Y zk3X3i%#jc>#%$VD;vQETL|nvW-h2?@;j8?vWfH}@H%8|}FDcBgGKj$s;} zj=UOSb06H&*$lPqZ~Pt5J`9{+&PupJ9_w=MX6Fb$L1iwLaitI<>3a$Gk4%9`*Ne2= zh4YuF-}}Ug-#IT(MLZ7;K^Ppy5K2uKG$jq_ldQf3)i%985MD^b5HdD5)tr#Kh4k@r z*4mwF$;4vStY7sD=Wpf^&uYsinpUg^p`5jJZ$xIhkX_&n?!2Ox%a!*{4Pq~ju?hFE z-((W)=D5S|#f0>`z&Jj$u~%Lad5hyR`}Y6|TcuZW1>S`XbooyXtiRS*lWUmib3V#% zBa&D+H%x<}%QtRf_L3-=*C$IPG=qPB4Y-SS29C{p{n-5*Ntfe}+w|wx2dFhHaS+r+ z=*5nkNZaC9xmAi69`i?dCN=GXHk=z(&u>eyOAcH!PvW#`AVG%u`@+nFzDf$BK^BZ_ zxO@GpLvlXh*T|tr+hpnW@MPthJ4=k4+T-?Z=;&K;C5!KEzZ0>gCW+f?l9OTslmgH1 zW$IguV6AU`+GZ;&lYV4PcmCIxn=YY{jZ2UNo%|+X-Q90zcW1(WiH(0b00=%)Om z8{)4PZRv_^Rzyz^me*U+PT-OKgIOn4^g-;=V^guEuqH~c>g?Te?$RckElaytf9#D8 zK^qS7p^qCVTs^$0{l?;=3N-9h`MF8hl?@o=Ak7M{t&!DtJ}!V3k(KY81?0)F{|4E4 z!+X#E;MK6k5Nc@KX}L`+^14a72QpI4rWO%%nzcQeWVD$z;(8aHXf)vP6DybkTPD7L z7)|x+L?klr`UMij4y2*fTiXg9i#v$f&zdQVl9hRE)lekN9{;qRa|nk1dBIu8qc{7m zA~6?7g6~K|rYt(mTUC4R?!{9~zx6`TF=TjJj7_PwUd&@YWF0px>u;jaq!!VVwR;iR z@D6`mY&ujn0?RI;)L`NEfZG*jKbCc{yAtoBAf>JL!yEnMY^mWV+vo77@l{Jc>kCGk zmD1U-Hd<_GK@2`hWmXZ}zcXg&ik3*4!oSkhne+61s+JIjn5UTz`8L8K;SIS1YmMXi zB6_xu4j9I@3z#LXmsb4DmsSuwn1tzl96fq&Vv4=)nax$qAr;qy zw1y(*F=%M--MLy7Bx8GGv7#?Y`zq`!z+itVNQ zmRzIMAiCla^_#7#?x43+osJ1~LyP=78j)^Im(xW%-#ZlyZ_*d9k{I(){lGTYbU$0H zY5JWXy5?p$+noUai>273xrUH)8_Jzmkdg>{=bApd{<0@RP7hZ58`<4eNGsoq1DJ&! z`#e$tvFiyFA#d8Wl}1z2#P&G66}6;mI<+@-4z~_{lHacT_1`f1Jlz%SNK;h#{aF;I zCDw)K_1OmTSWleNSqH;Ll4`&sYIkXu%NXLCDLdpckfHSJxhZ?25c?Q8D%O#OiA8RC zL4$1xx-yNyG2`UxzN2{uZV!qA?JUx+6~s+)BzxmXofp@8svFbkx)b)OA@s`JJ{$t= z+Rh56sbjDqZ1atHH+(>oQta3*zE{a#OV`EEyWXWI{|dn^vQl(yYYPFybj9?=Dp->* z(&ralJV5K7$>|orp~XO+ta8unUQwN;9{tIO zDnq+{{dK>rr8-cDRU!%USQtssbIyz-k`BdpRgCn84^y|9xHn8!MKj8JyH5R#nhRVy z`&P$MjArh#27#>ge6*7Qdw=^_)yw)Gl7_~>H$NO#Tu-~o!2Cs=KJ;1jmD{hyYOp5! zK_<_}&GC4R8m#57YwW)*=b`mYDPGM3je8jdboeycB=cX?Les#Z`r|Iq$5&TN=lq>h zDb_&{@rrC4p^X{268Jr=G`SQ-ly%M9S<*2xl(X=0?2~O>2&YVg6wUKyz6?u1JNu&I|U*m}c}DCCyXeh$3@UpEv23Ax8)#%hz= z#|g8R<&{%(s|L5snx=t-q1^<~z_&9fXR2xD2&s5oyvA+?*%Fy_3lKDD%SoO|A0dE& zY#+2+^=H-Q*wNS5%Vdh^b9^Hepqb`lf}6@Nmo{Mfx!td%>pl^p*GXTBxD?p;G!SiA zf9C}?X4LL1#TX@R7IB=0tdxQmxoe^iq!wbt!0dhf{7~O+A-B1YC3dO7lC1rNXo|xE zQ=2yK2=p$bQ^38|vs+?L ze=B28;R))b_AMxS^UaO;gkjZ_j~IgDbNaSbFOEpUR{qdpXHzC6Mmrm8uvlPifN8Z% zUMwFtvnvxsvH~fE$ZrTBfiM`f!i72!H2vT+gv7-w$SBZKmKw>XPf?7SYNV{@L@+BG z087VY7oOC-P*in3)3ho}m)lsZPgcC?+eMS*w`Kd)&JUHD^Trsl$B(el6*LvgsbH&~ zTN4M)E|m;?v-u0uBAIL&cLPn zK7m&oaVeT+kMYw(MEGo4Fz7{oJvy%^B7!-u7*XgQb0UzHcAj%7npHsPw<+-qF$q2O zgZA)^zT>BT^jvM#tK~2eVARAObOL8?qXaej9<>p5(hT38ZX8CM{9fL~8OT9=KEW4W zTR3q8GUWsJ&zp#Z?}$SVSTQ1=8Iwuwu|fuj%Lc{lR8i2EHTvrxAnA8w*M;)~ zTr}z$@{3*I)_D^Uc+(7i62A(AU?=eHe40PnuiiRaklxnS<`@Xw)FZ^7rZUbv39ivb zZE2~pS&Il6l+mr~EUy)(G@5~D3W6TPcRbjwQ`pX&TrD?IWoXdBufD*ggAPA*hDDvg zTvpWF70H0JqD%0m%bl`s@*T;z8GZB-sihgf+Ndj*{7RlpLUaP8Jp4e|EJ#kaGtaqT z;w44*I1O=_KA|0(yF{F$a#c8*X47|7`s5Jwie6p`d3|vLuy?iA-mOgkjy1UGVohzHXl`}IPXXu zyTPL`&v8Z5`3ykd%5^%~)zuDfzr@1cP{#uqVcDFggY2917Gdnu*Q|tDL9;sAmb#>J zzD~!orJkQn34HMD@XimLtnT2b5Lwz=aDP@%(ofm)raw)eO;)HYBeK2yK50AJ0COkJfen%vNmLEUFX|AR`fBf(S{>|rK4!oLVGLw zGH^^>7<+wAXRT$=b?RE;!^jes{B{D~X~#jB~9uFrjiAUj>^w7&p9$KW%z} zY+;Ppo3n`=Ky(kxK3sBLtg4!}Qukvtu&Za;KoPxArAwssBxyLK)xX(43}-hax$LbvSkHs(3w?=<(G>KAj^drx@=t_^xCo61PO+( z<~T~+a#r*h1^3x##BT269D7=aNR%_T_Gk~hsWr7y zhAY%RzbP^)zwJ}k`VH@Gi~FWj$^(QGK!?YEF`7lc&t`B0AW9S5lyL!J#P52=X`OZ3 zG=}nEJ@p&)T%w7zxWFOpqnZnaIbU#IDp8uI;+0@1QhfvBB2vfnNjmCGIyszDlg3HE zr5d8J4cO)=q~8q8%PW~QY*wsgrdq$pis2pzL%a2smpvqwI4zT`u?IB@GCb#rp^)%) ztn-`j%n}3Pv&kq*HvB3Wg6+gRDKvyY?ET?={i~{wE9b_U@=9I8XP(t z88up}?x0?_H+6Jo`t>cmdj;4N?!5~Fi!ZY3YwuA4k#8h?XY6uu0u#=&fAwcO!iW&b zztIcw-%)`a=s$#RYPeM7R~ywyO~shIg;hjs3u+p?d}(s3c^U$&7l9+$%^Yi zS!>*;7f}nP$)gMkjb;z)(y!Zh#lc9&NXWtU?Bd__qN42~3MfAKTHOZ@jHSq;k>McsL%vZ6|P&ifty_zwJ{3gAa1l z@s6?mc3KjgT6dx|(-|q%mbC%hV+8_#rt5Gs>azM`Q}Yc)q9KZp2~V-en!(&;@cP3s zPMQ#D$5L!^xs!mKzyXQY3D#zNI;fQ=jd;G7dUDH^tacU*0zc4qUWqC8-g9gMPAC`r zIKBweIVm-0=1m~sP3oAjy?or!B}GWSX>UDOPRQ6^-eHa?T{V#;X8N@KiRCA8F!Iv+ z6E6@jyRL&k))f?goGux5m~HY8jx?5niRgj}C)}0g*V}}gh*raUzwT4HHHG&#>9;IU8r!o_gq?vb_tbOjL5`6;SD(QM3;tYyBT2JQJ6AFVJ zHDHD!t4?sbrXUsn6!Js(22!jO$N@<1rWX@2%gVE%+!$O)6Y8@*1}B-WAa>d4HdCgS zxF*wyaqSIfD#KL;=9R`EPc&sX_pW~QodqVB5aCw8-b~H#eIE$6BX?{pfB-@eZD1lrQE&99U2m2e zey#DH#7XA-5%TMZbj%CEs`M;!YG2C`4+*_PZ?bfRlMQshn z(j3Ao=4^6VeK+PTYhPZeS-NJ%1thIhJnBAY=2SAcbwG|*p18T;6DRxlV`$AR`KT}# z%1L6m$O7$0<@W*N!-twJ*IIh`WTB7IvaTuT+kT`F25*f4BbPKQ?HvG3Z@;GNFp)U` zQf8y4PO=m=%gO|A2J=Y{wch}9nJZdj^4s(gl1uKY7&fB|89{3M#`Q}?l6g$=)){+O zc&&BkvFb%J5fOZEzKxAx&IY|{A6WXiK7?MIn5J59o19GF0| zBgRE^#b~}hxJEtj6-?}=x?cM{Asz-#&**r!5QI8$Aul}9*moRcyi*^8J>~sY?D*A{ zY2XB|N~*2Ua@WA(C#*fogY?>@<>2IX_;cPt(#$MjkbF^?E9yGAdNku#sEbz|QWSeI zaH%O=>QjNIAtRyzTbd=p{F$&zQ6uV+u;fPhL7&_**?=we^?SmukuuAD(y=dGnpb`|k1dTMIGAs}?3zYLX^i@ti)QCAFIX$DxFNg6Nxr?`U)aM3=++Ad?|! zJ|x4Ik(NT!xSo(3!zau&sadk(PC5=l%}U*SUjk?t+w=!L{Z$7Kc&+8o%=f9uOkMiR7;*6lLKF}MUDx=gDMxOcEmh4SXP!M&e* z31APte7&nID?Ug2u0U+GSvb_`g1OK9Er|W2-bB`I9p|Ty#|_{6m0U6?dzxHZYsz}y z93zYl?Uwg`&Av^ZOIf-aZ+=4aVUn?AiF8nyFPhhPf9Pj0=XcdhYx<-cp; zg%g6M-1CmZ98jF(xM9=JzQOv`e0rt~L~F3m^v6bp*k^RENU~5mf8vomRZ{wH8oQ+? zEmvhM;Mil{JP}MMd%D1QL=*R|@@APY^#)07{7%X+-NfkrUM#lxNnYOyz3P91=M2D2tw1@d@r!wED_~-5?&6!G z=`-9e@ZIg7`%*??E={z?Mz7ai&^I3QiVuI)q{quO%#OVO`I~!#Am(S#e;;?H4CVlM zLpDOdO@~inXBv2{D;`u`kALbvNuPAHO`xPiu*E)Iw3{U-qcWBye*y#K!DQpNCl;i= zDG|xobR(5qmhSZKKoCi2D3f~6#N~G5o5JusMx_RSO4`hhHs_l&RP7h2xAfH&(X5Sd zGoKr6h1z%I&}U|i+V*Y^Y8iYXq4!#;*?9w-ADWu1+qksmTbdVZ0(%E&Zw`2Oi-mFg zmH2QkZ)jWY-#CVHHM~qj;8h#M?j>>Jjt;I6DD|x$Gr)x z6t^#}r~qejOKWX~=Q71IJ~3BS{!9`kw2e%~%#wGc_#QITRJ>z(M4+dhyLa}j_$cLz zxk2DeGckJN@X)V9DOVuTP4ho>;)^;rXfx&u^9WX$#X6B6?(>k{H>E9nLO z+8Mr-z|iZ44By$h?Q)_8gPu?16U(A$1t$F2J6AG%HR{q_CY)}FT@Rr|pfV(aPA_0J zCU-9aeq(Q*mMuv8f}%F&la&!I4E`cUe9okNw=Gug-LHZPRhL4BVgnI|k{-JsF7QE$ z!FMbm;ErJfbSU;rb>O|TKfv&*pZ7(BT+a$_R?=*M#tREhujiHR#Fw$Xq4BtKdLzhK zr{|USozWO|%GQc!r#Jk5Cz$#Gdk;H9hy0l7{xTV>yV6}p=ZsEcBxY04p*iGzni+D% zm`^z-N#cT%=Upi4D3<7f*eGysY?%^TpZ}>ah#iAY2VP}WjIAciab+_3ihU|obo%~0 z^ei;O4HBS`GIxvGnIc45zRF|cz~cD&UoV>_x*?#lE1U?wUWkE9U}1$eP=0!^hbNSx zKURZ1;)832*ul`EZhF?tG*6sgd~W%3Rq~cego)lvweYDVb<( z!BaQ@&bRw-0Ij8nc0^-4<1nj#GTB3)(`^l8$i0y1;N7xTI1Ob1yKcasVsioCks4Pl zAJmG+4XeukqsBxnxjUC$Hfbz&R`L;s~Qj;$fuJwFCPuOzjga> zd^&s{4HF{NPp`77J@z^a^Z;hpj+_e$aR_5>n2Pnrt)ubY1-yUm>Y0s5PyAFeq1dHJ zi4m4>mh2t4X?S{}6+rH{vh533k>giv5{bSp(v&RoQ9^rdxCVLos%+iUyPvns#T0K} z)&}D8*I5&)L~K}dDF-R~a5?0I86R5Te)6vx4x$J8XcTAXOFVgTCq(d>?le^utzB%k z8Cc_P!c-^+IbPwGqB8?y+H3*2nAl)b-tq6#SbP5d8 zAuVtg{(gHudwW!;dSXkFoRiL_9 zSUAz(eIFqK`1^CK$_f0}>91$#sSEdEa`SMtv3Ei+dHT5_m=M19Hdt7`6VBT5lpRcj z?@yy;vCV{!7+#E}pT8R9Bgl$!_UT68R>>=bw4&w(oG zuZ1Zt$u=!e+}l+xT_`NcuMQnN|eP2$c`0nFm>^f|IQk;xv%eQnyFfRfwp*QKg zi?b-!_A5=lj7qN3)@$4p1K3#$vSS0F6GY1GD@ zzCG?_TR~fW(>|eJiun6iGw_9{MTb9zzw9rK&NcY;CH4`?=WY6!6@+GR@F}NPfKwPBoWc}pB#hj08Y5QV$8ubILX})jmV{e{emHnJVO-4{<)WeKT3^?kdA#wUbzw1Ub#Km%t^gMWo!d6qzN9b$u1KN+2$dcRwb%d2?@bW}xNFWO#L!OiR$?r3jB>@3vgeRQI*V)MhDd{T%`9oI{yuZB6 z2Vwd%#M4m*VyLOjr0D8_U=rpP=H=&6^0oICgvefHlJ>B+k<^9W|C$4fFh7q9`^pE*DyJ>3vle`P^Zz%wI@cF{s_yle^R()$=2T4?GIBxc>ne=YpZ{bbMx|W z`ZLDbiVxw0a0Wz?V15GsHr~_T=D&pXZ*#l6^M{>(od|f`Kk5J5=zsA3XD}G0sVNC{ zweq@rs47$jayef~Yga3KYso)v#e}UT1ced&Ji_8O;E$+;5RbSx_$Vl1ZDT1cBraer zCiE|)R9%psa2G4YB`H9h*B;P8Sc&nA@mpH)hzKD>c!aG5C3wUIM8tTkLNN9Q31FeKR{p+kQNm&C@qWt^_8*4E*kC>JCl8PP(xTmX!o~x^q4CHcZOqV48d0P|gCu_JT918bDfT!^b3Q6*d zf|nk@grtbDq%c3v<;Q;+?`mytFh9TLU+Vr(0scR;XkhPR?dpU4-!KXI6#t_YLXv`_|0mcJwiXhx z5fFy+hzp6rd4z=}M0g~uY(#lPM684mRuU3I2!X%$#s3HP{@R598}3Abp8rGV1^(9g zzn4&&@6zu7LusY?{%>mi*MNU<6kzH9x&|B&@MnDgbZCF;1eoyu#R>3{MOOicfI z$bU<|{}I=J#P#2jz<+D-f3)jA;`(n%;J-EaKic*Go4Bt2S4xa<0fDR!NO)}rDpx?V zOkk<548^**{P(K4@CCR+h zuvDS)dcG6u*?xhyY`qR!Z8uY_$5VM`{mPcaA1pAFnp5%_^%C3(8ymPif#b}PTyW21 z;$H6S=gD8HXxQE75L|rko$#+B3RSb8a$C=eRXt;mdLdp_Aa!V5#bPp~8;u!k}7Y%1LraF8XKTlOIWK1t=KL^KqI_KXyU246) z+1lgptUAcY(rr_-L-&fTAzOlO#x9{5P9FhhzH2s=zj0po%B-5n6w9Bm;)Xb_r$ld9 zoAfJemGLh(Uq}zWTexsl7`o*24U`>X|K)BdmHY!7eJtWIn=cagWT+5b!m(e4$H)OS z`ffeKE)-wC{5w({^J`hy3}oC@cSO?->1|wL_@eK@ zx4=utj2$g{rwYgSmYeYN+FX%8qAhZMfAy9vQ3ZiGEmG{}pMfv61Bntv+7j;x(Z033 z{9*)L!JRQ4hqQ1(=i6VT?w1mGJqg3rV88K?Z%D`{PL5OB|3yKAiW7mIb?tN2yzpP^ zmwV(9vHCZ8`r&Z3MwBM=Kfe0+kblskXQlqb2H+$-@6Wu!TzN@N}nn$o;_H&RjoF>(9J2khw)WIoRRm$ujp^r<>gG-oyQZ z_wAwivC=d~i;x7TxeawSvdeR-P~z{0hFfyT>tY#)VM0k?U7@cq5wmGGq?eo{d?d1z zVxh-G=7d|`P(e=xLAltj=#{EHx*?IjYPHeKfaCCKPTZ|Lo~75_PsIhxqp$FkJY zdRQo|GUdgq(tZ)z0fZe8!T60xnM~=t=18s|=WnmX$6XBk*@aZmchzrxVcTx+q1dQ1 z5#dc_4<&o6^lQrS`7Mo~SgHK9QLT!{5-S^#(prksyo*7`VW@uADo6{dcxLZ4mjJ3i zatgOpJ-LT-LoTU)QkXaKWxUeDP^1fjSLywqlh%Y8+Rze8BQzb$I`>(dxCk6ekeTrVVsL%Ei5uTK%qtRw zn}x#wO_p*OCWxBqKYV41??D`}YVl|uKjr#GZ&E`Ndy^k-;yb^x>58+DHq|lh{HA=6 zLhNz^Qa;)k`@}P=KxjDsRLSh=>8bmGGwvpB;;cW)M=>Dav_mv6LO{me!D092jT@MA+|U{HS?zWr^B;7rA0He z|C`9y-M(44p`#_MYcXArfyQUh#YtRT+}W-5^_tJv5dv{9MI67&qfhpkojdq{OKXcL z2#|D8K^NDEGA+nnY76H!Fjnj6;|}8RkuT{9t5u!~%I{Eo4@IfhT-knwcPPpHDe;JW z8>#17pdxjCddlT3H_txj3Gu1MFI#`IbsEAAxwvobTq^9Sx3B)w^MtBpE2JeicV2xN zB^rA@Do8o5Y6som8VAKDb<_^Lda+r#r`uO5)}*3A1v52@StXeJ7XH|Y-EAp&&REa& zb^YPtmr1crSua=0Cb9mQ)14+m_S^W}6*mdeHEg1go01gAOL$S8LH4wXgTD?B<>s>j zO5<99h6%?S(?;(@IZXAjt~|u_D{~X=u|sq$cWMbnszXO{``B+yn_9cprdZ^iIO^3e z$cn1$$r(WKAKX<8pnO^#wac8rlGq!);y2S#>5I}J#VPX{2x|E>i+!oR!W!)H6ZJ-I zl;K{!9)#v2qi;~0i49_IO8X3R!g*?Js@zdhk-BrH@vEi3_GQ$EpK<+2U7r!oDRSBS zNqBQS6NgP?*fkxmp9f4yIF2t|C zpe~N##p5lFXo>8-+0@jO5vj{|ZERW~);^9%Dc{NA!$u7j;@T&V=Qby;8C8=9Nh;KN zGEr;VGC4&gGxAWE)1j$fikr(2(h=Mw*N1*jdTv z{Wi0Bfi0ijlH3fMy@-&}ju2>$LYCdQZ}jc4k~^&%Qw7N{euC3?QBws%X3TG*xT74S zcD0-1?f4#jjpj{Dqi4~ zd15Ev$SLk$)tl@M^b9?wgS97#$Jl8t5QHPc@&$bM)MEq(_gWYebZUd4=hG60SKq-R z1e^tO?UFBc(0Akm2;HQ&`F%_8&BngBN@NjGTy&YK_eK^6NKiL;FzRe9n~YT#rtrVj z*jQ$FV?j@I^NqN;)G2efAD$6M9oWaKc0~1p4JqVSjh21!pm1+vV?!ziIQNe`*@G;+sH`sOddcxC6! z3d+r&Vfy{m$rlZb*REZo!`|!5*oOF^S0|q^9R)RF)>c<1uuU`iZCcCFY1koV%Xegn zP35U?xzcwF=NfYBr)Yo1?8)H;+xc{dTe4h7f3IRW7ZM7$Ty${(9!5KR(LlS&8<_~q zg20?)`?eavmHGw0AN8I0!?>!)*IZ`qEgENAC5)IG8yhcE$8>o-ow(>*^4N;ontl0k z$z!^0RvhDk7kqE`cS=ds`1Ia2Mlio4fSmvFB=S}q2ziKLdoZ5LmuN131 z=HcAi_No4k(z#i+WNT>-Ig-b7u3X0oq>tx%TDA(67Ufjw-AmCSS4g<1e>8pLA=0{# zlP7oL+Itd^gzHD7VD~0bi{sD9=e4C|UT$8`Cd!XBEVQ!96=H4(uXIa0)|~;tiMoMosY4lga=qV( z7hpl>vI0atPJhAF)YNb@Y+B9v&72sjuzvm2cEMFxj=}`dALVyiw1$OY9r;OME}iR7 z;9SG|XNjkNRn0Oc|2l+tV7pfbvZ(qj-aqvaGE z9c5zzGJ~f~Znl9I35U{K!#9E)spL4@EO0`8W(8b5f|BE1h)l~`*6L$m3$jvk^wMVW zg~Qdq$Ifdr2bs~+zoYREo!HY4ezcVnby!eD3{ug?a35jR3fhc5%vewKz&Do@W$Uhx zE3LB8sL(l$R~7i+$VJd~5tl%xi8{8YD9)Xc*9&EWNzBYlY)-8{$%LU%&ug434c~j1 z^6?}p2hLiIPfrKspo9Gx2GyI<=3l;i*{(otev5i}w`HsRvrV-RmYn`bez#u(4P>|3 zN%T}|_AnubAfX16bs8EeU5utHM#~NSDAgU|lfc~mWG#4;HTObB@vwn*dEqtT)kL;z zq~<`QYxik;50Wt+D|jXA9q)^e-0&OoBX+HHObpN5n2T5Y)x}5?8(cS*kx^f>859;b zZ#nzPCF5Xj&lwcWd}?b$em?DWF_skwPNWBn_s_JYq(DD#>+{(94zT%oYy?P3N|vSf z4s^=%Ug$);yzw193b-)Ii(HSsDj2H4Dnw>zJmA{SFKt88kyvB_+3k(LC52+d^w=dv zPHEQ2MAbaK&^0L z_sk)@hL<8bA@03NzLIXNL*{KKLo;2_)J`0ot`tY2jy?|B5R1xauIbF>POdk15`9gl zw5+Vn4en3oJh=Z%Z=VezEa%+d17)aivrK;d^^Jgn7$(X=%tD>s#p+xshz8vt_zXnNLk?nTT^|u|om?|x zNtgDHdw$?6<>4EttM?_|jm&wyX{!ZG;IU%(9zS1IwbbCBg>+213ZWP`4TI+tF_ja* z&W0Z26E7!Vm_T%^2IWnEZM$GL?sTADyNd;Ov=Rzqrf4mZNiqO<3wTT$6vy6&{$2*m3&_ z!WBn%$HAA&3&OTWoGB-7fezpGkn0ePexkn8`1SzD1fss6J@;uGghr%n=`594Q^ddd z(Dh#?PlYuZXUr0VmBP4`DK}K7?paS~$z5CiY+d<2tGl$c^hIi<0gNh!ad7YcyLc`t z6kjpFdKc0~;i=`2;^f!5#jZl`0hH_d+#;wJgd?R?gPu% z6Iw#pVL=r!sK>2kdH5zbnrn?>fLYDm(vPz52hH#zzF3B~#%i$a7m4}?y}PrA76PR6 zNh>T2Te)hG1(ECr79wGalf00eha*&9fBtG`BD^6zXu=FB#L2PE$?_rcvyzC*MurGP ztSkpW7tc_b(p&WOy?FB4e2^}|$ z0cTBQ?+!C@dy`Kd`c=`Y4@hF?fbBe(#Q8EbG(=j1E5>JBv$FQ&$rG`jt#Ib|9y9O# z(zB&}Sc&u~Uu890PeK=`LHtL?{kGB6C4f6L_#JRjTHfB?!FWe>ly5#$CdP#JaY?j5 zc5A`j`5;b)^iFSI*z#zcsy9C;d*{9JX=|c(O?0lVD~2wlthM!`2WnrPQ~?1VgoFC3 z3EQ@e$Oy7>qQMwClhe0^@;{bynr)F$PJVU}JjVrW1U2mJ_Q(7;gZ*)e5L0s61QO~&;8cdAAW`a#1J7^_@}jxmzSnTiw3r0Xs{(bd zX0aZ8cQI!)vFCO}IB{pOjwZS|INY!&B`I31jWQP|I>3+aZQAjysjokLiFc;rpfo8h z|HIE-Hs_)wE#&31V|Hik8S{8qbV-T2HOy-uTQgZ$jz}w}SD+)RGi`WcVuB9u16!Ef z9k`|yOooFuT_2V#L}uJk^$s z=E7ZbBSW1_>{fVQXGq|4FQ$@LY9+Pnj13;FAUUE*_TJdM+2BEg7OS=$eE92dt5~HK z#F;7Uwam9wsh>KBaaq}(3pb?>nf4h7#+vxk$E)+_+^33mE`ZuAjG&XU=(m7m@O$->{^FQwW$Iyp`0cgr}V%8-@D+9R&S%LPg&-n z4zWMU_kVxIdC5NV`OYh42p-{};0O`&qQZOceqP4Md?U&fyK?9qRNyFOL?#EVMdu#p z!*>!BA-;H^`gqrkn|9i1@VgtCK4%K=PTq9Z>n3G}BHje^!?2um0a+>Hw8cNCKty?L*xlVzeNUd=;ZQ3b> z32!j+zX`m;8ak zFQvI-4w~oyN3rr?;BCJ(0O}C)@ChqHf&0L&|vqopN06( zX0Q!tE5z^ziYuA8YT4XDRYxr>-~VoNvz7sOy7!{-47hj0NoxW6Ma(SRk~4*~_8w7K zNmzZVozFKA#n{%@)^6NhW_jnrtaAr)9CScFedT>=xHiLqR3VyWxT46RYj~l^0Tvkn zT*tff^I$pno?=*e!d_F~s<}x2aU&8lGc-MI#^mQ;A-oMdZ6Ve`BOP=R#ZR(@y$MwE z@If2SYa5Iu&5$e&o3oRX>1EP5>4akb!%K6(7@UBC)XcZXq?c4P9hPtIl4JexP2;P^<(>%~v zo-~C%@*ve6c>-P3!utBNMiOHj_71vue{e5&a%SfIGj%Ky+seXQqe~U$<<4{Mt0##u zeO1OSY=7bK7bdTyCtiqy${MMg@q0-v-FJRhban?W)eki3zqubP)?K$jPCcB(a}Q$Q_-ByPr|uU^hv2@%Ddk32i z`+?QE)NR~{?lb%(CK~Me&kUtWenG$Bj@R0IbbbNOd8G2)@w#DFT+ z286QRx6hnt4mg~E%Mz-FFQg0yKG5HzeSz)^dIwfG5R_MPKQn(uxD`d3Qbxc_woVNU zte)PmYA@n&9rmP&=6EE~>+oDL^msk%Q6;EDBW|HFxVDsynQQbxR$Cw}e$u9;-5kd6 z1X7@8VGGkJQx|09!5z{iRcX$1sY+Wf1^XP<(IJ^BR6B(}#(>oh`J2CFEveYu{9yJl zMZCxDl-l;aHc3Z?!^2dS>+>})RCBeD;?ON2I9&^0_H%O4hluL&EeVX%;E}L0)Mi9C zq_A4a{Q>v4)VmCi#lpD0v%7Uwin%S-LOG<98ZvPqqZ3}?^R>SYWj@g7e?7Q(|5xF6 zLLAIo|D9izIo_bg3w6IYv5pTY2|e6IGtEFHCC)}?9hA6=(`xzD*#|Pk_!JipZpO`= zoSdu`?q&Uw9^B234+A9<5sG7>yr3SclL_sSdfY>6!E~7D?l2v!wD{=x&+~=IxAyHr zy?Bjg2V|xanMDhq;K_6iyGXtAd-ivcss#>WgV9~95e?pZLxyvotanfCJ#IynsCasM z{wDRU)O*KIV&O7vBBZu=#m^{(nt}sn?kY!TuBfP(Bsna`Qk(UCyXWIUVO%08yzJ?5 zdQrQLFlV^{|0$-qJfmdw^%_x7?YG&VywsqN<@{FBjatm_mkT;8#tIY~@_(!>KeXyo zlBmrT%l9X44lo{{Hv2fyuS}^V<{H`a>Uv3opgkyVvVF48>9=9)r_p&Zf(PTN|L#h8 zxS`(8^Wq~zC%e82tU2W6dD>OGaaW6N!c)j$NYl;D$bVn~DEw!Zf6B7S46fC(A=g1{ zC`X0&Vf=<)9IvhA^bjveNB?pJsxGE3!=JYBom&x`np-pF64Ob#vSF@c{HNV(_+?I5 z12OnUmvii?&CFp*;jLPE@uQmA+cgQSo`jB3OEs{f%j5YHAGwl^s&D7TT5q8+JXxKa zDaf*bJ_)xZkKj{+R9{qmS!aVZ|K}_3^zNw#iDt?;Gqaz%Z)p#F|8T-R{avSe5e@dQOHB^UFUT+dzEkCP-miw zC&>7bpwDpSp`_L%(-)mi_2t;6kd*}iBD&xqV*CRGwEhkW9)*AR4ec7B(QY`x1F zXP9JJ>C22*zrw(!p2nL!0t!%uUk{4)RtG%dxBOX%3Q^MCxj{-|rr{Ql=&GkNkXJFVSb>Z?yn+r)mzf%+i> zZN$7g+MmJARQd`gVNaOR$-&{og9o-#RM|D0#opDnRWN(RwTi0g3 z3snxy$@M2jPa19yrc^PDR)uUV!@z#~R^BeXr3MSKXs7$0nZ|9jn^@~K_9Wj z`GZALAKQziqNQ^z3rpG@vTzK)?>(DF8Qs%48eqx6WlZUFEKDIN1AJzfYVj9Jlk(Zb zieq9>$L*3G0#!l-bcVIS$aTCAAqk?jAXAXhc{CYx5xVtSAkpH09 z^1OmW+*v%}U_IlicNT|&JFO1vF+!ywwkcZ%`hof5IMV1wP%&7PIgz%jNuw_Dx^qP{ zohX?U)i>7^L7Cxl!5o~lEMcHw<>EH50Wr$6s<$0PsfQ*!&K@|C=2zB1&Fh@GR+8L8C~+6t$1!E6S~hU}4Kq$V&^ zNB^j+`St79TV}uJ6~?Z;H#a&vY(tq-gmC6s`y{-{@eXmz4}&iHAiFK$a#8~`Z>XL` zGNgaBUZw%542`(ySKH;EJSKI9{OT!Xw^r|^Jw}CwgCdHsAI@fWnkqNt=qrELZGT9b zLh;VctEPSo4O#rZMc_x$XeB|$Tdl-Jw!`a&Z%J8(W#hk6jCL;$k(ugrtFN`ErlyWi z4JERurwXH2FIfEY_NNT-^_-OKd4|@H!otEtSWvkXPc0vZrjCPBpVH$<%vuq2=Ig|K zeE0?_L-`$e&B=7f=QBFAU2IY`LCAO&;+mC&ykvF@{fg?Cbc_J}278KHHZ0fbR#L@u zwuqRDke$NoNSp@`@JJQgt;vqc_+D?@$xE<$i?xcP$m3XKn?NUb3p+S!wV#AUy61hu zy3Ks6{yk>%RBQ>_`B-4BSQ3{$IfxmIM(8I)55ri>}7oU&W^Pt z&(X_CvaBHXFK6hJm;nAAx|kc@pLxBRIp?T*8<6a-<{Wl*srmdVc3>oCXu z%|vam06D&2o7iPO_(s^A9%d>pMxL@{(!cTn3#b+LHo4oiT=Ri@JBPkAa}8yWFsuoi zn$;`g)JmqxXV=xjs@rZKuij1To2DFm@|v5pW19e!#mhU7O^l6cy}i85cpFuM_g&ChPHKc@3x=0V67VdCA zfHLpMzQ;TC5Tx^2g0|(zkcK4*=M)RhXx!?ydk??|ah)dZFO>}Qz-|vqfARg~Pwb;ep{`#6e4nSbIa?-{mbY{-?{oEpxl#=S9NfC3M zd4H2*-uPyJdoenJZL9}r5%nWSZ{d(^dGDCccFdDOZ{$MtNPcqV^gN))BMEfy$S4ZP z)fKdO(*j;cqeeSbmtp%`3zUh7O1q)Fg36&gsv%c3+)C{Ol>5XM7B3J#vZR!uGr*R} z)E*6}4z@`Q^{TUU)G(G07GkPQf9VX%>*Y`I@qX|R5hyDC?1JzbL;%9RKDl^ zr;{CF_SG(<_!%NDrB=9}24aw&D2YfEc1Qu2ZGbIB}oqhcpx|rW( zxwDmxoCPcR4x~#0YOlrqf}R9EiF|JXvk-{bJh(n@?2fP?(%a93><)x8ekng`*#af*@|2x(G*YgD!P{`Ga@%iO-zko!C`d@@{bA080%K-_3>&&6xNIr7ku4K%jpAXhup9Ey&; zc}NE|sG~XZWEhokiRE+f{F00AJ8S*kB98K)%?&r)xq0?JmMI-9f>P11dXb3o>hw@kC>MOn`@08swuR6XK+t8x!-0F?VpL3<%0OZ zrm;U$P~@cgK!?+bYf10D1Cvr^AW0+DVq^U5L zx!MiG5te8Bqo8{S_J_)-LID66F*49Sn zvpFTPKpUsQTFsfF76gUO>UZx*S?Sm-R1!Qle1wRsTDFxZgG@YZxH3dN6x_;E`6$bv z+x=4)j&^0wJVZ=yfAu~hC5<0%l<6_8&KDb|PpZ8@V ze5_@#`Up;M{?pHDX4)g9-TN?3hn*Jmm^L$t_jF)##_?D>BXQ`aA&JqeQ|yqz2zY~# zc@YB+g9SHj!YxGu6yW{{CKA{Gz0~9o)c#*k2H05)cu*XJsO(k)g|7zGyT}1J-oZWn z;#EhE5I#S4$VHrh(P!F3_0_dCKJS5PqA4l^o$)0<^J+9NMIz{$>#%%vxzAZ!RrbEWl7MVO~tuEZoCMJzmJC=wcURR|W@8_a$;uceUr~MA@O@mIfE8kS?{t0Ddl>&aZ`&OSZFyx z_eTcSaPa`v$^>y`?2xL*KdL^W=i^!FX5x%E+38EyHm|y>id~LlE+RbmY;&G|3t>VZ zaZ#B1^sB~wOL_5_UR^P<^V$257?fBy(RY=a!iuO~h|y+F?(6`Ihuq)|<&fCb+}XYN zdoVBclzm5lArtEgVB+dGoO)NPYA^%w*kV3#^l$zRJ--iq^ERRa9n1@+X%T1jke&KA zY@}S%UF_iX@J}+UZ_+4CbE|@CvnKnEZqLH}{CqR$03MpVX9HzEOwUIo;jeF;MGId6i0wTfn2_ z)YjYd@0G^K$6I`>`BEETNB=^d91ox-eFe8ysC^20!2BOGy{x$Q9aOr#^E9WTRG-_O zvMgNX(Mm-IQZ$03(#$V23KY!U<05}wvzmkm>6ew2m&-Xu<2hK?xlA|N0ykm$XpK7S z{0ATrAgbtyG6CQfzM}n@OBm2qP}o{<+|w zj!V@tmovd8+j1-J`==i{5J%uN`GBjV$SOPmR9! z`96B|DDUZlO=eICKV8UMbRiZMjdinFOAm(;!5vZI!CeRD-{fL%3S&FMUKZdK9!}X8;U3ImK&L6oO@OzF;^;2{+>r3 zQJj%W`}GIO$b-#<3ys2L+8bKmji5wz4-Gk5uB)!2jv(6z%+xq!7qnuucBN4r0!3&a z+zS{tZOFIr@o@>7(Ym1115?v^|)-B+Ki`> z4s5P0XjIkBks##l?}B$A$gsPSNuFZxMjp0kmpQ>@)1w_@s1ga>{AcDQp8~HnX;udifMsNQPMdQ2H z){6-c72FbS=F|eUhBRTOfxY)iAU)dXV6aL@qpmP0>b(fi`8`t_)5;;vDM9WuBelf6B6`{q?E z^ztL%o2VLwBP~7P;c&P)z^ydhmWmqWu4K~4{ z(WW((FbP6sTt_T9^U^Vt&L5aK9svQt4QFZx6LxQ0pD@!aGm4+j=W50=3WEiEp}1kS zOly%2;wFBwe+Dx{t?S|xoQb=#nGW-cPqlxhv*HZh<=m>jDo$mMTfuuS^#`ZVs>ME0 zUw{9pCBqVT_PzKI<5G6#YddoVh3d@(O< zsVI*MnLKnW@#9yzDJH8~NV$?P$O&T4Xq7@VFrA>=IXyZvBU>C0la1^P%U7~aNAqGY z7dhPh!UDmE^#`C1zX0dGQJY0QdU!_TzMrfb5Q8tjO&eewXCLW&hIY?2ocvf5z)J%u znOA#c^`6aL#6~r1M;wz8$tn51w7PmP1%(+Y;e($1y{M`t zSG;i*>IT7{?mz;qNPy=9ejV}Xrq1+|0Y!=n_cNBZD@uzGKwJr$jw3MtMvgi0xi$1j z9tds>JT^~TLYk19zze(L&ImD6zGyjwTGs-|jhox{r9YOznD#R_lXdW0X}y5QG9qO% zwX<&c^X{)S)^N~9tjT|;Qj+AW_>kUcT|Mpt>hm%jkga?Vd5xapRi1%H#@d=1J>;Wr z(iF$B0HceUTG(MIYHVyAmpBZfXe1TS#R+n}tj;Bzv|Q9>_}T}ch?Fjm2PjlVq-!SM z+<7bRw#5E>iqVXf-PhCvWtB)|x9fJy~=x6+r#ZO^dOXWYr#2&9N~M}0&q zlQm-jQ0Q-PJ+EO1xxVL(X&81}#_ zH8~dm?6<-Lz2qk^-QVQBRH_t&R9+XCq>Z{6dB8SMyOZ5`StTNH%D@5OHn0q3H|X;c zl0Ku^+d^=jX?R@l8a24hXK>zg@aKoPYDP`|N-Ad7|WzDl{N zw~uKH0#MAs&nTGy14l%c|XK6E7IgG)1l8_Jac54HU-S!eTZMW_Aa{))U56uHyE#iJzoZox0J? zS;9<+W%I%Zv{T=$bASUO;S1lYK|xcfa-#n}RAw7PG*KJXn~7`$phYw)TZ;G|b_3(l z15or+fQ8)qX*c^Ma8?d0)V*26G05#b$ z)FIo8py|sJA@S4pd|<cv(OYx?Uwz_cMJfE*;X<~026T=`!?5|SE;!&1H$M%mOKYsv7B{AAx5l5%B$#_{G)XR&{qJU_f-)#Ve$+z4>-hA9Cj9mf>x3-VM zxVn4W^IjS2vhgrtBv8Cw@%$uYxGtr;^BKgRBzuRL(s|_i%O5I15HGF8>a{C$BH8xDJ%B? zD*K@#j6r&k3!$^_IdDep`!M~PEVlRu37^EsK*6-WppdsQ^x)_jU7fPKFhCrPtZRl< zC$VdP=~eHHLNJ|0boKHe*pcEgFvUM) zYcnxpzSmWwsO&8ay0u8LW$}K0moRV}F#DNx`Us%#R*l~s0P|-H+2t#ki0Z8f6Gi)1 z^uL-{eWdf2*%6$$v;3IEQa94gZ^I9`wg6m9RPs+@RoyO`c8ble$8E(mO>fP_&BD(D zK`}U)bEWLzh$CqBkAUv|try=ea6#3dw|ce@CK5F%0kCteH|A$)C%#?RF}0$5Bvbk*0lgn90%6hJiwR%^VzKIi{z>_y&eIWrd#QwI&?hFnT+xirKj+KUbz|o>l zxaO_^L(xU_KD@DQjcsL24nTtVVz*rfYzDVAs+8PSvRXPM4lgs4(ali!XX(!=R{_jI zR**KT99N%W#D(@Ilhs?$FpvUKKyh1j%83hZPfV|^(xL=rD&^9Ti->ZYf%;IM&UsL3 ze-;IYGW(|fNO{rfi5}+&C7!%lP|z6z%#1Q({{GzFJ(G4TGfPERa3;@IFs@QXS_ni} z9lOjoX!1Z^e;)XP{7^pKaXoR4Ic``pH~}yM;P7PSVe^Er{cI`kb>HCd5Ut68Vu-@d zCO?S*NQn+Hd&g@(Hm*Lo+_@lrjRD#F1n3P2I(~nPXhRUi`vBLY2eC*w?SSBm5*6I+yk4Kf!Ax~QJnGQr0&c82ug`qb`5>*H1I;Xij~NZd z3*<=O^MH&;z2+u!Rnr^vInCGM7jN1F#FZ9@C^gkKyf)Mdhh4{7f&z^ESl2)~OL$?sY){f|SL>DZ00(&ULn>V9Kh8 zcFROf*zuE1b;-s9`tHw`%SP09)h(%XI9i5Fy{mQbNr0y_2{Q>(r{yzWKRG=Wi|oCQ zZlVx>_4&uhGx*W9yss}F!ftQ7P#pX6rk(cFpL_{(zBt0YtV^@{-Z2q;EKAZc(uV6T zc4-$q-w1%{?gxM^y?i%b1OX^8oVlJIMljok`>?@>BVv@!2`cT0Kod8B!IJv1^67;< z`CH#(3rUO%!2^z+NyRHyuDCMhYdhnT)~E9y6Q}B4gD#TaWbJrq^qG4U2>_(5v{8jr zMl=|>PU?Lc(4E@R2Ggo%B8&(1PV4);LG_I2lhmk{1oZjC$2Q}jhx(B|;i6`GA6+mW z(Z;XA{y;fQ9GnxvcO&S%pGO(AJR|53t&r=cOpaHGUOl7~mScJG@pFkMBZx-KfOo^w zoRv#WmVxZL6^p{@MaP_820}YMOmB3PSiNaLVJb(b-wV*j*0Bv09qlbMdP%B|l><*&f-LEn~_9s=~hzHc*UnWt!cFxWlnMI_Ly`%x3 zuUXj$Oq&f>Tfu$x85*i?5St3Href582RuQ#Xg~6o;!kQ+^2(HZX z(d71Y;T&2Y`@fpG_J1h1J&Zwa!&YNlL(>?wl{kblMs_o5P)0b7a@SFch=hjC2r-jGWC-uDKLtyXAhXkz3fJsSHCLx`_Q9r@cStPdM|LU*?_lzVog%>s{YxJ>Tc~ zLW1Y0j^QmW`zHe9kRE4;wc}Z9LvnC%@O`ysOV*E;VOP_ueg$y6i5cX8Z+ZGlWoHn{ z$@^_t`ld(T+?6A$~z93}oiK))sE)B>$L zeu=vWep~(5eArWK&6!@Mxh2v}?kPW56`NP%RUw$Z)7*X@Q9PVwL))1uJ*tO8$=7LH zRMzz6m`DB|+NTir$B5+T%3w^XafX$PxUa3|I$=Kh()V6!k&@|b-48>)Mzqz?&p?i* zNet79JuU+yY`P<9EGK1lxCdU1#ny&nBQQ7P&1NA0ln;?S4eW@^akcv<8C2{UDK)Pq zJIz&1a?!O1lHgEZJWv^^bCFd`FY*?IBnjm!Y}gQ;EJyDG3ukQfAbWxfgSWX79F8o|Jt{mN~qNcVUt}If8 z{J4glc5-|=lT8~xwDz*M4q+)jGIuw~oWh}zDJpivCk+B7>!D4F!}l5Y27AM&uEBE! z%TN3tDlk{Nuk<#I912N^$C8sas315URrhQDHOv85mVf^Fd?Q)mz5Q_%IZSTR>5X&f z*SFj!4%3RS16gn1JTEs(Xww)(I=5v@n-i2LgC^Jf(Wz-&>#x)?UCxA!&17QHHCO$( zPvMT=iSAyQJp1VCyOM>4g;R9h=FCM^NoZ~z*n*4mED!mF89$B;`$iw3k&j&=CK~siuzpkkMbt!{ipoE z$Mq$AGO{v$oD`OkE_*)wKP-jNV-FLEQF<~5R`C3le-Qb?*fQp=rpT=0hDo=r{T?&( zQ6_VqskH=GEn^P=+bD23xjAr*5fN!$9YUFFzuBku7J!oB+SE(QJL=po8*Z8UnJLBZ zbA%9SSNF2neCg<^8jeW~urvAW>mBE^t%>Sj?D6L%7=d~4A?`b~>$-P$NH-^cfz;ml znionZglsCP^@Qqmo6HMi;`KPRuYD^CTX=XkCdUs1uJ&zIS8YtGwo^2JiGoUf+R0sZ zEB+AM&ZYa?F8cfkY~F3o1xEpH_uP9Y$}7rX8lRvOKi-pRGgkOLfcneJcs>zhyh050 z0#hZ>shbY2{y>N0PisJD2NEBT{TBYdIoDu=C<`n#LJ(ha-PZAUg#e zg{^G|05=ki0T{w_9&GsB)}{bZ2VJx*x_?PY{|1qM%6=C*2Lwna@?qMPcXE6Kp!fA9 zqF;hQSds0KOPYC|e)19`zyrWxVR!lZtMR&^6g!TsHvSmPIFY?E2A^L#6h96VHI#^s zL^dy?Sne5C{d+MQ64CC>4_qF9SRK`q$sgLsNT$wv=ZF8m+B3aT#5)SXaiYYj@)m{j z6l>**A2JJxxI$=HzM)B-fb}Wyq6*Jhw`OPUzK&&H*aWxJY(o%00Gd66wbFx#e#m_` z%y~wd(EwKm9eVgPWd2u%re|PIhKO2}og!|?)CMQr46`5-h9)N?1rTA-VLw}@xsY&C z`~4v)XQy7Uefin4Qe!OKjng!!AGZ0vdK4_Tcy#LKGPlo-a{6=#BfdnkIpBW0nnk+i zkA#6$#;ZnIcc5Vr<7fAw`Ce!DYw210{yX`ifs2CWwe9%=xhzf8pvD>Fv#WNj^F#1&Mcc zR|$5^mb{Aat^{_OlI3)Pc)$3d&(W<47Y`4hG72v?Qd%?e@CkEe=SD3*@kGPW?IRRH zxr?@y?-)Uz9<@fY&QA2YtmN_mu~Ejw$H-X0xi6|I>9uaMCd&8dh5K^E9w^Ojhq4w% z>5~W`iUdTfibSg=YxEw$PD%qvQ?ERYbE^G}P}}^QXIxDLoNeKiJc)sg7RzpqZ&HeS z|F$Cwhy#7&<`pX%TMR4`if|-t)3WmZD$?n9;iHfYuiOLd{(1tFufD{(daZJ;B8O}7 z#gDpG=_7`vU-@oZHGN!oJnFd4vM#UsuhwndxFpi_D^24gpHE^P%l_wZH8xN&K%u?C zFni46v!1m3x68N5kmwk@TP?JxV)+L2z_lIUN@EQCI)b7r(jU`xqD+7CG)-2N9qktk zQ=BBp>&>9;IdZ+~M`XZ`$}zVix(BVdN{E2r-dpd=l+>EgFNhk<=w-}SJrSrlVvt1u z$AC-Y!N#54bpeUUM8S{>TI*V!Bl9!^jolL72FG6;{`&{K4J4|-jbe-lnNp}Rm}9Y! z;QIaVDL9qHmU$v=d#P9h{qu$q!v`R|;J$FEWM!N736#k%h!D-Il(m8WxHcGffO0AZ zzqqbG$|^-%KHnSLH(K^rFT7d2`?Vj`Fg3!bZ%hb#^u|5=yM5k@v90i$aEORpe=V0Z z;{~wu+jq~icNKdmZ7O3cG#7+NWbx7Ok-2NaXBX>TaN7kFA>Sz0vomf`=>~*l3Tyrg@Wa*bi+iqI!2mXJ6oRkZ(J zrfB>6Pfn`cjIE9d#{B=`y|g)Y10e$Si-dN4b$cZ*By"] +entry = "src_5.sw" +license = "Apache-2.0" +name = "src_5" diff --git a/standards/src_6/README.md b/standards/src_6/README.md new file mode 100644 index 0000000..194abca --- /dev/null +++ b/standards/src_6/README.md @@ -0,0 +1,87 @@ +

+ + + SRC-5 logo + +

+ +# Abstract +The following standard allows for the implementation of a standard API for token vaults such as yield bearing token vaults. This standard is an optional add-on to the SRC-20 standard. + +# Motivation +Token vaults allow users to own shares of variable amount of assets, such as lending protocols which may have growing assets due to profits from interest. This pattern is highly useful and would greatly benefit from standardisation + +# Prior Art +Token vaults have been thoroughly explored on Ethereum and with [EIP 4626](https://eips.ethereum.org/EIPS/eip-4626) they have their own standard for it. However as Fuel's native assets are fundamentally different to Ethereum's ERC-20 tokens, the implementation will differ, but the interface may be used as reference. + +# Specification +## Required public functions +The following functions MUST be implemented (on top of the SRC-20 functions) to follow the SRC-6 standard + +### `fn deposit(receiver: Identity)` +Method that allows depositing of the underlying asset in exchange for shares of the vault. + +MUST revert if any AssetId other than the underlying is forwarded. +MUST mint `preview_deposit(deposited_assets)` amount of shares to `receiver` +MUST increase `managed_assets` by `deposited_assets` (through any means including `std::context::this_balance(ASSET_ID)` if applicable) +MUST increase `total_supply` by newly minted shares + +### `fn withdraw(asset: AssetId, receiver: Identity)` +Method that allows the redeeming of the vault shares in exchange for a pro-rata amount of the underlying asset + +MUST revert if any AssetId other than the AssetId of the self contract is forwarded. +MUST send `preview_withdraw(redeemed_shares)` amount of assets to `receiver` +MUST burn the received shares +MUST reduce `total_assets` by `preview_withdraw(redeemed_shares)` +MUST reduce `total_supply` by amount of burnt shares + +### `fn managed_assets(asset: AssetId) -> u64` +Method that returns the total assets under management by vault. Includes assets controlled by the vault but not directly possessed by vault + +MUST return total amount of assets of underlying AssetId under management by vault + +### `fn convert_to_shares(asset: AssetId, assets: u64) -> Option` +Helper method for converting + + + +## Required logs +The following logs MUST be emitted at the specified occasions + +``` +pub struct Deposit { + caller: Identity, + receiver: Identity, + assets: u64, + shares: u64, +} +``` +`caller` has called the `deposit` method sending `assets` assets of the underlying asset_id, in exchange for `shares` shares sent to the receiver `receiver` + +The `Deposit` struct MUST be logged whenever new shares are minted via the `deposit` method + +``` +pub struct Withdraw { + caller: Identity, + receiver: Identity, + assets: u64, + shares: u64, +} +``` +`caller` has called the `withdraw` method sending `shares` shares in exchange for `assets` assets to the receiver `receiver` + +The `Withdraw` struct MUST be logged whenever shares are redeemed for assets via the `withdraw` method + +# Rationale +The ABI discussed is simple and covers the known use cases of token vaults while allowing safe implementations + +# Backwards compatibility +This standard is fully compatible with the SRC-20 standard + +# Security Considerations +Incorrect implementation of token vaults could allow attackers to steal underlying assets. It is recommended to properly audit any code using this standard to ensure exploits are not possible. + +# Reference implementation +Full reference implementation can be seen [here](https://github.com/SwayStar123/vault-standard-reference-implementation/blob/master/src/main.sw) + +This is a draft standard diff --git a/standards/src_6/src/src_6.sw b/standards/src_6/src/src_6.sw new file mode 100644 index 0000000..7dd71c8 --- /dev/null +++ b/standards/src_6/src/src_6.sw @@ -0,0 +1,188 @@ +library; + +// Required logs: + +/// Event logged when a deposit is made. +pub struct Deposit { + /// The caller of the deposit function. + caller: Identity, + /// The receiver of the deposit. + receiver: Identity, + /// The asset being deposited. + asset: AssetId, + /// The amount of assets being deposited. + assets: u64, + /// The amount of shares being minted. + shares: u64, +} + +/// Event logged when a withdrawal is made. +pub struct Withdraw { + /// The caller of the withdrawal function. + caller: Identity, + /// The receiver of the withdrawal. + receiver: Identity, + /// The asset being withdrawn. + asset: AssetId, + /// The amount of assets being withdrawn. + assets: u64, + /// The amount of shares being burned. + shares: u64, +} + +abi SRC6 { + // SRC-6 + // Deposit/Withdrawal + + /// Deposits assets into the contract and mints shares to the receiver. + /// + /// # Additional Information + /// + /// * Assets must be forwarded to the contract in the contract call. + /// + /// # Arguments + /// + /// * `receiver`: [Identity] - The receiver of the shares. + /// + /// # Returns + /// + /// * [u64] - The amount of shares minted. + /// + /// # Reverts + /// + /// * If the asset is not supported by the contract. + /// * If the amount of assets is zero. + /// * The user crosses any global or user specific deposit limits. + #[storage(read, write)] + fn deposit(receiver: Identity) -> u64; + /// Burns shares from the sender and transfers assets to the receiver. + /// + /// # Additional Information + /// + /// * Shares must be forwarded to the contract in the contract call. + /// + /// # Arguments + /// + /// * `asset`: [AssetId] - The asset for which the shares should be burned. + /// * `receiver`: [Identity] - The receiver of the assets. + /// + /// # Returns + /// + /// * [u64] - The amount of assets transferred. + /// + /// # Reverts + /// + /// * If the asset is not supported by the contract. + /// * If the amount of shares is zero. + /// * If the transferred shares do not corresspond to the given asset. + /// * The user crosses any global or user specific withdrawal limits. + #[storage(read, write)] + fn withdraw(asset: AssetId, receiver: Identity) -> u64; + + // Accounting + + /// Returns the amount of managed assets of the given asset. + /// + /// # Arguments + /// + /// * `asset`: [AssetId] - The asset for which the amount of managed assets should be returned. + /// + /// # Returns + /// + /// * [u64] - The amount of managed assets of the given asset. + #[storage(read)] + fn managed_assets(asset: AssetId) -> u64; + /// Returns how many shares would be minted for the given amount of assets, in an ideal scenario (No accounting for slippage, or any limits). + /// + /// # Arguments + /// + /// * `asset`: [AssetId] - The asset for which the amount of shares should be returned. + /// * `assets`: [u64] - The amount of assets for which the amount of shares should be returned. + /// + /// # Returns + /// + /// * [Some(u64)] - The amount of shares that would be minted for the given amount of assets. + /// * [None] - If the asset is not supported by the contract. + #[storage(read)] + fn convert_to_shares(asset: AssetId, assets: u64) -> Option; + /// Returns how many assets would be transferred for the given amount of shares, in an ideal scenario (No accounting for slippage, or any limits). + /// + /// # Arguments + /// + /// * `asset`: [AssetId] - The asset for which the amount of assets should be returned. + /// * `shares`: [u64] - The amount of shares for which the amount of assets should be returned. + /// + /// # Returns + /// + /// * [Some(u64)] - The amount of assets that would be transferred for the given amount of shares. + /// * [None] - If the asset is not supported by the contract. + #[storage(read)] + fn convert_to_assets(asset: AssetId, shares: u64) -> Option; + /// Returns how many shares would have been minted for the given amount of assets, if this was a deposit call. + /// + /// # Arguments + /// + /// * `asset`: [AssetId] - The asset for which the amount of shares should be returned. + /// * `assets`: [u64] - The amount of assets for which the amount of shares should be returned. + /// + /// # Returns + /// + /// * [u64] - The amount of shares that would have been minted for the given amount of assets. + /// + /// # Reverts + /// + /// * For any reason a deposit would revert. + #[storage(read)] + fn preview_deposit(asset: AssetId, assets: u64) -> u64; + /// Returns how many assets would have been transferred for the given amount of shares, if this was a withdrawal call. + /// + /// # Arguments + /// + /// * `asset`: [AssetId] - The asset for which the amount of assets should be returned. + /// * `shares`: [u64] - The amount of shares for which the amount of assets should be returned. + /// + /// # Returns + /// + /// * [u64] - The amount of assets that would have been transferred for the given amount of shares. + /// + /// # Reverts + /// + /// * For any reason a withdrawal would revert. + #[storage(read)] + fn preview_withdraw(asset: AssetId, shares: u64) -> u64; + + // Deposit/Withdrawal Limits + + /// Returns the maximum amount of assets that can be deposited into the contract, for the given asset. + /// + /// # Additional Information + /// + /// Does not account for any user or global limits. + /// + /// # Arguments + /// + /// * `asset`: [AssetId] - The asset for which the maximum amount of depositable assets should be returned. + /// + /// # Returns + /// + /// * [Some(u64)] - The maximum amount of assets that can be deposited into the contract, for the given asset. + /// * [None] - If the asset is not supported by the contract. + #[storage(read)] + fn max_depositable(asset: AssetId) -> Option; + /// Returns the maximum amount of assets that can be withdrawn from the contract, for the given asset. + /// + /// # Additional Information + /// + /// Does not account for any user or global limits. + /// + /// # Arguments + /// + /// * `asset`: [AssetId] - The asset for which the maximum amount of withdrawable assets should be returned. + /// + /// # Returns + /// + /// * [Some(u64)] - The maximum amount of assets that can be withdrawn from the contract, for the given asset. + /// * [None] - If the asset is not supported by the contract. + #[storage(read)] + fn max_withdrawable(asset: AssetId) -> Option; +}