From 4d5452e45b518dfee08edf4067b7960ec110eeda Mon Sep 17 00:00:00 2001 From: Michael <michael@buchmann.ruhr> Date: Thu, 21 Apr 2022 12:43:44 +0200 Subject: [PATCH 01/10] Create bom.md --- docs/report/bom.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/report/bom.md diff --git a/docs/report/bom.md b/docs/report/bom.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/docs/report/bom.md @@ -0,0 +1 @@ + From eee99a865b1d975b7a8aebb898f3dd213ba60998 Mon Sep 17 00:00:00 2001 From: Michael <michael@buchmann.ruhr> Date: Thu, 21 Apr 2022 12:45:56 +0200 Subject: [PATCH 02/10] Update bom.md --- docs/report/bom.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/report/bom.md b/docs/report/bom.md index 8b13789..89261ba 100644 --- a/docs/report/bom.md +++ b/docs/report/bom.md @@ -1 +1,6 @@ +--- +title: BOM Generation +--- + +## BOM Generation From 30e6f63810c35b699ee5f36ca48ad87bd684872c Mon Sep 17 00:00:00 2001 From: Michael <michael@buchmann.ruhr> Date: Thu, 21 Apr 2022 15:31:09 +0200 Subject: [PATCH 03/10] Example of BOM report --- docs/assets/images/report/bom_example.png | Bin 0 -> 28803 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/assets/images/report/bom_example.png diff --git a/docs/assets/images/report/bom_example.png b/docs/assets/images/report/bom_example.png new file mode 100644 index 0000000000000000000000000000000000000000..a674631d806b21b410b95b2a9d6092ff8d87e785 GIT binary patch literal 28803 zcmeFZbzD>b!#6w?L`f-8Qju=y=8F!IZjc(%Dcz|eQUX!~1`GiKiGk#((IG9}AuzgQ z#E9qM@4Bzo^?UC7e%;q||NV^DHqP13*=L{giFbV#uC6LiginnR0)dDWUV}A3pgX|* zmd?G~z#h9fg=XOCzVmB+HxP)p?dE<fk&~DP*oo(^pdyF2f<uYVbkBjK@d2=l&Q|-4 z`%9;H?<^hNflUzTrK_c>yQRewFI#t;C-Mp^>J~hfcp%UdkOEj%+k0wjR>nOQb0u?? z<Tw4I;ia5(<QfxyxauPCm%Dn=|2$opby&fjA9yNE6)B7#Rd6rk*G~bn#CBQmrzo>5 zb$Rnc?EF=oJ{6~~iL5cWI&@wyigq17pS)NlTD%;gnX}2A-zC2(i2p{zKcqMRJi*+$ zc`{@8?`$;HG)P)|!*ZQSEc7uK%sJdqA~VfKMP~BF&7`CuRaO%kir_Z<SHq=X#;lRb zgaVPYH^nto-KdO9r5DIi_j*3XxIgs!wX^)~1Xc>eOy!4MJ@E2rTbPyN`o;QAi5u~x zPI^EXP@skEuz*rTAhzeQyo0Z%{)u8)Rx0%AVV;|M$@nwItT`s(9F4t2^c7#QTo+R` zF0TnO3ky%6ngrEU!9h=X>-q;=_8LBXG4Ye7VTjdhTMyPB4T%;X3yyZ@y#(&K5~P36 zfdrYGm#pJ-J&|;Yvtqk2#%U}ko=l{2#XP+W0=<uUib*f=@~_4&PVPin$Gr2K^swjm za`NJ~)gRMdF@N+qtayg$WT+Sm<yPy1)*i3ya9fY)9w*6!rly)u?6Ul=RI~X6SqLL_ zB_S#4;C|$M6s1&=QtP#T&6Lr2s23qFx^;f{$T+CJ=1ft-!EXG^4=e&^=vL;|iSXUr zTar0F+4&08L{n%~K<~$R;#~-f>9BfWptz!BT`^6ZVC^+KTdj-rbUKSd99gH!s_<Nn z0)LGYJ4ZJWj5%i3mvczj^eAYeNM>{PU<HE08DdfiM~h-M<V0Y*{GnVbai7BK&VA>m z0-%;o6%@e5uZ}G|UPgn>+u2mF2Bf<ZYoT03UAc!4`hCS`NXLS>rhZB9)4gdY25E1; z*862vlMu{)Q`>VKIF+&&S)aesvJZUKN46L@$z;Ad<<MuAegNw0fkhvk3ba9HM|AX; z#XPO7%4)cH^I!GdFIO9?$z|KCpG&J?pcfVj1V8eqeN-fgaZrlKbzEr<4kclb_UCIo z$TAz5UE8)kynykGKZ%?B!gk-`<;o=9&8ut%S2dwrt_7ckE7yVT<di=+3PJ-$gJ+g+ zQw!Q+qQ~B{*RvJY>bpJjKLx(t&YNp4yr@ZKjQ*N(hr0;XVY~*q64jL)RikhhW-LQZ zJO|<V68aEY#RETm;YUNz?xyun%fNwwkX6zkLn0`Mb=tYg(J!zpPBTZ7{wk@&y*4-p zx$4&H(a*!9?8%eFof{ZrpYN;z=h79=?%PIEB}cNP&#y%*elr$B;v}2pphQrd>57hJ ztV&TiTlFD12)CFQo(<)SzCLc}-axBA8CyM|;<Bu*01CTsS=U=0;Iei`s|2>)njTfi z)^_Y43XxFE3%BNwk($gP{6!gIM7_&EPja=5y3o=Sn=es7`ci2Ka*v*^uRk9&E!-K= zNslxT^7`3d@3`)NJP?^m;D)OahXY??3(sx}DwRn_BC&6f6+b*eI*GLAHG}*mcjV(Z z`#H$eVs{%Rc8Q>;+1>AOJ<fV>-+Q-dxvMCWo8qq#2mY}1MsbmC?{4AK4b;W#54%im z6Qkb{g!qnHD@At%*B)4bHpKL&-$d&;H_(s#Ca1hqmxf-L*GY^jW26nSp1MjY9!W_e zp(>Vm+wICU4+W+l5$<}{&1N5OaZvlsW_lIb)>b-s<keM*PJI}ff_VA)xX090*QcND zBE}j}{pTHH&H0rcNT`x>?qjEl`B}%4A6hAb(P+-}Y)3D<NUt%)l)K0rgiGwU(28q( zT$f;D!>C;nCvS132(n68g2vu{8|4<$qFOgNCyiQ{Pgi_e9+0|gv)z*>d)D5!Zb`T8 zP+a2Zup~hRbiUczof7vW#*)#aMTzcQ)ABRd3$?*A`)p+Do&l;jW=V6`rzbr8)vjv4 zuzV?P4`ef{yT~D>wduI5K@&kVKi!hRec19@PFBc0#X6i#WswcPm5(s^YvT8PKYia1 z4AHtRWy9%G6I~eM&!PR_aa;|!4;N{hi|n$!$NdIfvkrIqihbelY$Lch3mo;Q&bBME ztn7xohg+L-<?Fekw3baDfp^)ex^|c#<!D?D$v~E`<doS3N~hhpAdoYX$1Pq&k1H}b zA-3aB&)~c6*3}>z{7qb;Gn7}qa<Fq8|3Mi{g|H~AyLV|2oA^?O=@4q-%}PBs(>*ZY z3&zG=Kbo`Z&xi6nFdmU$iZb%cv8ubOIT4Is9=e1KIn$DcM`zfi2_!bNa^4I6y7mR! z$)<BSbkZ3AQ^znLIrH}Vv|c4<zH~h;3z}lh`x%)LbanN7aIc}1sj$}6h79QAe`^?Q z&yYQKnfXMKcq%?M05$8|R}*Yv`FhBLOhz<NoKG1=!K5(Xy0TZBqjsXowl>zThR%^y zi48nG-aj<-jpkMvn$zx2<(K-CBJ~beq28ijQBn&Ucz)Rx=_bHHnzOsr&zanJ?r&Oq zM{(Erq`jOq=;C~-(WmQR&y61FYhIfLjYG2ax<X1ZK{RtNTeyL*YcJp;apq#5Z63W) zMaHV2GGff<<)4ui8ob)yU(TCQ%=Or>i&}zK9xQrOq(&Zc>S#R_gND5@ygu8%8b!W0 zXJ!7%$-A~H1T8IVf|tMVL9kaKWW3~kc=Za3v^^9S-eirK3<d^x`k$#hRAC+QN1{dH z44*V8EL|;j(F`3Cq@yl*K<ite?`+T#IUN!VxTfif$ofYuG=KBA+a1jgpQp#Dt{9iE zY>~T`1Wdym<3T=y<^CxR&Vb@6WugSHUeuYv;JULS&5p61rS+a!PzJ$$o3`7=}P) zq<#<IRe@)5m58b+J&L-&-W>`<TlU2X*;i|o&I?wWe0IXlouI;)ZZXIL{kP7wl84Tg zRunqgTcLY@(O7#Xu2`kEcW26~kKuFPL}gJIjb(CKaYLR-8RZeBy`!V2r>A3JPJxLf z^Ewj?YhdL@+Bl@cHU5d$qtj;h4l*J0nfQ~_d`q!B-{J4E<3)CHWA(PYsSfALESG#{ z;|4WDyz!q9u<g%X`48Bv9fk5vkAOLFCSR!na}2-WJ6zt<s1ZAKoSR|Q*-RWGX|2od z<PF4<nD9pUQ-@6A{f@Aj^>#9B%@@)`9j$PX9WI}}?IC8c*Zj_YyZyt-7W%AlnX_9n z+A}nB5AAdv_%p7j6wH(iQICHuxEYB#2_jZ}d%Yj?(NL2@;VrvD7T>+kQtzxPQ+IN| zC#+5WY<4;!(ZSbA$(!)X*rqqJl`Yk~Mi0yfK5n>-SrvsY{yu@n>?W*QhIg)#0GBVY zz2T6rz1?cKI=diM>m4%oN24TNl^}-LE02*v%gCnI;|zYW$muk~Wq5Xp-ox$04rE9M zs)7?TOf*|$;9GDZlA9*i#Srg;T3VtfjXJk+R-B!Ft-aK>&{a40r^i|iGIy05X@xM0 zxh+h$D^26TtyRPozQdqKQc_(#_XmJ3b-Z)b@QjiYw$lK}&GmFgpJ1NX_?JrR=|kot zUKrN3VyJZm)1C8B1}WSt{B+<Hf0yF2vHQVe>6d1|EQNK8eIVJI{Q^s7oP8yZce%By z-@<E=HM+o?-K?)~({QdKo@^Cy_a`3o9zADISmjWP!sseB?vwr*$!)9=m(j<K=hdTz z2ek)tQ&*zf&n7khjF6zv_~^5oW5n;l!7%{+IwP&lFR$dQCvC}C6%@HT_gB3%`aDHy z&i!CcPD)D&-f-*r){pTCsOo!;Ri8yw!%!jZB++Ajv${a{J=He<3tf%+sMu~0I;c(h z=JB7cJOBNS|4(oJw-5OLkNiK?!2jv>f2+=a+xWjf@>J5_Cnw(zHCL!tqHYHQWn`wL zqy#p`xPnfrCH+tLV5Pez*XLBNd?fUe|2(}7^4E=H>O#A+;k}Rfl`7(Ng`K~)3ibCH zmFxX``^I()BrQ^XddGh&Ltk<lXtAI@{nKP~6Eb;?w8cj^t*(B2f@+L1@WlgWxss}n z%R9nSj_WbtVcDHKplYq+r^-B6AHUn^4$B1W$6Q+J=vit|fE9G3rt&vT3+|GF^@Z#l z-3QT<MCk>^ud~>?3v99bQjbzQGFJsRb+pC>5gQ#zcE$H#P?kvGRoJMcu_c60IO@)T z?HJd~aY58d=1TD9hDm!@R~PV&?*{D_Jq(W^u#b9`J!n&e;OT$($gJC5;!?u(cQUh8 zU^eg#-k)rjG+t3(PQtC(MCt@R_IY{UMU`~O8y1#}Wf|E9+Ik>Lt7=6}dP&i%)YD4} zxprSG(IJ}AY$C`8um0{6>T)r&2!fudj;SFB_>byppQFr9NA8vIurBl=p@z@9-E_H$ zSqS&@1Wr9&ny67lF?nTMA5A8zn0LH<;I`#MU~Y9>y2r|7)Ui2U5)%_s{?hRg)`|u% zzEq-+Icssl7%dI-<M$+#*n`N_N$0i)0^N-A+aZz~nL}c~R;r>xZflsjl>2!S4b2*H zJ)lfN4j3G3_&t?B3&Chqm9a;0q>>0#1yvwXZojurPN>mJ?G3@l`Yc*FvxuDA&zJbC zy&bM?tbdkmqZ!Q@W}aYXSIPq<2go(z-uXq(!gwMjJ6-F4Jo4Zjz6ZanqNK<4Vf9Tk zIa8lqNQzi+ZNa0yCM1#EvY2Xd2sq)iiid!<b3aZObs7k?gc(v<4crYmSumJlic^jF zFfkW#Fsa~PC!I0vR4h2qK-Jw{(56lS_b^qvg!-lFsU*@6KOl00LaNgCUPd!7;wUUn zDkW(yR$V|eL?}HgdUEx*&bV0vPu?)9)(>@q`d#cxd86uK+ZwWiZCzrHzhsI|({!E0 z5U`Hg#z5ZGoi)>t3AfvEeXv<q!z%XA7`2F<FC};`3o>51f+z)pO2={TknCS$BPK>e z8{B#NiFdS0a7BTVGZ<0J-zV*K3s%A^b=!Y-70+@m$mEln-|r8^kqnQgFQxT+RTlnn zFBz<#_GOVd|DQ~T?+ngci6Mc%&B6M;7N!bjzNQZv{J5IlogG+}%UsL7<z~!+l*lWa zn$9A6vejPO7{)9O*)8bGF*54JzCJ(M)tS~TWF);0U5ZM|{(+xy&uTVY$n64mKUur8 zJajyIL_ill{9+nmPfN-k@j&VN>{&A@4(Rk-3a@K{?%`KOD8~a0iVpBcrUt2}oME@6 zqCO_O@3=c0rLJ_lb#vPs=!f$~gp;0bDbo&U@G6ioUcHP$xyrUHyr3Phbmi{Zmt=N{ zBP*qfX}7(5!i1sZ^i)|2V^d*l)IqACIJ`Y9_YwzYnQc`Vf=>0j_!JwjSI%8@mOIBI zpM)(k<p`?0DW<|PU1?3wJMKDZ|9wpIScgHRs=O@o;nhzU9ALzF-zw9XaprcUR$Tpa zt_)B_1f@iBf6^)?Xu@noPd!(X{>&=}dQO(&9V>_@f1(q<%mIV9MqcQ9O3sE-V|OGa zQ8eo|K2B<<{iUE2X3TzBfo*GAE)557z)7mUKnn~^A^-e&*4N8dZ3L1Uv?L9z%n+U7 z%>j~0f1tHy2`bo}m$$j3@aikXJs7aga9EI|?<4^&1pn$o2&;r!hNC}inOg^M`cq^K z(m#}c9{V+)G9q$QDA8Kq%m?6!(P3G&M{DCrt^4J`K(icfuAjxE64v4If-Da#*-0Ak zvy|$9`;Sb}7RjA$e+dskGyUis!Sq`BM3%0%r%%W;WF9WS+Zt@Mn9x5cKd~!p{ot0w zqIgxv7@<HV9~YeOX4W?h^M4*t!O_{D&!gEb>zn0L>eBX#UB3pP)6UP2MYi43t+@K# z!{!5#ugP*daf-cO;~K-;q#-at+Anw4`?zhrU93Y*c5oFed^H}#@<egOvwdMJ37f&A z^?TaoT2-;{__~!^^INB>@PkfMcjcCEX*~1<&W4W1dg57pqAZ@L&L5vB_~4hR?RFHC ztII;Y85LXhzQ%e4TogGh`_xgrQq(t#4)7X^e1<WST*n7F4=jE&do1UxQ7Ara?3ryf zI%lZ}WjB_T;O*-EDp{Y?%3c7j+gXmw@a1ky(h^*M866<c*1yy7gc(0V^V>HeAB5YM zxHKh&od3z2_l9oeCm2d95%F}@ykT1>LFj5E;q!L%KBt72t`Z@7b-aqW_Ht)#Wy8Vo zKz!9PFD`FpYidlRab9N1mN)T`@MTT+nw)yNVsu2$q#npqgo>ao0V?h{8+h{8{#|hs zpSKeOs0lB~X`X!+fhK#Y>=IasLU}p6|3r>L(mDAOQjMqKBP4nA7rwFCm=|zYbWZ== z;9xW6{Kbdlp$$wZ{j|)49ddfxGh361gG+E~+p`Yk(af_gWaXBSVK_Y_Auc{)klI5o zFg;N>GqE%G*3$maCu?Z&Ro$$kR~3mfq=j;R+N*UUsd+iFJh9{GanNslSf3h8vhiHn z7ik;4h+Z3Q(}vPg?Rq}UF?M#lvZlouYUE=ZQ1fL159GXB>f}~q1UH;+c)PfRIbU>u zr)WP2naqhw??wAM1!NjQ98As;t@4KPn=)v{$ZZsfOjX_Ufiy=2Q=Y*1gXWck@0z^> zJYK{+5}0oqfrXPSdg}}IpEx@j03Z-_mfIY3b+)>^yxbg&r)R6Cyu|lK3raN~IJ%6R z-5(D&P5AkdZQ;2d0GQp}-H-PEv~u>vv1m{*v-jN3YMO0fAuJ$N{n~Fd6-w=AsX+1S ze!3nTRSa%*oQTuh#pTKTy#HaJ_b<8|D0)f@;L{o8#0f4wz{x=iZtsDw2O#mkkD!c* zLR9ftU#bWzE32L_Eua}o-?|LE9xc?n0VA8{ejMe-+?c-JUjO}eDwCi~p$Ib2Liy0< zvGYFO>6+O*Fylv=%{N{hm+&@TkjdQ#?bS55Gb}6}tn{VwHYEF|kqrEmBK;pezyhBN zdVrOtw}l1%J_A@4NP6}!XaPR}u!u+D4o(-|#Qk{+`Y>JRn(%nGy<l$+G@zjVlP@m{ z$lE;J_tRnd>~U=OvH(@hvTpDadpo`30|R(B#|q!!<?s<KslNQ1zs#2s6s$VuzJG3Q zqD5cXB@XKoqn;#@Gd?<cR|0!z3t5gW#W|$#e2IZGCkJY%cUCuZUp3B}d_S&nkf!Lz zJhsF0O?*eNw*nmPebK=SYGN+AmNnK23V>2rdG!6p5stb&j<|X&LX+u)e`2fDT6@J{ zIHwHjen<7e(8TBB=<5tvNHVz5rlsIO%V@sNvze*u>S-T$iOp@&9ECOEZ4(NSqmQ*; zd<k~=Fr=jW5st8>;n`@~mzVn_##DE9d1Owr*1cCIGoYf1VN`RZ>&peJf3yK{)PmTB z=y=@PA%{-5azCd*QQ^14s|>Zr6aA(xF0oF++qxESc5AwqC|d>Fo9CfVIa+uTxh6@J zX<wY>kXVO|Z<83aKc_yk{WC5q{?ppbAI$Ytzg85G=ce#}QPE2Dj<(c~reYd(kehUh z=LR%TIL#LUn5-h0LfAvD5Nq0_$qZit_vHN^qd+~5wmMRV#}{xLQq_dcOZy&e-+@%k z$lj^5-`iMvIdy4lr4O|ftDz^2HPNCR?h<Uyi`5!s0%W^rDoTOrG`O#hTxr^GB$57t zXf(M+EAgJi6Og~~i@Nh=J`>xiDfh8IOs&);iXU@@8V(9|Io;4PbXpn(kmXT9g+~x8 z`K8O+f;CUk%9(G)>;?gvg@CxL4u+eHseV0%(PS8u(bNWWik@6wzDWq0&spl^=qcms ziO`YJYW%`;P%znR)b{WA$vRPXYhuS`vS>^>F~Ahr;x=rmg^tRT^4*UV{ozre%U?{* z>X)fg;u@Sr?)@<4d#liK$s*8ifgTdv=%pJ8E{_Tx9(Lea3Ga?VH3!M3M#_C=?=LC# z5*C?`%5jAs9MS}*M2i#nbPw<#kRl=?65Ge4?cGxt=YNfhHLjNLvdbrJOG>!=c`IYi zF9U=8YW`8qRA=KZDt2;kDDuLb8%FwYa79^ddvS=FB^%|Jl?FJwS0G1|c^_y&X4g-! zv%%@dXS9?Y+vztqRB(1+<Gd3upEhKgrmqnxo%AfX`e)VPdIe1+n)Z1PdV9yYRe0r5 zH&sOYWKPGcJXEQ;i3OX<x;xNAGk!K+o!jqq%4RDkn9S7MET&iTzpObh%bs1Y80W~L zMO)EGWZQ2Ur2J6ldbpZ2KAny^KQICic>U}yP>}u?(fCS+@p2x3zMT@e)!YFL>^Y{h zKXuvBKh)Q0Eum?=6p?N{QBjyzOI?vDjM)d*!_8o&t2qti{H_-=Nr_M^+0ekrOITvF z#|@W74>H{~@}%ZPrh0J^!pWh?$$>7dG{`TCzqMDG`25lldvsTAlis1Ek1P=?5?ZP1 zrQXg>nPPf5KKUk{moL6xzaqGUOT*T~y1offIZ2DAnvxe~|6>ek3=Hu1Pos0imOAZy zpbxxTl@yuK1MivbYj3gH!e~BC9aH80l({%G_Sn=8xEcwm^S{#etlJs}nVI5wL#gun z6a(#+*C)njje5xikb!)Y%ZjG_-|C)sJ`gy=!C(!QaJ#vmoZM<!CB;@j@xkbh=CgSE z%GEr#uI3JZN7wWjLr!vZnck%G7|r+k_P!l&BWAUbcGGviXN#5vo|nw;GQ8_uO&-Mc zcS0z)^$KIkbY8`}CiV@-av!P$3HCW}iYL-)n3mnL&Yc<^s@7d|)Xfz>-CjUGA5flp z@k${&^F?mNv>~U!YDgzg0i>h?{{Wn4b*xHbwW-o<9vkpMX|1;I%l9w^QL_EGUt3sN zWpF(cKbE_2>ZoNMUP)2c9|@VP==U>9)F6zibMEtzOLw1Kpir?Q4v?vz5%vrHVrH|% z`cS`Jn?P#dn01<M115SUA1AjW8a;@>2T2py!pMwIo7@-9JH<xRjB<VY)ZIGa@je&w zLjrpG8V}i{mzpWZe-nhN4$~O9kR#V=A9}dGp~2xk;bUcgAz7?#Ci~FuLsHE@J?HtU z19^@EzKCzE9Gc<~@GnKptBDg99WZ1xkpRPIBW$uVVk*?kk*h1}Fgb_bt;ucJJc+1% zp1+9GnqWJB*pJA;KdjU(9JQ+y7N+i@Ue&A2XN?E(Y+{0JS&7XVAq(MQi)^`bJto(e zvn9j%hy*6Eq|=1zTNq|w{#rGGv)67+u}>2~W?9LPG(?g16rFCnYmIF#lW%^x(kj`y z=95^)F}2<I_w<A;=TouXCk+}K3TJM4`4F_1vVa@t?2+eIJP7DYZHJSkTmx<iO!41Z zoF@xKd&o2tgGJd>efLSGJ;`;J$i_XRl{h>0?ER@b@6*X#p4H{$!EUb%?c>7!oDvw~ z#_{b8?(EJ7onVg`@l!Y!M})52ZORSnnAn!Z`uQrtYs|+z$#hnEbUrGi9laV|uGS@Y zU4~z0JyzAN)Nl(fw$I|Ya43FMfcVDCYt)B8VsN98YPk9j!@@+NQkz%S)Y^E~CEvzo z+1BYDyv7P$7cUA5j-8!D7Jei#iP-#;>KLFDCz|7BgwK-10FATYU}SN5LD=akY77G5 z==Tp7ugXyw$>}Q&TZrScv_TFyIAB)m6P2@{%sMeY9M%@SyJ-E!P`^incrM5IpsQgi zhBB9Lji@INj*w@Eni<v-STOJP#d>G#Je+R0)ZV1_EDHVRb8ca^pn~RNwbEx%2$_#K z;q8i(X1wTta1)`;I^{`zJO&1hM7K`JCf&RF8(Xgut*wOmO%&Ixlk-nt59*3NV9RQZ zx=y80?<=M05#k_=UOkHu?Hh=JI<D2!F?EwQXx{=oC`^783mGYJ>P!<QBxj7H2%q#4 z@Z!>%-;aK*Ps;n4%fk&SS%*eCWLRiXb(k~BSz%_!DCgi!u6g1p{4%38<HkS*qiL~T zJyof0BvN-n3TZef_B`2!1II0nNqx=Ng+)m`ke9V9iR+u_y(KSU``h)Q6I6Kc&D!G4 z3YdpdQv3A<{T@LdR7lc8-@`H|O;UKIfV_iUgIfNBz2RuH^|POS20a8zpTdTIm8XXR z{5&ko!rn4Ez{*yaGfYb{UetLT8Wcj4FXl>!m^!#UZx4f=eOa;7u|18YN(mTu^bLG~ zV_h$ru2uNTrO}qU?}-9?xKYm=pOn-RYR3MDAP{4mu0bLCD12lQsr)~(06c}Gxl~{m zTKNy-1?zD?B%YJ**XE$T^xTK<lPkvmw4}xa$|5UzguC`(nZFMyQJ9Yu0uoduCCTk; zBq}9-rg56Ew#?lT1k7)z@2M<>o76y6XwpT(>*BGMwG^=;6E>BsCVO4PN)G%gnr>RE z-@YTCbpW@IZ8&lTpx35y3g3U~cwIcXcUR^Sqrs>c#z&{bM?(?tB5Ti<f7<Adx*1Z% znObhvs+L>*7%PX!BDLG3t7}t_m+8!1Ll(C#77eU-kLYHz5tSjDJOY-P^&?_yC)msF zQCD~uQ|01|XTu`-b+f<vJ1MB}L?V$%1bHTO&ac$w7G3ko#Z7vjgOwYM^kq;BEpNMm z>1*;J3q!j*@3dJ8t?&=+4dvsd_1${i@m6*^B;9nAtU&M8N?CXJx{<>WIHy&~_8Bm# zA3kx*O#jkHNj2tGHme(+;^bAHuA@dGW;d`J#^%*wuShJcw;G}4(Ydu@b&|#mlnoWt z?)tRzfeM6wa8|!0;c)UDuMRNw3;pV!4EZ@OTGF}w(`_eZH&=AZAf1<}ux@Z0osAf+ zY4PSgK(}M&#BgP{x>6@6%zR8M%R{xuiihL9fV72)^s}qO0T}?_17c&fZ=E;oE0=E9 zdgl#Rfg#a|MJ7uzS&IJC#W=93`_)8w&E1n=r=3rgsg(mnx_toG_=DjA`R_zWN7GCD zd;6}nC+#ueXD!=N?G+kl>Z?8|4hUEM%Uzay;MaUfXMY~<eGJ1^?m_B(4p(*?udh~8 zojP9baA0P03?l*n-7*^B9Sk~K*xMmDvgMxG=>ho+YYsjAcdnRV0$`7G`Gi*vwuJ!{ z-?Qp=637YY82r^mxBcBSCIJm~v$G*SK3-5o>w*av)U;~-oB076w6`B<SZA<>-6$*x zTWj!I2guE|r@OoRA1COoCX~S1P%Pa?9y;LMpbXr9iSsv)?`Z%VIilq3wJ4k!ubQ=# z_a~7GGI*H5sU+8aOsr9!2zYyHb&d>~%BuK&-(U@%A{`}ulT=th_^zZ!{V+qPpnHa- zM=%aEP->A@rGuijrPb%R9Q%@PT!88%0JmpSfE)+0{#CqDX$36zX?x0Od0%&raQ_i> zEvV%>pzYZQ!UdNKcT6WnC=olM+)4lnC+BA9yboHKd+k3xVxh4h23^9{FR2||->>Cz zrtMTR7>z1JdTEsuutCXvg^bB=0Ce`_@8DR&QKmq?Z<Nt1d-erp;`{kN0n=Y`9r+M+ z3zIVMIlW^L0f9ParCq#ZFppTJc+sOYCWY`fj9I^R(IzikT-qU|lWk7L+LX+g3s^6i z2KD)Xu?dOjWW~naRM*pVA<%p5Gk1fhdHO;c3+$fTiRUDWWsj%27aScd>^FEnRBJog z`Y(>FNWBhA7_0|`J`%3J#0oo9`>VdhjR6B{j?B~zo$2qti?1;89g(Igj9H?4aCtjl zUx;j_9XI^rN_RIe$9)a0_JFtVmHvy0?4;}3##N!F;sU6~96U}ZSU-EqZXI!J?iCwz zY58^l$9n&Qm_toh#%^G9V<XDwNq3(U?eQ(Z`8wS!Y3zSoUT(l>)gV=!<t4)D)6HEW zPqnu*rWqTSGXE%gF4;Vcy<|J;m6PrPxTfYfc<?>ug`;}-5%v;u`(=u)$jT!##X^ZC zAt!E1HstU1#Whgc`tjy?FvIv`zaSAGAB|sh5}di)cL&{{`EQ8LxyZ&&ve7EwDy*H& zEwk`tKca@<k${{{m^Bvsih*(JwNWuu$ly2Tze1g!Je9Mq@JLI(zMKl>t86*_Cvomk z3?yH1B9>0;M<Z%kqOW5uV#T7(-5GJJi)iMSRczg-G2BIV5`~}jvFK2l@Z=Zz0(y2( zj-No@fnoS6LniQKb%an^73S|L27j3?1!@YQkjS;WIOFd_`@qe^hfb4EE%q*@704FP z9Ci&Ml9%85k7DXe+nl$KaIZfm9jBjv5XH2F-&#o6L}E&5<xxyx$39AN$ze-kjEt)J z;-*7V6O%JP@|Q0$!J5Z-Ze@gt9ov{^wnIbC{{ZP0WZUy78FECxSEl_1coYK7qI0Kb z$h~h*SLzms!E`I0f?fW@l4@nKJe*tu5*MN@xhyA#bU+HrV;dMqNm<z$L%3OA?B4<T zJ21*f_H%v~b{r&-y!MvVO<-P`@M4YGYJ<~c{RT;&PjnXOlqXA9RunAByTr9+jtf?9 z5O9>d;U^7IxxufZ3gJT&PF1(NBZI2~2a9x0sdPqd&NW^nu(+&M+F8-@+T8+G@8T%D zC7$&aP!1bnvZ4N*envK63)PrF&_HQ&5;_8BfBYFD-n-u>ZH9)eaw%zCc3w-KWB#-{ zHDa$;bqk7oip9L=gozASPUZu!d(FMQ!A{p&L^(Qn(p#1T`Bme>J_8p6*`WdgB=mvU z*%K=Pt9?O04GZX8_wa*z1YPa?0S*aOj4G;y4`>r9&gyHCVMFCftmyp<tJ)})US!^y zAr}B-m;<fr{~WrLsbPRD^u6sM%llm3eTXR{i-}qFL5RS)4WWE_{gZD5c%UXJVA#76 zi@MMf#I2%It5ebik0#vY?=;bQAFlMx2VGzGiOkQ~0oLUE0WQp~rp`y$hJP||Mn-?) z|Dn&^Y%OTHR9a(eXB{J`vVcnhr|jq*Eg%G)E&w*^_2v9^)HP}<raa(yRPQp7!B`wn zazqs3mR-dX?lj3S17gzk<!(^<%i@dFdV#+;HbvkAiFmF+3|Q-j|5XrL2u=-jlnl>e z>j+*3ov>j-JVF>qaWvv|W(y=_T@x*tGIv9tN8bhkB^|AY72EpGHoE*nV1ICD&bjk? zYU)}3M!KP!sOP9UAcEm&=tkAjSc*J}dI|Vag}KGH2BWAKl<}_|%k69;nD9TcvHMn1 z!sp6=As$Bn)%X38kVx%TebO8LCaIW!gpSbAG)-fDef@lcTn-lvKp|?x?W#S><MJr% z4kBc2F$JWwH73<}=&s>BHQfzI*H*dGkAj?$Gda0YhAT0;0&nHo`BZem(oKTCYD>_@ zkmx4t23^$HNx-p3`Cf_MXoIPNsto)HD;O-nxAB^(Yg9Qmiq81TwB4L?m|v&g<V<$V zU_WOiU_9>Dj`B5!s;Vjk<tudRXI=SPa9Z?N^t`=Z1h{6hV=m|6_-wNE5C5)kV5Dn3 z14g=BJX%4k$5x&$rQqI~j=`GovuqR~1MG~BRhAoM8RfY3lbuv~l@(6wa|$GsI7E-R z{HHTznRPHlX_t)JMmQvT{sgoFtH63E!$@2+mgDK>bFP;m?SFiE;U{!TcfHmAlQ-85 zVD7`-@ji^s7~g(-^zJuOMdcwbpus@C9&c1@NZJ<E?^nq429g3okiM!tQ6q21e-UXS z>zY8I6P1y&jCivm?LK}VPy3A*bd&g<>s5w2-aCJ?<>#fB!F|L-F4-yhY&s(Dg)k;( z+Ppg35q^qFdZQ{!=K^DOZORYC+51rt)vsVUN|%zQ%YVfLGRm|eH|RWm0j(SOk<0Vt z)h4uiOM?5F><}XPaA9Z0Gl^Jta8z>J_lj>eM3r+{u+R!QW2LfsaZVDk4tO7Fb4PaN z;2cYldmo?NbBKDDRh^?WUxM>d->C+X%lx^L!D6XH1W-s9gmJ4b`SW1Zyf(Qn22v4h z62dAmF?2nIBf8%1?mvfx^-rig+}YK#7tRiI^YuU2jKMrrs3rvQ;n?P5O?5IHQncKM zx@}|SJ2KzXo)Ei2XmPMi-9r{aMQoAokKkwT&yVW$XbAS`1AI1>D8L`s0G|3GY#Fv1 zCC?7)RhUPN%+_X=wjD4IJWs&?C@OuTRbnS)%1Kv}?+OM-6zqk+EfUnzCdeQG;%_ZZ zRi18k#^|uu0@{bH)5Hjv=q$dvy$)q`m?&b-V86jIztU`!w#t|JBf4&7t(G3*_mZr$ zNILrfmNVnIc37yp`O^mRBN*Dsq!1>`L&M_(e-@FQ9M<SPSNH|jyJTk>mq&r(^oGok zlO=7+nY!<sbVB`-<0+mJ%l~EZq4FlTKs%8mm4;ZKKJ7QaTq000<Jg1AV~rEEjEe>9 zaAW+PTxs;iDpP}!)GlFmk_xM-+)DMcbcF9zu+O05X_U4JeQ^n46YJkQAg*&g(YW68 zj*XSPH|+gU;7K^0me7@d%F2P{Kq=VPU)kRk@>yv~G;=9WCg{Z7S5zR0#VH{DHsIwx zbxG}i`fNXZQ#9CKgcp!IrVG2eMZ5Wixy@+@NSPJHzbF!R&L8DEP><*wBh?KK4QrhX zu~fnyXsQ?!46PFFE=i9Y*f#D#l!&BC{GUCqUcau=o5_uU)+qxY#`S=dIokFj#b*1C zA&vCgP3jqvs~UlFu1?M7nTQR3Vj^ICRtczbQ%0>eUZ48gRh!r4XGIMu^G1h~U<s!{ zS;=o=>kvipcRh5@gdXTgoj~tskBlT_7zcJ8+Z~M18EgECr2?k};0K32l3SP;+qLYt zJrh2S>PkJ;DR1aW;C6d3{U3AZjy9$D)xLJ`GsW^*p}&k(_q|~)(Cf5j%1{s&AHQ=s zQbVN>^G;8Gsw2P`N_U~Im<f2L>$FO9`Q-3yv20V<=|t6bWN10V*m2Nhvpe6SqZ`&s z>x<}mCf~3`&mX~2zMFQEZhmX0o5&Em*yLs$4TKASc^M*DdE;7Ime~np$&z0p=Lnf! zTEu^|eC&xyCF4|N6hqWzKf0}y_T+wjgV|VujG(d27@@w!uqb{2k}`r*hmwH;xK2C{ zlLLM^Ixk`LTr|G>F}1T1#~OJ=JO#FQN0n0|XJN<k+D49cNEf;o80>uWu%g1IyHupU zN4YJ$fZqWV8PFLMZYJ|oF<{)qn-Ma0w?y5=9V0JqpU1tu{h44~J<u0MK~-S45ku7* z5y3$$o~s?za-!0zomSi32^p<8A$X;=Ixn>=0VQ+}b;Q)JJZI5k>+k0+_Q2%Mch{6l zo4oxzyd05ue5?rPpC^l{(p^<LYsPWg3>ML&cPQ?sOzFyUYo8qL<AK!P1MU4W8Lvkf zF>xSv()Od#=*6|;UjU3XTNy`=bE0p*Y+H_S>q+0oM&OxG&mPVX`2X320otkch-JLW zhGVZlUT3rkTR??$r@E=_W^WRhmuldRbD#^qi<fnPsgcz4_K@TB9bnQp0Va(#kG{X4 z;qg8YbQBX4^VwTy9-Ugcp=SV4;FKJTy#WwhtoLq*;sJe9`e$}_HjsgYl*tzJ$P^rG zw+-%0q9r_tAdz;NB7q*gLQqn9)3l%U-hD|g?#!hBo3)hW^-~v0mBV?`g2vHkxdi}< zY4VU#n^D3)EIn_1WLqMc7tD{DBLFNRO_GH^XT$v)rm5!sxK6vqMgRNO&E|VGx}L*o z68ycv&IaJ*0PqGpF+5y6Alw2_y}vdR{~F5gazeyAl%Sgwv>;F<b9K^qok<IlE{@p- zf-=PnSipG-3b;HT*9-Un5HbHPU)0<+Ht3oJpoOFW1?>ak9px|oCy=v~Bp96~diKrm zYnujzoQrS1Z8jUs;T<e@*JwuPAqm5<j~_N~8{z*5pvdHD??9lifTXY0Ix540<&-K! z$9A>49`i57mFQmje@8BoXnWy#B(4HbZ*B0|pgWI-&biK6tO3E@>rX;wx16dc%?i3N zg8y12uM2#^`6gN&kzTu=<8f?zcP#o&v_)eP5q8}5=tUJ{E&uPcN3CD0bJ_IiiKUFr zaK2pV_Ki^7fE!Ks!pBT(l<(D~Fd=gQ1j)Fv)k*KglO~#FRYUD*)!{IyR-S(mK@tP7 zZDUO@0FRyXb$Qt@m9l@z&;6bhIWl<EU4GBkoGB=lTt)m@tgM?wzLmR-fspL$dy|C3 zS95ZHFhX>n93U#|OU=~F?c_!KorMBbu=y*@^+hSUEb&g)7fxO7u@@le^$B?}IK=F! zk0zavT|n(3+YXvZXGI?)PFej;L<-5F_K@mTTTetAQPRUu7v7-D_8_~sQ}UWox=K5Q zcIA;DcFJH<u$}6dn)+hF4m>;=`Le`vykHczjjPJsc)hAfZt?^qeKx_GER_AzUN3cZ z#!(Sfko88Z??cMd*2b45xk|S?T|PPp1}Ct&7Q)&{?pEaP#^l5r4g)TeC}gN$XT*|a z|D9GMPBb8H3>EZS^zTP(+%V`ocqK~VcST2e;h1;3td2#_JY;C!JjznvbHi#|n{M|_ z!7n#jR<>8eYPp3$FEuuUowpuK7GC(g#s;x%g<W8I=%jT4Oye_5v-3l1)G`(b<xo*( z!}Z_(8->pZV<R$v0*wDA!vpJktLZ3ftn<a{fuITy*@2QX1yo3mFN}7ER$%LT0dvaL z^>T~z<c9-5_T}`;)AlV&4SO8(lGrEz_yR0GRK94372LJPw-@IavrFW|GN3RDMMTcD zIx$F{V{Y*pI%4=xesb2^3wt=#?JWwyx%rBcon>5|1aZC_&qMPCS_1nEYFp;2nZk#D z+Hx><y43$LKp<hmyc5lU5CLQQQl&Sz-HQ~|7*@g}SX>#5?(=rNSgBY6)P4YXBoH=T zjyFaCqKjS$gy?DxFfRIpiHXNnUA5oLY+<kfN%{6%>Bed5{|$grn<^JReX!?iFZ1Y3 z|I9aOCJ?~O8G9H(Ncj-TnKRU~@v5#IaGRdo(0Nw!Rf3QjbX32UwYf(_le($Pq0P^k z?7nu!R*F@<af#H_?G8;bwX?IR;6SUn7nyu@)m4LYZ=9SM(&sAw7q%220nAHHO|Nr3 zWD{v@C@(KZdi|Elwulx6k_i+m<5R%-Ugc>2T20x{Jpm#P35D)=r(J&{%S*pzzsNxe z3>8zbA;0QhsG1AQpWPT<lUoi&JQR;}E9!-e_A#y>k^vja;EnP8#KfE3t>e1s9_G*N zz1#?-L~8mmy5@E~XUR69NU>IzMzJ~<lxkd9JROKGbZa=Oi~jZJx;nP#Xwxg*(iJ~s zUTkRshMK$Zm>$(?l1L{YMD%hyxr^VNM^eMI)J?E*?uCnI{@@N^*#Vy03iM%5@X{=# zkm7N--e+soytrqdyAnBQrt#$E{S2edZa+tlreEdgxvvmout-Bu`ScJ;v~|+hbZTlU z;LmNCS-!(=srAU3Lvz)x?30!O6AGTJnKL*y<50p)L2xFiQR9+AH)Fs-*uUA=*Qe@d z{?69aL%{E@6VD2JWA!MWcM{+VZl*n-R+2Nz9q<5Ell&(YIGh;Yb>dA5d#o#<7Zadt zwb7>t2SR$%u!d>Kuc#I+pd~!z0J43XMd_nM-aFf9v)rs3r?9X6HYK#`JjDly&P|tQ zWBj8J2)13;#3qslG#oRB=@134Yr0ozaLdQp1hlCw69TW_2JpyRcQ$C~7`}ly^kH0M z4<eV^Z;Y}V^RbUB=&umeQ5xfVNF%RRIFPXPLy{w1A<MUJ`Bmg}(K0Uw46s)7`J@~2 z$`0&elY1QjzcEsfJ+#@E6<dlj`o6Wl<HY@tO@?c1uq`F5;wwX9caE-mKk=O79|vB_ zT;f?=Va~HH4V0{cBQI5W3SAJ_IWUu3kzsjeno*SpBl%t_&iKxWfGY^$7SR6T9<2@r zoycHjI|z)v+r9hXS6a4cv>6W3&<gpJQN%_7jw{|@x)t}2i)4+5x_VUC@P3wKg71e- zR&eI#4u2dY%b(Y6N{r>Zc=0}wu&3!r(hr*qtJ+#LC$$SgFZ<~H`q6L$<p7bjM0b_m zULJvQ?tu}v`lXMI<%8Z%nzCfR4I-1&ub#8e(D?n!JA+GGFtZ13`I+V}A1QY!Xci}N zk4JtgMh>t+pEd}wU}lWt2m>TPClY3Zd5vZK+62StN^~vCI#Y2JzO{NEFvitqDGrN7 z-#CC<5&d(`hCH+ovXo1x&O6^f67(|4OH5Crmz*GRrMtUv4qs#*GTGFElO)dT*_NZz zDTh6S*Lt_n-qD$&E!$$%@QLRY^S51UEDLEB?<`zl4}>4K<X0w^9V%7o>L3aSdM$Y$ zay_5PcO;q=ncHWS(J|jw<_#y$5{<||IT#NLI@ug4Qf5~O`&_=)Qlpn67*4);wpFGN zUu9F^(W7Be7)pg_EcrmQHYu&iIy)<_S7YWc#ZUrb>|MHJ@tTS))$(<XLD#dp!vYli zyq4yZ>t<H$C=11y>}1iD)qeWcuoqPm-XB;amK5^U5J}98!fy3=^5RmvMhl|QAtqEu z1iyrLPe?0G6?t;*<>5&qIU2tlR;gK@KydExU4*wwG$K5<>~LRlK;1tjd!V4I+%CD& zB=9soj6FffEypVVwl8rrx23ec*MwXrqDwRnB#n<es<mqVks2~vd#tO+<5|1-Op$%t zI7rHt|M**A9OmxxkLHuT+>@n(KO&O!xqwhZ&ah4Zj45xiDdbQf!2-#xQhZHs1T}xm zVd*qQ<jG>2erQJpU1dQs3kZO#{An`bmh56~UZU{qxuax3h1~erQI6Prkq4{_X=I&l zB8Gzqs_6fh{b${{V0qg9w8lrlRZ?D1NLV3m&eH3vR)K1=JBg>Th#iMd<K;K)%Y5F) z3Qk|2-ztWkQCvQ^<sQ&=xdQoHmBzfOF-Wz}C@E5ItOHj5MK3y&-5qX1bxlKFhzvJA z-=BFOQPxHpUXUh%F&N+Z%EnGszH8-(&1qPo6DV`dA9<a|bYHM~RuVQ#RGjW8ra;Q> zAU2p29L7cE3z&OzQQ}Z3tUUM?Sf~HE9(v-5O}fd_rS&FHc--drH6+CO!Cb`co;h;; z1iy@N#zAg3-}wzhGs><fAL^Uwhbgp^)3+dQRo?B`gnoY#eg;`kjbPaq$jIv1e$o>e z;W+8|E*cXc<7O8k`x;l_MJ175kAHFIT8!4aR(o4fACPqGgnZj(rQQ18<Z#lkk7B$V zw$H9FGF~uT(oiIw1~oivGH4G;)1<~$IZCNmb89g&>Kf~_v&IlrZhUf4Oz6;9n9{AJ zH1=HL=5DOZN>xo(hkfE6{&_-B>oG|HvoI(>>gC^h@>KC<XPM&x0e+T#;T~^6!QfH$ zCxB`Fwjb@S4Voi#trV6YQ0}wC1<uH#u^?2ad#G9R_@PDYq}O)tDxR!!2j`=^me{u6 zc8<y4Z{9JX`WpQGjV^nD9kqvyDm#$lb(G33vxFdHpUX#Q>KH;6{8Y3AG6szh9JB6n zz+Cd--IxL75i2<16?_}a^m;KRD!M*Pfx<h`cPUPrE8BabtXDVr0kiCIQSCaj7oP($ z{H3yHmLMh-@&3SUMI-$83CUpu%OA~qNlE9>EU7v4igFZDS}8~^?6yCSV<xK;=9t1K z%Ry}pNX7jwrjSR`9F+H@cjUwCC*=T9D?DX>4U^}q!{gpTo|H76)Lo<TnvK_kzffk% zz>p2i;@3gZu{3Wmm@+#^P0+r-RkPS~uIg2gjh2)0!Cqd;`ngni=JL(kSk%3Tl(ITC z&hPG2CRq`rK%Ukt`kVV5+)i502SALMHA=JJ8Y68|;IO44Ui&b~OVxv)j%3|Y<e_3n zbCtDtylP{Hm4|e>P|eW6S`-6bdd}p9MNWB7YP_a2YR=IQo>K4m9ms7U2FQqZ)reVk z+;vwY#Xg61C2?-1H1z5j4Cd3-_q9wyxL5Otdw}JLezLs!EXdzG05HSOrXPn4c80O* z3XkO~9bC}O*!EhgJ<H`o)_Npt%Nm*CM;aQtdj)eIElb(-!Znik2;L=-HlcRAB!+iS zcr!?^&sH-4goZ~#Z*<&aO8fb_%SW~uMUxW1sry6@{@{mYUt}WA7PS<EJn+WABCSg5 za)K|H<zgGtJ5z^mgk(z}*#$978O_%++JVEQ)ISl1<gf0R)<1!7K>3WeqdaGXsu}#< zSc}4U=NdN=YZ!disBAXXA+HS9eEWO8Mg+#ejUjRV<Le$f#KZ&7#4l460+h7<Ighw+ znY{m#{x9<|3|RaS_V2DBuu6GGaSMA2R?#U4cT{f-rK4NQ<(M0PcLy-&yctS&l_>C= zu+JW;e$PEQ%!7&{9&bp-^aA{F@*jJK84@5>!QOM|jpl5+{4^&0KBj-W0%Oe1e%lED z#yb>6f_4P_|G6cN8Q2;%zyiGRW-&(ejl9he;vjKJ*nqmpAo>&k->gIbkLBwBy+!N) ztF`U_+asH#_R)#Cf&XHz)>c;P&KbvEA-oNMfKQ|dvc4V7^-c2DP7T19{Q=fH{w1Kq zq;bcy&Lr@RxqIIYGpc8jo|fi6HV<vMH~?gT=9Inlv-8c8>%Y9&8F6X>tSC9c1|+mv z7tZfyq@@|j{7rWPQvS_a6pcl@X#e-a3tD}YqV<50`mf&wIAX&w;si+(1*cX_KJ~5w zmX-k-(0>I;_w<{#3E!*f!g9f2uAVF|>GoC{z?RA7>LIut8c#Fl_JLJ{HjlmMpuTAq zlF8~q0bDZI`lcoIx!s8*Z=v#?JaC$>JvAe##v8o^gXEOYXm3b@P-~fBEHfj1>Z?%& zAfMvVE}Zj6mYxXCg)e<OK3kzk^PR!LsX*$vNA^k%SkOb=_$A+rpj+TiTGrPQraD9^ z8RGe2;MQW>i+nc~!Bn9{Y?#tQaq)oZu%K=l6}A%$2K4kj<*N?TXZNxa!q9T-hh2{p zewS@SH$#CyKERx^9_MD>^D>rV)_BmtPRjXu=)2<)*M2CgRMyajsyb!(;_nzT#znAx zy>;l?h;@dgnCb(|z9QHLC4s>HX0E;)gdP(XmVD;9X!DvNsh&sl*mropRrD!z$r}PJ z&=LA#dVImt9C45#g9!(gmy{xm%rC9s85&vvN1IB3VVN#I<&!7QqmC>Hq6B>V5(sJo zhzDHBntT3y?{5kC9oCiJ81dxA>-o9Km+X!f0oRzK4EcloQf7IxXSUBONT==zzo2P; zW%F$L9_>^4g?nkSAD%gXV)+>UmeKjsippEYwR<cdqt)fZmSxkH%-j0$oSsPIsN9j7 z9X{&3loQ~f)<8OrUg{}$aLzp%SUvQ4)=^Y^Mi7i1=ix1B#P`7wH6RcB$EBL%(Zf4! z1)stZ)RokXo)Y)S*@%VH@Ie!A%xf<i(3Vc7r`6ofGDrOIb|<qL`j}3d!f2=KoOC8^ zulV{;`V-B%&jP|mTPnLJ$dP9lUKdu0{zB8~9?6tBf9VVoR|ppGbN6tlRqy7xbmiK) z{BT4$O@De@vJ367?ofFlk+AW`qv4>P_f^v}cwz&Kb{;W>OQ7R3|BF)>{uI#?|5z_< zvU(<@WV|q>I^z~7+4usgj!n%-L8;^kkz1aSn_^f@461%YH0FCTfm1XkW1GizV&tB{ zuTx};grf^4BYHILrmf*$aU0lt$FH95d>R9miNDin>Duknb3KeZnm)q;-ScA8XVWWe zS8jWGt7+@tIHnmqEPm-kp%Wnbi14$);=bgw{f@$8-^%3sld`@CEQOv<Wn<&JCR6kA zyBHv-F2R{qLSH$gtAL*G1HIqxBtYAt47eZ0#lBA!J62@RvuSO9%QvDV>yXn~KZP7y z-$c^{xzyK)m%+a;+RZ;R*?tE6D#(O)&vRC$tw;$y>{vN!eM4fx+up5`1oY!4O8IzC z4;x+C<gXqbdO<JJqfR0FfMN;rd9i)W_qn4%3>F2{4?_vDczg1EpE^am@3WA8*FZ_O zR~I+?e^q!IJx+Q_Q3@X>$B}(NUnfCdTRCe=6XN}A(~9lmw?|{!B-YeRXZ4iU$i{?k z^)=1@b6p{S59K+6#_u3F5z0-w$G(@bt|fX^oXcJAD~D(PGwiIbg?>ISyUN^%5PJ7+ ziXfxCMp)4GJ~Z<l<_fBkH@at*8FOD^Ofe5p?RQ*ZR$bm8Q9M&Tm^aGjF?ybPFkw3_ z%ez!_@U$iUA_(z95@=fS=>CzxUt(CZO0V6*fWn5xjS=nYor?wfl1CI53FfGXC-*)Y zND0C)1u0?kt(p|F8bz!RI7I{e-b9}P1(?sUC8VkOnUr&n!zjIf^>F=LY$UE^QNYU> znK*mVyD6=gF47qTdBL?y5^rK;jBHe5@&~1c48G{>^y+4-<&B?hV-k<;Oi+4Jc#?#2 zz_}A#9yv_>l7oJ}sU)ILOQRnyam<o}s?t=3r&c!<>gX8J=su{P8Tt?WmK|{FQ0~re zE0|D$(dHvD+>OG*022cYrB}Cf_vXn1&_B4{FB1Y{j4>LSZ<0$pch~(5NCZGlpUfkx zYxFRPyU*U5sZOq9rZ?MmEUeG(S<DYUd~<~>t3g<aZ~Do&@62DCf$9!{-~UtESpc>5 zb?rV_fkJ_nB1Mb46)VyJ#R?QHZh;neD8+*nN{bc>!KJtb53Z%S6(_iRfZ!11rvLZ* z-udpG`_9~%JCn@hoH;rB?44w1|JL)Ybt?9|NuRN5WjdX{cu&TYs8{F$2J+&T4erl) zZ6z6v6ttw>_sgn!=6hN;ZYI_6s6fImb`v%}zv)Jp`irIR4~9+l76+?<2}9UgA0`e^ z$~G+QyHSx8EnUd!D0V?e4GwpI-g)VPJ&hYoa@0M6^pBqQP!oIm_R%`eR3N9amRTGq zOp2z>JJerV>##w<1Q#`Y2WR0MvcICbI_J%RnK9I^BMEI-B3krLuavN-(5*UVNv3;D z@wVMbu-5n-`PEAe_cYOE@Ur2A-QFxN-sp?ttwnA0M-7|#E!cRVrH3Zw4*t}&5MShL zHNGvAsqfj4GBtUs;W_84t!~-HS7oi-$WraSU1g^V>%bJ^aExvSTneUdQq$hR{=*Eq zV?&?11*f{y1P7rrj}=N_$5qxhb&DMC_H|Xxg<6-svshUbeE1{&q7AME<yH|)vyBk< z+Xqd_KmTT_yn9EMCsgH|tG+JUDv*9o3ZS@>>+(`2UtafX5lu79w@u0yE>+Y=PeX-p zg!LDu&+!9LwSva4);We7Nj>2;#;MT*0~iAEWOO!;zv;`(sYWW*78t#qLU{U$mn5Bg zu~;Y@hMW$4xrKf%Fyn8^j>M-Nwul^p1+xC9C6jIfw7IbO<6Sqan6?iCFL1j^u=ss1 zjD%XwdY#=|F@h|98bZmdpLl}Qf4eU%K9W5Gn&<rPBJg;cyaT?S>CvyVbJr?PTH9F7 zkyxyPf+C!N^;^{owtQ<Q9AiZb$3QhT91cK|jor|Jk^*!h0|UUs!8SuDEZCTmZ<|mW z2PObWdy)2!{hGokUw$&QV^&0d8`^=6Xo-;0NK4S(A{Gb(kC=@<3>c<d9_t9f99IVj z-hCzOpR^O8-r&>j^6>V|1=eue&xiZs1&$tmlk1YKlJXcI1^t~CkGo6$jsZ<ge{vTq z{+^fA{n(La*OW!hNut#KQF*`(!gq`Xn+yg%L4Fcp{M<F{^3sM!?xbrVz8EVBF?%&g z=lOPANY!5aKsfw-xOwm9<61<F+b6e+Iie<9_MBXHX9WTdXG4hX-c8?JeD>~<!xbaG zF)!%;a%7si7#OGS7@bj*q=w5W)!M+#G9gEvFuwNX>67q_y3CQK+}s132g^##*e}4h zTO$Ei(^8@tn?BVB$q!s2rHzG3*6*+8y5_W%Pp&c|ab618*b2iY5Y+iN5E!Ko>uoEB zOhKW!g-!yPS(=ga=KMsgT~3sHE6FpxkX6ZtMbvgIc44(0dS<xc_W;n&nWu$L1<AtU zsNAmI<71({Z-uLv7(gNV+Lg}|6aWBijaXxdxqdEt#Kd7an~P?Ndv)-~3YQ)(Sm~kv zl5|zOVe-eh)=cF27!P&2hkjb~)OB<%Yu{PGw%Kc|fB<hX-yGdjo8WQ#ypv~uiYms8 zRan^x=>FsoL{Y-$zz*W#D1pm1X-O=TF*m5uydE16_pqO30RR{{HHTjiVquH*w)%ME zGeIXFXwK{BaS2am-Fo^gS~oR|rjWGr6E0_09nCd;OtK*xinBa+3E0=IA@Ge(C|gI^ z;v;^%YyDvF9@EJ8Q@Br#5nZz8Lb}u8^k8TpbJ1qON3UfRI}k5-vQQeU{)xBzZBID` zU<;O?{N0uUhd;<)>6>A8424(6Rs`p%>3y^R=`3P*`f~pOqu)U{<vfd(B{<iXayiZd zw2MfE?>A>Z`)0HyDh;n&p~N<?OO3d|NzfMGo%7%tBOBs`i?*4jS-&HDoG{Kb4K@~f z{O0z^%3TceIVOHG6DsT$>&<Kzes<a$wqU&}*Eb+>TF%=eRAF4dRPdm&qCxwvl{_-> zq>m`w+!3mL)GDtP`YEfr%m^W2Wj)bhMBP|vymZZo!qV3?hE>{9o)afG->o>8i%J#j zr4A6s^KCa>Y<iCJVwyeR7j(yJUrB>FaStL^qa&Vy3P)ou-U|HmGQB${8rFfOYRu-L zOMumtrdhp^ucV`}-KNNSHpmNeXyr&C|CZvkN|tJ0{l(;^@5%Vm{q^`1W4aS&>1SdF z?CJNOJI5|}15$U_1DnB+*2#lu;h|#*_Mo=Lr?+t7>lc53c@w(Y)k}^dsjzTEZ(lL2 zdhQLFgGOu6LC&-Rqu3&ji@6?IubDWt&E2V$ka)oDT!RTH7~cYB_`3dt*H62R|Is+4 zK9TSKY&y}%bbJ~^<9vbkz@jPhm1OK=Ex5~$RJmeXn_twgol5kKn(TdIhuz+b567uc zJb(N%&fo_z5q3?QswE7x*n+N7Lq*PSUv!FIY$a)EzGKN?9SZ+_TOTlf`02!CplW|o zN=1|i_j_kuzKKx#hSv5U#oIXAhuuP_3!L#D%w8<EDVRwBjg0Tie~dW0U@c!iVLm=2 z#kstt0W^}Ss<Yd77#eZY2hMGMr2P;iVRvc-J&_{~I*oC*q9B9Gd5&NJn#0{vhT1}s z9H%YD{$#fXv^A!gw1z8mwUU2Y_`_9e9PuCtKynbcKX;v0kq|e$qo$IGJ4OGvPL4Vt zT?5|uwrSsYuH_G`1^X;n_&U2)^#u6sLMi+=LBRb6ZTld<NG`IY)q!gBxZ`tW8g{JE zBkAMte3b>O>IL)y(FA(F`Tm8^4`m&TrqDyV0|Txhpu~*5O-gNnbEGKE{4w_I#am(e zw99xR!~XncSmuazpyVA+n;9e77#AxKTd*e?>{8Bj_<nEF=3I!oBE{EDM$=`~?94vl zTy;-j{2cIV&(87PlfKpzsA_cPxv8%`kiDv{xe41VQN6Guobe9;GU~Kz{AbIp)Gf&e zRHu6tZX)!EACnRWD`R=6E0O9*SN53W4RG}=^_hM<*X}NUSzevJ>NuNZVD0+49Q$qO zA!$;2!FotZe1g~5Sn8F{>IFUkK=y_wBY?iDJzYrr4>LYL2LCk}3w!z#M!GS#&L<RP z{|^tZ7(>BgGnEM>{*(}a*T(pf4OY&Tq{lSd28uE}W=(hMFMi|Ss)r{Ndxe<9vm$5P z(i`F8$tjt1_aD(h_HXcrC-FkL-=D(_FZ4Al8ZYMDvsbzLB=OC5hVpj^9<IwCf8^;e z;8D`dmZ3jn#274_ns8(pZrG+i+en7!p*pbDQ-=I@(5B%EU?zdI^OQR;`vXe`b}VU$ zj@y&EfzVQS1agGQINbv-RaP#1_H^W#q3)|C#O*LfIQeHx<fh*P@*S0;Z+S<8XI4;r zM%)nyU(=6^#`Ktyw&dFP`@40^YKuJ$KRm6gg&89da9_`3r#xZ<N4UvBOD1u|-PvXt zF8cU41f^O-m>cIl3xqP<q8_~CoTVN_Wwn^m5qCpeB^HB#^QH3I0-lR=-OjnD#ps4J zKZiEFw#%oT8X?v0jitj?)!l|hw~1MJJ>~GlzCHL`n$ZECcMR`Jd-l$J^nE>-`}OOF z9{JjTIs1xAIbC(A7f(B+?C>yLR-*#LRIP&?haBfTMCw$YtQ0dPL+2`IP3e~EggsAh zJKie_kSrP>zA1On&)+WW^l4)4s7J4(dmMfF9v7>LdK~k9#2l$J@xSscU3kgWMDIl9 zo7g>uLB3#hhU^q>JZwP+7t}!Sf1M#8y-I$*k7yn!H`tu7J(LkBokL&S%!bva&gyOY zUBiM<lL;6$-g)O5?KqktUs~@J7|!Qgxd3p2FgV1H`SJ!`4;-wsm;_I+A-$S^A=$8E zTir$ERt(|QftxrnJ!?q3dE~$zuUMvw6dBfK73}qlDn|SIYBO<bDTMfmC<v2hgIvZ* zq`KavGPnM4eagLJ!fBn+6aonBvk^+h*dT}O`Q#=+nX#O{%<Q(owcH-hSdnUdP0&de zD<dEB5TkQ>_j~<#;p*zDX&|=C3$rr*M&ku>Q*d7GEvYE4V32W%QLM3|5qe0|Atwp- zOR9)_Sq7c{&{u<H#Q5P=Z_8wq`fs-m7e_A|Y(!{}d?e}UgrN2d-CXrHP?M36SA+u8 zCTW?OZB3L0HEbkGau;pdwH{X+OD2Z7bM(<%tE1$GOVnl}&!SibgWXOBoKDPc(h}dr zwvUNgsX+Il$WrsVuD4~>(N+4;2xOL%XJ;HZYViPoP2Fpgz>fBeUIm+qeu(1b8y*>1 zGEoaOyRFQIfLhfWdZdUO#CbMU25e^>UZZ}%5T@=6fCT5d2!Xa#%q9$8UPb1;M_o_G zPQcv+)+bjtm+AqRM=Q6e3lKU>SeX+0%9y*8UupJJ$@rjZOG#>O#Fi(Gku98WsXf}4 z#?yX4h>+A~x>9QN#aXM<*t~UmsBQ8W+l46_P;JXw6VXV2(^ybzDh72~E!UjDS_RHQ z_Na5{&+vfT9UcIw{dV!?A5kTfJu=@kUlYHNvH=H6v`db3Uo(yJ%_%)h#QekR=#~<B zWT$!J*2<!#A+|}Z0Pt1<EYg1|a6#$@pHK+&RXr1Ui|nCa0$<Sf1F>bkQ{xw;?4w5Z zRL~U}p~)2VL*G2}7exnKsS*NwMX}WLr&W<NNqEN&mP>jzPtnJB*5@i$vv__QVC<+^ zt}LZG)!8|0n{i$wJ<vCm847zoLS>AQCBgP?q%`Ez91F@76G-_AT&p3&JEmz!4Qpmr z%I3%vL=W8lJ|QAdvX9}oD}urXmxhaEy)V-CZ+3Xyl7Ca9TXk6T;Zj>2TJkxfT-X|b z!{KP}N5+XpG`ZI?!Z)XnKe&oG{h9aj!k??9)V|jHtIT^0fL||auz<*jt9v9WhF;1L za)$Q(W(i8Z>Rv;>U=VS`eT%kpwB3?ZXsF|~CWg*1%z5MZGNE0M!OwfE0haXtyu$lC zDkOg&mP-#?vfsqT7d~quSdXvOd_VCdF3k}HCwp(hp%j;$clWri<{B2y{ZMiQ6&yY* zLML5hd728-0_OF`F+1v9i4Qt)FkE?MY=O11Cxl~oVUbSNy8W!#Rm^?x&767jaW(w1 z61<}G#Hw?OjtQ+eW+gZOfuB$-T?n(%u*eXf8)#s=wyE(O)=c8>u{lF|6L&#a#DfN~ zUIP{DbzUL!)^v;Mbd{#&vbQNoj)Ce@G{<y;VWY0HJlcCN7EK{1rn9rwElUU|X0f1N zFa$E-f+c&9!RlHQ`L0^T^`ptH=mGv~v=%M@w0iz6%SaK54tfo*u3L#Lric%ljd%s( z8H*A4eLtC{kA@N5hRbxQW2_Ld5ri7gj{xdFL?Me*j07I+=hWi^4p-f`!EYs=5o5%Q z#&JA-@t6-Mgbkidr)T(xv_hOv!liAi81!oTN>IJg`6+=IZZZjhbZE&q-+M&UdS@7M zzzwn|e@<)Vdcym+ub3JAqXzM~+vpwU1!;MzkL%G_ZTF})9VYVIift=^c5Za{72(_Q zn@i+cafxx%lPF3oxk87F40GW@K*xjChS$8$+(_F)`uB)x%4?_?1Kn^Lkru2!BE6mg ze*JLoPPcyeWj~Ch%J-QlNvY^l6{{D0`n{?h`PNIGy{*vwRFU_D{3~8xF+HoQJHzxv z2}0`lUoOkGL{b-ONdCekEjmP$uGuAFvKrG$v^pc&3pmqbaMKrE#50K>F6Q{z=%13d zcT+_)su{VGe@%EZ0}`jd*iZcwchJLt%14K_UM@Pv05ArNyFDEcd|W6=e<}IU;<c!5 z%Nu{u{?;CD)MlrtHGjtNRuo=n)gjOV#MO<t0>X)aYPvY@WQ|if5wSfb`H7;Xq7U2e z{0_cn@SWc~rD08}U3IFryH#XD<)886I5Z18%26u*F-4I)=8W%r%D-~$l}QX+<>rsQ zuK(fQsQ_r<e7<Y`5S`_q))^cynN+~}Y1lsc_@}FYv_q{g-<oMd-`&{Ia=?4Is1q5Z zzo_hEbdXH8@7iql@)KQn6xo0Pv1K{;yNovtqAgb9+bn@mp3!z2)J7<R0boEGr8zoG z+MMx#)S)y9`O;#kp6UekBPy!H1#GDwb#>e4Q=UQStskEK>uje+PgMbv4)PN(_`PJ1 zex;!48F^g`<jqX|4=6f*gLt}T-WCR%`$ZZKvbJA;1FzF!Wk(&zpTk!7^R-iTWwH4y zyEzq%K|U-BhctW|=jOdY$6gN~aJ>&F+_T9OHJDPYI$yQQBrk8J2pfx@9yHbxM+k!o zs;1khKM1QNs3?So*N{Z{u%;L`-Q}^g%w+-&*QRkp>#>7E{hRF5D^9yl=N6uIplEtN zxCKiOUN79OjNzUhzmr%Y4H$c##A8dQ<NE33{=6^Y%!pufy(<1qYPbkZOjvrhg^vGs zEd=d@J-vyOWJS%89K)*)nQ+a%Np2py#q#*Zw9?C7Xd-g47L^Y}h39!LweoOiWe;${ z<5CjD#&&g6Sm{+u$e{W8epVZbnp%j&<d7QOZ<W%a6He&B%Q-9_08pr&!pV%&;WCuh zxoo}u%sx#h{k<n>6k&>aNIGRes<hbCS-2!h1TlS<+=u{b(2V>v5U`MH{toqQVp<OU zksb}^f?H2$JFb3H@CF>oTV53A+vyo)t|vIegA4MNr++_JdB?@18y(IJ;8Sd=c$n2R zuPYjuWilL6Todsn**1lZyQN|0EvZf73BPBYM?<^N+dZ?L&SwQG9B04C%5AR-nICLu zLzB-^+6t;13u1Hql#mTJvn+CxalcICtMtIRMw~57&6>$lWeN1z2k)5mnzTm|{ijzp z+Vx2MFRY1wYDyVZsu+>d0|_2HnO~J<1lZZMp-)+tHYZyVgfxmj075+{k|T5X7`&SH zx>e!aI9*w3#X^&TMH`wI3^59^Nv!QwWe$lE5BS~J%y!P*g%S!Q=at33_I!Qc>+ix~ z#K*DokuyFVs0=UAn-K9zkgqT;_Wz)#@wNc#h&6q&VQZo^!H%?!<_u0{pzC*}Yl0xE zDjix|<^}+sq%9;fBSz3)k)y^LE8)_O3zOUBjxpStsREd_lUSqa)M|D(F>mV78DZFw z(rR(isS=~$jtFW_P!Z-X^EG_1!xef%^7v`;9)uHIVp6;vEZadBqYkO1VB^kNa<WUw zpG;v@`n)Jr^J;XgDMHF7mHGB)D(vyP&w@1%sv&2N-e7kd6RZ>GFX-1`Xed1y#()Y6 zb*L`FPGF@iino~VyICf$DhF|-j~Gk3+lzqXK3J>5@((Xdxl(lI6Z7JIV1Eh=XCqfk zu2=16+g*>!w0AMLy;t`4aICY@#oN$?VrHn;;zTv&M(0&L)>1<{Urd#&UA+*)+A(`6 zQt@`Y)j#WWC35VG7#79WY?7+$Q_ASyjLa>_AGRqWh(5@qHWw3T;hSi_#!#3#PC2_@ zTW+yk7y4^<unDRV7JxN+f6KYQ_SDpU@=cC2VbVPij0J(e{l<Ike2>R__k2kNLw!Vn zj&MEb#hCouTAJW#O2i(n^0a0VbA*(zi4qjDta)nQ>#xr+=fL`VSw&Fa4ia1tX#oPC zgFJN3XaUXFXy8su<eO9mDVdn;k^Dp8aBWqR+D-brI>ErDfV+`H>S?Y#4-u|J!(Z=X z<K2<G=;itHx8%i18FF0$8Za$oY=OFdV*mrYroB>$-AuqR0ZsGn-h+0neM&GGGp(JL z7tG)JQuT>h(&n{Zuw@GQ%Y+O|swtoLI>K@66c5K?n#tLa*n}u27XtfCLN%?B33VwD zNzn1IH;uQYNP}m{@PL$PgK<Hse)CZ77C1l!k(?^>?zkKbs?__&`^!YM>t41?BTSOS zCWUobxlCz5=<RdcIBXXr4bD&*Q3ciJwFxa=?8lCuWAgkQN~<v`TxG)5KuNu4vge%- z;Z}kS4*~>#zpp+P8^9zshmF`3C#cx@e!i)veC{yWmNTsakDvBSpB?0#*PA?v8d@FT zd6`J2gO#{UN^$8xfoVwi(B-G??HONDjdeUbegXFaU(8EuVTZ&ux!6!A%XFr(KX#60 z^089J*Jj<WGRs-zVo%f!hYWoc@S`b=tcUuqEkPv)qpXpX>vh)ArKJw7p&!xXpmmX# z?cWAc+E3{n6;d5^@9}+O)zq+sQ99|o*FJE(`^cjjdM3(pvDx{sdWrrq(7=?(b$e(N zM?riY;}HcTZjO~Blej(t-3(qf0FbMG{5Z$TvSq8pWLzPH@-!A#1w*?0O)I^yxbFBd zqa6^v0OGPpMZ{Cys9unzz_zjUzuYx1ERXvnVRHIe&YjoOFa}1!8|V-V%ac)&G9Dtm zlTJraKleRig(MSD+hBJmU?XZ8cMVzbj<8zV>qYvz#NjZg9Sj{=W^@9G7#IF6vtaM_ z{4)z_ukZu(VF?8M!)e;M$^}>`s|FIR<!=dp>o6=nTSPe>nF~l`Y>Ws!7{79#;SA9S zTyQE{vh`th@Ry33I@E|qxs8ngR)!oMGU?Zwn@A}aDq(F7n2G64r?_I)n2A>v%WQ%8 zWa6DW?(-$qnA|de$5rF+h}{+^+i1H_SgAXA{D8C*g8q=_fq3zWwm*x}fAJbWM|a)D zTUOkGP({kDn}#VbwB+DBS)a&&_ZHz<g3Y^Tnqvsn9Z-_O2$3=<Lw82OIa1-e6r1<t zs)8mv&?Sr@YSBfKj#&KcZ6J;r(||U^xI!e(FItX^?lsqPs*{(3KM_2%(@fle6{4+T zqTLyN$}0NTy$2i3PXQb1<mm_S#)97;JQM1ijfphpa7noz(Pl$-sLL<^yk;x)vzh(M zFO40p$MeeZcaq7sj>LvlHw=jWwr)RZ36UB|oG0w7qmt^rdXcCD^X=eqb)=L5J)My_ zw^unjuU(nDc1Lzi*UIsUS+iQIdmMUwW5+~s&W{b~@cLED>8hPegY@a_>QFVh5-bJV z!9_DK!hc$V@kG9tST*}vEcwm9@hP&LqzuSULrS1Gf$Tla-16w?2XYE69&wy_pmUmu zC;#3fK$qztPZLi>o4rRM=LBH^V%upQ8=7ihiB0Wqz4Dvokb@XVQbg185vP4~@a;O9 zjaXP&RXFI|Q}LBZc^D|>=l}a-ESR!NowBN6vcwY;5P<Z@oYH}Nie!$&fT(WJ$&09q z!@q9RunH^3Q`8svkC=*5S!2{6cEJnSDQlko3wL8bj&{Zir0y=)nhsm%MDTZ3FQcYQ znm7*V^UOLmy7(sh3s%;8Vjz~_lOfSeBYGEP^IlS@|G)&QQHc(P{G>v2i`z@ShP*@_ zwkb-?ll|yhpL1>lBUih=B<_McvEw$$8^X%GDi=k|KA~>&@V+<@!oyyluO)zcKgWWn zT_~y!8QiGhVOjgW=T*es8R#cF1NFc8X_-q1<2aN=3t=AoTlEtfsqoN*=Dquemx2o8 zFHg}G?W0b2#?jq$J{5m{e0quAKsz<A(n{`EI>WXcg4hQAfIX0wx#1V-Y9qtLf1Vap zwYB`9Qbnfq)bQZeC+|y0Ncf_!_Wthh9?g)|#J6a32Y48Ggk0-EL#;WVSKOeLpaWdu zHyxM8dAdtQ%E;FC*odSB+Vgm)TXo16a5bO@TFF_leg*bJpXcLw5ZWz`E@5xR=T&Sr zu;^%gH2}H`mhe{J8`&PCtV-9b5M}(QACd$b=M4Y6%G#G8`oA!t(OjlTO+2&GsMh^g zBg0!mWprBL7Fb5!k-C6S7$q!B_UIa20NxA4pEB*fXD0lgxiA&ia*4~sNMxvl<+gdd z@nL~Y3Fo$<2-PVv&9QvHw#A)?nhbqv9D$U{(-zQ>yzrj8N$);HtBU=IriTD1K&iUU zWkNcbGT2ZiKX~D~@4c+=(-fzZD?bo^JV_TmUzllAWMZBT3RiY(1<UnFY1r*LLgUmq zs+g6O<)xlhc|@inn)eB%GpPwm{aMHo<mjD=@f9CnVK+zt4~?yH)9b-h*=*yf&WSSx zFRPJ|HRg8H?&`huCYfQN737s)<Z9M(0eZ^#5&D|<z#1@L*?n1)*BMNY*G(G!TQK>p z<o-_pd%(}Sa`JJtZdvraYVk1i?Qa!~6(x`So&?=aYyb(N>|?;ir>BT$tUI4)7s6~~ z(GnZ4hn0TI0#-m78#eT(z1JTaURQpPxH7;jY`?Zy{6D!*c1x)!M0E4=;5FDKliVev z&z>Gby+IcFw(R==^9S>`RP#0HRgE5q`uS!aV1DI{nAbDo_8F4+?(L#NBt}1ixF;_8 z?Tbxoe1M2<j|XaA&>L6mu#A25tAKO}xwYyc;u59e`wZ;{>UuG89KUOi#?&S?Ip`NW zGf07cfPXF}xvY~j`xAAm7s(cqHFys`kIw|?^(tgg=#8wm{O^D%dtT{8j#u8f<2lf3 z+WknIoz6Tl>@{eho+>{OU$1BQpp{BhO<SDS-DjBU%*_-t>CM`83Sopl=FH47>9}qh z&ilNq^Tgqv7B%OWCWIhjt#e2Fd7lsr&YGLN&uO?KH+hNfDUD<wg7k^wjk>p)7utVQ z73|3q!9{z$G3JrORuVBiMu<hXFCy!%y{+a2!Y(y4^>pTd<_3(}?TEhCTiSqt9rr&w zgxx1sH8hM)d?+VUj@lhdNq|H1XY{Z8dDS6=*c+N}_^i^6G4*>=M4Zo=D-#2AmHDw` z`q(+}xoycV4im>t$UfcV1UM5mOXm0sJ7M|w6c<>0xnhzxC1uIchu?hi@*$Ajjeo2h zG$#sE_T7Y#xw@vj+<Eu(qST}^GiaX=C(C<9GhNncYGU?l>{DBFrtu2E%M2rMJ4-!Y z#oIY!M7W0%Hkr4<ejKUHYL%|7RCD+am=@1;U34xu9~pVs6QgqE8tsuQ-=`QjD*ERI zDEyZ8zP&=)Ex3JQGFH0o8;;&Gb_QVJmnio4uwMv^OoMl@Z$`R)xrM#^g}SrIlw=j< zf|kua?b;?qNeE|R<Wn+R2CB2SLNE_7#c0zl{t-|y>k~dE!L7%%xcScHMN6YN|IJya zM%zOA<K`GoA|gzIJx^4a3O%iY>LhDvjaKFJ-ndkoVtDPsu$9q}Xa{Kmx=LZrTnqLh zTdAYsF_2CHtoU0P7Bb=wWlbqgJ4)bETmEVwnA)A_nE|}D3Q%yt41-*1b^czA4j8O( z@f>fEh`@oA<&DoqCRozf@*h97KpU%I-`J=&Fxn|voPI|Co9a&0|0mV`;npcb^yfPP zWSY`^!aYX$1yxT%^5*RHm0B>IIT=iy#mBK{H;l;`Z4(LJcGeI<fFh^i*B<E4XsHqS zy0$29C+_kU!mYt3F{xmD$V#~aYMlZQLe$g@$YW7nyFq`Pe+6bzMk;3y{PDl-*m_q( z$|1#DY<0VSReparH=V0O!op%?myPKctiMp2ZCc@`+<o$(?I}v)uETsqEubIzAxQJ# z7_(9a__i*fgalf5!U)8W&IsNg=dz=24tL;F=Aqd2aDT1!e<B;qS{9Ai%h1MIbxR)o zs5StA`6Y@(X*N^Byhu>Grn+O>o=dx!nWp5E(PRZ=$y2zMh8yf&!d&b_lwqUoQtRCm zKU}9I08z6Zx0Pp3HL!%O&DB7<Kh5~usxwR;*pUgRs#;DO)`4Q`c}+QYNMB*FhRVI8 zpNL4-|Bl;ob(~0l-*s|)2M+1YF$yb|&jU63Rb@Z0t?5o22m4Cg1(~ln>D)m-VDRKC z=V=usMT8lf=qN3J50u1*PnX9JTl3O23a0}5Dy#Di=QftgY;;{g5Ut(G*E!jCf?qs$ zBFb&CdODi4iU_i{LaWOu(!LdA0Hl8~2R0zHLu~a2yqAlVrz0@0%#IRUzuW8T9%i96 z9B8qOvaoM_Rv%*e758{eIXyerqGqxmXGJf&`NYuhE{|({E+s`HTbZ#OrUJaR6v{II zNH^LvHL8s|@Rossi1NvZjYZ}PsCAWiDOHPLR(hg6>94=G`azlPE?GxN$NYc|3f*>w zQ(;^pbvtah{pX%HsgDR0Z6)ld(^8rp;|+)&W-|}C3B{Jf?BmYFQwslf*atqXGwBIP zEcd@2iOURV3xPKn!mlt>zW0CGIdQP_71k(^UmP|&MU9k{Um+)P+U4^m9wZvu36s}o z_u-he(MyasML%~&|Kcg5|Ki%1-|C17aD3v)aN<p<oTE;Zl`b{_V7hEJ<_XN?zrMyM zFDF9qf#2$@!rYX;_IFncv@A4Z1KG>U8|0J%HS0>S0wcEAXDWnFo5V>Z>rhuzO5*?s z@;UiyTbaHBN&X!XSGRj@p-lER%%U;v&zD{o9^lXU`243l$PdY1@R?QP!o=@X!$Mo6 zy5#vXs5-y63tAKGc<kv{xQc2%`D#!XRU{s($crk?H*7GrUe{+8V}F3>`_n1x<iB|= z4*r+NZqWG<G5ntlG=*L8fv!O@o;=qY8i53=Mr@M~y0e1H@geUZyuzSVbvr}l8J{N| zVkPD=glX(mf1ss;2GoYoN2Tn?=qcxMe*ToggbzWvY@uW8kDQCM4Tt1YCE)vs(o#X6 zI{VqLB%hn64I{0f1lWhZ>@x6-izXM7ZG0Ob4`+WlchP+5o5Cw6DV8T<l*0DZqaAkB zvx2WlLO;{qf9d>X`clR$tK4yTXfS^YNBIa@7mYJ_I(JQIOw&kmtZ~`QEd3X=?9%IP z@=*N@m@`S~84aY?L3lc%aW`=MG(B%r?eQp7iqhNzeEY)o30AzQDSc#5r<%YZ=1QNt znvppB14_UzQZ8LuA)j$9rGjMXG6Bk%FsN~$>t?RFhB$3aF&eE>2m}Bb=(G!{?q2#z z3me9+<vie^S0S%t@>65At3ZVyc%@>SEzm`=A8n`+r}O9+AYLh4u6g_+2)(NX=`~-{ zEg5}dJg)G9hHt{C1?@fDo*;NkjDaplgy$dQjWTqNVSCCqCGq*MCFz_h^lK{My+kO* zCc@Xx8<h{OPX(A^CRdF&92O<M>SzZ42X11XL5bh}9J{K2SB{1(w?V9S>=);F%~avV z=9phyJ~35tZhRv%YWbJtM@b4R#5aNT{^UbP1yzh?_?d2jC?%m!l-rATOpTybTN>Px za|X|ZGH*0fNr!r_>(J@RPP|w<CWF^Wrkiu1@}uyuewPsm{DmrOZ*HftejNSxKaDul zOT}M)vSsSt|2{FzdSpzQ6MI^I7l~xs>-?Y+hI5#Zsu_E2Yq3P8`@-KCZIcW#w)R|@ z&c}W}BVF}($n*%C61zeqjQ62EclD`m^O0s)eW+KtogAnylV0teB*RuNxV2Pnz)Vj! zjB?RMY52ugi=~R?rIk6Njlg;B^P#PAHHKAJcTh00XJ9yYX4>=Sb6!;Mq<~j~iLWuC z1B)wNog2f}o7WXav=<*gbf6>0XiYbI@eR_V;5chvwyeLk`pVD$W^5Uq!M%uH*q=>< zqyjCK2evOBMQnO(ZA<Fx3}xc~15I=3Yt8{XN`E<n9xX5|crGo-kft=2QIqeizI5ub zA{+RF`l8f$$yHRu^KSalcvbHY{mp*^R5WfAc!3{do3@S2TRXC64PDfW4&kErF9qow zty$@bi+n#l@NX+vqvvh0${o$-RT?=@eOPBN6lRYbHxh*dvEBY+ZZJKCZ1sA>K#gW4 z6tW+<K045<*st@KqGY2X;0tvr`bessO~Lu_C<f{Vs;aivIe+CSbqe55*yuyN_a~UD zfq!@Wg{gn3Qr?X7`wWM6Y)n)K@L-_X;oIM)N6cap5}lBile^=cakiRH{HPe-C<fGt z<q}#p>xrSiN8eZhO-y1VaNK<!<P1TE-P-$s#fDe^P}WO*hJxdu^43`mAJMtKh<`OE zsdcpQUou!c_@CyV{|{a4zl5@XUy=+w>|bv~cj_PIOy<9N={Y;<KkOj+|2pq~Zs`Bz dybS{P^uZU;<ghOkB>pBwD9NkImAy6#{$J8Kq`CkA literal 0 HcmV?d00001 From e8ac5bbbdecd6e15cdbc0949d0b00598ef52424c Mon Sep 17 00:00:00 2001 From: Michael <michael@buchmann.ruhr> Date: Thu, 21 Apr 2022 15:32:41 +0200 Subject: [PATCH 04/10] added picture --- docs/report/bom.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/report/bom.md b/docs/report/bom.md index 89261ba..a15c000 100644 --- a/docs/report/bom.md +++ b/docs/report/bom.md @@ -4,3 +4,4 @@ title: BOM Generation ## BOM Generation +{% with id="report-options", url="report/bom_example.png", description="Report Options" %} {% include 'img.html' %} {% endwith %} From 470c6b9d776545754ae19467551eec527fac2c9b Mon Sep 17 00:00:00 2001 From: Michael <michael@buchmann.ruhr> Date: Thu, 21 Apr 2022 21:42:02 +0200 Subject: [PATCH 05/10] Added menu entry for BOM report generation --- mkdocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/mkdocs.yml b/mkdocs.yml index 50cc885..c4aac81 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -93,6 +93,7 @@ nav: - Packing List: report/pack.md - Build Order: report/build.md - Order: report/order.md + - BOM: report/bom.md - Barcodes: report/barcodes.md - Context Variables: report/context_variables.md - Admin: From 3eef0a56cac8323980a6b72eee57f7865b1e2e90 Mon Sep 17 00:00:00 2001 From: Michael <michael@buchmann.ruhr> Date: Thu, 21 Apr 2022 22:05:02 +0200 Subject: [PATCH 06/10] Added example --- docs/report/bom.md | 113 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/docs/report/bom.md b/docs/report/bom.md index a15c000..f5cc11b 100644 --- a/docs/report/bom.md +++ b/docs/report/bom.md @@ -3,5 +3,118 @@ title: BOM Generation --- ## BOM Generation +The bill of materials is an essential part of the documentation that needs to be send to the facctory. A sinple csv export is OK to be importet into SMT machines. But for human redable documentation it might not be suficcient. Additional information ist needed. The Inventree report system allows to generate BOM well formatted BOM reports. + +### A simple example +The following picture shows a simple example for a PCB with just three components from two different parts. {% with id="report-options", url="report/bom_example.png", description="Report Options" %} {% include 'img.html' %} {% endwith %} + +This example has been created using the following html template: + +```html +{% raw %} +{% extends "report/inventree_report_base.html" %} + +{% load i18n %} +{% load report %} +{% load inventree_extras %} + +{% block page_margin %} +margin-left: 2cm; +margin-right: 1cm; +margin-top: 4cm; +{% endblock %} + +{% block bottom_left %} +content: "v{{report_revision}} - {{ date.isoformat }}"; +{% endblock %} + +{% block bottom_center %} +content: "InvenTree v{% inventree_version %}"; +{% endblock %} + +{% block style %} +.header-left { + text-align: left; + float: left; +} +table { + border: 1px solid #eee; + border-radius: 3px; + border-collapse: collapse; + width: 100%; + font-size: 80%; +} +table td { + border: 1px solid #eee; +} +{% endblock %} + +{% block header_content %} + <div class='header-left'> + <h3>{% trans "Bill of Materials" %}</h3> + </div> +{% endblock %} + +{% block page_content %} +<table> + <tr> + <td>Board</td><td>{{ part.IPN }}</td> + </tr> + <tr> + <td>Description</td><td>{{ part.description }}</td> + </tr> + <tr> + <td>User</td><td>{{ user }}</td> + </tr> + <tr> + <td>Date</td><td>{{ date }}</td> + </tr> + <tr> + <td>Number of different components (codes)</td><td>{{ bom_items.count }}</td> + </tr> +</table> +<br> +<table class='table table-striped table-condensed'> + <thead> + <tr> + <th>{% trans "IPN" %}</th> + <th>{% trans "MPN" %}</th> + <th>{% trans "Manufacturer" %}</th> + <th>{% trans "Quantity" %}</th> + <th>{% trans "Reference" %}</th> + <th>{% trans "Substitute" %}</th> + </tr> + </thead> + <tbody> + {% for line in bom_items.all %} + <tr> + <td>{{ line.sub_part.IPN }}</td> + <td>{{ line.sub_part.name }}</td> + <td> + {% for manf in line.sub_part.manufacturer_parts.all %} + {{ manf.manufacturer.name }} + {% endfor %} + </td> + <td>{% decimal line.quantity %}</td> + <td>{{ line.reference }}</td> + <td> + {% for sub in line.substitutes.all %} + {{ sub.part.IPN }}<br> + {% endfor %} + </td> + </tr> + {% endfor %} + </tbody> +</table> + +{% endblock %} +{% endraw %} +``` + +### Context variables +| Variable | Description | +| --- | --- | +| bom_items | Query set that contains all BOM items | +| bom_items.sub_part | One part of the BOM | From dfb1e4994a3d94eb79278edb565bdd6e841ab08b Mon Sep 17 00:00:00 2001 From: Michael <michael@buchmann.ruhr> Date: Thu, 21 Apr 2022 22:06:55 +0200 Subject: [PATCH 07/10] reformat table --- docs/report/bom.md | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/docs/report/bom.md b/docs/report/bom.md index f5cc11b..ef98406 100644 --- a/docs/report/bom.md +++ b/docs/report/bom.md @@ -59,21 +59,11 @@ table td { {% block page_content %} <table> - <tr> - <td>Board</td><td>{{ part.IPN }}</td> - </tr> - <tr> - <td>Description</td><td>{{ part.description }}</td> - </tr> - <tr> - <td>User</td><td>{{ user }}</td> - </tr> - <tr> - <td>Date</td><td>{{ date }}</td> - </tr> - <tr> - <td>Number of different components (codes)</td><td>{{ bom_items.count }}</td> - </tr> + <tr> <td>Board</td><td>{{ part.IPN }}</td> </tr> + <tr> <td>Description</td><td>{{ part.description }}</td> </tr> + <tr> <td>User</td><td>{{ user }}</td> </tr> + <tr> <td>Date</td><td>{{ date }}</td> </tr> + <tr> <td>Number of different components (codes)</td><td>{{ bom_items.count }}</td> </tr> </table> <br> <table class='table table-striped table-condensed'> From 5aba9c93c36bfb3c0f7bdb9e8231ac8f74bc1f0e Mon Sep 17 00:00:00 2001 From: Michael <michael@buchmann.ruhr> Date: Thu, 21 Apr 2022 22:14:18 +0200 Subject: [PATCH 08/10] Update bom.md --- docs/report/bom.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/report/bom.md b/docs/report/bom.md index ef98406..4f961bc 100644 --- a/docs/report/bom.md +++ b/docs/report/bom.md @@ -91,7 +91,7 @@ table td { <td>{{ line.reference }}</td> <td> {% for sub in line.substitutes.all %} - {{ sub.part.IPN }}<br> + {{ sub.part.IPN }}<br> {% endfor %} </td> </tr> @@ -107,4 +107,7 @@ table td { | Variable | Description | | --- | --- | | bom_items | Query set that contains all BOM items | -| bom_items.sub_part | One part of the BOM | +| bom_items...sub_part | One component of the BOM | +| bom_items...qualtity | Numeber of parts | +| bom_items...reference | Reference designators of the part | +| bom_items...substitutes | Query set that contains sunstitutes of the part if any exist in the BOM | From 808ec992b738d968437aa5d75f886d6d9bc29bb7 Mon Sep 17 00:00:00 2001 From: SergeoLacruz <michael@georg.fritz.box> Date: Fri, 22 Apr 2022 10:49:14 +0200 Subject: [PATCH 09/10] fixed typo --- docs/report/bom.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/report/bom.md b/docs/report/bom.md index 4f961bc..27a002d 100644 --- a/docs/report/bom.md +++ b/docs/report/bom.md @@ -8,7 +8,7 @@ The bill of materials is an essential part of the documentation that needs to be ### A simple example The following picture shows a simple example for a PCB with just three components from two different parts. -{% with id="report-options", url="report/bom_example.png", description="Report Options" %} {% include 'img.html' %} {% endwith %} +{% with id="report-options", url="report/bom_example.png", description="BOM example" %} {% include 'img.html' %} {% endwith %} This example has been created using the following html template: From e1ff14802448890bb45619d18ba4fda58c927a9a Mon Sep 17 00:00:00 2001 From: Michael <michael@buchmann.ruhr> Date: Tue, 26 Apr 2022 20:20:45 +0200 Subject: [PATCH 10/10] Fixed various typos --- docs/report/bom.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/report/bom.md b/docs/report/bom.md index 27a002d..f656d25 100644 --- a/docs/report/bom.md +++ b/docs/report/bom.md @@ -3,7 +3,7 @@ title: BOM Generation --- ## BOM Generation -The bill of materials is an essential part of the documentation that needs to be send to the facctory. A sinple csv export is OK to be importet into SMT machines. But for human redable documentation it might not be suficcient. Additional information ist needed. The Inventree report system allows to generate BOM well formatted BOM reports. +The bill of materials is an essential part of the documentation that needs to be sent to the factory. A simple csv export is OK to be important into SMT machines. But for human readable documentation it might not be sufficient. Additional information is needed. The Inventree report system allows to generate BOM well formatted BOM reports. ### A simple example The following picture shows a simple example for a PCB with just three components from two different parts. @@ -108,6 +108,6 @@ table td { | --- | --- | | bom_items | Query set that contains all BOM items | | bom_items...sub_part | One component of the BOM | -| bom_items...qualtity | Numeber of parts | +| bom_items...quantity | Number of parts | | bom_items...reference | Reference designators of the part | -| bom_items...substitutes | Query set that contains sunstitutes of the part if any exist in the BOM | +| bom_items...substitutes | Query set that contains substitutes of the part if any exist in the BOM |