From 160b09e5af3d02e253b778a959f237a97d8ede40 Mon Sep 17 00:00:00 2001 From: Tigran Najaryan Date: Mon, 15 Jul 2019 15:03:12 -0400 Subject: [PATCH 1/2] Add exporter API and more details about SDK implementation This clarifies what functionality should be the core part of the SDK and what should be available for optional usage and also defines the API that exporters need to define. --- specification/img/library-design.png | Bin 18363 -> 30429 bytes specification/img/library-full.png | Bin 14870 -> 25389 bytes specification/library-guidelines.md | 38 +++++++----- specification/sdk-exporter.md | 86 +++++++++++++++++++++++++++ 4 files changed, 109 insertions(+), 15 deletions(-) create mode 100644 specification/sdk-exporter.md diff --git a/specification/img/library-design.png b/specification/img/library-design.png index c9324cf3b2bad35ca3de256a000630cdfc11b7ed..b38b5a9c0245d6c0deba54b7b4ba31d520d694dd 100644 GIT binary patch literal 30429 zcmdSAWmuG5`!_l>3^B9=(%ni(3L@Plg3^toN_R7~2vX8WiHg#Sbd4e*El5d=2ug!= z?KR+iKhJ-^``E{O>|^f_`-8XMv#x8cbDjA+LaZZ6ueVs-T3En8>ZSg(Y-i_|^0j3wn}1te9;l&3}X?OA1K}hVGj){SN&> zq7gFYE*~u|233gP|5Dz*epu{J*OBWG9WTAJ&;7VNU|;#w6YnX{O_EOq!6@ZF(onop z^q--vBu9gqnQ9}Fi35q-up?Uepc&pHAy%bh=;_`sJl}6p?FSvavvugj%jVa71*8i0 z^?!MP4|vi&;~S#zdvJd}WiQ0Uq(Ui_d_&)^Kh0T^xa9%UM$~cG8UDz_uHc!}d4pzw zkRXdST-$fzd}+18I=_RTlbz8oclpY8&v3tbib{2NIC*IO=qNZg{Wke2EcnT6u88WF zYag@l#7gK5-3?{bTD1!`^{cxm+F2(SNfh^RUn^#1ne$Q$!)%j# zHo8pEs|wFcVvOT*cl^XT*X(2Hk+`Xio?9j8j>_> z@}wTq(3OzHN^~@vw~MnBOp3ly?y!EY&e`Zz!tW6O=nKPfKAFx~@H0+^j-03(oiR$? zD33vp?6Hl@{aD9_D&N>ErpQNcMqyRf+4?O7yf- zLNni`A6V9gYrLdYxraCM)($dH8psqB{>ruTk6w2J}P_+;L-6H&>naYWy>#sDLf*zisv8 zLjpuAB~!#j9*z_DbmbM9)k1HKH$#NeF_q-0fL?ctk@W2{byTfN%?Cr0Z6{K-u`3P5 zo?bfYpOrr1PEo8r=WyAxC6PiWE&D%z$-N#&>m$l;M$S4g_QR)+FE}*2L24#Hvzqtr zAYPDMW$#OSEw{UZo}abyle-_?c=%$s_D(EwEVc%EQtiZn&Mdx{X^*eOAS)4_HvN^7 zxZ!}Ilm;)Jy|@9&ezls2aWc?8_f|)4`l1iCfnX=_hWob)KIO^x(c&{%MCq;z?cXPb z%-WbOd$OtG8tVl-2fL)+GeX9#@>QRG-yE!?Hn{%45D)bFwwBm6}@Sz_@S-paW(gerNGCl57*ri!?fjxuc>|{DCLjZM9RK?cuQw1 zIZaE#AnF}!Gn0oI!SC12)@5Q>E7D2`CdtgyIk6TTja1ca!fSYX`>l*zaWKIaLg9MNyf5A`IHyv3pl{u)Qx&g6s>zB#`mp4?)|%`5hMhP&J|9Bw<;#KDlFqiUE00-&Z}YU!W;(ursDMjOWz-v;*TTv zu6^mP77QlJlZ3qdi!UW%YLu)^0xWI%Ni{=B6JsMdn~^&vWJB`gfd>O zPgZ-Xet%o{y_}NMr=)I`U6-G`g5%05g<7%$i?h7J@AK-hO37}1aatZlhTKV5vU`|2 zYrPqZ2+7hdfOzW1Cu?Yw@H>i=(s`fVjgp&+zkFFU{M3Mt+vkmI(AVa=>0{XLFA)Ddn7Zps zUcWk@+yiG{Qofr~5q;NyEuB=?#(qn#oc_T8XS36BVEC1j zltHD|U~qu17lX6+Du;|sGq_lH313r%p69GK33mqG_kk!m{8^QGtqsFttFAwv88Q^^ z-fYrW_$)-e^Jo@TpdE3DZ*C}l(@AaON#flDj!P5oqzuE|BN!qpt<`f?LYGyN-{WU3 z(QGyDptzBD^s2JjF3IyYUXL68^|-p&voNfnKl(NlWg1PO z_#SqTAJ4zMUpK!#cCY78)m=~Fy=y)-IQb+mdSb%0k-e2qy$1+P27R`7zVl97n_j2k zD5ICHP+X2`;8JommLac2wu-)bdPOEMs*mpN@fRHtjV5z;)mPA z5phuiw{tGL{Vr;1{pcQdSkzRahx7inm=7IKGBQZO={vfP;mPl(x75;YubPxoe5OA3 z3};Tt{Hk$3#V&`$zmBM`?s~0Vq>j&HyeiR^JMmo1o6}JeZr7C20s-pn8!p%5uHVfh zOB*(TNfaL9l9oe0TMOu>%f%Q+zEmi)t}wFnqRwx>*MLJcDf~n3UD8LFCjv|Xn@rdI zd8D6M_WJU%V90Sqtapb*v{Fw~~h4t>dj5W+!7@ z%`SV4U2b|x2Q8j4s5)I4cU+365yfvS3T>LQ*k#Aj|Ey?wL#SSv|y_SM69u+(xluc_BYaj`6uGdh#qqXy`_t84; z?Tp<|Z}v*E#nI%3rVUh83&nBXc6)4xi4+5s*B7Z(>V}sWr1C}+wFgU?rTF<2`H*zUA?usJ6&QK-VF_KtW{iRm42s@E=NPHh9mdkVh zm2Di2>_Tr+{dh6^6=qpH+Pa))htv>ALVQi1vh!8dpa_n@7q2o(!#J-+24M#mlFiOa z8tl^wT?rC48h)XwkDVUy5q11V()5vA==+umS{1+Wk9KV{$<5H4j~blns-An?F5DoJ zm%Ut`c#FF^y8*A}?;7Kbg(PMiJge||%0xG#sqNKZd)kIWDL0Yc zk)R?Q<5?MF+m_^evq*1=Q|+Co>QF^|JD+#>+zQ294x5-g9(2QK#5m}UZu>CemG9#%{R1dzAyiby*$_NW7zGm*L@Ll?i&kN_6bN7 z_MdyamsCz$&?F*XceMLP#xyXyMOb>g>=N>p66ZU&I>)c!2%G&9i}LtR7RATk{Rmup zH&@6Q);){}2m<5Xf`Z?Fk<8Ka*UgM^RB|YOzKYMaz4pAnRhvI+>srN*RC?@dUu@lu z(kuDm1iBETLTt zTt8S^vT^ujz7`6dWQWL~{2V8mXl!|I`LgRhbX1 z_bz9Mc}GR2@(#+l=++1Z@9xLzlrnhe&k8d2}gGe3EC8M2qj#D%jT z6W~eXMi%;8Pf<)8Pa%R-;4tfIwmb{w48!|LMTS^KJhEKZO+>Lx?=pAeCuzQIpsmwG z6>#P~5GNdx6VDA1kbzyjK~R6SR9JHdMkgP}gH*YeHsIiyMa#i65qf`#|Bmlh@fN4# z#43-aNbGLmJX&J>s>^}Dilk@C%<;J1+&TN0sW_&Dqbsca{_-OQnv|USC*g#N6^X7q zRFQGka*Bgp`Ga()R2Eh6uiIDBGhz8J20WK(Y<@Uk)!+Y6%}Z4ey=kn3bt}1&f^aC* zaiT&4>(yO@I_aDv9_!Mb+K!&tUTKB^`fkBI+AFmwQhV;DEm7$*KuJECz~I)pVXvwR zt_}!F&ZrY`u&G8YRQus(rU<_;!)bmT%OP78v+A6AOQ%x&2Xi~T;=RLDA3n{L2Wwx{3b?4|`WbTVNrVM4n#vp!hTiOK7O2LTNg5+!sg7 zEAOx|-cK`%^y;0LyD3?ht%VVfO-gn7fR(r`8S z#v1^(eAR8DY?g$|n-pqSi59Q!{a0WwwTVYgV#L5=ilsJx5#?k0a%PA$>G z!|10PP4sl+yPPm7g;st8nA-q5_2=Z6JEdQazDtd!Sf=TXnp6EgP@*rp&)gF5W&|SZ z+&WbsORVatwRVt^pjRgJM<9$1y&mYtFfQD6pzq;l`A^4vd% zAR&3$UUTWHuai(Ezbo7qMm7}*-X$asGzrmq*hj-l8ucCgmd(SADC#p;GI{ekt?|Yc zKDevRKm)PKk_@O-#MT6gfA2K3bVt zb1L}>??RU$kO75KBjfx0IDt#$Kyx!SWd_~3`=35EWP70e64)XDRaKFXMcDr^UR-S9|f@^ok#veIXQ!@LHbDrng8}v7ui|f{WZ|F*Pc1wbx4!5@8d@ zdX+8Leyhf;Fsm~a`ZY!+%g_IPJwkre(xyA71J}mdk-pxtI>_0eGg;55r0np??u`?B z^28Ccgv&%q^ToQ#NUVG_j>;bKC?=-Bke>i*-~8g zvBg!nnq*7UwlFfbEp-d4{#TwB7K)>&4EvUD{x1%Vp~#oqq>pi0ulV>Gm>3wr>hH^l z0_eRgZ`M&Ur>D2pJ`hYI5CWWdbRj&!Q=sSg^nNK+CN%8attaSe!ECWE9D4o6ay#Q9 z6*BPu%b38rVHdn>=VF?MV7k`4&%zLV>^k$qt!`jB#;UC4)Q?WmPk8051do|n4nYOg z)nyL1NFV!Az<6Rmc4l}!NjvDutlT(Py~{c2Pgp^y9L~*{1pK^ zlfn75(RdqXwe6geCSNkj;vy=tqWwioxu72|qUZS$TCmWI02vEeANI(H z!wJp!`5pOt|2&fTLC`+n=DtM9}@j|;wS_b|p677HU z%HP|>vOw>%KGD3Z-Oa(wUirG}ESTLfZz%5TJEPo4{MTs&TzXloqlR8OXOZ}jB5M1j zIFrBw+)fU5F1<_3j>Y(?a9$y!)_RH)Hq@S%;9s6lotlYg@#?2Z@B7mhDOJTjDA;Z| zB^s`c9npdg$KvF_&@x)|EM$c?);tY8*Roi2?Ost${_oRloXG|LWeqX!pWCLaqJ|=7^@gu z4xuS0_wh=>u-8{@4|M~ljt7QpWcPLSh9~dh1~ivm$FH!y%>D9fqL3qbBlyPj z?q79~u|QhXPEAcHG2Hrd|FuL145D_O{IkOJ_G-C(_d`(~xk%e|{##^`PUt@Jh6lxz zLKTGck(OwFVXh?N(e2fd8sdFVLs1azLGUlWRAOWK>M_->>ahY4MD?}5iVJ%RxoxG> z|0^L@f<~%k+rNFPhc>~QR&=(?l7`^i2#)(I-t}*?e5oWm_WVcI_9p8MHDz^q z$g^Zbtn$nagESOiKF&vf6`JWWl7FOTScIm?b~^lpcz4127Xx#7Y@GznPX290F(vQO zJ*JPTD6tu1)P-CX*x1qQbyY0wXVpetd1|WG53`31wIUr}Kdz2dsD}x6caGig$SirF z6!zlvfHK__Lp}V{{xs}@e75#F{gh`!tjzMA2r93#lYI;Y&M`Iq#=ggGEx+B z=bMb&a2_p(#)OPq=RmCR<0osG{>%2sgDM1xxANAEDz*yBGn5fa{eJ&r zx$AyuRa|q`7NI{m7xct%y$Som09F2R(5oAPe)0c9$1% zL@crQ{l_Az;a^Q?{p8k+jGI?pYXOt1MzCg}iVQn-GhbULX<0)*_psy+=3haEJ5+gp zDlSOBZkbNO(;aR()>-9Uy&X8!*FPJ4VSNvH?IyTh=5vz2_QP4w-YusOxvz#Unfg~( z#*mPbX^U4YuM>1=+jgJ3dXAz>UTHn3j@KppQFIF;@`DHW<%l*{{mYb>wg7dIaW@Pc zG?!_k*o$*kA1rrfT*sg1)e|KjT0^A2^e4FRMTw7!;GNZW9Y?kdkuT7ERq-Mw`&H~a z_i$44Tlop8B5@Q4zl`(rpLyOQcf?jJ3b$QmN`J!wJAO`sKs;LhS4axFu&>E`b)J{1 zc|LTC9yzJUJfO&Y!92D0%1OkDdvtZL-u4Ez?prMf*l=t}9%GuaEbP0VGxWl_Bj;3P z$Wj7aeFOJHX7p$!XY@{Jo;4ycFww7f7I;~v>;%i7F)pzlqk1*6q>b>NwSNx|XN7wH zASB4PZ7t77cG2{gf>+;R4Oij@7TC*D7v;l>sELxE%k{@LIQDM9uR$yQ|2_2sA4PK5 zh32Q*a^eWLDL`d-b3+pon3LIhG!SRE`$Egqv@~$zY~CwZWOeFgzNUPZVzp}0FWQZx zb{`9&8|IYG?}&w9mKPe_Z_h2;5r2K5%oH2Fee{6rbpu670NQ=@ThC*7xa+?ZRtA)J-6z7trv?6O&XG!1sO988 z@4`W}%(#reBlzD4kpG(|gr}?P+Ap~`TQzECg=4+9Hr1$qw}GFi;YCHHa{ThvL$7Y-kD~dX5&~o}u5|o^Q(CrEFRRWZ_+&@SXJb~S{Ghny zklUouN8tLw$E$>N2Kng>g++`(hEHtl&257_vCTf164;WBFKJr_nI zh1c-xjXZ)XJ5KD?(60)0=I{hhp&^hz9|SPS;nkMWdR@5-pb`y$R-Z;njW@^pgD6@~ zcgkD&qDbXNdVAC%kV(%`Q_PM74%b`xY>KpCk&7MDrvhH<(@!M*cV{VE_7%q#NaZ>e z^576IiWpKkrmWsb(=MHSIAO=N-~;uQnU-8ED1!NI7;->q)RXJ6;N6)mE@-QzAq6fB zDR&RSp4ZzJL&+SD-tL!X1oVU<`P2LSkaTz|c+srM5RzB-fG2@?!1DrTR1lF zHLY7ZImMlC8iAahYucM`{n?u}C#E^}QUhB}CU`pdEU@!ktOAR`-S|g%%$3;edAJkR zuEVJH~jgNUE13wuhC2@AVO)5A0y)DKv4M~-Zx*W9M z%J}_vae4dc$1Ht--^P39rftmNKgSgCPMd;KU7>v0~uM7DC=Wcq5`% zq_XD;k#6MpuYD*F+9|H+2I{3n+H%y;LNHOCA>#I<^AaBO#+%!LSN|AsWGJw_ZR8*1 zX?w@BGWHhhrq>F}#xQ@hmH*+wu)aA_LpGCu((B)54l}MIPT$$cil2_}&05?5uMst+?pRZ>%}Q;P;=%-J z|L!QTHPvz=UTs=Mw3iVjS8gL2-2j&e+?q3ZGG}26&?e?of$dJA4sfU3)Mlg~?>t8z zaszi}U$UpScTQBgl2LlU&^ZF|JN7RN(hp8&uH6e-^kR!&0X%Re(?|H6WDBLw)Y1Q5 z745JU=M>7ips$2Ad+jF>Mz~qGSabnA;B1{Te>zC$r?*qb^7=CbxVYhME-0Hl7j(IE zBCUVEeySmlT^cZIp3Mol5f*$%5wtCIBp@mpCB5Iij-jDM^nzs1SC#lvF>BES52;05 zpQ8H2o`~_T_VjrD-L2=Q^a+R4v_F=V-=bOL_K+c@+h-zqj7tr%O+>JJTM&NYNrnmXBgMz zQ!HO)?*wSx0S9WqV4YdPffQMy{k+oUaSyI%!s-0~oGyf*EJr``w?-mmo)dP!;mQBg z27<;_kOLV|QqQ;d(x(C4$#ddR=t4vAk*7n$1LGHIZ>PAB81{bxVh|%u7*7C_<&sC> z@n`$41REWyEmiH?u>QwN>F_!o##}6zq6L#tknNKe^H0Zpt11lRlzzNH(e?jrob4f~ z9t}WLXe5%!%p^;cv@+zk-!I$OmR_sMjvya<3!%Vf7BD18wdNu_i?s>KX;tZtDPQ%V{ z&b)`)oP%tos~x67-DghkEuC>}c2P?-F;%QCRn`t1HNvq{s<$D)2D2C6VL zV*OtAo^2j7e?ULu-qTdr@*_CgvahO-r`ZGV^F)n2k3?+1(w^rb#vjd*f4H)^GDrX{ zuX&is33)dKb=NMge0<;e+xsgO(~qV^O-DUTmz~D2nc=5NG=9PLVZ_K6}{RNd}FTO&>RripGtTh&@i(?lfv(a*~d0)9pAAnY=ci zIDuVF@9PCa&PtB@Hu@csCMlE5L6`a0Zq}3RN%_Lmr`=5sk(vfa6=zG#5*GAwTeDIU zv%b#;*rDrEF}M_7mJ@5ni4uqWW=+R9U9BebQ)Csy)3LOaYcgA%P`aBZOuOpFuJcp4 z8=ZsS-RR@$P$$a7bIk={zs@k9&8eO8U$O{r6D!!O^gfWRHb>tshzn|h%C35h`Ochf zeL0-*mp)Q8sU<&s|M^J{!6Nb8blSJ6jhR4F(Z^F2%@h8Uzax)sE|SbEy(QSIiwTV1 z?9X%O{XQ(ze{a)maeuorvq4glynOc4ht=B6FO(ZzM?20fK$M{H8 zH=X65qP9|o0XKJG0OZY`aanBBg_G{9+`Ii^_wLw$@1DTQjJtA!fRoMH>IAbF13Jc( zXpx`j*pC6%XKUJ(&D%+NtEX!$yv@$5T*6B%7;pQ#p4j?sOS`w35xP3N!KEWHQ0t{> zZGWKW$!P5{&)SX}`anLNaw4B$aqm~QoqJ)5ws}v%+EV}bYmHj;MC6Qyz@2K_iZ7iP5lJ`34iv| z+x&yFRI~SQq*n90cTO@1Ph9O1^E4SMh^>B^wp?27Iox75z+LYc*X=JiZ;K8ye!IF> zD1o)`iVI4~*h-&dSMp(@uP3ArqL3>91*+#gd6K@K4tT5Ydbq^r&~Rk=;~I%S5m*G& zOxtOo4u7QS(VVDry3DK+h`m+1rZ{l!d(bksPq!G);OgtmNVO79#&FVmMWX>frKLk7 z8rJdt&?uiy6;=dx=vL$ekS;c#v<oMs9<2;a>tL#e<)DYabZBeK zj@arfrvd(%luvt@C*RtMu8H|T_825%kBHYo z#{#*NZs(xA%NoDXq&V|hoF!tFY9A;weu`O*^!_z@QrZ^kH645M^R7X_Ivc}{TH1+l zw5K;Cnst#fs-b;r1%=HP&k*YQ(~{-Ww#GlR0BkRFrlHRCKcQ^#bRUP*pBgS(Ok&`V z%i}!GFp43|@0WHJdMx~E)`QlstfV=$4N-=*T)*&-8!uR)*IJGRO-60*rE=!@gd+J1 zJ{#3|JxQ~_b+&CRZ@D$MavrL4JlHU;i<5OZ7^bFC0PnFsXTTIe?WjcfQ5+wzrY_c~ zJoyWEB9RaOM5_iNQ^J^pix-MB8Ra97u=og?_#j07=YMf=k^qv~2uG4Sb3uEQK)(V6 zK{T0~41l`)w7eKdN=LPXU}pljDE$d&U|=A|pNq#esQ$u;94**)B6bvl^%*_DSO30l z2~Z;jZuuZ@BVMx@2!`dn$`tq0W7+>q83adIu|ait@g_WpN~+L zDWmj&ZhjP9<4;0ZGvzOXut;}p4GF<`2Z`uxIB3N_AuO_gZqH2`Eqt|@csfE5oc`S&P=Bhe1;&*f~9 z$GMq=5;qx=3#yxP^4#S1y3|`X|G0v!A1x!VJXn!>^xE`alEoa5700cg%AIT(%NiygSNVpt-dCoidvr{hu) zoSEF-7U$(zjU6)+ca7gJgp%N1x+lOX&k5~teUJnQra&P33*r5jEU~au0rK*ZLp%cc zlx@K|u0hWJ56vJZ{Hqy%6{!%<@8WTeSQm{8lDVLpkw|p-rHlAItEvo}_FbemX%5JU zHf-KXDF<5i2F#?KtIc2{gku_zG6d>z3e-R!e)M;paRTTmC3L{Jb^!M>arXon`pw{j z_+aGW42{su3tXN)7jP z&*?8p0fbRVH2)Xy3!DfSr_Y58N=UYPp%Sy_OCO@F&H--E`BH$`O^ha>|1MpyZx2=hOJ|V`r-~Z)I={$R%vKTL0kmxLrfv@^?ZXA4}+XUTgKR=}zUf3dZDd zK+$>(Fqz}zB%MDrz-=gpc0WWtK-*cj2?;BQ?( zh^l28Ww?&bWey~D3b<=BhelJ!nmeOQ_5cn5KLi8jmAO2gjcuQxMVq1YxS%f>>BwZh zeJ;oM0!33eV%#z zq?WL!|1gD1>C(aJ)OO3?Ykn<^p!R4MR#M3DNxeK9uc@yBv}R87;0d)K$Du+AfP=G6 z{SQL?hb8yl2a&7|uSb+E*Xp-W<~Hv!tR#E$F>dF1o<~W)RgCig0quD}98I2 zMlwuV2hxT7mKr89L&R%qOKObsM&94wTM*WMcNq`#3pA|NdPmfU5L}Tlhp*G+;hBylWIOV~xJV`pzv^MlZXtLOz@NfYsb_a`cIsWTE_X_#Y5z;6#OZ?OfS)XNQ*b zqh|iR$Y^+(N!`0L=>*2(S={v8+zwOksR)wb{nlFFb)vWQtfZcZ3K814D@T8DFhN4) z2FD8q#3S)aCMXa*a1TrzbuRZWjdpH#$3p;L>lJ4|Mi5~3X%0Nv00RaA2Vc-rxYCyn zkBC?j(@@ql3u-h7=2jjbqeCO&SHGU?Rn)WP<=p=8l^l;f!tH3_!3gTAI_YDg(Oa^k zI-T!AU)(iWJ7hfcRD;=8$NCLNlyc^E3Ld+8U)pjt%5}9n$W5oZxI3{ zdi)&9-b?D3n1`sn9Ndz2dU+@0ITt8I*9IJHsRUC|@|mF6R6$>YDd==N_uARMPU8m>ctWXFl6!Cc|{o0wv9m_fqVW=?oefuQ*LWv*C zTOtq{Fr9M=Kj}?Cv8(fY216<*EEy~t(HV+Ry=+BwMM2|bKmBA>)w#PAfC{J-Q(E9M zR56Lt;=hZzb+DgkLQCun|pSUtA7$yUXSbDp>=va5)OGSrh-SUmk<4Fnr>S* zj2F)W#mrn`nPO(HeqQ# zf#hd8_s#UAVPb`hVWhAsquxD6U-C;-Y!Jw7JzqE}?Y)HAH$okoxqT8sU*FOy!L*_t zb|$@T)1+JHpmdUPe>Z zV$eEoT+oJ%oI7ZCCY-vxCFqLoUfBVOWGo&bD+HodJPa~@_rtdXGe>zI3{NND+wI9v zkBK26!rjC=%uK)PQWjUVlTgoz43|26IbJ7ck0(Qj3E6;aB@M%4o)zmu2d`8qSQtQ; zHfX;&J3QKCqDPFqv)Klls30L=t2#Lc9YvnOt~}6)beX*M1$YE>9#F504m=Jy2{cLLzIYvmAQv((D4)YQ}pn{JB9;Iorjk6%a~U3x?K z^}~6H^L)#nHEu5Rxp~MSCadM9BdhpO3F?oS&KVcs4$0bORPaGsFcbpNiLdpg3P)Pe z)jH-sd(vDdZ0L!7@Beb?0-eWw^zwmP`v{pRZN=FUV_i^1l37|0)be9Tmv63v5P1ml ze2kwB1671}aN&_-(1L`B6LQ0Vqm{#ZChjirXHSZY9$`?txo&NZSkjmxgT1pw_oU*s z*b=4|4mzR^{>W;na^_L-1=uQS5&^9`-w(VQ(CZ3q#gmD$RLB!zu+S=?i2&KT<&t>E zG6KxMif8?VcPJU^6w0$_qpWMGcFOjf$_%fdd51X+rj}eDGhuj}{^OOT=cbl!l8#k3S^7bhdfC|WGDY&bkm2`QJ?{>PTz;2?%HS<9 z^RxsczKaddFrK#cu4|CCWSutva~Yq*AHS$_i!Fx>cXb+xd$fky&eRe#gvDq zahg4r_U{1fJHjQUqKAkD%ina^n2S7Pp(+S)n7h96t%@K;&BhcqFt@ePjq$W#Vodvu zPO3LaZ1MiB63#p@rK)3aKm*1x-{<3Df7WRpUJ`j+k-Rqg)m=PXEAgu5$hUH)0#&UQ zmduT(C>pnV!eKtX;D==k9-RnW8|N@7H(vQ?HSU@=hZb%t+^*)=z?J&K5*);1h_WpjQQk(Sc-5fIZ7vu<~pf;&vn(hC^ zF^hL=A!qfiD)Edd1{&`OC}g(+aB~hjQv2$m4PKx3qk{LNqK^|B4}NBWP%q>(UOfBp zW!u1vl~%@UIAOzt8EwnjsqKgGuhVhf!|O2=*37K=H8fxK&WBn>ys_xCy7?FB?@@l# zed0S6!Q9P1nYoxgY)nAH4g~|S0|QghTK~+h9;~K{v7NgY4yMRDr#(KCrjx5cpbvj6 zg!>=-)^EXQhF^D{j!iSWdFjxfKrmk&{aO+VCRe9xMIghZ83ikMRBm&P}$1B`j z?$(}+()NRaahVc?9quQ7VEWMh<3;6-x3>e}a(Hw%y$Gv}9A8Ms-gy%qc(e;j)CIYt zpf}BUSqNaIymjMrB-4veomMcUrteEvCvppRj~@?mwv@_j9&HnUsT~odVUryFCMfps zbWwFB;9HsP%S#*q?4Kq`NJK4>>}0I~ZV*G0MX_R)iW z@Wx#0KDgUA?~V^OGeNZdQb#Lp^D{SY|5BdGgYVB(8fanWSZ&YeSpP4b`{xDhNTVl> zVJ7X7_m>8cSKsfhpccll++g(?ZCfp71+gWi@}e3BsfgB!ge#@*L+3}{jrjWa8{XGT zs7%rVVi1}o|2A4)SMeV1F@$n@q5VMke~lHEHlKp}m#2^Yy4;(D9~0&7IRR^?b$a<_ zuW7H;T?JI_KV4RnAso8jc=N1<6^qfh*6}s{&YD#1z>c4q%!b2zPlzqiKQQ%=8cGz@ zk3vC(7sCj>1%OVQvChC8raa;irh%z1#?K#Vs19ofsj0!C*WS}kFt_CzaTjhyrH0<$ zd%{@zi3B7&=a?7FMzlDC2or?KsDT%x0vXV0;5;th<~ic-0E|yYZLZTwyF@ddZ+(*~ z60~T8XFxUr+T)lQ^T-m+V$9U^2cK>OU?$k=vCzuc908JL9*o#9Z%^>YToI_G##{i@ zO0JuH$lU=sAR|-;cpP+31wdW_3R9T0l$bE~ zeDnB=Ow{7tOndm?JflRdLQwLn)bW*;!dUhp{J|3}~9tYR>ZB)H2t^7T3 zlZv5IJ04u)wczGB)Go~oJ>M_+^)iFdl$AJ=|II_2ZBAe-XMZ;ASk9(>3FD)`3(W8K zXrGtNEC^dWz)jDI0VxdlxT5tF81KL|ozHK*2})R)Mhy@IzlH<|!k|`j!JPjezmoAD zv;`lkqNCGtK90Ynq>9YABjwRr#ZQR!@=kPyOwi#_ZsgQYC1M~^vSc_vVXMQB#;q=H z%bL2xFrZT!Mldk?${9e%e`Bq2Tl1Nu|Me9?7To_ZDV;7E0a#3jBkEjr&y`bySPdopA8A;)X~B-qmHk4yo`xZ3N&X)n z%>c5`;r>Ha)XdvT_B4*HiIEr8vy+ zpNorWHhHYjmv<1kr+>h-4VpDx0_pW8|G%!>zDQuc54-O8E!=UU+Oi{#9uw?06XP-7 z-C??sTJBNCIyQt0`u4A#p!WgR5zhckOMr90-~$Hj7`N;gTc%Ng4EJBg9`1jnY)0`K zS9^Sx;atJCm;H}!jwm}j%M>c3njqZ&#oL|vQA`cu@_+BKxrT2qZnI7oLmygohfhjcoWQzZV?f@5J#0BQ{ZaN2II@<7k zlxib={N}4|cNCJe8{?zIK`Fw9r+H_~pnPE-f`pSjMeQ8B3Vn#c_@&RF;XfAaVp%c@ zYB{7D8nBV=j$Sw=rpm@?sR~Ai9!e2#RDvn{pBNkVK&HZdq?Ztz-!Cit>#;DkE+E$o z1fn(or!ZFn712PMAn}gmGb@2Xtv@4!m@jhX7oGd27=xG_cNrOMo8YKE{$?OjJ!Tz zS03M>pt)nq$=b!B#&4c0s*{|Kid#M3yZZT>V#zR%>>ecsmhVj#$G22~E)k~>c; z92D6xCGl9x@7JJq8-G6Pz3zYZ>)?P}EO2X_PhcYj#qFFIaG+k{M42w_2ctY>2xd@U zB(|DcvNBj%6|qRa5)L}+U~b`F`o21vMU!y~|Lqav*-QP+-OP^NMDR9K@RlCleMU{w zt(&Kp8~xlEca59weBd9#l3g+i9Z;QEEOELBG zGCI-xw$LtpJ%!o!FkFkea?J%v!A(3$0v2u1pSMakOn^jYMErLM^!Z0L|HdFVhN^R& zy|_PM9{7sH@;MnFg~D^3QN$zPiy-}$2`K^yx>zd%1tuJfpw8DYQTiWesab148ZG#L z4*NtoplUb&@#R{t>oMCbfH&mVBgZW;HSIxTVpXz8WKV>*+tzU<(&-c2hyh%4n2H&4lLGw=;!R(S8o)m*cdcwc= z=mzzZx4xME=-4~YZMW8z`%YxwWiU`Q@X$KlkO;%4uw?*gvZqngJ&rk6*C4IoROj~w zc6tL0O8orR1f8y+L|J|$8UT4{{lJyE$v@dxEeRWs=(1U?gL4Nn5& zrrn^2ac}OPEZYMGzibq4Nvqay)7&((An3||d-(4fn0ht@-$My~cFBeyMZg)P?5J>1 ze$24Ol;6SXuMi|!LlARHh6*v^3wQ#U;^WuGRBCRq72*N!mkt^lum9@N`O^yQKwII7 z<~;WIkOQyLo*Lj|%pqZmB~`Yk9CxTG7Y?oY1Q9JI&!fk#J#PSp|>)tuf`d1t6JK9CXba_Ff$qRo!eOk&vaQ?mO6*vssdu_EJFx@M_6aa3`|1N&B=%FGB^0;{ODOov$1qU@or0s+yWCJoE zl9+$pm}##{8u^$4s)wqo`4S7=nhgT<;kodA(5JiZhS6V|%`}t}LnK>5&&VOepovs< z>@!ChQC@>o=#w zUe&Q@)6J0yB2p7pE=4#3y zk;r5p-F>}%-Ssh)UN*f9qDoy4@ZrdKvOAtK;!a%x9~70^6$ys-M&U zM|EEn5M|f4J2TWE;SeGrjWhz%(w$03BQP}5q9EOkNOyxEp^S(K2uLYNNhsYa(%rq+ zpzr&A``?HA=s$#6^E_+a>+ZOQzuQF{w{xVr}1A#=5S?1@Tyt#5iM@rcZ$L z6-J{ayQG!Rq{LB?KGd5M7wi1=zPbJ=%HA0-$5u9PYzi_E!F$l^ocwtFQQ_lWmDY(R z7*G}9>A!FjCy@E16!A|l0BYuP>U7L7JTGM+MZPdWV2(7?{y8rBTF&lwtzMZ#QvJ~V z3uoQeg^-l`oE(Cz?tNJqKIAx?iv!lg>>X*ZX)#4c$Qh-ne$X8c#HD4YVjP+6?oQ#c9H=xu$oO=2n+@eh9ys6fX0 zwQnnzWDpwHj7MYL1!nB8-u=;}kDy-(K(G8`=|grwLI01Y!pFfT9>lmA5UGL=Yk!E# z$HnpHp;a)*0E2Go-J(FPVFl}i^8Ppikfgp`1-G`T%&UBu_sdqvnw?}U`MCqeY8F4+Olr2FiaRkKT2wgm}QNb-Ls^^fL_SJ<;}x{wIoevZ}F zAFo!TWGJGY!Lh(xsWD6(cJeTu z_&xm3xO}gF{5Tlce{sjSer5` ztUjo-@AYbOe3S_ka({d|MoInUfV=Cois9P0;nPjsmh)EzMgu{d{JRa=0)Bdz>B3}o z?2k2I(Ef|k6L))lP-!CMiVqm7@a;c~CjRHfyIhd7>~>!&#&h0Bw!7-NQ_p8%>98s# z>pmwxbgZ+LUFXkm?E1>Ygp_jpN98b&k<(%}lo|ON+=O~78)~vj0jewG?6@QP>2kM!^%$5l$*{sH%P>r5(C21wTwWvEWyUuS zPu}ysG5hZ*`D+_@siEq;Qg;5SkcZ=Mo?yugAce6SOx4;z)lyl0u%}?~6`f7>hrVmQ z0rwaA6p<0*{eLx&fa}Z?jgq~iY_qo4PgFYqUp%G(V}D?peYtH!{~cW?$4{14&=2#+ zyLrHAOGiNJNZ{pu=xcYDli3mau%Slf4s@(X(L4*JH2-ogSjM`{TKqacm7o~&nR->0 zf>u>Os>)*gU&p4!4aVHF9drkskCfjytc~e;GHqmGHH*XqGM zs8UB(C>REpQo1y_K$+3}H_(RH5M#RuZpklBbQ6vJ>(DPfYWBZ}DNmB0tbI;!-uTRb znWX(N!q;$kdckTkqu|QFy6FcqG^PQoY6m}WRm!+JZtRUX6l0$QI__P`%JX<=*o5;Y zj& zFnCJJf%%rPw`H>g7si1nMNKgrBqiBE;t}nMD!*dNO9`!D7C(t5?e3mdyU8|*sXm20`xr=S9DSZvRA@pa>Lc-!>EQ#blij^5A?GpR_V!!=O< z{MO@kHOx#M()R4eEiz09Xm#pZh?b=mF%C+4aP(>`F~AT^5-(`rXrQqiHc*YGxI7;* z@vHi}YX#&nD@YK`AM1|=G+ux2zu~IaB;8kKm`btWse>VJ6q>|?TrAhy1iex{i|N35 z{;wt}Uq5Z*`k^*fbdMD3yhb8Aap+$h1y%v{K?pWXIKv_x#*Dt^`5M~UukUElRuu!S z2v0nbG7`%M{Vg^>e&E3xow+$FX1zs+M<;6YtHK!Knpwe$6}8Fk^{h&h>EFmN;? zU-Hx;DS8(9f)yl96i%BOuxqM&J2LGQp1~gjyHLySUKsOR-)TbB!$4?1} z#v*!){g2ADbE%}08NM{r@y47b%dLX^tTIx=_-O_+R&LBPH%D?VW~$)*oPTPV1@8Vu_TE?aV4{*UFxD z{)AjAn$7!|CrVNyLL)FW<(4iQ>$|`1;+DOJu3uqNuokj@0Usz)-(T7gEod40{oN+&#|FoNDkg~3Ylxz{)DW2DCnHg#LUwq-02d*E7OQ$H>2aL(eLN!D>v*jMWYq19I18&rW;T$kM)i((Ec{ix<+w# zTdc#bAmgsg^093CHeac9U!f1hy65CFrLUk4aIHKgdCDl5mOU!bcTu)%C^?{i*ZUs(GVqqlzE z8=&IsPiLO@fD!FBeY=Gt)t2&TS;~pLovS`6-w#A|5BiFa)$ICrSS7=JXcp>wx60O% z(JmIp#_JS$Ey}O1BOr;GZYeluF5O6#luRZ6;x0jy?VgHtHvrkd=9ib!O6#W%@+2DyhL<- zn=X8mrFw-<_Adx6iEO8$1mmw5xl7qeB`+%%Icixw{35IL-YQYIKn}+AtysrBWZagh zJW1kvLN;DE{Mh*&m;d6rG4ob1h~z6pzLD>pq^(Z?Dvu&Umjsl2b?i2tLj- zwG-Uw9_$(3uJ!%;e#W3F#IZfKD8{^GN~(WBmZv~=#Da%`2Cj}6@YwiuZSW!L1a(o; z=Ydk#jp^Bb%Do@`BkZKVM6n(9dpSaZfrt3F6V9kpHiYk>+`9Ny+Q+9mqh}Yfk>1Kx zjeWM)cY6?VE8ben>x#Y2zs_pYQ^&2#Z7A`f{OUU1m3gai>h=&seHesK4^|u=;P3$V z@cXAmCh(W5ueu#CJ@|_7V?CGxuUJyXq;(0dbZ_4Tlz&6pJ3C;t84+hX>QqUGelG!( zd1Fe<{X!O(QP;}>$t(~Mn150%p0=exs*+bcsEy9ANdyW+5*xb(UK4oNcC%x34kt=)ig3MC*7d z0ABDR(8HUg;QnvSU+XzZr6-z@ew&^wMc%%%+A%w|=RI1nG>Xo4+cz=xKC;o9fgPJmf4A{@MeY5rLUT;jz7Qh@jzh4b-cyKSd%M`= z+8fF+NLkddB!klGy_RrD`G%gA{e|oruUsq9Vi;65mhMLHTBP&bGqqdVnn)f@4IN83 zoi4H-Z4}^W0+fMlT_xjtBjD+UHY22}O5Xx&HBoSS2YT(=wOWrYh9a%gZ@K56z(>W@ zWOximq1*IQaOu(~6yR{2yC4g6p1*4@?R#-T@8#5}etjur?L0DZbmgvpf{D7s#D)I_ z+Zm?Jj%gUA;C5FiA<49_%EV& z8e?aI+UBHwNs(h*z4bE@WmH*EfS==5?y~n4YiUnY<@zmING0Vw4bcm{gRV6}ZS7=> zn3^ji>+Wi&4SV0JSY65J$)`ikX+IQ=D6<)-`P>Q6Cyy zfe4rz_eP=#3wZl&OazC9S0&vCo}V^^pi@E5#NX_z`L>OK%N_fIMXMGT;EW2 z9%t0HpKpmZ&a+Lbxv5-Gu~r8^UHkhzENbP0i;+R8!o=hL052`L*eBMrtu`JO7;5FC9uOe^Ftoe`-hGTf| zQ7-wj6os;at(3KV4%+?#wrKXagi@W%e(_Yytke63_z^=0LfC6te#xJ^D3tkfp&M*l z>F1_2;GVLhw4#lj)f@zxP-{N-k7v{#(qEFB2lH3tf`kvFP2cWImMbYK$$2N;)=U1P zMWGD9kGgzWbB@u5MV&W=;9;YZUv8$d_fllg$K~qUb7RGO(}{yJsq_IQ__6^(etSO^ zM{kscebccV6AP$QQz!LtS6{3&Rgq&8VEIeLE5}_c=!y8lbXl!wNpVdV-frUiDpf3K z?v!9CN!#!}B?Eh8z-iT587&_HE30T5n9tHQ?DUSFfHh%|&<59ff@?bSfIV8P>s>cG zXVlz&EODtzbGXm_a5GuU*AByne!5btA9uMSkKadJF2Xlz`$w1>a{_Tvw>n2&>uYLa z_kGZ*^;!tp^SH>vPt0Rq$&&Vg#*y>+`;Y_WArXf0>eWdwh!U)s}94LD>yGry6CH z&8-!a>D0tzJT@-=x_gkz*TuzSm@p~Nw{ zB1w9EKTR7SLxC&wu*Z6v(2J3``lfeG z{*hh0qEL2lC!pZNG;qHcJ%{?}FmKl|<;P#1*Z9RLv+~lWXhgQO>si0n)MpVIM};30nrCn^0nnJDP2KA*MjC>ur-$G>MVcpH_7h)WB9K} zLtoa2g=UuC1LQ8t0I_rlwrl`qOdAfKdu8^nTuY-@%&sA;&Rvis(q=4=#^QR)o%u*L z?`ON{=zBgMc~R#b?hCSDg!vEQ?uw2m$3YUTk@F8KkzTa~HJVmbXp*X4fdbKk_ijll zeAxOn?v~j*Az1L@9XZvh2~*QXl1Z%2gb!fi!wzb6E#CQjZe(y}PHk!MDUu{Kq&OX;gNM!yx7Y_)xNpk8(7UkCnW*>fQo@N=iva zlVYT4CC=n((Glk#@+0H_!|sFjoz)xeA92Im0)a|NI<>P@*^vj&!g|2@#T+&1BnwpG zut&MeT7|eI0j>Cvxrwg`aS?kLFnj^@%`#2LTa02mr)0v$@|UbmlfFJ=56%ECJkbQN z=!g}4nPCt--}$}k;NJs@+$t#f_d@rxJ-oW__eUAmdNe|GQ&uIzFsfH7wcttE@6AWj zYvxB@lrhKZbZk}Y8+haE4PN+u#GYFwj%bcvOgIx_r2|5(+l)ZQUq8+ORsyZtJ-B@) z)jv9Yj*7bNG5nf6E;5LvQtvUt*gBvo=1t<2u^dA*M}(0b8$5HC?MG6v|_<$gJQqs{GJ{t64|&GUI@rv_$Tq zfe0*I{oVsIS`QZrj2cSh>VxQ^z!><5lj2l*F#O@YSJUsQaaP*kp4l!#G;P&5sk|=r zP=z(Gq^N3-(itDFoyI;@@t^(+Q#C{*81SKCGHIqWU+w1*yGngAWDgp#)cDn$=Mg0+ALrM9*A zbNdk@usKUi>~#}nQ*5$LV>?5bsvFtZyYcgPaCfa|At6<@3VCi(&BOMA0Fv^U#GfpA zs*883h;H%L-32$CNI%-m2B;sjsJgO)&4_4fO^XE{62Bwbp$iN?C; ziRl&semAUfp)y9%AD%$!4hWxPXX!u8`qazTfx1!uRVbFaDJOW;ZQJy^%j(O<_glGU z9@+4$zR~@vV0h!{Lgzse9a`Im1>E$?N8#SnBN7ZR!<*HrsouZnk3o9e&rv7My7=V2 zR>fE{K`T|_&e2+JM6`KlZv0~Td!q7*du^9pT$-@i8HHQ&y%3`gN#mK4VCSyL!`s+S zw9-mON^l;{=*WX~?@Zzwiw5JB8623k4LCNq*aE^&xqrG@QCu`eSV*2#8?%hG=@^GU z2X~96ngT@eg!bUTfcuYVzPVJMfE~N1y89om_%7}J3f9|r5MVRK4*0rtNc8%Pkt&x3 zk;*BFFc$;d*51Uk{znbO72|p@O|)_zZF^INjYPVv9Qtt&u#>0hL z+wpEmSWF}}*F0YRbjKP(RX$?wyz+DXfSVpuEtABh%2)IOLqOQX<0hxA4!`X^`qwvb zyl$Dz?(?peiQnECR(_6lHJV>yy!{2W5CS&;V2%nX50*a$0Iy|}dH159t1%~3WF+!6 z#eyNIw5rx?W_Z5!a-nbxzfJ^G^O4!O^O39~TakHzX!1^olr@~^e)Jf~8yYq|u^6wc z9pUXO+V*@t^s2)Q3WAQ@FV}rnzq!w5nFI}~Tk(`#_2)SXS*{ zTbvvoY>`;>9W{TC3@o-wzwjM=4D$(}$q`$cacrJmhEO_j&FS}g-Dp=oEO0#+fqql} z6)mx!IDP6st7|{6Pmv~8ar=@Sh&OV;AkKE06J*K`9scl3-SyfY0-8B&NAbmodDla{ zSv3>NnJAYvuUC`qaPh0R^2_V6sTz|1eD>Uo000Ob&d_Gu}bVo1IooE9K!&@a*?>qOYeRejC*MtEN{?ksR(6Cob>m zoE&s7zOF_1yHj8=+wty6T)h=5PL0GwlubQvJa!MUw|9BBz#H3|A*_3SP#woM8NP~= z{ow>ETSN7ac3pZ89m7=|dOYqRySB>jUcCN&K3!*;>CQ=d^t_zcCKPzn97wo+Q0Ind zWy{9r#LtuqP|g8xOa>bwLrHOtMw5REq{x45_X#k8W8_pQdL z_w}i~{r+&XGo6PkFg4)rf!LrKCI%P}A+zaWH3l~DujMW=*V}Old5`r*71c6*2F0|y z`XdV~SL5-X1pCAzS4LeN7<}y&g(;^J0pOq^9?Z0N3&SV+>n6Z!;7*v?kxO>$^V_5Z z?IPtPN~ln+%kZlWfo%QP=n~zLR98a1)bL&Mpl%9`AH@Ib7m`qh1K=98V>xKgW_f83 z>sc^?m3S&TlLU1YjtDi#cdt84OHv0LqI?rCX){%&H2wgUM`vOl6`; z-BegqnJe((=EjYW%EQM#uXAT=8tTGK_Y5CgJnzUJ*F)Q9J{hUbx8|?Ts>7{o+l{bN ze+MC8x+$`7=$djWa9fhCGzUmj4LNNAX59T>f|J;3WUzZ#!h!mn3NI<} zu|YH8d&ddDs(Lk!6Yc&OcHR@?K&T<)G#O`ng<=5!fR(&@6*9BYF>}5zGzK8n zlv+SOL7E{x03Z~p=cX86Nmuaqm(04y;&)I#vqeTgA7Y6c7Vzl&c%-Ry-WA>ZDAviU zqN<7)g0OXPNHV@cA3} zfY6aegNQOGhi0rO&eLOekw_*V5fvT1)hjgf1&s~2O*s)Bu)n`wxq(IQZ=F!0?p2UC zvhrD7@{9?6qD~_RYS{W@U2sAIF&gcw>2y1K)%6QZ34|o;bqkw|1B{m^GBKY(Y;MlU zV#1(FNl7j=QaK4Ztoo*=+-QWfPE`jg*dR&I_{4-&s!WR1@l0h=k-R%w2qNJr=@U3P z1x5Pag1ERin0q9Po_|l5;6@|v6#|g-2=BclIXgRhi^d~sD9DqQVj^xaJ>O1clT=+X@65Z9MGTG$s-?f2_gH!3YqN|)tBoi?X-U3D^;ZWld z-p^3^rw|D4E%a{$+`b)T>UV?%Ak3tcm2tr_8SBLogA3?uOO#vtx{I=$$Z!cNS z*Fq6s^rEu3TPT9&`Z$D8sj^jAX8WsB9POOLWag0BzxRVh{mz zNj)h291INr?yrBkk@I+vuG3VjloU+--2ORZ42PmdIO@e@;F{0D+7A_Nb1pqzGOX%VuPxR)!@s~(0Wb30v*i8%fCfrX%Yt^`-THh5nYaGipKgT;;} z;MpzaaW2CPaTSA)-HfY}eqHYF`1Y-44cd=tI(O1LG?5 zg$YZ9-CBYIEI7oH7PPXo#Eg`KnV_B)&Sh0Q3}> z1k`HYy(8tN;?i%MMmmEFv+1M{2u>9lMwvR7TYR48iJkHaMida@Lq%GhFvPvv#N1a1 zWFqc>5FTDnu)9jIGx}NxPQMJqlyOzCze=dbqGp;dqy$4&>iL@qslNY34?r5j$?X(5 zDMJ+DwZWQlh3VLHxPoT3Y|a3~#4*ptIjzH~Q5vp^6OF>$ZRzKin@}u1Yq+kU9~0>J zX5cE<`17S})>QvZ6FN4`XGmL~(1D@`&y-myXM%sJ6?cN@x2Ky-I?ob%Hhm2D$q3jC z8Q|xMnwu7Gl@RhV!{7>TMn(sg%n;1Q=Ce7`QO3}%9?(0yL-P0*lT%2kaz;fsHS-ii z$gK=W2zydesL0JdwnyZUkJm2~;U3SD!8meJ@}FKx*9Kdp7VI%IDR%6q@-TqDRdO%V zc-tF|rAG$~rRrZjnJ%wvlqv+V*C`E0xSRyRu{-uW5e^w%l}~F`!#k)I%;C)%un*Hg z+P^o97!a-D$G;A7EuJ9mN)zPh(<;QvsD2_a^>zL6?WYn78Y>#LKldzqce$Vc>TU}C zGZ^{Z_Ix3Np6!RuKK_*-BXf%k8C*_&l9Olq`#(0T3CwA1LGw!NFAnHKh5qY1(mRSo zG31NXImZ)oDR6$%8yMgGnE5dpFQ(v4oAfzH-2)PzCSfgd>_2_oY@IL~zg6({kuT!d zjLm>-Z3b1PWqaT6(U}LAxAg|im5C<^o;%OJf8i|rsl<(66VS1k{phND?M;~D__M76 z6Y7kJy!ixZ4V>Yz8V)wm0j|d~pTY|G_e+{@lCizyizoQCp;YHezn|^FgZw0)Rm6K9 z2wiulS{$QV1wwGFltC^W^iAb+F-@m-9k*mtsf{G~V_#u<|FG=nxK_?s$C z`W=H9j57-}=gUnovSH%W(Nrk9o;E4qWad#BlViu(#kQ_JFAx`~+Z)YW&pr6)d~E!? zVMDaLIm_;fO!PY>c{5T*v0=mLo!sPR2M#mNe!L0!IowcdXT$l{f9^2;oxTRSgekuA zGlsDjjH{2@u0L#TUSv(UYr)qlV2Y{GJt{w4srvEJJO0mkij44MU--RDXikJYB69gB z-+K#N+AOiUXS)J2SH0-?XJ+@3@tN{sQSxy|p^}h*cnSVx zqQfbt!@@h1C%**oWg+x(WT8Z`Fye?XH~x0U{wu=qt&-pkA*2d$r8Yz!zTK_@_cIqpY{l?6xPAZWp3=QtZ1m@U^{U-&y9XQ+Fn4P) zrxL|TBf7x{-U0ukQ&9@emLU)bW2e`lfDi+hED}x^f(Q%90s>_cGo3~W3(&;B+1me( zjuJ-;AN&f=MB5+TTs}bcO%?*dFH}8{IxL95rT{;CvmZuJrwHUluTaPu4+>F8C^^7` z6PbZ0j%KvNp@qu)OPX?RH1IhE9?DP}b#=&n3~+0M-i)9;JP{sY5?k^8yJ;-pO@upo zgR6JVLIT8^|CiedRYK^{(2($xMMQST;GmWf+RE(%`{@hpr=6YM?9Ne%vU-+q{A+)q o`M)Av^#UOU2cFmI`~`G6N_C0@!{rV5*;l6e81XOyu zn&t!qL>K}BV%^KcKuLm{4=wOP;;Ck&MnKSrUi=N@7stt67y^0)%}EHJ^%%3c52t4JDp zs%z}bnkMo#_YEnokVmC^i^~dLp{7*Plexit?Up33nTz)H^mKcBJIN(tA|j%+Do|Qg z)Kzw7YT7GfV`HtYt+~0m>V|i;18ScE(;&QOprc8UbctOT_(JZlYZpX7aJBH_k5Dfp z{smA-7OZEaMYcjpM$gNj1lnjJAkbRW(^RtzpWErBEUgpID@`OQOeLIrtv8SQc4K_) zvtdDK>%4E4Ot;?YIn?q<|HnKb>$OS1{hsL4GR>qD!; z;=$%_$3rzvbaJHY6_mqfAe$_}m9c?#zx&**a~-6Izr=Oxb_QeM-L@A787w^NGY|E! zro|3laydsPLb#sP{#M75i@(I&eVL@!nQ5FI;jCSmU5RnPCLKo_L>%f5xjYfb7^`j4 z*D~CCT^o4|R-mu^ea-wRS7(VUx3FKlT&}(@FdKwc=b^L8u#gYb<81t_oN*>~>G*1& z75`1N?l(tRLf3sAD&z<>yRqnggfO|5W3N%x#F1UMkY@dog`;rI8&P*rWLw{tD1DI2 z-Uz*XCWS_P+o38jF6(P9z1qz=BAi;&VMrcu(NLU0*B6DPwFq`wu+7G-#uu6=U=u-_ z4#!N$_KIF^{+G(L3XIib^^^E=H$qftz8M^yqJM{TyM-PqA6@ReBAL5ZY+HQ`%*L{g zY#IlvOdZ+dNMI}mLQ|DO7J3w%5Y?2rTYV{})Tmh5cbFU5gP(>YX{=N>XI?m`1}>NG zC^ERrXl{>7mV_tgDEo|dxR_-VkdK{k@3xN8V@riArt<}E$^xA;?{O&#`_h(hZo!BW_~9g-I!JuD z*a2?{a!KMD$pmJlzG_!c_w#elmCZO&$}>HIv>k~QtHncIX-m7narKOb-c;Umey4E; zNqhOyB&iIKs0{v;6%2&m+u;Pj-E<*4rA3B~oj|g+$&P=|ENXEx@HyEei zO*J82nm)^#&h+lpn^4#3voBAhs}0gz<-b*$V&c_e9~B_f-mseXrvA7ll&j6U*I3Xf zR*5f9Z}wT)FW2iL{$nJ!$&v9mL-DMe${XV(w>PDJ@Vrre38!E%oLndVpI__$BYq{u zf-m{|4|(1XPI4ZZK2DrCh7W>S14$!}V}y|(1+#u~@m5J)67e5?)v5bQ&`6E4NYYEx zJW$`_3sIF}LF$X53C6eY|D8-oRLimT_eZxw^{?S?)*+Ezt~fmBmlo34)F6UJfTOnHie}Qonj=O% zfmA+&xt6{h^FD?B6hrqGO?98UqLzfbhMJtSEce!sY%#ZrBx}ru7tk|2FEY(}wi9xb zB=@s?1X)&*`Z-z@ZE8uN1_Oy$q0(3PHvdJfFBFb?I%^?6)I$Dw|T~Zg~eQ=C&}_{9Y^~_D`_j3wdGAe4ANqhR1_b z^Lo>2<6HS)-ZW+;P(n%GvHew=TgZmB`*u046lDAzYf#W-ORU{3Zc^f}W+iw~(Zzep&Ct`mR& z1`PppA<#jtq{Pg?r$GeDfEk>b(`%%v{J2BF0dS2LWGNG?6t>Z0)+||19Fa=z)hbB! zZfn0M(;t6%Oj!+^iev|FPH|^Oe%@B{?s+Jfb7hR^uE*8$_qeXJ=JBxotF~skuF{b*Lv&?TpfWc_&i7GvK;)k; z-L0>X*EPp`e|8D(x;`@MB}9?-cjCpjN-kMRPU;UknxHvn24~PbBS0YkBas z<~a)L-j2!J_jL1L&+qAV7JkOZ9U8k25&#N92>(Y?~q+(G|qSD7e#7sM(M8;!~;h7 z3KMfTWuoz2zsLX}T0{r@-%3PrCJjz&-sdy_9#(MY!meuC7%wc6>m-Bm?Wlhr4jv-wM>^Z03M4;{e}H% zO|Wo}Gtx-$`!ELCALXhZ89C5yq|L&yM9iIXSMub$xqfqz40C*z$eUa+rvs`Qd+~q@*>(idqrqjegcr~)>UJ{3hc-Rc_6y+cz z$5Q;DuI4wD=LXu0(8uT>5+I-j3YMEOewIj7k_qcls7T(ch^G#}dKNuBKo5{BKYrKE zpU#8hVy(_%52wBt`83XGfR2MbSk=Tj=dAV_mvRqTbn~Lkqbn%xaGFTB&Zzy%NPxqe zn4Z;K=6F_TP&iG!YkSk&kBf=_{7fD>SXFMKH)UN_fVNC)tHT!#PwVW_VyIsx~S#zNwe{tsDicGU2}ma6yJC0BgT0} zLvtNj2N?AWSdxu}&kR^4EQdmKor?!ut9fUiNNDkYiFpY3_2Yf{;ofN|ZDM<@#fNLO z(1Z{0++1v!ft{QoiRX?I%nv@ch9TuZx~{PiCqohB5-xi#&W>mBoDUYb=?PxQRTR2Z z9Yj?^N*%Dn;_$>IGU5}YjrQ|Rxd+71%5Ru|EPFtU%vPUhy-f^5N!d(f$8}u2WN(V0nYkTd@&b-ZNIi_iR z1(^BWSHlenecs3S^x1=PPY;`&;)fqmRwN_3qgvYX#-MI<7vchJBp15}wtK*T!(zsWai^YgM6#$R-dFR|ay}}+m7W4PJL0@s6ay~HI>}ZR7>|P7s zAXTmYh&FUqa?|n{>46g<;DI_ALhvN=)($$|6VtJ5PF5@kpOtbh*H#KB0r9vQ4(VyKZ?aX=B4bbTd%uBH zSy1XUsW15$mE;HWX(xF*SYhFHoIGt2p8nI2TYJ1@mh7zdh!$VrnZ6;oGAH)#X(hAzIB9@R~AvyE;xapRNzTcYE+7^~a}GWN-(t&HqF z#_65o=%yT>vhjAAFACoQ;c2X@vMA%u@vjv(0)Or4VX2|CXT;=tfqdH? z>?Tfw1aV$I#Iz7Y?Y$hw<`WwGRgK(ugfTKqpcO)HzVxA@5S=(~vPiY*l-sXwDq#}8L0#{2Y-X;O~8N`s&3Sc%45cu(Sw2sS}SO8|}>kcWv=~P;7=Zr29z2nRO zU_N$BQ+69liy+`f?u~ob6&FY@UD1~h`Bsq%Eu$DotX;Z6DLp?>p0;q>YBdI#Ji=$w zuNG&X8!UP%@64M`&dRP0=3KvzPAu$~0S1&djN#Bhb)R%@J5GGR`sCrk?dY$YH3Us{ z&HM6wC*6T{?fTBL`xChR$a=(x{-+J0eV`ZIOG!BAifE;jD`JZu`mu!p_Z?yHXtJ&C>K+Ea86u96~w}a>9sE1qX^VZ;UzuTA5gD;Kk;a}K2d0tTL#tgd_(1>)@tY|dan9WvLdD^gL&dPAr{M3o!Dz6V zPUN|u@;l^jAtuDmhG$%6G+ywM%FdZm(&BP)C^o|Yy{o11hX*YvWcTgMVRrGe7;m1f}1_wFs_3eVlm^Ru7cDkyC3rT-z9BRG(glp#vV~>So=CbWNb={7#4zn zkO*1wAHU?OijC-3Vksg-t!qr~DC~Crc)Hvr>~FGvlAJC|NveuHAwU^zH z7OvBB>|h=R8@(rM`Jj)r=9;CP`gD`rrrCLyLmUS21@uMy-IY5sVJf;TN0a%ltHerB1l0ug7B1jNG{IXKF4*RZ}ik`lF772dC%=#6^qL!|tis&|E%!s-p`UhR@P z_Dpc;&DU(3Uz-InH0~ORY7xunoR{6!w0Lle?8D$!Oprgq_#*2K?obvzakecve!R@R z?6l8@Tmfd=bF1AAvhNiSSPLygSrtTl69h#6bHcFXv0ln4qRNMQh?Wh40p zTS+rg(}LncMg3O3gG1K-)I#ll4dXv?CP0ppCHWD+N@;+0(d{I`G~>1bL_3&^u(baB zDHH$AK5{39FLxB(;N*Wodoc9{0g^Rlcn74qHWQ;=d>l5Jr}r){3W#^FD<*^Q4U+@$ zG&s1x*zgV^${{b!crsa#A29yOuU_&JYa}qgcn__2cPO0(T{AB>J&m_t-=@WL0-HGI z*=v*6lJK;R=l4>#pKe}(K`zgN13cvAjrd2F9UtvOTi!~Q%jJpG%}x?eS{2jcoyE` zvkN*d+%0{1G+>v8njohcHNAB{T0~4u65bdIrD1rtJ(xBZX)6emy-N}1%j@@I*02BZ zj{PzxTqo#0s~9`O7ik5~P~uBU@H#Ho-iW~-nRub#EynTO& zi|r55XE@^4&Ou21Y6>!>ajHFPdXHD<=Hn)23N^m75Ad-c0}7md7PjcK(@c*d;iRz@ z)=T@tkT>#&@0u{nYw9-IbR47kk2*rnnD-!FCIUx~LgzOH!J-uQx`C3NFCcff;Cd}N zbTnQKj!(D_d$p=%BDTd1%!ST0Kvf+%XQVB8S+dpyEG_R3?(Qin!Cg|@uqrwD#IC1e zV&|WPDjFDDbXyb|?eZ(Vv&1sZ8?|W>63@6gterV~$IE}}>f{?8M5S=7Cu3EZ;Cfg~ z@EtAZWHF+-LdL)>Mb&d<5=*f+qRP7q*Wb50v|JC)mKl_GPA`vSQx~jm z`X19nJ2O(@Ndrb9L({DFWHp+Rccx1a&4h69kTf9>;(poq?@2Q$b-BP5wn^IDmm8V4c3tp;-z&)oL`I~-*%_pLKy+5sds zvXQc+1uEro;n`omf>cPT!R)Earr{sqzD9Lfd9P<8T(Fj={l+Y)nriMQ^ga`^d#%lZ zDDCt5*W+6UCQFko#a=9@sn9RZVYG;Ypo~{v<=ON=Ql9Tn6B2|vYgX06FOeUyL3p+u{&Wd9FfzSD?Z|Q!KM!0Rx@8sn5|g?3>HJQr3Vd9KLJ{6{ z)-fw^fZty_;7Hm$^U{C4h%WtfVay+`uyqnq8P{V1*Lu4WJ?wj?qQrDj?a{sXlR1-%imc?MQkmoF zr)SxynwPD6f`eR#9FU-Aem5?|_9#ab+DmgA-YF{!hOPo ziN>F5p=P~Z*)A8{jykxIlShj|NU!YlhO+Z|O`auECz9xedY|agT`R4g z-{}fmbJiFxD+gp7g>HknzqeLza+(NMft^+S=R2`Rc0YG+nAeL=i1%QR6oeBtAh*%9 z2jz3xy$KdJFBlhceq3A5Il`yLM-Qb}d0iX!bMiQo+5u)&BkcS&t@6gpyky~*db-s_ zt*`N!9rjjQ?4{cGzaCQVe^X_TqD(@t%%;f(ncij*z#bf*Q69_!hi&&_7|XIGtsS#) z&`I%&K0dH&@$YPmdi|$u_0a}y=q0_MXK$|;?+kscTwrGM2}vGr=@3}6(QV4aNZ6H{ zTTV4^{|bH8m4e@z6Km`c8<*WzpaYyHKStqd#I$FU1Q4WPuhnd^`>0r*cIm6qLY-fQYrk9E|DMYx96+oSC z(F=5z2*&i+Sx51j_FzU8n}qI43dP^M?|{Thi8zys^Zs4hb!kUoS%zRMg9PHprR{FH4HP7#Z%zFcQr zYzth&=}EdI@1-gpV}EsMq;i;#N~a^AE0@?;?oft2EEj60g^)O&Ee_)>*a|}%lj%8e z6>WO^9CQ$-VIq)y`>?xuV*{=WIhpp#7lW>~*^GMgf){l1h^{M+wt9#6Qs$+l6{IX* z5^##15Qy{HWb(s@FUqd#3c^%yS#1o9bfqOnrX&Gvub4mStBCYOCayQ>cim-mx$!!b z1Qn1N=|r+0V)h!m+Tf+vxYe5hH5bVXcvGGJh|G!k^rH=y1qGp?V}|J1S)La=U%8+NMqLbjTDQ;F48 z$S)(qhGi{%9b83mBRD6et=lvsHw84N3xdKC^Uq#&vRQ=K!56fiad&8;V*T>d7DGB=1to(ae0jwGPVic{o##XG zJhN$MaXZEWE6sW-NreO0Wc>RE^UsF<@4l_@%Zs=f?bf;RAzy_Lbim;O9x|{%fOL4@ z=JGJ0SVA@i!|V@SeK~r5rn(7+_^-daG=@{f;$8xKCr=1a0>uBK^H>b4lhD4Jg z+uwiZNJ0R=7X*FRjM6D%Fps48a<+wk(b9-!xRYqR=6{hU>~!a8*Oeqf7XG)-<*2)K zjps;;F5YpnU;~+d-=7iuozH0Uw0ML;|7X!N2L%_uonOqpE5VXY?V(-In$G+=!Jel{ zc+8luUvJGjTAD-!OVDB>C93=2BMW1Q@DJbur(-OSRTV_}cgOgXlomnscbnKr2-~CC zU3m9*5`eyc{GtI$0KK-V0O5)j`gi`o=2Y$skUMZQ_b-C}kgl-jYaab|8CI#rK`rj%E+Go zKZf~ld>80A-VC&Tr{$3Q(Dogjw*{oHsdVg7EQo(hAj6s#3hXP0(%!~llr9Y66;l-I z&ItUDuf>P#7+R>!>&~z=q4V06YN9cNqhR~0Az&V)y9;B5UlWAxsb7v1ah#7Pp1l@Coa7h#HDQ1JbX(Zz zf0v-14Zr?sHu`r|uAqvE3iPenKtxQdW6_EX6Psg5t`2Ipai@>avr}&Hkx++#FWZPb z)bqazp5W7IA-DI3_`>VJ1!^(UfC>0crD={u3>kzx_Tx#@rrE##Az^1d5=I z{MSR5I{fu>L)2%z5d;4SB-ygIo}t6~Os4VnACobDWgq1C`S2!gA%M#Y*ef~~Mzj9I za>|9zb19D;wVuX}@~|5WYdC%+_g8Wmm`mt^&)TSQc}rQ}U(nWhhXj5)os$la3p&vKyp5;C(eEHx{U zrwm*^%;J(2951Zlia%eDleX93IuQ)8NVo6*)%gFcxLZX)va`MBeebW`D}TiW+#CDn zqy{a#Cc0Q?fLaGKUgvlLF682TX6)wsz26cWrhfT|Ba5053!IL`neYcvGy6Z}MY9M2 z4+3nSexiABiQ659q)*>VmiZ8+jeM874IJD&@@Oz;IM0e48BMFAdB3G8yx%nb{-5LR zk0H=l*Q=+hd|>%J?Fc^+-LQ@(BUcE!b2SB z*HpV|D*h$<*~#&ip>Vh2=;iwMJGsHf$d|)19P?uNb6Z?uP|CnUdc4`51ks4_dtY)n z`R;1~1sN*Du?7bDp7M+yzw`Sga1H&p5^-B})3jpR?@^ctt~;C`g`mE7;95?hguW71_jER_6Pi;=dK0*tM_V=|0*kD8u|J0O5|K9~#J?#ba=-2&~YD zBdYp%xrb?Cz7Y6whMmiw6TUxa>Au56#P^MYvovLwkP2UeT0i4lJQ;Y~e|_d+W*c$E zu8Q+kCQC~Q#F3HLv|fXESCc}`r)M;vU`yX;M89%kL@~Hv_INKs)H9-ox@vq@!|g7A z%}x4!BRS?_hcz>j<~opnL6OmobXCm|zb%XjB19g1{QmIM0>gkz5Z%Qsl`2-d#0a}i zjFcrpty9DN07y(&Z_rur@0tZsb*TM*x&c4d|L)b26NMXkEW3*Hm+Ed?!)JG5sOI#U z(Na&fOhqmYRx-pUQK{H%D=;U(gO^G8o=Ly-$xTQ@l6hUd&*k$iH!*C9O?CtPu^b~i z9(2p8BVLe%>W#2+uXfp&S*)&;{fh2h9jwVZ`EMyd& zvif$@9?OFs5w2*;xcusq`HXH-h-1pr#-Db`rVXd{d0%M7oWsz!;`6P%SCnCZ9%UFz zIT-ox>E&YL7)6!nzvgZ)pVXQd1Tbr_>o}&Aj#QdHd7B9-$<=!nt(JRWexnYZ6F7eK zZhr5w)#s9$>iAHs%&!!VCuKcTja(vK^v@_HYMfOXazeaTut^4}5pTgNzvqggd}S+g z&Lc{Zd**%4e%Z5jq*CCP(j7sLNeUq#STJ+K1Hg zo=@wp`Yami&)ZmSTu5o<4qT^wb%r33QH4I@7tuLH&3Xi-QAR^WY^~57b zZI>zSLdJ5Yv>7Z$zN`Tj|2$>;va?-liN`qkEcCg zfa+>$55g=(Ytyo=rVT|am*7ClYV>ev+)rbsu*n1kVA-ptl3y)ptPII*eZWpydumUj z270%prDiKSmfrE})z3tOrrpM$i8WBm?fq|4=`RM%-Uw~ot_Fk?@J`lRBI2e~2Qjdu zfYq|%x)e01{dYi@QQfcq=sbtPpY0~t2K6-!F~9>)j~9*JIwL?u5TbO5kOxG_beJOy z5r*q&v;eJQj9LQ~6oGY?JwHRhYVMB@CmKr-OhI5hHclg)sxU*SR+(=-0{zqHlZ$%- z40ZGG9_b`-^&!fGB2;Pq$<`}9oop(dt&$@uNf(kRfJRXJ zrm`3&1xk+|IN)`XPb>yATyH$p%F%p=WMLtjf3TK_>G>f9rgP`|O*u{e#CcQ9y4Zcy zO8Ih}t}mS)?KZa}q%zb>=WC7t^~V^|aUL)mEI{bv5B!YIU6%ghz@%l{iq1%2 zTaLk&>j^$H^1ugmE_ECnrE=b2!LDvLz`jSQ3Uc-@ma-l#ryZEa&~BYMOkhc+J{T7z z8}c-lc&f3RP2>n$aqC%6o5gNvUt=4=cuPLUzmgC1MksAf7gciy&FLuJ*2v&h7v9ci zn2{8qoA6Voy}xz&lwzn&(Lzb8!qVN&KJ-*6FBS7((62uYBY%G#nR+wj!4v@h1M^r- zpZ_@OgQ4$jN!O>BmziH0ef(x9(_&3#Mky(EE-d{?-SeH;p|}TnQ6P3??Urv(4x&ek z&t{EI`N*gdUL{=+%}HBVZX1&CNP-M-Sl2q*GK!f!|PM`JlXn8x{M8U$lPUvCJ`VBP(eBE%zQ)mtJRZdg^D_ z;IS2ht%2=Dt{-o{nW+sD0rxV>06VfJe|ddov&=VG15m_wXU6hA71LB`y}HA2q}o+B zI16&C1B0oWJuE6&eh43Y)l6!;-QrIViRQ$0-Pns}bSdnXOB0)gm-0-k^ozk=QUV*O z`Nx_tmP_M;u#Ng^3&$H_B7Hc$q5HR#y9%zl+JU@l$Hib`Q-;R-LJ;fDX$J9nQ80_; zht~xghN&id2bnx3TNYCu*le5eQii${B9@RfYp@2FUFstSh?a^p95jLfGJ|!uY6IT*$ zMT83lW_%K}qSv`3o!bcOvI2S2P)IHo1@GOz4tVlVcy%wwHanP9 z%gfF7C9~uyk9UbR^ZQs{ivFmq246Bp7fLQ7P5j1lx2R)jc~6Wj-sly3alNyOGE2N~ zMx9EJBu+&Rb`dPI)OwlAnpg)->VVDI%^iL3sCbvjh%mo>JttU^=ghL6^4c;_5Gi19 zU75X>c^x!$GIeDrp^uYow&}>FcQgwD6;JJXa0yk){*yesfO6F05=MD+RIM7UUfuIz zann?m6(!*i$XX9~*=!`&$;qvIqS<-bYVG~4-Q(FiIrBZmgdRUFD z#0a#j#r3q4og8olz(;atQo8S_210dg-D*b0EL$Ds_rWpX_4h>CGd z?_5)1&j%LS*ux4pBKtcMAzT$p2c5KKLb@?KX)BTGa}Fz(p*X8}dHaU4B+JI~ zYZgjYKfyoEa#8AUoe9TNf=-y|B;UUJeYi5w!28zc87J-yiq!(7^sDLfivC1T3m&AG z>S7N4yl`OIsnn}@BIK|^$bXs}^V7k0)q9~4-a-vqzcfo;DIdtTcfCQ++`RDT)jKW| z$jRyjLrbB-T>ja}rm45&Z983)uWwi?cmp2&!XxXjl)ipvR(W7c!);SBwq2nk!FR$`VAY!VtmM6qQs;l2T5Om(mL&LUDrE2?m)VoYhZn zEQoGx#McFW-nYkE`0w*pv};Q+rI}8}Vit+nY_OHgr8kuOOoJ4(ZaH-}VGoaf?eP6zpAbJ}_R7gM zV|%jyv2>WlidRWAd%u>wHk8%Ad?!K2{_MNi#)D$_TOq^`wRE)AGG7Ge+suOTyA}NM zd~ba`M82LJ*av$PV2rPyUCt=cyshNoEqAYsb#srr;X3XSAu2*b3}xXJ`RYDSLF7DI zv+Vwz<2~g7UY2xabQNLJcxps4fKsW8U^F%m(P2c_zq9OU$}7hhWewab_|43Q9&{o5 zuphbE#N8F5MENjMMGqwrI7SdkY?eoW@}!3Cm545=^<5)Cbyrb_J@*50X}f^YuND&0 zLZbi$p4|Uf?dDt6?+62Y-J@Vb)ueF_;Na$oDy8~kgRvM|2$5}(q~2s(;Pzv5JZ2o9 zF4xnYHmLdjvAH&3sDUckL*)cHEEKbq`lcjhAT-uM}G?-<<&MwZ*kkyYm zgLjEdsQ#%L&F%TJS4(+*pI_|UrO^!rbjax1PQsSk-q14)kA99!;)oyBNt7pwbo);7QNmhWzCJqlI! z4+jpUKWyL5c%-*EefbCg)yl6U4UuO~h+gm%;(IDSs^ZAJ%@5a=${IGns4|?HePe|! zWip;31tS+{md@xjC0lZ@x5S!E^j?2i+StHCT0d(|^a^-dAzH-rll0x2&7kJS8@I*a zO*brmOyUn;5oP2CIz7(7+SxLd6bKpe@D?XfKgBv;?)RKhC^YrHa*PP0yj^?q@R`1^ z=abrniJo0MW-k;==X0Aw)m4-vf0>>ig266FRHK0CCT-ofs?7zr5LZ1izWX${^I9>G z>eJKpT{Fw0-YCZEtGb}0Z#X6m$8~%P6xMW1dn0wkoXTa_ zg}WU`ruRNFXD|3(;Q>d!I28bEX1NYZjCu-9k?0-WVt0W_WP_(-6E1JQU)cCy)XIcd zWzO#FU6UV}biIn==6q0o{Is^c4dXd3@+G#|dG-RJUrW9b{$nz=sbH6C&IkOp8j*1q z<}$ncdL3B@0P}Tbkvdy)P-aL?6QxS8;Ks}A2;h6MuOv%~DeYae{NseSskIT)-$Vg|QEgzKIsSJr3{I7D;%G6U(UK`yXef4&^4CV^OadoNe>=Z!lhxD-rs0>7Bupn|bry2XWp_xEcDVF0 zFZ!A+cGMgHVQtFuD6(;!c~_*}(~=eNui zAFQ{ej`59dtl3nDNq@f5PL3-eT(RfdiGuP>9kp@;)~ zrh)VJ8=9%m&Q6sV3#3Q>hg5C;)KNmAQfu?u@%93!^PBcfaUTz61dr;;iNy5JvoKmU zp^>pJ8~t&X2)xrPFWMUReJXDqE~4u#ZN?UndCkt#G<<23=Dm8p0#nVwb0Hw7FD*Fi zri6V+--Dr#>$)1GbtOKf!DIYBKi=NSDxg>Sc$PRytEk>?wd%n)wFq?#r@?z$eu zRbj`l&)cityMpcDcC?WF>>=I#QQddE`gWglrG>eUQD=P`Rjp`Y*^qijp988e4#TQs zyY4cuWumQwz-g5pbk=qON79!yYBODAeTOn>al&7bRZ{idM!j2=omxC0N4=G{Rtj<6 zgX%ZTsU|bUlt-n^qXTNGN7O7|NnI%>G9#X#l(%}3ioB2IyNR1uGr%-eEIMXGMew!b z5#hDFr^HFnSDf)uTRe2ZpUpSxbewp-#q~v*OS+87R(o_R-bl7_(`A4)H0NJz)?&;1 zSlckuNzCUB_Fv=;H#)h@hXIkX+E z2uK;eXO|S#?D~>j6HTGEem5AZZa8!n(f-rHPWM> z8PxWv6*laBiVrxJYg@D>{WWHMDlwzCc)JHq){{c$ebg9QHA;t_ILyZZy%gZh)c|9?BhsGom94~_{n4qACHr( zZ~9iFi}eUBvRn?f6$(U*2iF<12MZ0`g00L;?X@l1>>rJLS&tqXVk;LIMOs%wvEixs zQ0vbpC+y7$Ydh%m`i=ujBZXO8rqa1xFL`%qk00`7GiMuOsHV_r8^PY+`X`wp=A4JM zLgQrn-->Ems>-R^`C8U?FwM+R-=T$Q(47r&?CDW+)PVMAon^QwRzUOt^I4>x$b^K! zbWh(GS!*|!26%3w)6SPB%1Emqt0TzK3;&biriNiFQ@=0&rSaCa(@UOr;!io z$ruMLKOX&_={e4wJhTtr#ETo6av0VzCZrf zY_zyCzKkFmP@{dt^`Z$E;Gpx}SD9kvZ{@|U;~@QSO!ZZjq@x#p>pm?Dbaj;-6B7Gg zjd#STFYRRFaXujBV*Mz`g4=l}j&c{bcOYTHwuffs4z#wWW!u9{SjyCp*`2^RE7A| z<1aUq4s=x%x$ACJmU%9U9LCGEq|(UtcDxzPw+&t91@q9`)m;fZfBICtiFeEF>R0$} z$^A$j-a^sj5o8;fYXH@6BqsVR0Jz`|Pv)34N;Wvxj7h;XdAhTOv6Y@`jav(Obgp0n zbb4XwV#bp8j^9>*3u1o;0C@cLiO$_3C2qHn&~GRWcfF&cH#xHYm%RyNFK>}D04jE!#tyTrA3((iAyd_sQkHmldPwxmh2W74WF z{jpuFB6O3{tJ!os#xBG8C_e3R=yafCkJ$=vb^^?o<2%>1fblr5l?hs3t1Xmw-is`| zH=Tp4r}__9AZdxyMy(Qp#TT_2|y<8-b za^=KDzMq8)A`oKEMFSo!7xrIB??ZxGu?h{z=uJztSL&5}Hp271*nvTq-_?_d?$oBR zajbjMx#v&uLOx#yJrva+GU}=vu>AKLIxzE@#f6FdZ!?yHUkd})7;yXh*Q^1s6eH04 zTlUC23UZa7g=mb0+Z%xJrE8fHfILG^TRf6YB zsufFFmkCiO7Q(?PpUOk#GE6r@u@+UvNh(1%=nxO*3Xb=5M2Gv3tmhkVP3msKZNhvx zag$#Ruw0I2Rk>ESm@%+_>0+7gG&%@)eUkKmL@`U6 zwh~OPna7*2JHCJO>&&-(k@X#RS4hO@Zi+Y+hm(q@zB04 z?5+&g)2{ri3+j}(GA-vAk=>T&8?ex@j55*lux|d z)2gwJ>bqPSd#lD>xLvDD!(Z(nLUW2x*_74f?hzxT!Oi?j_1qVWR^H1gszn}BQ;zZ+ zlS8$pkFCNyOsM3NLv+qhs}hefk#h1d2(vt&tHqkNs8~x8srO{U!ogJdj-}DGTGy@a zw-}!guh(}Wu^nv7o>hScaK`JJl?#=1otB*fhpu&|M%6!}vN3kmvICKEm!91yLuz38 z%iW0HIikFNzblz~G7z9Sv1NM4m?0EqNj-r~BtiDfIHh`rj|f$ z!U@P43O!+fGS<~rYp~i#TIYM0U)j#r6hftQ8-Kio@+c-4%{S37L78Mbbj_W%fS{%c zH@YHckX2UO>FuH{{mCX{jn&|c$xg1WqNeIHZRy!5B#TsH0Z7n#n-sNTaeI6+dHkI6 zW7$Yt$t%MUMme9c&n-8t;M<0)V1ZZ8(^r2Rk~D)p&EBCxDKkKybDG-X8akvr{f|gb zj%uS!iVALP*yY*rOGT%NXc?WHf;8De57@<$Inm;W+-Vv(DmD$6HgwIiR2;6Hj)evQex>zNLF z>1F9rb-os>DV{zoSRGX2&;GCxB)Zk6HOZMe)E!^kQO#U%>S*@WU-RwnT}dqz$54Cg z_`E^Ihh`3FZ#Kyl`D5GegXM>?%9R6CVR(X4u}af3OIB)`AWvsPROiIW!JKZ}@(-at zj#KvWu!H{ZNvY2~Z>WQO{h1IGiG|LN-zHBEs7qg;@ApT>OlAT8q62tQ#pj<#Ag4@R zRB{nfFI?V_!;4V(Co&h(r?y`dlP`2iQ+)9ynoBbXB0Wg{6NIC>$-nLW%Mbk=lLGQ# z|EDAR&++skWA!(nk_feH6V4f_&Ifpn{o}~~3xBhiP=+s||AfC-JLW6@HJmd5C<+@O z(s$mz@O$?dyY7pZUWE6HJm%l+K+GS!?E4!4?t6Av5XqMY^kzFq&_RQLfa0GW{e*z76O&K*opUV{;i-RZg{8X0yUAO;s+p4 zfOY_K;wG*KK%W2*_S-Bd%6Z`SFe1KB{y(NhHG7Bn2^@&J&DTI4b3o= ziIkrbedl)?R3b%iYb?eIhFC+6VV3M2gcCcA~$7hPDUMh}f<2v2IX5 zOT!}s&3x|pxLVSr zzbBJtga6fDD*yyNp?8=ld>5VBYKaT)X8hB5If(oF%w4Bc{OhGI$el6cldcmh!s?JN z43r%r!lyc`&~7p)b*tU4w6+}DaFo-;iqbI1MRKGo>?}?-kU$!Vm3ohKd?yVc)JMsO zr|noR%#HE@F9E=c?-n3O_K$x)3gX1EHWberteva`RQ0l!HDU@!w?kg8Bl7jJHk@FY zCMZA3Wew@OF3$<9MG-@DtZYDd<#Z6r#WHn7o9TY_6=Qfo>q=UbOOrCH4b!!1nT+RE zMjsNZ5?1@ADNb@oRCad*FT?4j;Pt`2p~&B%d^qbIb?5fO2xWJP`}i_m6?U7wbDjVw z^?c6o4%*rJF3mI(j;7a&Ic(L37nduSBxoc{0btj2Fr^MigW;%eDIA-qc|B}X{5SR` z6)W!77)20B=+pL!anu^i-FBuy=1&$c^|6b~zXgMDQSW4r?ZFbUTT{pp5tYWt41i2jHmbYE{VxT&6Dj}z diff --git a/specification/img/library-full.png b/specification/img/library-full.png index 5178b4bc8ae801d2546aac7e28a080498daa499b..dd9ae3778a48f3ece3ccf6d248868e9fac959b5f 100644 GIT binary patch literal 25389 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 literal 14870 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 + +Note that the data type for a span for illustration purposes here is written as an imaginary type ExportableSpan (similarly for metrics it would be e.g. ExportableMetrics). The actual data type must be specified by language library authors, it should be able to represent the span data that can be read by the exporter. + +**Returns:** ExportResult: + +ExportResult is one of: + +- Success - batch is successfully exported. For protocol exporters this typically means that the data is sent over the wire and delivered to the destination server. + +- BadData - batch contains bad data and cannot be sent. The caller must not retry exporting the same batch. The batch must be dropped. + +- CannotExport - cannot export to the destination. The destination is unavailable, network error or endpoint does not exist. The caller should record the error and may retry exporting the same batch after some time. + +### Shutdown() + +Shutdowns the exporter. Called when the SDK is shutdown. This is an opportunity for exporter to do any cleanup required. + +## Further Language Specialization + +Based on the generic interface definition layed out above library authors must define the exact interface for the particular language. + +Authors are encouraged to use efficient data structures on the interface boundary that are well suited for fast serialization to wire formats by protocol exporters and minimize the pressure on memory managers. The latter typically requires understanding of how to optimize the rapidly-generated, short-lived telemetry data structures to make life easier for the memory manager of the specific language. General recommendation is to minimize the number of allocations and use allocation arenas where possible, thus avoiding explosion of allocation/deallocation/collection operations in the presence of high rate of telemetry data generation. + +### Examples + +These are examples on what the Exporter interface can look like in specific languages. Examples are for illustration purposes only. Language library authors are free to deviate from these provided that their design remain true to the spirit of Exporter concept. + +#### Go SpanExporter Interface + +```go +type SpanExporter interface { + Export(batch []ExportableSpan) ExportResult + Shutdown() +} + +type ExportResult struct { + Code ExportResultCode + WrappedError error +} + +type ExportResultCode int + +const ( + Success ExportResultCode = iota + BadData + CannotExport +) +``` + +#### Java SpanExporter Interface + +```java +public interface SpanExporter { + public enum ResultCode { + Success, BadData, CannotExport + } + + ResultCode export(Collection batch); + void shutdown(); +} +``` From 5c13670e576d8f1435bcb310eab03ec5dc4b13e1 Mon Sep 17 00:00:00 2001 From: Tigran Najaryan Date: Fri, 19 Jul 2019 12:22:49 -0400 Subject: [PATCH 2/2] PR fixes --- specification/library-guidelines.md | 17 ++++++++--------- specification/sdk-exporter.md | 28 ++++++++++++++++------------ 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/specification/library-guidelines.md b/specification/library-guidelines.md index 22c05b11a2f..38d333edfaf 100644 --- a/specification/library-guidelines.md +++ b/specification/library-guidelines.md @@ -50,9 +50,9 @@ It is also important that minimal implementation incurs as little performance pe ## SDK Implementation -The SDK implementation is a separate (optional) dependency. When it is plugged in it substitutes the minimal implementation that is included in the API package (exact substitution mechanism is language dependent). +SDK implementation is a separate (optional) dependency. When it is plugged in it substitutes the minimal implementation that is included in the API package (exact substitution mechanism is language dependent). -SDK implements core functionality that is required for translating API calls into telemetry data that is ready for exporting. Here is how OpenTelemetry components look like when the SDK is enabled: +SDK implements core functionality that is required for translating API calls into telemetry data that is ready for exporting. Here is how OpenTelemetry components look like when SDK is enabled: ![Full Operation Diagram](img/library-full.png) @@ -60,30 +60,29 @@ SDK defines an [Exporter interface](sdk-exporter.md). Protocol-specific exporter SDK also includes optional helper exporters that can be composed for additional functionality if needed. -Library designers need to define the language-specific Exporter interface based on [this generic specification](sdk-exporter.md). +Library designers need to define the language-specific `Exporter` interface based on [this generic specification](sdk-exporter.md). ### Protocol Exporters Telemetry backend vendors are expected to implement [Exporter interface](sdk-exporter.md). Data received via Export() function should be serialized and sent to the backend in a vendor-specific way. -Vendors are encouraged to keep protocol-specific exporters as simple as possible and achieve desirable additional functionality such as queuing, retrying using helpers provided by SDK. +Vendors are encouraged to keep protocol-specific exporters as simple as possible and achieve desirable additional functionality such as queuing and retrying using helpers provided by SDK. -End users should be given the flexibility of making many of the decisions regarding the queuing, retrying, tagging, batching functionality that make the most sense for their application. For example, if an application is deployed with a locally running Agent daemon, the end user may prefer to not have a Retrier since local daemon is highly available. As opposed to that an application may require a reliable delivery of telemetry data to a remote backend that has no guaranteed availability. The end user may choose to use a persistent local queue and a Retrier in this case. +End users should be given the flexibility of making many of the decisions regarding the queuing, retrying, tagging, batching functionality that make the most sense for their application. For example, if an application's telemetry data must be delivered to a remote backend that has no guaranteed availability the end user may choose to use a persistent local queue and an `Exporter` to retry sending on failures. As opposed to that for an application that sends telemetry to a locally running Agent daemon, the end user may prefer to have a simpler exporting configuration without retrying or queueing. ## Alternative Implementations The end-user application may decide to take a dependency on alternative implementation. -The SDK provides flexibility and extensibility that may be used by many implementations. Before developing an alternative implementation, please, review extensibility points provided by OpenTelemetry. +SDK provides flexibility and extensibility that may be used by many implementations. Before developing an alternative implementation, please, review extensibility points provided by OpenTelemetry. An example use case for alternate implementations is automated testing. A mock implementation can be plugged in during automated tests. For example it can store all generated telemetry data in memory and provide a capability to inspect this stored data. This will allow the tests to verify that the telemetry is generated correctly. Language Library authors are encouraged to provide such mock implementation. -Note that mocking is also possible by using the SDK and a Mock Exporter without needed to swap out the entire SDK. +Note that mocking is also possible by using SDK and a Mock `Exporter` without needed to swap out the entire SDK. The mocking approach chosen will depend on the testing goals and at which point exactly it is desirable to intercept the telemetry data path during the test. ## Concurrency and Thread-Safety -See [Concurrency and Thread-Safety](concurrency.md) specification for -guidelines on what concurrency safeties should API implementations provide and how they should be documented. +See [Concurrency and Thread-Safety](concurrency.md) specification for guidelines on what concurrency safeties should API implementations provide and how they should be documented. diff --git a/specification/sdk-exporter.md b/specification/sdk-exporter.md index 22cff3b6686..461a1796b0c 100644 --- a/specification/sdk-exporter.md +++ b/specification/sdk-exporter.md @@ -1,16 +1,16 @@ # Exporter Interface -Exporter defines the interface that protocol-specific exporters must implement so that they can be plugged into OpenTelemetry SDK and support sending of telemetry data. +`Exporter` defines the interface that protocol-specific exporters must implement so that they can be plugged into OpenTelemetry SDK and support sending of telemetry data. The goals of the interface are: -- Minimize burden of implementation for protocol-dependant telemetry exporters. The protocol exporter is expected to be primarily a simple telemetry data encoder and transmitter. +- Minimize burden of implementation for protocol-dependent telemetry exporters. The protocol exporter is expected to be primarily a simple telemetry data encoder and transmitter. -- Allow implementing helpers as composable components that use the same chainable Exporter interface. SDK authors are encouraged to implement common functionality such as queuing, batching, tagging, etc. as helpers. This functionality will be applicable regardless of what protocol exporter is used. +- Allow implementing helpers as composable components that use the same chainable `Exporter` interface. SDK authors are encouraged to implement common functionality such as queuing, batching, tagging, etc. as helpers. This functionality will be applicable regardless of what protocol exporter is used. ## Interface Definition -The exporter must support two functions: **Export** and **Shutdown**. In strongly typed languages typically there will be 2 separate Exporter interfaces, one that accepts spans (SpanExporter) and one that accepts metrics (MetricsExporter). +The exporter must support two functions: **Export** and **Shutdown**. In strongly typed languages typically there will be 2 separate `Exporter` interfaces, one that accepts spans (SpanExporter) and one that accepts metrics (MetricsExporter). ### Export(batch) @@ -18,7 +18,7 @@ Exports a batch of telemetry data. Protocol exporters that will implement this f Export() will never be called concurrently for the same exporter instance. Export() can be called again only after the current call returns. -Export() must not block indefinitely, there must be a reasonable upper limit after which the call must time out with an error result(typically CannotExport). +Export() must not block indefinitely, there must be a reasonable upper limit after which the call must time out with an error result (typically FailedRetryable). **Parameters:** @@ -32,13 +32,17 @@ ExportResult is one of: - Success - batch is successfully exported. For protocol exporters this typically means that the data is sent over the wire and delivered to the destination server. -- BadData - batch contains bad data and cannot be sent. The caller must not retry exporting the same batch. The batch must be dropped. +- FailedNoneRetryable - exporting failed. The caller must not retry exporting the same batch. The batch must be dropped. This for example can happen when the batch contains bad data and cannot be serialized. -- CannotExport - cannot export to the destination. The destination is unavailable, network error or endpoint does not exist. The caller should record the error and may retry exporting the same batch after some time. +- FailedRetryable - cannot export to the destination. The caller should record the error and may retry exporting the same batch after some time. This for example can happen when the destination is unavailable, there is a network error or endpoint does not exist. ### Shutdown() -Shutdowns the exporter. Called when the SDK is shutdown. This is an opportunity for exporter to do any cleanup required. +Shuts down the exporter. Called when SDK is shut down. This is an opportunity for exporter to do any cleanup required. + +`Shutdown` should be called only once for each `Exporter` instance. After the call to `Shutdown` subsequent calls to `Export` are not allowed and should return FailedNoneRetryable error. + +`Shutdown` should not block indefinitely (e.g. if it attempts to flush the data and the destination is unavailable). Language library authors can decide if they want to make the shutdown timeout to be configurable. ## Further Language Specialization @@ -48,7 +52,7 @@ Authors are encouraged to use efficient data structures on the interface boundar ### Examples -These are examples on what the Exporter interface can look like in specific languages. Examples are for illustration purposes only. Language library authors are free to deviate from these provided that their design remain true to the spirit of Exporter concept. +These are examples on what the `Exporter` interface can look like in specific languages. Examples are for illustration purposes only. Language library authors are free to deviate from these provided that their design remain true to the spirit of `Exporter` concept. #### Go SpanExporter Interface @@ -67,8 +71,8 @@ type ExportResultCode int const ( Success ExportResultCode = iota - BadData - CannotExport + FailedNoneRetryable + FailedRetryable ) ``` @@ -77,7 +81,7 @@ const ( ```java public interface SpanExporter { public enum ResultCode { - Success, BadData, CannotExport + Success, FailedNoneRetryable, FailedRetryable } ResultCode export(Collection batch);