From 491538565523fc3736905c0983cf9682b005ba69 Mon Sep 17 00:00:00 2001 From: dyh Date: Wed, 3 Feb 2021 11:42:20 +0800 Subject: [PATCH] Update architecture and logger document Change-Id: Ic31a785ddf3e4e47677fae55b4173a04a03c2077 Issue-ID: VFC-1790 Signed-off-by: dyh --- docs/platform/architecture.rst | 31 +++++++++++++++++-------------- docs/platform/logging.rst | 17 +++++++++++++---- docs/platform/vfc-internal-component.png | Bin 17279 -> 24815 bytes 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/docs/platform/architecture.rst b/docs/platform/architecture.rst index 501b9137..1821cf13 100644 --- a/docs/platform/architecture.rst +++ b/docs/platform/architecture.rst @@ -20,23 +20,26 @@ VF-C Internal Component This shows all VF-C components, each component is a standalone microservice, these microservice including: -* nslcm is the core components, mainly responsible for network service management. +* nslcm is the core component, mainly responsible for network service management. * catalog is used to package management, including NS/VNF/PNF package management. * Resource Manager is used to manage the instance created by VF-C and also responsible for resource granting. -* SVNFM Driver, now VF-C has three vendor's Specific VNFM driver, including nokia/huawei/zte driver, each driver is a microservice. -* GVNFM Driver, now have two generic VNFM driver, including gvnfm driver and juju driver. -* SFC Driver, it migrate from Open-O seed code and now haven't been used in any usecase in ONAP. -* Wfengine-mgrservice, it provides the workflow management service, now it has been integrated with activiti workflow and provide the unified interface to external components. +* SVNFM Driver, now VF-C has three specific vendor VNFM drivers, including nokia/huawei/zte driver, each driver is a microservice. +* GVNFM Driver, now has two generic VNFM driver, including gvnfm driver and juju driver. +* SFC Driver, it migrates from Open-O seed code and now hasn't been used in any use case in ONAP. +* Wfengine-mgrservice provides the workflow management service. Now it has been integrated with activiti workflow and provides the unified interface to external components. * Wfengine-activiti, it is as the activiti work flow microservice. -* Multivim-proxy,provide the multivim indirect mode proxy which can forward virtual resource requests to multivim and do some resource checking. -* EMS Driver, used for VNF performance and alarm data collection and report to DCAE VES collector. -* GVNFM, it includes three micorservice: vnflcm, vnfmgr and vnfres and the core is vnflcm which is responsible for VNF life cycle management. -* DB, provide database services for each VF-C component. +* Multivim-proxy provides the multivim indirect mode proxy which can forward virtual resource requests to multivim and does some resource checking. +* EMS Driver is used for VNF performance and alarm data collection and reports to DCAE VES collector. +* GVNFM includes three micorservices: vnflcm, vnfmgr and vnfres and the core is vnflcm which is responsible for VNF life cycle management. +* DB, provides database services for each VF-C component. Note: - a. SFC Driver migrated from Open-O seed code and now haven't been used in any usecase in ONAP. - b. Resource Management is used to do the resource granting, but now VF-C has been integrated with OOF, this component will be deprecated in the future release. - c. DB provides the stand-alone database microservice in casablanca release, but now VF-C leverages OOM shared MariaDB-Gelera cluster. This repo still has redis to be used by VF-C component. + a. SFC Driver migrated from Open-O seed code and now hasn't been used in any usecase in ONAP. This component is deprecated from Guilin Release. + b. Resource Management is used to do the resource granting, but now VF-C has been integrated with OOF, this component is deprecated from Guilin Release. + c. DB provides the stand-alone database microservice in casablanca release, but now VF-C leverages OOM shared MariaDB-Gelera cluster. This repo still has redis to be used by VF-C component. + d. Catalog has been migrated to Modeling project since Frankfurt Release. + e. Wfengine-mgrservice & Wfengine-activiti are deprecated from Guilin Release since VF-C uses build-in workflow process. + f. Multivim-proxy & EMS Driver & nokia driver & juju driver are deprecated from Guilin Release since they are no longer used or maintained. VF-C External Dependency @@ -48,7 +51,7 @@ VF-C External Dependency :width: 6.97047in :height: 4.63208in -As you can see in this picture, VF-C has many dependencies with other projects, such as SO, Policy, A&AI, SDC, DCAE, Multi-cloud and so on. +As you can see in this picture, VF-C has many dependencies with other projects, such as SO, Policy, A&AI, DCAE, Multi-cloud and so on. * NFVO provides north bound interface to SO to take part in fulfilling the orchestration and operation of end2end service and provides standard south bound interface to VNFMs. @@ -64,7 +67,7 @@ As you can see in this picture, VF-C has many dependencies with other projects, VF-C Usecase and Workflow ------------------------- -VF-C support VoLTE use case, vCPE use case in last three release and will support CCVPN use case in Dublin release. +VF-C support VoLTE use case, vCPE use case in the first three releases and support CCVPN use case in Dublin release. - VoLTE usecase information can be found : https://wiki.onap.org/pages/viewpage.action?pageId=6593603 - vCPE usecase information can be found : https://wiki.onap.org/pages/viewpage.action?pageId=3246168 diff --git a/docs/platform/logging.rst b/docs/platform/logging.rst index f9bd56e6..75dd1542 100644 --- a/docs/platform/logging.rst +++ b/docs/platform/logging.rst @@ -4,15 +4,24 @@ Logging & Diagnostic Information -------------------------------- -In Amsterdam release, VF-C logs are kept inside the docker containers. +VF-C logs are kept inside the docker containers: /var/log/onap/vfc/nslcm/runtime_nslcm.log You can get the log when the dockers start. Where to Access Information +++++++++++++++++++++++++++ -Use docker logs command to get the log. +Use kubectl commands to get the log. :: - docker logs ${docker-name} - + # get the vfc-nslcm pod name + kubectl -n onap get pod | grep -i vfc + kubectl -n onap logs dev-vfc-nslcm-6dd99f94f4-vxdkc -c vfc-nslcm + +Or: +:: + + kubectl -n onap exec -it dev-vfc-nslcm-6dd99f94f4-vxdkc -c vfc-nslcm -- bash + cd /var/log/onap/vfc/nslcm/ + tail -f runtime_nslcm.log + diff --git a/docs/platform/vfc-internal-component.png b/docs/platform/vfc-internal-component.png index 61ded572ab585f0c2f1bbfbe10727df3225f30aa..bbefb6de70612cc8d9cbb33754d00be9aaafbbd5 100644 GIT binary patch literal 24815 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 literal 17279 zcmZU5bzD?Y*RBZyQbTtQ3|#_(bkEQsUD92GbV)jd&I~E3q_lu^!vNCKT|?o;^mF2-Hl_ zpf3+Sv=n6?lnqgDqkoHPsJxcHJ6^qi@L*=?U}R>uxp%dHV!O3}eQxD&Y;LcyXSHj1 zv%Y6_Z*`(~Y-eWWPv_v~!s_ARHGUX_t!huhpRuw58GSYn3+MH?Va>=3F8iYM-)I=XHDDe?I>u0>UzqW)%2+xbD45LPFv*ss@qf1w3+o{7F zW3wB}ohh;QT73u03oCQY3v*{XQ*E6q`E5eY4<67zfXGR|_L<$wz%rZdo9a0}DXP8K zol|lo;M_YcYlfAd2^IHb6r3z$~$HgS*mSHHH(;oB#{Gow&q1UH0bYA!c6RHv@&BPH!#ol9M%f zoW&1=!%9Rm{OPElL8p0Gjc0U`jlGNmEcFfww%S|wf2r{df%hHj*fdbGjUm*`xocOU&hbX4*c;E!a9$wqLe3; za9U?A*hZ2JYUc(gl{^kMg@lT;7mZVlQj~vayLfjKwCQGNe!a(%1`@ubgDQ2~-8mGT zggYdhodprg=hT1y6R+%>>fuI5=9pLOu`N^jBiw)20EhvX8y5$F$%PA7A zAgru;wNw>9zP3J%Cs&?2*;u?b+u^H#vHpO5`wG_|8_NXZ18dd?YV=%5+p%f$ar};# zm*3>*lx=5`k|vF^0SQ;-#$gbZgwxdR4561vOHIK!e#+)c?riC2J}20)I!vH0@UMVz zKO=2olVA8zqvTMq{fPd^M=ZSaXMS-&O!L)l1_q)=Ty&j8xtzW(8SZ|mZ5K49LV7{b!tDjt&7K>HG&rdNZz~j5mZE|hf!v9jCR#QAtE@ICIpZ0{ zuPpE72ByDg@Qkr=&lgHSaahNd$I|Ja|Cu}U11_G^{?nxYw%P~sk*8Av&RK57eEo4e zgtIlO)KJ&=Ix>q;U2xzvts=3*Wb;^attl7s`28*lq`+S8jN^~4#uFmPru5Fq#K5mo zw5-=UI=dWtsXf&0IF;>$i3Ro8%FedQKu%ws>u4`csg$M|HYHRSpPruXwgGG!8|afL zOYCe^;Q&#|mfug@Uk^que$w(k2y>;o{#=2mn`NpfP88KJKG;a-2G|5EZXlxN%iw5iRF&pJD zucxGh41le#>-T=BEoGEZH@fEeli~2GTJM!=#kR}JB!0fF_ zE6tNG3_GHih>|o#+yWuVTwkF@bvCF|iiV=7CI2VjVl0uY4TkbK#^;KMfX80`J!esz zwL1zcjjJ`UE@Be7uK2F{*(U`YUJm%3<)_GbOn1%O5h)@>p8^6oIGV4{ICc^n&a2;= z#MJitnd}CaftNZj-YpCX3#w*kNTGhr%IPpo80UUbmQB0Z^vjOd$NX6OJRLb9d3xKB z8H&0pZ3shReig1CU(iZbe+Ye_K_?kHrpPE?8rgaHy$HJE=5xC9Ob!6`PBo1wQJ8#< z3rQCc(Jj;4D4)Fo-qkt&R1=0KbyW)*rQ^1_&X|Bvg2C@C4L(mSw~D$Tz)aA1hCkZ6 zBxi=!68&(bBm-f$lN)98m_V$+46f`@Y2jAJVoF|1dD%C^*-E>dYshn22z9HO1GL-1 zUKJ(GJz4c3X4^%}ITf;I;6mthy@TCj(Y^6WBm5!0Ai>9;`Z82{2P1Sf=>@wzf8hYA z5VxCi(EAMGpsmVS23l+k?uhnOZFv?3{P-D}GPmg_LhbqbOw;qc(12bO$IYI9sWVIw ze&IzAY-xQrd~;9;oTXZp;U7;FU$r3bduL$TFBU|$0LV9nU4(0MwI~9zRI>-tx-E4m zpF^qQr5I^I5le_}_UNDDp~!Q5#>4#=YbW57r7P5E2N5K9cSc}XFBG?^)z-M)&Y}We zyQ~X~E;Eg*RSiY7rrrQYZoE^ z$m>*L3&37|fWZj{a=hYhPVFP#djiJfQwrPX3*uXqrZ#bL`<50|pJOcf=+YWw0X?ZA zw`B-^d!aQPr0oZ!i*;yPt06y9l^J@b*22DfXHt|{7U1-wk0Fb)giPB|Vd>iRalHs&d z=Q&y-kUnJGucuw?VhJ*O^XXK7rnqKBPzL2&11mg?h`lS;aielboH&uCgrql|BEM0; zY1?+keUId*j%1Rw369e)*ZEPvBp?_8B*lW_X$dS8Mvb*3c+C$aYIjp0qncP9{c<_C zR~!^1&5xGbldM;NepaoxB18zAEZPI5w5U?ES-0E$3mhF6stn5UL*-I9!M_wqbGD;W zules`%rSCZ!mGo$VkLBCt^J;7_p$OKf{_J z+0QeJoCJ2|3t8H#R2>POQJiHKVo`D*+&#6YJw2uevW+=v~2lnDyk1$Rl@NpTpNWd*y#$`L63pU7z?R}0d7!<~(whO-(;d)>C&I46TbFUf4!QAmT8|O_;t%)o=ZP0F zmdtN44ywILxo}fMlXX`XTPSg&27dt{>1D!vMKFH*i{YZzu2=!zg(`^qN%`}1b%YRI zj~v@P@oXw7*)!I0C~h&`aunOEXYHizJg^Vr7}BfhC!vWXOb=ZQux#!OtE7nlwQ(|6 zO*)QbAN)58iC1!p@Az z)kZZU#Sou4n|F+|``i22><0D&-mC8s>mxYPU{uPd4~E7jSXE!UPTv)I2fbgopofgl zbNa*=uRRo5lwJBz&735NuszLoN*8)da0vVvs*h9mioq>Yxaz6J+&6`mqKb|04w)z5 zlA_-1_Rjt{2J+B}lTt>v)cy|K@Z9Lz zj0x(@3EGXS%^Jm2z&q_6G^FsZ?Q;Kr@IGU{E!Yz#%x)9^Cd-IT^Lq7V$ zXT~}*DEHnD7=HR%whE46Xys@C> z7r`sTaz}z_Gd^r>je9{Old+`L9D0X z=N@{QNVoMx*p6_Uw!?Gg@gE>$_p zAMUtvB?V||6047m(nlmRWPyAUJjJ11BU^1oO;;^d@lmxMV>U&3rfcsF=m?&>_EpbX zs5zd(CL-M5^kJ zg+r;xfN~Qtw%OOvOGLXbko9a5&{EhHUt^_EL>q-&l;P}Ntb45a5t?< zXmP7ZoF^sYi}qbIUdX0ZQCUjh1i#97onefV!!;2imEW2gY@I0!D2SI!D>a?`cOk8u=7U3b$B8z(K|yT7-@-c_?_&pNvdczEg@)?(Qw4Jb%JGAi#- zt{KL^MhWe9DgClRq`V>xksD*_rtcO}YkB0#N*u}{m0k=3U5aO^-Q~6$V!y_@n+)E3 z2K^Jxv!+ZtVgk_qtg;R?Q?&-eT`Op?fs*mr*VwVl@7-(qBDnRCsMQ_)M>TwInLy8H|kEU)fg+WQGr7+!+1b?I-VJ3+05b z_eGEBMwAeSe9}Ln=E-k}h*0eoXyd9nYLUyFW+sVTDcWGkl5p85E^)7nS!6?8gn|=J z-3%rjRMYaL*NvVUNEY}3`M*mx0Cj6m6P?&|JPv&>lIwW~h1=^(CIg;6R++5`dW1)0 zfc&V}?$?nfG;A!MrvF-8r&)_R>NC_t8{7h4yNYm{v$VNffog-yKXG_UHd}MQpNqs{ zM4Q@b>w2jzIVuk!2%B=VB|r1J>%@mQCx zKm|$HwcRHa1T*kXtY6aU0&N7ANayu*cz;}a_1_mbK;^R=c zW$S5W8lS^~iNbgU{6*jTP5>xaJ44-$zid-(=i+@J4>HzyPBDdsW_Ee1W6%poQ#CbK{{rLhpXi zIOxhgFXAtnss>6l? z8X^bye=q5p0Q|-IquI1=2KR$Q`W6u>K$IFP=gN9mk_))Mpwur54)7@81~;i{%c0VG za3ItVp`W&4Y>bCBgJ%11AG80zQ+HkPO_2LxrV&rhyVI@5X}<46;d>P5kpo143N$Yj zw3DkPF@~%=T}>m?Y$AaLW062cC{MVYYH6-(bQ*Ej80X(zdIDG~)?#5&|DM~%@^?LA zP}ju+F0Q@3fX`OWp=eJH!^qjsAK`m=1T?Z>*(QO28lasU!<)sVJ>ndUQh|Mge3e{FqpnzGhEI24O=(NX0YGucm&y=) zR)PAXLMUCDC6l{N1W=6%#wv>g%Hb{|=5eBFw+d z73Je@zp;8BJ+equ4GrD-fNy>XY+r=~Q8OQ9!x`!>k8cs$+YyGqtn;$PY27ux?k#1sdz0vMK@p8>F!H^LX1?usnjRX)=q?V3QxH~N5iXPT%W2Ye#|uZQdl#vrM)!Dl zXn^xAU8i$HjlqKL@9OEwZ0qiXX$}e0B%QQt!j1`KgZ*-oU`RsPMGBrl>JxxHOKC;r zZ<__gKz_#1K7H}`c@n_6tK+0r7V>)bLJT0gq<2^8eMcVDSufN*h!n7ts0R-{ZmADL z%O#8f4x%~?bhj2C!WdA&l@}e0mqzW#!NA%hR0R({HTVI$(VFk>25hiww8~zJ>jR_q z&UnADWj{iEAco)=kfZkl)dm@Vw1yzs77&vHxbD;H36~a?bay(xlBv}H;i2>Q=(sNf zN8L4F%RwwjG}mCrG|~~m(FBd3WB^%2lGhpJ$KR9Q=20-f&AOwzlC&N46ycL7XJ5M8 zdsAT`r;f9tu=Vg)=SbYON8Btw?^O} zbDSL6)Kx~Mq?i$C*~pf8#V@$bloo+ z!}8uvr@Ul8L>jKk7g3?0sh4bIxE|ZswU)u;(cYOo8+n^*?Y;%QI})zpHGanjMV7VbUD(i3gR+uzSo8RF8H< z`BgBkg&?i?x@bW;D;H`pM4a_v$+0zcw~3@=YR3+hI^k)bRGL#q)ZccES7>Y^NUGmv zIu?qV&A6pL*&OQ?PQDl%uaA}*0i&8Lvil35dP6;&4nD8PahOJoly%gqzSj86m*^P; zG8w&j7mwtJ>D!a=`-xbmKXO*6+nLPK*_&Qfu2>A=c}if4NKvJk@)5+qUs*R~(^8vY zpNNG=4$rMr1H`F-vraYskbt+Fqh-7U=6bo2Gy;f=Y_I_KPO?R*$pb(?KLelTUn_=W z0nTHkG*VQXP!7;|A(cHRT$C(`YRdmOysIO^6n*4=6#J{DKc!a6rqp0Kx+Is5Ak@;j zJVPpU=@A3CW6|&lLUa)c!=LKS3@1(t%4uFtv&h zv~jeq@s>}IbG+@88&ip{p%YsnStLCrz{t5_Aik-6=(vc)>}XlZp(w3#M>2pu6O4*s z;LE8Mb7C+MfOt}E&JfQrRj_aGh9jAzcuDLUToA0@gKJojA%Z!~I(T_lvi0f@oj;Ln zQh+Iv4^3l0H8Lo7if`=FWev-2fq`8^M&-0q(&BXGoJVPgdttinffB{JbiBki#TL?qVCruPWI}2W;3;kCn&1)uvXJ((sjd1&Z!}zr+@H2C>|zJ zyjQjA>J?7&_1qwaIEIy1RLo40IeYatOjwxJ&i>}^d-`(*{VJ&?$m-kAhLAte7QP_- zQ)^%=d+I{I;}9LXz3`d&rBz{S3DZWuR=2RTMwN_3Gy9Ika?|=se-ASXn9jQCHB`%wL@#z6xj4qcED#{f6+KTOP>` z3;N##JbL^gJhld>JqZ&TuUn z!?n{^t%|L5GT=KT00WvO!4;O|)$&|jGU#Sn#p#axhRn6Ai{N~{hxg^JvW3TPk4KQX zhlk&%E^;#HemmT*YCOh*OWHfyS$&&k!oHeBe&pphzt21wny*_*gtq-=v<(MqPM7LS zczhH3JB*t0WK$y*X}`iUCx9-e!x_iMB?FhZbaqMh?z zrts!Oy5Xz1Tg6l45rZTNFsQ!S;4aGqaNvjnL#P+4vm<3tf4EIs+*3{(CYIj^lbh`? z9XCXTtuvUu2)v}%KkT!xJ`ia=!a|?jp3-$Q5`&_P+s;d`d+86QP3QR4PwzULqgnmq zb7rgm+D1=ko;sNAbt9OIu{ZG1bK2PZI}xs7v3Q#lmfFmD}g zde)g~5*;%we)#gogLCjM;G&ALujR{q1fnh$sKyTMkCFl7FefQC5eD7YQT~>^F)4iV zwZ8w(`tQVv0r)p02CHG1mTtt!{%MDhj|VTeg{bCE1<;=r9ag8W3M$Tc?EMe zSbh?^JY~h|D@-~@Uc&nI;^-Y|@?X0zoWS@l)9l%I26LpY{b#2(b9uZcD%Qspuc+!F}|n*>_kT7KfJi~7%z+u3)I2eqoc)s_*qi; zK@MjeR4#N;8b-uiO~%Yaha}N8@l&FuYN)OFA1(kUdMoIP%dre@4t*(vZz!JM8Jp6I zKe-Ep>zv~UdpJD<$6`K$c3!&M&)oZ&5&ZmfLiFG^7j>{nG%Cyj#oMK`t!fD>4WmlN zcVBo%5yoI_5h4u$#Ujhtj)t%CLyO8QgL#ui=*X<`VzZmLF7SovvV>FUa#WrqpT|RQ zAKxEI{{kJWvx+4=|ddaF)@M*=hLzFsm{FczQIpV!-9jJ=JpkYg>}Zk{A01wINTR& zJ3Bj<(!aeH!oz3hH}bs=7ja10v}$Er=_gWmmLLTf2(9@e9x)Lfj43Fi%z25Uhp&^* ziSB8rY4^W&R4Y-nQQ$caA{}!oT2ruK|#+JnkYjEc%iyP9Hxa zT_KP{VBK-(#gP z?vEEN&lAI^<8r)(K*l+Y?!H;JI>TPfU)d2Ips=VY%fSTd04)-OexIJIZtkGek8vMw$XP$rFDFSnp z@pPWt*LF58p8a9&9v)uImSy;2uXJ=gwesVF?RZZ57n3dU^F)Ki!qFPnNK~j97PMm= zE-VT8*cGHf9v_PJC_9^lsQtQTW#z@*14BT`_gSw1eXhme4%iLlz)#~QvwSau7Sha= z%IfbZQoQ7XQ5H4W2g&Y__AH4D8$h10eP6QOz~zzayITU$5NC_1YRND4nIP)rCqVXM zp}vLpS~uf;q`XxW{r`9)JUNWNip3n>{lA{naowwTX)`ai7J20ebd8koki|$ z@^7reGRvyJ|IP>wIK*S%tGxK0lNM>haEaMt6Oqfb_R-aO|0X~*3MdgJ_ldfu#CUf$ zt=TVcYk#(BZdZRwesgqqEY4IY>+Nh;?4Qe;H)leCyl;C~^tX=M)J#rFa!32alHb^f zlo)BS%tY&$sH?|J03tGsvq;OeBosi~7$&#%e;Kqze-PM_+Sh=$5n62!ZC=fN-zyazW;dkD4bx z;=%G`+dp!jj{Zt#bspj*)ii8Y$PNLji9$ER`yI1+hy=|(rUFv@ z0QQknz!4`zZlQ_yH3n32ghfppDnPRF_@OS&p;)=XhnJh4vn1B;*pOTlifjP$e^J=LkrXVNAAhIzC`KAo&kc?#F*?=e%q0l)i}Y&0kg;f^ z@ks5D@pR}*i zVe|IDA@}I+_~TA_yB)7I;kNfPpu?7Pv}*?hpPC00`o-&Wi7x=lq6F$Wl5mF!pxk5u zLT!=uF?o7Q=a|s;dl-@p1b>R{sH|m7T(X5tq(Y;a&3{>At5SL}1qm*|u)59XN}7K@aL9M??rBMzAh_}!%wHcYEz z3fvDX6jAG+Z`;~|Q)!J`t^JEMzkHoAq#5m>f7bZImM{3j#4$S0mXNLQiTg8E3U+9X zTFn;RBCaL_#lkUOX4FGiLRYu1IC^|wz=OGm~QX{20>6}X-B6)0B4S_P)@2r zumPVMm(a9=EAyNL_q#7_GA%0DzncAWQxJ}jNPeRymOtSA(fk5k)4Lf}xDqxn8}U50 zKmgs8>?eA{XOFA!fV8$3V}63n0Q#!J)qKH*cNmkj;DH3Sw_UGGXB?))l;V^zm9}ew zlKORV8IpC-L3hcJpp$Xp@*o+>ROCavfpT%cf&Xv}!w7buS4l8dvbG>YnuT&J%{!m$ zCmsifBHLqriGtyFC(kn{_^+ajD;~uEVPhclYb9nn5O<$;igAqL-~~)Ndp)ywB}BG> zj)7FkaIS7mmn@NSmBC?lrJV{oeTWL#n%(EA9kjB=0;}mxPA$umgZZ9&kb{pf@FERI zyg^q`9@`rc(OuHI%a#TkCi9tBzJn4r0KrMzDi(5C*+VSfMZLi-5b?k#C$8;mYH`4) z2aT&%LWv{ZHAgzNi|o`dzb0OhdU_y=8{)JrM2L)R<9cT07%tF+%IAR6Niom$!kFhT z9h=#AH&t+^MV(1PM7LVCnmMUt)&|rR9PE7B@M#SRH75XY8lVF=(y6@G$gAn%WGGstX z)qFgjFs_LFZ}uZ#T}Nh&Y~F=bXIX6rlNYOl<3m)d%!IQ9ar$3z6&g+0k7#AG7rK66 za~e5jYD|H{6+|;^Fds*hp1Bh>BtG38rnE|$pu$&Qr-yceMozpLSKK)LY}iQOT)^9( zKY(N!&H&*NkUB3lh2nCqHJ#DZfm4dOHd>f}he#%AiDhO(vb+28#WiCe1uq_56rtzQPQy_p*p4SQ6^;_( zqpoJ5xONA4eNH+a*dTB9#^&aqnRaW?)rb#Assa5J;Jzm>7tYln2W_0wR(3Kd!T@d^ zdhe2;aVRoK@aT{H8OX{BhFn2Rvx5!uPx#Edc1N;v)ACiyN%`|t$CH1PS`e87CSwAY zg#eDypn$bH2rFl_LU>)}Xbp-h10d1Z8>yfKQD&+Z($jI-W&(-1QN?8Sew$ z4iJyu-FRkDx9GI>Zzs>=C<-tpsg-}sXM#g9R7(WvjeBR;0-Qa73_tx(<1=X%Y z%-qX`fh8nu4Nmu5r2TT6tRRGwMp}D^09-S^D#IKUfyA|4h>d=6)x!;?86~d9`f7ul z3JA+5P)z^Y4au&LW_UkWu2|`ekYl0{R6lz12=(aji=+TGcjb39S%-va%Awfxx|sZu z(dsQ4ByVGKnC%4(QK5rPx5CmFYCL{C zOL^TfOJMA8#Fo&gbA*q7C4>>OxYl1{ERt>heQI1N*7ilzOMU>?Wo1A~4fAM%u1?q> zWAS6;syGZLLy=FvO-!v+-xbvtGLhKyQ8MT#z2zSZ)$$$rf~_#zWW*N6INqH`CPUg*V^mt^08+vo67we+VSJMxrAC6feR1BJY#^OgN+GO(Uh;CIgPsG%FJj& z{9jLioAH#c>(sVo39e784e z;HCrdztKV99RzhVS09XaOZ{);_X!{jO*cpT2>8%+TXcv29w4C%hm!v(MTdOQ!N|Xj z8KLB$|NZ&j5-?-gZzl9(8>fGLHg&T6r-u7~8vJ#9$bfGa9VaPAnrW;Wo8)%6_9z3Y z?9hD&@Bzz2UcG#{>uT%j=>OW7?6@FZmSD9rcJK?hNocif;W26pG~a``c(dwW#VqR@ zecTIlXbBl6tIMYfK0`{%74_lkb5fznoaz?fMbA>Rc;6An>r+Vb)?1AQ!2>+=jyzg< z3#5Av^C!E$?{Pi*v+>}Yt11*$giN-#6hP3~|BczC&Ik3ItxQd9NWe$caiBX4`%>od zO(pD`c&MD}=jkLVZDLj5N6=s2UB4_Dg=zhyk({Ia-r{7DexcGFl%b&`$SV~gAjGSo zBh)JP0XcQt+b+~q3Jr6{T5|5wZs=`o6(J9tA%?tu>B9gWo>-9r&6k?Fd)s|K-oxi# z2@1Mx%fF$V$H&xnY3p9aq^QWs8dp7T#mIw+9uAi?*hyT_`4tTRhzW{>vAi=h0{QGP)9ZYjph zOs8p%$B-f}1D^EV(1ujh&Mn{v_(oA11yAkN7IE z`=_cV%kZ_2)|MgS3mYcav9}OXUo;ysgs~^2pPv0+s@)`#;g)9bM5bwfIgW zM_74|c@cNp2;uNMU-`EMIeXqaOgk>8VCt~D+Y-Dpev?!d{G;7R?XE<>B*g)k<$Cwe z+Vygr`+vhPb{3Z9z&Gb}4_f~$$TptOl{>4d;%iX9{OKC6zcM#f;XT~wdLL=EGDpy` zIU(78FTn^M9^Jh(yM8>jnJap-vANvhdOx)}g%3R3tRZ$U@wVRWw`gTl)Z^ZfIf+Q2 zdW)yuV(N2tv41Jnwm)-!$+D&vMEmA^ptXhG{UIbEDJU6q+flh*8igRQ4l)xw4UDtP zEAGNEP&F~17@fk^HPN#R%yr>cO&cDOcv*XDy_uz$)`fQ7O^So~=?PWhQaz2|M?Rovb(RrIsOeZy*cb4nzKi2=4-xpe5U$ZPt{w45LrIeOzKWSX=iq4j{{dC~U5;Xs>3k)}&!M znX67Z*P|xsHVa?SQA=>R(dUgR0;OI*a4bLp(AUFCI zh!=`{`0jM<1&shnGyDvH4x%@g|3NNQQ_z5q*|F(!kvVmh3}dsGrDl{-PWhZ1I%+Qo z<*u}8b5wc;Ol2~7Ezs4cLIV|}@=86_9uU_ChKkSQIv&ZNvu6KvFb4%@$Qi4rdjag( z2QVL%Y^?g4#(73n%4?Dqz~sE0l7(FwHGPx7xlHWC9H~zhh~9Z!_k6ZleF;ViyJLV) z>@7ktDIZ5Cd5sFhZg*`1HMIj;LU`7+ZTdvty-g*ir^&Tr-=>Yu&tOLg#{-p$O^g6G z6Z_9H70@6vzo;n}`bK)3TwEDgxxG-lAS;710?Qqoi1-N-0{b*U5J8#bC25pd!JOVw zP+Ty{WR-KrkxKOMLAIZ5$)MqjLFyz1n{xm`^%K>Hff<+4Pb zDh$cUxVA;#7K|Y(;MULyeXI>)@=7ZcPa*J{{)B}|tzliGM}ZVd0wH`0ymJb|XI^#b&)?0#_GqDsfJ@|R_`>Q)A< z&)3wM@)Y&H=y%@xK6h-dBkVCxT`4f3q&GxGoZ(p5Yey26!Z6-hBS?x2Ix#~ehc_qnlX1QFRv-4s@%NwLM(e~ z+WhxS4dYRGou4kSJY((1T8BiumngLi%^sMaVe7B9X(_5dwG+$<=IOs8taAwQVj+4p zOoG!_;r>b@&8}*0>Z`w#SJZ+RCiK_Kac7{Zr%w5&pG!7FCBczDTeHL;H;)~nqqA)q zB+R`ymbI)q1>Bg4uKtKpuTrZh%tvB{Fumc*r+Guz+ugy**o_>tM5@Nmb{ayv!upN(>3k*7JgxuyaKTNUs+yZ$g{QI32E)k?0<&QR-9 zR`N!hGFEiT!2T7HfMWx9sFu4vFBz7QTv!=U=6KICsD8HmdE<>O0p)xz7`DMCsIG*O zoU6_G6QTY#`QwqbK~i&Gj&ZR@G2zPyWGjKR?1zVF_fbH>FUzl%l`r2&h#SRC8{@Ma zGL`-QlqtvGN&Av218ntf#Dyn6w)QziJuf$jdZ``aTg85?JKn7Wao;A_r}9@efW6Y9 zfsV*muaNQ!eKn3U%>w|yOc}+e#P%|&=XTFZi?%b)Ai3%9j&oECL>xq|xL*_t?6@aMn0`H8dh}6S#TRAwlRw{V0<@CI$`4Hj-T+#cO(kt zGBgQC3T1Kn`HVKN0!OgRsGNQq^weaQH(1wC0u?%ajCk0)eL+TU%1w0(FDU0saz=i` zf424KX1tM{B~T}9C3*B>0a&5KoBCw$nViGwz;p;E?i@Wu5GtUN8L}v38&lT%^1OLF zpuk~Mty|#o0jPICK;`AhIkqPWY}zF`T8!Z^!G@kc2~uqT14^`?QMsIf7&pg~iFqC8 zO696rtM&l@v62w=TU)04;T0{_x#ub;O1CiaOJDuQ6FbTf%V#IC9Wl@{ovMm z(PZ&tztI5fm;RT)G;Vb}Kk^>(>sv^*WVxRI(7Ao__tJuPti6KB_EEyLX^>{Ij<8D< zjGVhNl@jf_i^r2H&TsFz{hLJC94#Fmfh~UsYzsnzcujFvje1?9h3~d=JHE|7U#dTY z8nk#O2__4Qtr~ZcUq1y#s%DpFI>*qilvq~4tg*`d&|JO8SH9v@zdjADYbBnClyaUW zDSs_kJk#R?OZuIT>89PBCoFsP5~b+i{23a>H10~dNxW6?-cEkLgt2PHO5TcFNj>c8 z_`;u0w^r!*2n*;A78DX9E2Lt)!%jIiT_KQfh{TXxGHEWL#?5a925Z`nY)xtMF1$6Y zV$boGAp*&ociW&K)PLUb!H~8H;SEQ5G%P{Kvnl=;Q2bv2p+*3$tNesU8UF?D?#7#< zfiI0x0f74=G*+)jB?Wwvz`hS8-}@>5zu^0SFt{lA=FNX`^?#B1%^O;_*ngO%8%--+ zgVo(N&wY%+Fm~)lCEBDY;w*_ zvacXY_4JDaCwofp&FRh(S(%xrq!){}q?BmuCy6HP{ZBqw^w1o#l=$S*Uhh(g0Nf!o z9@p|bl6JcNKkJ@VQmat-h#k5O{7QTO!T%SmT^Ann1C~CJa|ROUAbQGb`hGD7ECgF; zF$ftZH#;r#1$L!D2NHlzLjazEu)?!j7$gol)Zo?qcN--@#}~j3ESNRJ0=VR{*~ym) zlpa9mDR8wGLQYWtoo8?eXe>zMm6S;q=2`E*Far-zSQ)P3C$kcI