From 92954037d6eef0837cb728720820b79e4c37b539 Mon Sep 17 00:00:00 2001 From: saptfi2026-bot Date: Wed, 24 Jun 2026 11:18:50 -0300 Subject: [PATCH] feat(patrones): patron Composite aplicado a Lista de Materiales (BoM) Nuevo diagrama D-PAT-COMPOSITE-001 + documento siguiendo el estandar FCEIA-UNR (Cristia, 2015) para documentar patrones de diseno. Contenido: 1. Diagrama de clases Composite (PlantUML): - Patron Composite puro (Component, Leaf, Composite) - Aplicacion concreta a Odoo 19.0: * Component = BomComponent (interfaz abstracta Python) * Leaf = product.product * Composite = mrp.bom * children = bom_line_ids (One2many) * Operation = explode(product, quantity) * add = _onchange_product_id() * remove = unlink() (CRUD Odoo) * getChild = _compute_child_bom_id() 2. Documento docs/12_patrones_diseno/composite_bom.md con: - Documentacion Pattern ... based on Composite because ... - Seccion where mapeando cada elemento patron a elemento diseno - Seccion comments explicando las decisiones - Tabla completa de mapeo Pattern Element -> Diseno Element - Analisis de cambios admitidos y anticipados - Variantes del patron en la implementacion - Justificacion detallada - EV-COD-031..038 verificando contra codigo real Archivos: - diagrams/plantuml/d_pat_composite_001_bom.puml - diagrams/png/D-PAT-COMPOSITE-001 ... .png - diagrams/svg/D-PAT-COMPOSITE-001 ... .svg - diagrams/pdf/D-PAT-COMPOSITE-001 ... .pdf - docs/12_patrones_diseno/composite_bom.md --- ...e aplicado a Lista de Materiales (BoM).pdf | Bin 0 -> 66252 bytes .../plantuml/d_pat_composite_001_bom.puml | 121 ++++++++ ...e aplicado a Lista de Materiales (BoM).png | Bin 0 -> 60914 bytes ...e aplicado a Lista de Materiales (BoM).svg | 270 ++++++++++++++++++ docs/12_patrones_diseno/composite_bom.md | 211 ++++++++++++++ 5 files changed, 602 insertions(+) create mode 100644 diagrams/pdf/D-PAT-COMPOSITE-001 — Patron Composite aplicado a Lista de Materiales (BoM).pdf create mode 100644 diagrams/plantuml/d_pat_composite_001_bom.puml create mode 100644 diagrams/png/D-PAT-COMPOSITE-001 — Patron Composite aplicado a Lista de Materiales (BoM).png create mode 100644 diagrams/svg/D-PAT-COMPOSITE-001 — Patron Composite aplicado a Lista de Materiales (BoM).svg create mode 100644 docs/12_patrones_diseno/composite_bom.md diff --git a/diagrams/pdf/D-PAT-COMPOSITE-001 — Patron Composite aplicado a Lista de Materiales (BoM).pdf b/diagrams/pdf/D-PAT-COMPOSITE-001 — Patron Composite aplicado a Lista de Materiales (BoM).pdf new file mode 100644 index 0000000000000000000000000000000000000000..2634c166d886531a8ea5ec02ddf2347ae8ef668a GIT binary patch literal 66252 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%0AG2P&_=?lTE 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 + +operation() + +add(Component) + +remove(Component) + +getChild(int) + } + + Comp <|-- Leaf + Comp <|-- CompClass + CompClass "1" *-- "*" Comp : children +} + +' ──────────────────── Aplicacion al BoM de Odoo ──────────────────── + +package "Aplicacion: BoM (Bill of Materials) en Odoo 19.0" { + + abstract class "\nabstract (interfaz Python)" as BomComp { + +get_product_id() : product.product + +get_quantity() : Float + +get_uom() : uom.uom + +get_cost() : Float + +explode(level) : List + +accept(visitor) + } + + class "\n(Producto Compuesto)" as MrpBom { + +_name = 'mrp.bom' + +product_tmpl_id : Many2one(product.template) + +product_id : Many2one(product.product) + +bom_line_ids : One2many(mrp.bom.line) + +product_qty : Float + +product_uom_id : Many2one(uom.uom) + -- + +explode(product, quantity) + +_check_bom_cycle() + +action_compute_price() + } + + class "\n(Línea Componente)" as MrpBomLine { + +_name = 'mrp.bom.line' + +product_id : Many2one(product.product) + +bom_id : Many2one(mrp.bom) + +child_bom_id : Many2one(mrp.bom, computed) + +product_qty : Float + +product_uom_id : Many2one(uom.uom) + -- + +onchange_product_id() + +_skip_bom_line() + } + + class "\n(Producto Hoja)" as ProductProduct { + +_name = 'product.product' + +name : Char + +list_price : Float + +standard_price : Float + +bom_ids : One2many(mrp.bom) + -- + +get_cost() + +explode_as_leaf() + } + + BomComp <|-- MrpBom + BomComp <|-- MrpBomLine + BomComp <|-- ProductProduct + + MrpBom "1" *-- "*" MrpBomLine : bom_line_ids + MrpBomLine "*" --> "0..1" MrpBom : child_bom_id (computed) + MrpBomLine "*" --> "1" ProductProduct : product_id + ProductProduct "1" *-- "*" MrpBom : bom_ids +} + +legend right +Proyecto: SAP-TFI-2026 +Agente: saptfi2026 +Patron: Composite (Gamma et al., 2003) +Aplicado a: Lista de Materiales (BoM) en Odoo 19.0 +Motivacion: estructura jerarquica de productos donde +un producto puede estar compuesto por otros productos +(recursivamente). + +Beneficios: +- Cliente trata uniforme Leaf y Composite +- Composicion recursiva (BOM anidados) +- Operaciones polimorficas (explode, get_cost) +- Validacion de ciclos (_check_bom_cycle) + +Trade-offs: +- Puede violar LSP si Leaf no soporta add/remove +- Dificil restringir tipo de hijos +- Ciclos deben validarse explicitamente +endlegend + +@enduml \ No newline at end of file diff --git a/diagrams/png/D-PAT-COMPOSITE-001 — Patron Composite aplicado a Lista de Materiales (BoM).png b/diagrams/png/D-PAT-COMPOSITE-001 — Patron Composite aplicado a Lista de Materiales (BoM).png new file mode 100644 index 0000000000000000000000000000000000000000..44965b734b99d5ff728b498c3e79d77137a96c43 GIT binary patch literal 60914 zcmeAS@N?(olHy`uVBq!ia0y~yVEV|wz!J#8#K6FyFwHB8fq_A@#5JNMIlrJXCpE2v z!96uEwJ5P9HANw*QX!+Hq`*pFzaS?uucS0LM=v=)SJ1#xhJk@~L1suq2~3=Uk%57s zV$R#}?7rJ(0{`?6luP{Ze^T=FR-V+7LuMVxz4R5A4oB1+}Y}m+sa~6C0KFM>B8_is1>O3rv@@b!b@I{T0?f#0Q zp9U|!{`&CoFZ&Fk#Y-9{`UI_Kb1_g zXzhMzvcslYh^MM~_x$zzD;hpWc)j?4;cev8U!uaAfhvr9U2b0Y(Mj;zv8?pcq>dk3 zla4L;!kgstT;=gIAFj{Fo*F!FE2|~+ZbWnat($vl=7O}jK@(2tq|PmJT@=o(YAo2V zGMy_<|Ke#Y=OdlhoRdX%pW>+%@_hK^`zsqwEk*9C#A_W37fn=5I=J%dAF-N0AO3Cr zpLgiJ{iO7{^-C{Dh2G$PoAx*N$J(cibtk5pb-AdqGv4a+4@kV_uw}BA<=f}dGlN`t zCLel#<=!NVZ`uc~951@8%P`J$JezT{;?3q)f3353{tc2aUY7Fi&4zfp+~eyqp5{M2 zenK$ItLcQ?`V}0p^W?+B?*0G8XT6}mo}cOYt9QFk{oz&ozU*%P;oOvr`+3jbC{FR) zx~Du|!Mc5&n9B=$0ltdQxrPPe|GQORJnOh1`(VDoImdIWXD!~oy4U;evnRH86Hlsj z?eFT!Q(T_qckfV1?^VZ=m@tt$(VeZ1vzB@ti%dz=`DWdb@o{ssP5F%V#!4GDt&@E% zIXz{%;^fZ74>x!Jx4z<$by>sf{*stuSDu%+?o8ca8RdUaW6{cw;XIRLR@rWUU=f)4 z-Ak>b)&A_+>3V@it9s7_&R8MRc!McXEr;=+V4mos?O9udWF{|>5p+7N=CX#JV`n^5 zs>UUQin(kX(>fnTiXTW$-?nUVi`&FvM|RGxpRJy;-q}_UZmp5NptDkCb}fm&YPGI9z1i&FXMRV{ z5KrINhSJKH)gM2*V#4}f-ZgRd&VbnTBGvS5)4y_X-G97ZKwnd7j*(c&YoY6kho;Rt zck0P4>2_I)Vv{$8k-*m)RbfRV;n9Nb0I|wC+vk71LXH zwJ1lwQ`o`(Hg5ZEeb&?SBGgvwpWN&FNn?-j?Nz)Bx?=L$A1*uEy7gQDyUcQKt)zgQ zjV|?p1-->fc(%KJnr0qzqgt*>ZRO0(e`4*9v_=QZcnUFHNr-<2&M1^O=e z=~jtt>{u-QFK=df^wp(GhP+Q|=1JR^My#3fgyYzcB(7Ocr*U&eDXF~>^6S6@YKAZCiRtZcmE7ZpMrBJV&4P24&jmb1rfGl$Op8_dOADWud~E~! zk0Z95o>ubnSwH=sv)txQe*0hD_mb_dFE?n&iY-07s3c+vU-zZNKr0=ucGs8oF;kYw zL|^-SQX))*(P{p#SfAB(+v~6YZ#`DvrTpS<^S`+TA8IWm4t%(&8c}upv%K%|jM8Nr zt{m}s9&E4mqQal^(I1_|elrqQDeZam@}>V%?h1`Cp3hgKp4!$L-ZZ$gS9p#Avv|lt z%@0YB=05A@@^Ue9d+uCOS1ESq^RbA-#xnf5URBC59z9X*88g3&&t-eKMxc|~mw};y z!PCVtq~g|_xtuk8*MA+?p4vKLs*B1tFOH4+S8sj4wLN>~UDZ{)0s|NIMs-DJuLyF| zbe-&>BvZp2PY%z5|NZCoex84BPUJn^_uqck&O85m=FIYEXJ#6w zpZj^vGX31=L-h(AO$r=MYvT14I2BH;>uwN_+c3dl&BsH!_VfJb+r7QLeSP6#7sj9s zJK_aquqC~CKEGbhAi?2im+0L)cdSZZZOOlH_iz2*-`_7!o-=KlTFnMeKR>^-v(4>G zUrqV4ak|&8*mVsaUS3&uc5Ga|I{Wsv-1;96+4COHwJz5PJ9qBfTur&cedNmEr5-e0+LTLo(I0F82!U6MU@3>t$K6 z*MIF_hg-&0R>U=a8-U|Y`3WxlhyxW(qKt2#ABb9ecB zvm~`Udn$|9Ms1amm3{gB_4@s0u2vl0_HpUw=jC2oBWe50w(84?vuCHu9o6}(V8FXX zrK#Dn_}QIZrQLE`TB%lLZ%+I-&AOtoD%ibGMzd;zynWrCq@!F`0m+stHqLu-cXxSN z*|%nPelh(xpXX1_>OLG~e|)TWar*4K<-W6*ZAh=FsYyt9aB{MG?^>pR!FIy=GJ4-Pix?ub2j=~iYBH_Nf4S-VPK7ww!?mw9uENYb4PD|iC?*}9AJ!krkwMt=hvsx`j@jMrY3)p78F#x zJ3sQ5V}g{2=eu|B_W$|RUGn>IJHM^1?fJRZ&mTT?^q>1;<`Ui1Q&SA}E_2-Xd$Ht> z(O%2g9R-bI=jPk{pXRFGmUDB`hGQ>WcfRn-tX>(kH0#QWgQ7K;zAZ0(eJyaK$L|YT zsyVyM-kzGOeSKf;@9gXAJ}TlSM>rN{r8vwC3xt`5gNtfoiT#Z?LbX)H2j7Y`QEq62n^+Ns9pH>)s?g{uZYvSa|%Biz% z+=%#BIPLU}qVU>}kB%-_pzw0%6TPsng|{~*v+tiZVS+<+$=T#6qj@Iffd`$A>V)42 zV)FVPt_MmbM*>n(mQ0@>-Y;jn%x9*PzV@GQ>-YcL6}~=h%Z1J9{`+jFRjYAxbC>2W zzj*2Uk!~-6D*cDkVq;@hvOGEE7!`J7@`JQjS5|KEZ)W4&w0U#yA(J!OOSd2E>FIg! zAmQcFOGOzO8dKNSRA1_mG%hMGUhY5t-uig^y7@DW(}lDGH=fg(^|H+1_ROiyxA)ar z7c%HRfByV((c4>Ff6BfPozS-^`S+KXiv>jHe!sBLx#VO>51*`6NS~$0m-pfEwO@aH zOjc6&%H3%)MQw_S+NBSgc8Q6JF_G&9q+*%mrRsG)?+Q^~HZgO`Wq0ofXDn8$slD~& zPrJLTw7a|e<@DEr*JdcrZ0s&tdF;XrN5ji58i!<0O}JFlFz>Rmd!I&n&d$~6PM=nnv}tbZ8@5dRSM~9z_)MST_xEh;rW$ldFKxPX z`SRrZ&o3@^-}2$fNnv(&_P0KZrDhdGO4z>B`1SPmmKlzMSArC+3m>^WoS~(5`NC}N z`o}+nIaQ|zT$*p>F0UQ-n~1Q-?w7Tmt7&vmu7@dg@@4g^zC_f+4y8`?5!?; z=oxCPVq6fYcU3~lSR-wgh5_$=zs)5tFO|K$r3nh3WehWWj}(cozWmtjv`F8&N*~k5 zhQ;E0s|2e951QuQGLc*IWJVjOt-uVnAfdgxE++eM@BjbLT9m7X(J_@V_h`pz~h5o29;QD~My6_<}PPgi!%@|N72o1T7ncvy5s+o}8a>wfzxGM`YL zQs;A+$9LyG!Px0V0k=M{a{86QIY%=6>X9ekY^uMlS-e=;Txp(tn5nZ7^Ym()sm_zT zmz(&uaB*?%DtS5S%br7ev8_F4_q>`jM`ov(_|xvxdsDXM-o7L)yMI^malU=;J*(w{ z&sLmz8dpY2|L~=`||Ibe}8{}F{%6Ya`~MJw~uyS^MkDdAr{|4Q+MNTQU+Wta(4X z8Yn9_d;Rg8toG4*$IhLe?(H16*Jb{fG*07?zB={%rt?W_B1wfT7C%z!g9JYJvs_xJbZ zZ0+w=s|03!5Sk%9GnV1Z0+VNroyP6iH%?T9_R`gmWIZ1NIoyVHx*F~C=mURX! zcI$n#KVN9uWdXL2vAb4DM&FuuL`Hc{)y6ZkCrz3Zv^DE$GdusK$J6G`^E>?Ha0e{<6ktU*MSqq)wy%6O10wm*@$}H-BoH`{!S)0=fZ-63!U44 z)Mm_lJ>N|8a)*@P4z<^}x91C&T3T9O)VICORV_3*@K0<^%q-JvxAo=A5@xO6_iL3? zD_31zUGcLs56frRR-0W_I#cKrzCJGZ`ntKRSFg_au=rK=?d$RNvCI8r)6<{-`uh6# zv16|UXKnDCWnHd!H|F7qn6!Yvz(CXNYfD&oI5{7BM?6ct)GJ|@BeA#t+KRyD{&`tW zhRKIylm*nQBg|>gvHqb-ZpHrJmZ7b@kPmnZ{Da+cLZ(B5tgU-M!>_(B6oh$8#Sa>veQ= zobvR=bRox|b%x2SXMLQp_RyV4H z?P|U1&e?J>U3L)gVDe#h6qvyVY9c9cfY>aK0xZiK!Hp)60xaCdOa+cjHg|WI>&rGN zoCqrY|F717m&I|Gi|a9N0T#z;t9p8PKmt|6sbTz^l`i!V#s40;d!vpTvb<=x7x6H`jIFsm-U*m&&V z!G*5fV&VUTK0iB~IknSt*|SgAVL3z5MS`(%jq2Ykq!O z8@1J{@KMX5bB8XxySLXm>&gnQ`phRMCT`KHm0lOJQt18$m2l&ax98hdmwkBP81?LT z=M?{on^I42Og?@|>+jMFw=V7|Oukk3@saD*%P(*F9qyU;A~^clQLW=KRn|)qpFMr* zJHw!H()GJ{_vYWu(hml`HFFXMdVe@VJ#*JY%QlWVK5o7le2deOu_|5T$gZfsciMdOx7{oOy_ zTP~~!REDIf+AURIv$~F5TN}MS=cW^Pe9gz!4JFICns49RUtj<9SH+(nAGg>fAL}{Z zFYkTcX{+5|X(6FS8#Wu5ta55eUmp6gw>-Q{z(n{o{wgg(XXub{=RgTaYp(uCK^sNu|RIqtsIz@43sxZk<>wq{w+W z%=G%n-0O!-d}o`9Zo4e-*|Wc>xOnmYuI}#cuC9#6u!AN7ERC681ovK?rXBw7Vf-T2 zIuo{VD{&E#3uRFszI+K;*RLJ6#^dz&cXx%^_SOIYmv(kmp{V`Ig9jZG(-Sl9-Me>a z^X1d^0XN-GAqh1R&eDN9G)Iu zx3WNQ-J(g~Y(4$MlYABn6z{yP$TfMl_4d5GLF+b@^8Wnt^77wbUmyRPCuN>@Cils& zc|SrIZgFweGu^Ro`I$35d7)RnhfMN0+`aqKG~MV^PZ!NL&;R%P{(rao!YqynQnp(Y z4l;Ee-jH~B$JOic^>f4Q|9-jr-{aT36=p%}0(ZPy(r@?6nqU-S8`8S;A7hYtnMBobe~^jh=YGjZ{qw-0V{*8Tk&{_rj* zH}~V&DIqi6^indX_|36!jMfTYcV?|tkKi>S-knz-9OKyk>(%Q0f0l~rMsXbH`2O

+0;B_-<#-&!W5@gU;E}GN3YihFkj8)#3e*Hl&}I%PalZ?%v8^^?%wKy2}IBu3i_r``Djp(N$J|k8x!8%sV#Y^xZz!Zm~jN!8>BRtS77a zt_oVpWzO9f6SB2MC$_AlWKHyTz4=c?_C38O#M^pBp(*p~s?eGHUAPbR&s!I>^U|Km z;+=+vE}2ZftvCJh49?J%L8|X^9i=`$dh}@f{kq$4^)E8*d)lVJ;gg(_sAtqW%dWO6 zAVA=fqy5aFJQh?=V%e(vg`Ij{+oT!`GcAK+F zL3+YN9VQU})y%Y?pPotzutcs^QdWj!qJS313A}c1A=MBlR|P0IfU3ZpkhXef>)Kx> z_oO!nw$4;J0M2p&EuGpqc|}3-@%IxCxBdP1`@P!Q2clmd_uKQy+06JX<~{M{t*xt< z8urRfuYY`u_u-LcOCBHZ|Ni3Q;lqcUw}r2Z*;)Ploz(k@8BRW}lJ*BpAl81n%@G(8 zu_NgySJb;JD+|C?)=Z%-r>E=Wx+$@9%GI_7kPmOP4M^nK=K&r{lfS?yFCpJb9sY<>i7oWpxyChtH8ZA{U_Bp(L^}|f|%b;Y&c-cTmT|uE? zTY74$;QEX&dFwZZO|xF?bbs=?gRjn-Ecc)P?)rN9>))^JC``V3B79B6#IXFkyOvHk z#4Bwk^38T@=H<4q{eQnjXEy9I;=TU;$Z=tRYe>eJ(KgY-&dzSj-ya_zuMS%)^zQMq zXKtrsqWiuSJiRCU)Hp3YeY$S+wydkG*!ksZK0G*Be!tc{=Z3-GCQ(D)dWDZ&MGbR6 zrIECD_&Ocl$daFrkM}RXx?zLCzNKEE!t9~M!@s}3TU%I|E)%Rnk@ggbz+;R_Px>#U3CRoR_QWYSy^3M8$DhA*y@6xKY#v&7B-1pcS>V- zm-&9t1tq(v?Rl}wd?b^095~=GFLq1JvVb4cq@n3;#$MrQ&g@@bUOGBDy77w@ziZ4? z_#0B9|32-Pro@>&VI}tRKFpEwmmLzMPAqb{>iLCR|8T;ytM`#UTlK~!9PIU8?N zQj%Ddt5V3C7e9~7|AraX8>aok_HojaNzS&;le543uDNErGw=TwyZk?U@=_n(^(hXW z6JKZf`|I`i$J6S6Bw8o--gC6Aty)$8pD*S4xuZ{?%bz@R$D*c!|1|ro+uJW|hkkOi z<^@%K96pQJ?$bYICv9kbZtvf94=+Cob9Y~!b}S|3=$oHrX)m9>-K&1QvfOHaPUgug zQ}+LzwyomhZ(iwZkHXx0Uwu6)E??-YGuy28(<$w*JKuJ8PUMwh*}22w;=JR1xyy9T z^W{E#D*FHD^M_TT+EcZ|%MLb`Z{D=cBv0netEjYVYdE(YZsXk?y*)1^W{$4yO1Xux zJ2#!ae!cqHnUDAGy|c56yLgdXwCU5AlIYE9i=s^Jxw78f*}lW}@}+$XPA_C&W?uc~ z=I5Pv<}LM_`e@cltMWX@)gl&4`Iid8A|uh{{G0036Yu2mkIDVld-i-ak9C2~vYRJr z?;aO_Dr+3bI&*$~%I9a5vAg$qsTk(P?Emtm^iJ8TyFd4-yC1(){e9h{-jyp?XIlTg z6c}G?YHqQ^D%YmM;MB>Jg-=g?*t6$M{=T1AZr*&kc01eukH`1z*r9racMCJ)k#~2s zmoC4izeRuloVU-O?J9lUbmz|D=xt~CIX;APbn&SNE$p=}U-w|vtQSnxU$Z_x?*G^? zKi{I{#pzR1wNJg>S@pI3;luw=lD*l3eg$X+Mg?|VoR=WQ(R9E>V8*kZqT(q_O{KRy zUwboW)w{(Y%DYeV*pthxgAJTf!+%@dcqr%UcFlQCSxe)a6$>g~OqKcz3%{CxT*@$jzC zt6fyKNb63~4*&M>@c(TROP8$4y1q_R*JqAJ#?MduJ9?$f&d8ap;NC7HYFhl_Lf)1K zj~^eE$y^g+|<$G^S3yVEJlyp0+7AEbr znwfN>pzhy9-`RFAFFh62*Z+Ru!aqsL*R9Q&^XzO(-$rq*?UTIR9`^dm%8iwu_ptN# zy}Q4ETh-T7nVIny+?Y7_^|q|4Ok&FW`Sp5y^!9hjQ4;ob2PP=S=HIzd{r}%XX7+3Q ze!qKthp(!o?CGg>mzKu!@c&nrE&cLh*?|LEcLG;AUVO-swIyJ6*j9hL%IGV_NA6s{ zdGqC=R+c(>FG(+XFI6vXFT*dk;EwzOlk;zLj=b68S-jNOD0qLw@1&QPT1@5FbPD|y zy_@}M=GE0c;lclYWxrbFI$7F;Lx^vgV#A8S!}YheTx{XqVryKSytk?`rxh(tk!wWno@c-8uwe;WQ^gD8zmrJBAS5@5=_&=-hu6w`W z|J@~@*U1ULt=Y9RaByzlI9WGq?B0>XIfHFe z=(2?ZOB^Y*G1O;=k|Te&jfF*yZbG#5vhQ>?<1746_kpT-Q2Cc7;xx^@V zxkSR`#?`yFzm{v?fAS}0S}v8(S@9zTA+hz^!TWZl0glhqp>^>n3eYzVEub^u+(S z6a3OE|NnjX|JU{EW#6u>5I8hh{ig3Mmg3DvCCvHi>O|MY`y1YIetxhyaNoXrQp#>G zcP1R%-BzP3FA^f^!yGAj*+%!2omp*OPc(bg`mUdU^8H>WRTcWZoW>A&z+}Q)ajD~O zduH4GOYZd%zWelT5C1dG7BQiq$wdpAo1GmR^#5=DtiAq<`m&Xwt7lE0Zf$?IKJA%X zUXxh(bt6yD)2;KQ^6%L^co}yzs~;h2QSROoi+uQ0PvY z#k-WL4&d?EPpsi_ZbtG0ykP1CAAB=zv-%zbi}pTB>9sP<~<1a+Su z?Jz%qN@P8gogSYYf)_TizyIQ3HRIUTtvsyNkB`Oe%g#JGNpp)qM!@v^{dX0*B$lS1 zoyF)sf1Xg~kt;8(C%^vi>hf~g8El)RmRbJ!<{rY3S>h%B{nLr=i7#51E<2RPW{BK7 zYh(21uEl)4jlt87y|MTZzr(WHP^~Ke%xvzYJyx<+zm=;ZgZP$&u6FaD-uCzR{omc) zo3F3yeR2Q)&m9S?=KU00$U+J~kRCdzQVpFg-5rUCi~VcM_x~s;aqN zdI)O6C@F+f?a+4uKFmV9wC;7yS|8l2~+CF<}cZs}dk*ge}P1@Ag^ zXwA;z`&>M0ocJr7*&M&brHbk#{V*3vkUFu>YRyi?!#5`%D!(Qx@cK>{Q-5jhXwg>`|n%S+dcgFSU807`Wi`vPggWbo@$8aY|W~hZGQgo@wpzgwp_hk`dtkMDWUlj zSJ|nZv?|Lvx86wk=iBYlHnw*&y5}^r<{9*!cz5UIihzTQv#*E$TrKR@bE)|9GJhAt z>+h^5Uz-1psZo3e+orxpFMsYxs9JyNsAg=^eNX%K(I@3H{(KSHYdB%9wYYnKdD^pM z4-Z#I*j0 z#KyARmdTTqZ=Tk_{`goQhpj1BtmP?I@BJ*!cOKlFZO#w!K<<+h^Q_C)3AC+wr5kkh zxXSlON7kQ;wZ2~+x-KU2S%Oq%j=Y_XTfHFDr|1^J#RmGZUP4D>7Qgptn%BmgUC7C| ztZ~iaid%vC7d}5rnmgx`?(Lct@1@UNFw2>7cUP&h+7;vWo7I&&FK>?Bnx$IRAg)tk zuAS}u_}Ia9>r&Is&N}c_{`aq{^K&fc&8w-J`tY{>*8Usmb)5@-{bicL=Cm;J{IrQ1 z>mD397bbYsy}xh&=W_y!zwmnIo|$1c+x+}tn?n;!Mg0xe{jykkTlUg?NhwB_?}rqP zb|!xN@@Q*OYDHY!GxPg3Ui!TGdrg1z+kZQHR9BJf;jjL?cVf2Z#ZH)AU2%Ha&pS7& z-ztB5y3ZxxUmc?l^TG=ak=;`@ALr=G?LTM|;3?w&%W|prmwMlKjJvC+8}6TW$DsOO z>WfQDRrvcq-4W-twCt3r?~%INoxP#b?w$H~gYTk?z6t&=idWL8-_NkDF(BhWLW0x@ ztJ|4#qF+9ok{AAV-Tl#N={}pQd2?=e+=Eh8g)jIR~_F5}f zoeG*e=h9m#JKwynS$FOn7FOr`^m+AzmoLo{9FEVK<5Cw_{50{~RPFFTKcA<(JFO`% zzy9>}$(?3w{O>+Jo6UTBTB)K{XLs}>Lyfwe{ja8ToOv&Pz(jzHSAxffIWqNQ$@h|= zHU8mq=Uh6vbG!Zz+rwA*53C5>yC(IG^bEF5)0~vmi#SsQCDuH7`)HGDg47C?xSf2w zwfbdma(aCx->H3cv*V^J1N+rgKj+%dX8`qd-E>S63_eTEU^BA3EOPIxPtD5kGdZQp zORVqD+5CR0V$_^V3u{63b&~bjPe()Y4kW1NTTbjgXcE9#+I!!Azxv9w_0QLue)4-c z>G$60w{ikFzgU60#ZSeh3?zwOIV|7?n$S=#$`<y!o%h?!U^^<@rQWlg@v?)4NkW2@ zNTS9(5XGTkl3-xK+wzE$4VE@Jjtb9ayDPw6P2{Q;*-km{QKYT80lVE^)@!= zq&pkPYoPYr2`;YQNi2Me-<W0~)QJ+G&zJqJ zXPd5m{r0V0`Z_h*~)e|dLzTTSKlUtgK~jjF!qs>v^PbIZEyxjvm$2*Pk4H?yRlPYOAe55$BFZg`^xXnNYdw zSfYeK^G*MSADO)G#J_v@^xfUx)5PB0vptf(q`bUtyLf!b1r7lbCh@*@_sWZI=Q6Cf zS3UP@TfSUcp7Ec<(^*sbmNS2q@IP$RIw3P-p^s$x+!@D;^sX&ZVqUhf)>gZYX&EEP zQ>Sy5CmQumpZwo&zeK1%Q0*>3+UL+1bc z4-aims_{M8h?PP7uRwL(^cVFud?!Hij_zy=RjlV#=aM9^Z%DzzUQV~ z#`eX^xb*1W_eG#&X~3JJ=reipVj}Y%zrFqPa9ine@n2G=e^$0V zHVaa9H=X%uLnN2GNl@sH^Ha5V-`bk}>Q$7RRnSyEk-iXLuc&wL-v_Up^!?J(#6uHT z$y%9|m*||$5A2``BQ?_?gXhk#qWo% zZWhcgW93u$U3jnU&-}a_>X&EKuF^K(P1)|FoZc@#KVr|1zt`4E-#o@sv`fsT_Scrn zD-|}KeEG@Xx!e-z%O7^tzG=TadHP$P7gMk0l$`tYqTM_%O8l|``@~H1&HkmVpib2y z^eGr3*N-^6$N%qm@T_1z zf8EVVPSIb|q@LaJI^#KW$>l81^sGnQE)?}j{gdhF@Zz;&DtaEfDaC84*F6!1`*Mp@ zL7tq!wkcxS#`)`VHweyPyEHSiLiD+~zy+CCW}Oe7-ROw4|Cc>k&gbx)=uS(`$#=Fy z9hy1oN0O3lZEQh7Y3n}qouALmv9z=Q@8NUCXt5}%<-$TN|eeIZKhST<|zdhIdq-x93 zzgJGx`m;zzZ`XS;?fTl^6*o4#YpX7t^tw9f+uGG-XPYw*n0z~G^3(pVLeouQn~LxU z4VwkC-~Iovd0p(|OV8Uaw+j^qsXf~gwTNM5%<6!HhtID+^yX&1mj7Rs^0>^9tv;o! z;A%Hzme7aqOYT-qi0R+9Wq#Dm%np@T*J?W_JbHOKSW(fm{zu~OhjDYBY%}q{7!t)z~2Pu9B3@%vh+K8p|YvW=)+)92-2do*gQpK+^X`#-CqV|LxK51=ZO@v;LOEP9W;xtM0eyLooB z2rrY=A)|j0%zG_P<|cxJcX1BO_vBbX&cJnpci^jmWbKB*PWsOOG?MLru%(;8;^y$Cn=JGsa=i^#8Hz`@%(%Sl>QLFRmt=Zw> z5JT>$B%JzOG8615rppoC@?H`%*nE;-9-VxMC+bY*f*HZ?2Ig6bQlZ!V4yCSC*IZc7 z_BL+O6E()*dCO0`{9AIsWP+@bZ|7G-$w%!%Y|9ug-w3hhEtb-F3ktebzO#>sOkujb zVpo~a*(pm8n5=SK>Bn^JkH!^<&Z%NjVGj>q60o0Q01ESEGukY9MT)I-p1D2j3DwkG zy(;vxxA*TRX=R%fkMP)7>&^h@SH)h{0jut`_M$a^WfEoNzAz1)x)U~>?ZTux;8B5XVRz^^)k&4+oJ;qsf!;ywnvDc-GZ z7i%L9fvoeG|L7#sZR58G!CIb+EB@Hf0!oFdM@+V;YGtK4G~}-gS}GD_uXUbFb(Z(5 z^Y)kb?zxkH*XqPyZ|*HszsszQ3#vafaV~4Tu!Fl9tn;AB!i9fV{=4?*S72V4#><$X z$H%_THh-V{?!LcW~ z`L566yI&Wd=aq)gS?mvTquVNv64NHiFOWBQAmBme1UcK506XD@!9J#pi|kB^0)pI0}C*X1cm z(7gWrNDq&FlRBhY-f|f|;xilbf|vDVTvDlc zbi^?;Gu}WxH`#K-l}GtTrlqEPvn?$xv-bOd^K-mUG9*CGZUK32Dbr<+{H!E=-|*v{*M2eu5S@t^+p z*V<>c*{_F(lMn4ve;Kje{GNoviJ*uXQ)lj+c*0W(6xyOQ+9W0O^S^)jQo5z^(vrk8 z4@*FqoXw~CxtI@gBrnJrpfH9s@z&btF&Q!2_SeGTbr9D1o zDXLZR<7em$+uy#=3P3$LpX6Yl#eWiv|35W)l}^(Ir2wN17aI7zB|znz;L*t&(=JRZHp}#|?k#wy!(8ju zlzG5p!c&uXhuT$ne3+MMDlWU2&!%gcKG`RI!lklVr>9SzZO$(^H^icR+6MvK8i@L> zB@u@~4lwAwIKyqf}hTC~#(GOL4kkyJ+@zNltL9K+~irnq9g(vnBa`&uNpk>VqwZ zy+Ijoj?d!zJW)mG)J%wWIo+rRVgU7KR-V$^=q(_h{Eo8Ok_^Xr#g-hFdzH2co_%*L?%`+n(cC)kr*^k=NP zXPyXZQGJ~0_Fi(!43JH{;T0D>TU)0WU|MzP&>FwFam&o-G_xEs;~2dHBtY#t6$Vv2 zGgf8a5lXvoDgT`9>KUorKFpEf3l|zN^;_O}_v|e5!Gl*p1C0Il-##jS_0sHuzoggEE@-{X9JOW=Ue3ygWe-D!I!u@?P{b9h|H>gH2TQOT6u#!eaN%0#_jow%CzkPl=+m}bvx<7M2vbD1P_gQWe7pRUdo2Bl*>GI|4tnA^>!+w8# zEg)w0>0tBXKYW*Ti_R&F#>8^PS{up+WtB*1@=SPXH@R#9L+7q9pHn!QFE3cM$#-sV z#OK-{T6JGvyq1rRo8PjAX<6f%?o5%Ih-J&xt&6w6aPnl}3+79Q7yp@SEqO>_3CPu2 zJ6eT|crPn1b!(q^h+*bC>^d(JyKLP&ox}vGkPx#KmnTpEYmwiaksS8o&zz?hPiQ4boiLk$S}#28 zc)%w+%i3yM*bSxUHbJjm1-*C?_+nkqs|i6j6IK4NH*i??+vj5Hsme_)jhO*~H@oMF z+Iz0KV*7u&^rE-_@6DfjEoaNlBv(mkP?7s3ZPuheIk$_R-Dy?_mz(!o-)wq6b)(O< zo01p2PgyOyHp4JE@6HZK$=P+8psK%d%|ysro)k9CFNTJ{m-y&9&Ac98KiBBn1Vv}i zLQhc6+T;LP8`3e}n86m5 zI;;Eiw1BHg(q(1OWM=Oa+xzxdUoU5z?7th^&we`ZQ3=k|I)!!uUGJW1zL{M8Q0u)h zV+PR&TVI%5y}M$;Nv^s5pai8LoLT?+qdQxhytLuzdBP7L z_RhA}DyjW){B1?QpTC^wts9aDO(tZ1{c*n9aB2M28wWgo{)_x549@E}9b)rl{wloJ zHaWk}i@SZ7@2^zvuHLzVKFl}2+JbxgSDu!s?wcO}cm>02D`n8wE~w2U@TzF{g}?H3 z&-NdCu)58hYX}{j^yioO(&$dDK!|mx#yG1t3o|Zb# z0UCP(4KlRsx^rx)P2G!c8|BMb`8IqrZpu`+qYN`F=MiSpu&< z$;|d|S7tsu_4#8<>5b36JV_0!bu-{?sb&E+6;_;{ezQ!e;Io?e-P6H0)W07Jt(%t$ zcEurB_^Pdp)b$GAe{1Q{{a5d~Dd#Plzv&XlTJJsXQ_hO;CH`Ao!vW6g(K9!uZC%5@ z|FiY=MVCX$t^dDVw&udmuqrnL-V{@x!};JQ&?~SZ`T5zsd-sZ;pA-GJJMXTQ)rOFjL0hU`Ut4=`Z}oKj_PjDtU2X{k~tXK0ZEP{q0TWg$0cDSxs_g&Pdw(&#aYa(BQ)E(Uu z7pkx9um7KUd6}q)$cs}ZG53Sx;^wV*?CgEINlIRFOPFV{m2-ph9fvCaB}Sj-m~M6ONTGtwCy*UQy7M%^8Ta8tc2I*Cnlw)~ zmoQv@kmm?eGK0+t%vHGV1mdzlR8GkL=%NUUc#eJ>P)I;iua_Le?Vz;Ukf|`m#)I8} zw@4SnbrA591Eu?&V*Vnao;49y zo_@!tzwKax+eYxJ*8?U3?*wNYv+;3W`eAeW@o9}=5QnL8!-QD4ztX*8s@^F064P7O&-75W@OMd?MXJ?)D z;{DQ$dP~|@hnH{9zP=@9=cc!}&3`|gZY$+~cY&jT>r^G46i{^na$1V0fv=~@`6XK= zCjGfJ;|KHYNBi%e-0;Nr_G~_z3$;0c_Y94X8QcFq@$Bs9U1habPoJ*6v!m|i%hwef zW>^;6{FRp8ed6ZL&S{@N8D;J)d;97S-@=7|^Y7UlSnuZ2a&Lcq#j&1^wZFC`gPe13 z@9j%kxpN@%U?%fsDR~Ai`@QQ?(LlX@a4;8AFuphdaUX3{hH62=jY{W2<#Ggzzxbx59KnI zqz!myxT#y)TGoWm4-j4OaO1L*_UCkCbEZ}FNnC7hSWy0co1r1kvcNd8-hRUgnJ>am zn5??^U`AU&PeTvWLT<)=;0*mv5Y%%|IlX&|)cd=JcE(}CmkZ_w#L1p9O|h{5e`1;M z{F0ZSx~5OB&dB)R)AO~;*w@7+BX6D8{mB{ZhcxRJZ+P$d^NNUPmzL{{MZOc=?+b&R zx9p%Ts8I7sN>@&MKl4Z9lvuk6GvyU=y6Wl6x#~pK&sDkq2+!GWD1NOj?Ow)z_=3qx zvooKandvb{QHDv!Dqz=P#FUnaTLjb^i4%|sKu|(3=;hR1`mjNEc9>^ln~=(iy0xLZ z7hQXM`$lbs|HJ*a#n1S^HN3WJz0~}y=F9^oEA$mXEwO7e(yDh}`*{43tB-KVdNI`# ze|))T-t{m1_`3YcJ7!pu(x8`fYV|{{)Hl`l|AR`743k}4np-WbtOJ{JETs;o&Dx?{ zSQi_>2pOp0opG#1*Te}_szvEsTbf!E)|BTnd55Cn263$f(AWqlrOfaW7t8I_zTUUU zvFz2{qo8iR*lpQM`gymb((Yew^6kFiv$^ErJiTO*Lp6{&>la#DhKsK(GXa(T2TUgP z-dTKyJN)sfZBHAX?X=vop5Z|!d7Xv_4j1A{yVU2-r=hM zZ+95Guxd1{(=TspwXfzUd#^Nmw8G_pkkug{eSKr+ zPM==+E$7XHgRyJ+GG7R3oCTG72D~ZU-#u=;Rxz3VzLDv&#L+&!dh^0B)l$#zbicIt z^kd7+Q;ckEVLK}d+gI3~J8vJftjGBBVwKD0PoADWd3JVtMfL9UGmR%&p5@tJ1MO}8 zmtsD$ou_aTcT7g^Z8J}wo+)|P&nK&1{;6tw%RFE1#ogVxKR>Pe`kGzNe&5X79*IS| zZl$lT+}M=5@7U>`1&WFqE407~x-sXW+|ixee80R@OP$5i-v^4kRigLK-U;39|EGO( zNMqXX7vIawWPfb&NPWQ;da|-|<{_;=A0G=JDwCS%?zt@ABkxk&x$Y%KmoF$LCMwI@ zSe(kak-(;BqObqmx?JL{->=FwDOUSa+^Sz($dfidSNY|I#YX}AN(EOnpwqp zZfQPt`s7(#pG-c;banI&_w;4!Zrsn>!;!IV_qMY?bwC}Si%H+lzxS+K>HcR$`O>)o z|4moz*xl=yW#O>%dgn=#I~B8*`Myp`%}uPDlJcvqq+I{Fb$C#klvNCi>Y=+c8nY9n z{@R2Y$+{XYe*5C)PTe~UD>{xk!3slKYF-2MLIWls+vD85C2etz-PwaC$8y)6l==4VTi4ue`>o&poE{)^N2a^~cUI_|8{d;{ zZ_8I!M-@6wo3@~-Y1OkQDq20Pg1ITb+ER>qo12*#S#)h`DtyA139{*JG0T-wSJe$q zkeX`~W;C-+GB-(c+2NMc(GxO>rM|94dw>QeZ#!{F3|DWtKUuoYR2iRXcdv>ZnHIeO~`FjDh zNfl?CFr&HgMvHwoPyhW}s}=ewZkLIVh1(A2_Gf*4OMmLN z@Eu{iqh(w$G54O$dcV0+=g#?kea$XZBk^eCq?dmtNxr?k{c=0+>vu0-hAnQhufMc4 zTRH0*PeEZJ7w5{E6E=iAe%jL7>*E*42u?^k9-yV+^ESl&UfpJ#&hpR0c4Ev{|3&`W z?`~y}D)kZrtrw5jDp`BZwqjDyHoMweiRWxV<>;m(p+W{Tz6tSyS{Db*L2JE}cls0? z7I9t`HrV_2)UvDBqb9l~V(xlg|Sha0Hbo1_r#F zw4uD5{!FgA^A`Ja3SVXazaw}<+wQ?u*@Lw~yZZkYp6xocd!|O!0h5@rvz;+cg`g&t zVXXTVQ1P1}RazZ2zdSWKefTMU?&Ma^d9Ny^3oXTN7+}-%0VbeFQBU?^O*GTCUdm{)J^2 zYsSBJQ^Vf>g;k1H3lEs=C^Uf74I4LjDZLNMniJms<4lC$zM2g=ZUK9v{LcA_{?YQA z^R;h-u-3KBdtXg>s2lyPz2!?lYewB)s}HLG&dhxL`E&n~V|qnp zWs9Ef+2a$nE_S!oerFdK4O!RY-(Ft!Q`E4^cRTj$c)$M~`}qbX8Ro6~)PI#fK4#f3 zC#znRbpdpG!!kqJN(sZ12cQNLD2z2E=f-;JYWYmwrh0CDx17)8hk^gz-F4pL@V}~R z*Tg^Be zOqV58cSmLJ<%YF5R;SO3m_F@eB6(SZ8@O*W~|E;U;X-eJ)~#3q4?zscHYx`R)(CkRya_8 zeckz%+ul>PLKnCFzqfa_Ntv(IYU#ik{vp=Rix;H@ozYxXRJ(Z51kofRK- zOZ<++Lq+FZpJd$x1sCqzdA@pLORfJZpTqL1Z>lG;eLW`4TvQ~)&Ar*k*j#99$DzXF z;-}dnN^(Z4_}0gIKdfGPz(n<=NlbgP&zVCD7OXn7f1b@rKmT}fnV8t*>r1lCA93qs zcFuN6&&bHAKV`#JyLb_UY1zD0^Q2%!hgVru(T{nW@?O%(9NA3HO)^XG7uD}KE<4a7 zKTR);uk7=)%Fv`y_jmUFDQ*ncKt1_y6s0 zZ{Jwookvfe47{PZ;+ARVmpqrZa~E>G?Z9;9_mZHd{PfK4lh?@J5PN-X-GlEuHD*l9 z442Gx+a)9LVD^+PbF@C)xpVl8ob$6yS>}u6-kPkMu(nI*)=anMbrBL?4B%pCanf7UkEu5u7If40~5EW5q#DK|rwWrkLlbM9CycVgwY-_Nx< zegDe2nLYP`>rl1$S*>`9XVy%DZ`fRsU2&JoZOSpC+>L?Ygz)<`M;FNoDtzhKSfENZD>$?f1Ai z(O?Qgf>f}f@5Q|~T8GYL)K8t4W?g;pZ;f?|l*EiQRU)FC2?;bs!&T&}V@9E8Q9vkJif6kiE|Fk-KyPkoU@BA4O zH+K|nSe-p{Tkh;Rw$j;CeovYMS}?kV^yc5 z?*?yoVq0c-x7>f*S(CQ+{?^ym{ucV~+>OjX)n9yhU^=>1}e!EcjT$y={xw7vY`@x-+A z<^PVdWzH`gtYUt?e)sx%uvK~9!#~sChh9{Wd#Y%6eoJL!(y@3`))^nKN64G!$(%90 znsawo!!*}$-LGA$U*?y7NC+t?DBaip_~PQn|Nhxc*HitdcxT_-bLao5Kd6ylZ!=EL`%x=?mqS;5Z-JuY6CM`OsJY{^#)CPtGner7yTnbN@vnbJ z=gS?;Q&(GALD!3Zt(br9(SuIO`l|)Fg%^{VjkFU=)3mlee?Z=KfNEv!17^5r_X=)ckiD506S$4-<9?K4!fJx z1OJ3Fryq;2W_RD7r_0Xw=FZ+~?Zg?Y;x=0Rj|{n3v^U&;{yZ+ul|K*j-~M@E@uD=d z?6B!t;jL5Bt)3+9x+Y}U`}7Xj6})@i7lB+cB`o!nMRVqw*`Vgi4vC#lZpS??WB-0L za&5HN-hb`C_kR4mYiet`@j(*_f9B0UKbl0%Xn6U*Bl2pXsJAFTsG)l%!e_Bn;fBZ= z&wjs8mX-A`Zm#_Lq3i0t+RZOsv|5+1lQ3AI{69bCNr=;&=U2yg;jEK8;y*vU0*MMV_WXzH*a$9O!K#^ zw6@ss>;3-s!M>Gm*KKv{eKmE~u3Jp`TMDd=pRwI5f7TmdtGQJ47)P}BWsyJgCSFTA zaqjxDBl0(n&B?1jzRuS=Uan@v^Bs%!BqvCPyiJh0EvLNZf#A!TJ^z*SUTDZ_$XI#l zAOH8yZmL$Leyo(5jMc4$&c*J>FZ~f)#j&z!qB7^h{ZX&XuKv*O5fnQbzdyh1%jYgv zhs%rIvv>Y;TzB4M_jAo<*=y%ohx^R6I^~qN9x| zYx*<0xHo+>lby2U)!UyXNk#7i4oMmCt|~L=%{AzK>ua9A^ke;>A4gUM?(H$<@117( zJtrs5F*pXairV1$yilXFD?J}}?mf2ZSLL$}YA>H26uZiq`qO9eaT(4TlR?9k8|9Zh zJhn9Njs-hs>d)!S%QlvPHp)spzxr^edb+NU^Rzvh2X`;lY~xW^(c$IzaMd(BO7pUT z^dj#EKSMIq%{MH$u_?9A!^2lxe0kMZrp1fJZ)I6_RJQomy8ApY;JUXaAwlYP`mFc% zv*rp|xw7cV>&zAmSwC&^=3v(SUBc;mm4B6|zb~|3ADvkeQTI~y|Cuwr8Ot>jml>Y= zSN(n6s-UChrlqBEanEjU-q_4u4jOs`H{+KrnVA;e{I4*6tq>#cT&oqxLoS8EXZJso ze`S5|h0o&$4?cW(shOQFb@9r~qRlm4w=NRVDrxubO5ExP-f0XI-|jtB+yF%q_=Sj8u$# z`X_<9;y03FqmRpXiz|5t?2RgU^>en^sZx8}{|9#G#rH-|i#)jETuAO-pTl#kf~`(3 zp8|EtN}I#W3~FqD&D*o*jQ$GgEMPmgU{#Iyj>_{dx?VWFc=bXm)8C-C)r9@f*(I!IXQ$Pq%#c$BHDotl z3{*-f{Ij|@@$^NB$Yq|lH!Us-2fM~5c=pO$yJom~B%jG#wq$dS*G#v(GQWpg=B+Z$ z`SkGhL6eXalT0C-!bc0XY|)?byI@%CraJiK(%X*!=JaC>>aF@|4A7v-@x5hcI4BdWwdivzViIuw1W-@kr+P~ZvRIa*k zHPBK{SUGK$SuV6Yel^p7{z_lYtOq=+PL(^JFmcH_k_)nY_uTo%ifSV4nrC~S-XWgW z&vSXP$_zFiAd2pHQCeTRNzjw)|ViTe6NR@hdWv0~3HcRW}8onj7 z5`)8+RX*-zw6yGOZH=5cQ~KpP!{>jOgkOSg6ThWsvZdbbSXExN*Qr%mSN~kPwC}+& z4t~i?q1QA0Lm?saY~G>Oi?bJMFM7Rb_2TR;llQ5={*=gRKKcBaS812_OoRr_k+L^) zGjHFY`E9%5A@9R4ub_;ebMwQakXPfpS<6DhS9yvEYTVrjJh zsoe(MYinZ$J&0+(>c|yddDZ~&|ZUTxN6aRXM5J)vn@Mze3irI z+Ar0+XYp1=P2pYEn0QQAT2479&`#%J+9jboKC^70*^l@3yT3c0TVCs_aKFO&_5UD#$JMT_fCe6<3%s#YgU{hoRHT*2mI^U3fOvG_{V=KKpsW^l=F-*5aDV}vMu-&e;% z$7#A}LwF$#LaE6|&)xM=N^Zzp)06q{woH}Q%L_+Va&E0YZn1p{L-MI@_XID!zp-WJ zPRo_srXT*2JZsJg)smnYwYQF@dK>g_@YMF(F%!IS=-cgcmANLP3|09$g7p zUwJ)l;kMk{E#G;a#N_u++4e#ui|{d<@~96XG~O6 zrq{N)$NsfJ+`RY#Z~i*HEQ4NG!`>^Q3pd3dyK%$y+&RB3bEZ%C1g(3%-kE7)RUR@o zKH`b$#nY#4m6QKIKCXUlzW;;tmsgWY78JDAMLmn%^-2(AYp>?A`Odx*7i(a#)nFdm z<4mu08)N&o#Uz^V*|}@QK@-(8CcA!Z2>E(iBj(v%!>l!jK~{0}z6|UzDxR!%P*|PM z%lo&}@@Sn@sjmLIjiNiZhxi&g%Vc%UaQo?^bbs=h*?L}C!3dunFey7?lJ@i2p#zh- zc0W9O)s=VI#ua5!t+%|d>Mt&83;E#v-{EVZmwp;E$+Lk-} z&5eyc@xC5EqVG@scEjs#^r~eu6!}bD&*@L~SJ~yxX4HFc=b;II67;4|164<{#=SAq zH*YDPbu(S()wgM7+q>^={>gD-ZuqTm-8XIK;o_z{Omq@tHqdtVhXKC*Dx ziJwc?`6%ywsX9TM=Oq8LqD;_w#T%xVPn24ETQ8qkdu&l&{?2!0X`1UVT-ANETFfkR z_UdjapXAKs7FT4;`vk=*J!5v8ElNAfaO%9GqG@Y#-PR+;hudy`X|S-Gwk&?3JkyJSYCuDU(zGG<#=gPchH(Pb}WK1ys%C%+C~YQwLctT?Ds0Q**(st7pH5a?d;# z6MH2=s@RbCjF<1LfXfpszpp7=mXJopW^<{%UMkBP|1rGtkxnk+A15*UrF230_nV$NW4AxWkbeWpT#zNmnjze zMJ%}4(C_p6OCrL!$(b)EY}hc7Ury%gjav(4j4m%++*s>>hWm-U=T1reL{R#CYuvli zR_B)4We)xMm>V)4>*XGBUsn5TgUH#xC+1w7__D+^?~}^H$sSiHIa;PHb9QI`J#U8i z3aiJECB1>mHhS`RUwd~rXlAC%^!TM+`l4$pD`%#kKgK6_=jf{$$JlC8ZY}5czL_OtiPcz-7s1+&m z&ya4Net%o;s$hm|vfAZ4Kw2V~`bdvozZI11$2F#N3~(k@8S6sJ)NPi1#y7X!;&- z9g&tMCH-MThUi<9MJ9=T{0Vs?ar>rE-~Hlkn0L}K$hcxESNpW=>+9APOy7E6eCHp9 zyTLQm%pNFTwyTZkDoZ~1;zWtc%qd&$+`r#$Q2z3g!9$6MkOg&V=cF~w-6BLby%3n_ z?9P0g!&pC{^cZ*nb+C|6@@+XW-8=27#=bLhU!LiWn&D<@*n0X>wfdgZx88Th)J=G& zd4>UG&9mprH-30EQ_^;&v%3V3PjdfTaIhV^ojD_O(cH|I>GzlUCUbc;W`+m{?^tsN zv{~dCdm7sYM){cuQr^i@i>*sq4jwQGyYoHet(=(doXi=Shh*dr+|k(cXUde&tE+x4 zU0QpvS5VGq$?A2TnohhgW3S0g$*N08W03wZv9q$pw^!#wC^*8tq=3Wfq0eC-;b%V> zp1D1IIvHhR;#0X}byC+1x2ow|*_Y0epCNgGttO=jQu`iLnsH1@dVZ*_&aH1YhnCGQ zKCe@L6D*yxfcf;Z$MK(@c50q6TK)o5yy%#>N7`LpaE0yi4d%-;49&It1(q7Ns*w@QNS66LL;(ET@C~%dOVZ`Yf{q#Vn09VW?rw} zeWRIfCIXJziEZ}uk-eoR~~reZ56fP>h0~9L#r=5WEJ*Vyz%|XMKuvd%op=l zd0yS89{A_0bikSXM8BOUduCkWeXc%#kE~40-|zRoXU;ywnw#|#gNJv}^0vZF58cU2!~$l$R=;!fQ&n&wZH z)QS#kzLI=0FNrz*sK~j8nMXoI^GuR9K+{C>Z=c1fB~4E1+q3p>+G74|_xnXFA82S< zMMlhU zkUG8ouJ7~1LVQM`(w#TO2efhKd~K;jl?W5-#; z-m>i$mwJEkt})zw-UBo?4Oxk#oh&6d(O|BxR&e*H{Z8rAZrwcb#!ea3D+brAjb{#+ zwDHUqt;|ZXnr*UVuG@<IdS5ye37%vYR_{f zz2phH<#)Jpo#5P%7iWShI$D4Cuw0H1yqu9<_0+c4jRHXHQrl<>G}-f`uEH4kWQ zpj(<0tNb*`2KH|^>7iPR+aZ+cS4Y zrimNd-ov1^cp*h^O?;LGmfqKRo)h%b)Nf{H%Q>By>l>!MG#2s+KIEhPR${J2;f3q* z=O6#OyQ`FOt=;eW={$>y7pC*rZ9y!AauSz3qZjz{<&wWk&Ir507Eev_Tb`Wu13KjU z=FO4Zi!TJcs(;)ua^332TR-n=$nM&u6FK?TohvuCttz>5|Niq!OI5z`HD?|$2{>u! z+b_4){@;(@J9iGt*P8gKV zZq1*k5bJ;Z%!d+>h#M!^`TJg7@mp+LQ#T=?>X+3cq29auE*W&*?$F%%wDh%|oY@-d zs&-HkS>ZBMOx?{)I;J)bhiH!DTz9q%MRt(s;LE4U+% ziTEtO5Pj;6glg4-Q#Gq}IMpKC2S<-F)D{+Y{#4S7Gi z+;M|AZO4k$;oO%q_~*y*ywEHwDiZl>s$Kru>#&N-qG*SlFJE4+oG@XQ{htl8kT^|o zS~hX>@qT}uxIcBTul1h!q4DawZs$$VPA9J&bK7njRz36S>F*c6xzyX!%8>W3mNVPu zl0|hvt->#>tQN7K>;Lx3%+7jXnCWNarGBl|Oa2!0fI!KlAV%H>xKi``g z7K979zIEkf-KfB_R`f~e6s?NhJsoN-6DE8R(qUm05nbb?%g7qC;(L;yN7I6iz5nB_ z_ZBZVPES{#?Yn8V&H3jw-;AxTi=UmDnfg5OS<1fqwcq1>EqXWoGs{il;uh~dIA!|# zqPpARmd2)Aug}guH}(JgJC)BJ-tj#)vEaSZcsb+0RfM z_MAC8H@R<4vt4lh%n1pD(pR=gidC)0Zm<9Lecqfa^0KmVQM;U`%`wTG^7;0@Q!}m0 z_f483bANw*f9>yUMdcF94`wdNTX#92K&rk_>UD3RWvbo(KPGQ4SALe;`+ncTUl;DK z(D*9xF!^{_a8OlSo7q;rTc&q~LhrSk-c{dvGa%GFJYt81-n!JBoG(qRGmjY_VrKio z$Fs+&^7qxNrqa*9rl+TG%@Dk}Dzy9NX896OXarYRTz$L!{)+Xd?_4Z?>0qXY$Q-ui2Q&Z7_I|GQ zbhXdI6XpvQt$VkBdj9uC-Q>>~e4SJar9f_2G5>)H@4?KTg|l0{9)a{TH(b8bc)22t z-=cS=gtIy4)FYV%QghfCmVXRfZs=!)3fvQ{wAcP%-C~xOXkYScW-V?-f1LpDRlGyX9^{g13bab zVjfaHiYJnD3|cx5t#nF6u4QDAu0pIJL^VsQ7tj(}@z-qj@vm-PyVK z@ZCT*=UYpncJba-2@zU;Ftb34Va~E|bB?JUz7#d3(Bs-4*Ho#cMX?tbTwOhXo4IcG zvB^d&F5M7%yyYIl_T7tl+O~K$6iM&$T%qFEeEES1gGFzD-13e66fH#O{^JwGQ{Cwi=f;V%N@| zY`opM-6Gs_;;B1csR2vb{gQJhnMzzrn|`+~Pe`ltGALdc{2nj%OYW@*xz%jcdnxVi zRPFhbRQqMM%S_#FOaTSnmjjt=d^fQ<-!i$4VpZt_6OmMdlu{?8s5qGU>e)eK7Uv*v z%)FX?+2Vh)hQ5~T+1!oa%G;Zu79K8@;$mHXFq44+ln}N}sPDXNqOd%2OGcn3!w=n0 z{yXBVdJo$hefl`jWM6>p&*>Jv%tcZRE7-4W=JEdjRYLv_>nHufS!@qYo}Zh0o0H)y z)6eH`-2Ie|rOos1EOeezx6U-xYL?sGS5tR%&D_EkXXSb7i_Vsyne~}_SEbxyO*LA2 zxWISj&YGV-H?3cqJl?jZ+U1|B-{pe2Yzzz5t-BnvZ_oNIC9X+H)w4CcUT>*Av&8Vj zCC{K`=?kZx`s1CN-D^Dcupq#?6 z;M*KEE2}+QN?JM2F7aIa#eeP0zQn|Z*Dh*>cFio2)_ob7vDE0lk=?#rzjJp^ow5a$ zOZu62py3eihia0w^=jAdje6x3vGneo(e#V3@b_xp4i$SmCLYA%1MQ{J`Yv!AuQM z`M_Y&yWgre-o<-Ty(c)M9DtMxj0|wboMW#{Qn{a>UT?7U*{M$6n=hu%p zeI1lI85ov-%s<61d%k~%g z9suR}1DStj?EhO)89l#Vze92j|Arek%1+FSx4Y+1_Wwfh>f%{3`qgu#Z@f==Xk8-@ z&Lss>^{)G0r|9rL=L@O(qWdc@-&5}BcSev`8J2$xzh=7Eb9X?Z&TFT`3y5r~necbTo<*yHo^>@E+^qF(w z_C~!Y$L6SAkN>m&a*a0Jk}G|+$8P)Y4F9tF&mWh)_g`;kx8JqyrLU67ukS8f+b@#(1i4~VKOZI@5HvhXd< z__F^+@fYiWuaDPV-hRKX`twS23#i%T%X*D&WLq z`r73Cz3TU!!s;odl~Xh4ESr^?l(6p_Q9Ql z=Y8)BC+E+wW1YjsaNxI}vR3i+*z%LFl-+tPDnF_CJ$7Bb(*N$&mBGuM+xbo&ng9P! z`pmLVwuN;c`3s~N81yZAD|&A9tkFvY71ZlEczO30JZ$ngvDydJi11@(uzPOu{Z4Uz z-Fwevg;H~lt-WlLeT@fFBYd!2URY{$EVDpL`A+pAPhK9>mqGuZh{onQa%gf8m?0h_2T$92LrB@%GxoqlQMzG&4c-6Ja=Exle z6{Qbjj;@?5yZm^86vKf`i|~uFZ!AD{0)yY-POjyK$@Yibey%*Lwbee(edp2nb-yxS zTv%B5G4$f?`>O+&m`E>YWSGPDLNDK{*Y5K2ImarKySlrLjg4QwS{=01?}GTg#er{@ z`OXHL-SFtotF04grVUw!`-JD$NlG67-n2p z@ZdqhHXS6$6~a>OS2 zSkI?VpI%;Ge%rctUqn^au6^tFOr3doneSw_8QVZx#02?fu3NKa%FAnc_6Xc?un*+0htEcQhJH&-k#695tqxOra`j&3m!m1s zzudOY-1PFq36Ixhy_bDwnG{y_EycjwfK(dc0XZR*|qW8F0KyR z_J6CJ?QFB$E|7JHOQq%6!g?0H`QPf%@D$*dJCR_y=tRDans&D;Ass{KK!vqkvIp$QznKgyg6&8yY*1j}!zcG9Z=3P)-ekMW73+^D zFE6}3V`K91yxZH(Ue&YC?7x(`X1AEU{QTLotN;D^d2@66Ywxz!)|dYa-2OBFw5$Jm zHC)-fZ%gL?d-aIt{AeO*k8g^9@(l_PT2y|<5vh>H5o zG&%}*%eKPD$9C+nF#OcYE&j^8>wd?zjQst7zugX8?AH0Z{KW;weGkpv%3sphwqu6` zC<`4s?HA1LtkffX4Hhc;&-~}v>~!y!6IS=DdA)Xf*1Fw)PG?GSn0`F7chxmDjGt{-=2ef<85i`^faJUH#=Y{mpiwx#b^E^BwW zVclCK(&U?aijhlL&BvnX$%&=j)4#pBsXVFWa>d{3q(kvq-+j4{fQp5cD-92s+NvD7 zmpNszKu%ULUqHmZn#$vSvd&IUlO|0v%em2TnE_N#I2bgQGdAZO~K(eddXFS zPy_az+xz`q^`j%4FDomjX6`zDL;bYW-!q}}8T^3eh0&*fhCmjr0U>7;T$2bZ!}wp~8){{8)b-vnEo zJ|_KqFPjfG;DLz<7brSGaT)+^Zt=D{fm+)IQe3SdFZeZI4pki+Ow0ihi)Vtndv-I+ZR^aXigWqHJ zr^~&6|NC)d&7BQX{>0nO*q#s(nq$eoHLo_*$EPIj-k+PB<$HQ~CU2i@rh8R9VqZ<#Y%{}NY4dCM(o%hU z`uN`8wSM{HqSDfu2yu(LnqV)l^J!<-`S`y5dQ^P2Y~HPZR=qxF=G$AEnMK_Si}|z1 z?DLhCZ!c zKV|VEk+nK+jQ_l~J{G&GV*Rh#tJmDwoOSi`_Ip*%At66@6dv~S4u6qmQ2gxgr_8)} zdmcPcn7MAn4c*Igt+!tnm$0{Uj&ZEFPCoXd_<5P{{JQw6s;(frHQXKPC!%Ls=HA+S zxQ(}9N9K0F#cStHHa1sWIM=NB$%)&WHgDF8yQ7_?qP6(!l(|!5r^!ygJKb+WC^X;9 zIcELzIJdk={P+LY?*5j~ntk!KJF9EvW7q6eJ9io;zw7A8uuD1No4?QU`=QpoYT*~2 z{rU0O?s3UvHO5~|>F4(3#>7=?uMb)da>)g?>-$4Q(&=B=z2je9%UI!K_!) zx|CISPGr9J{#@x3lc28fXYTxKo=tdo>XfZ^xLxUK-Rq|#>;L@dnQI;Y@kVCa8HxC~ zchBxk&Sbo(S-b4xy~)?-rhR#Fd+8jjt$$DJZ|{+*oNX3d7FHHn7E=~))mZHhuG%en z%TN8joc8SA_Zglsb$bh{oVNQp9(2@=iZv~~ro7DGoPY2C&!XOYH+`L~?)~g+b%=cS zqsGfAslFoi27HWWYcpaW+}QYN%9MEv7y9}px6IAIwea#ByI8BND-TYb*uW?IsHo`K ztK^o{>9Mi~-k0&t4(R_M zG8@zf1{HDfCwG22_VxW*b1iSD?S4frb-Rn!t-kGF`8xjQ921`93&EvuFTdzb>&cr~ z*w{}BMt;ug^Im>)+cJZ9VSXn?=CFbKCQDzN9Q=E&enPzIa?OgZJBqEAr*J`v(14p4 zEN%1Op1xM?e}2uJ=ch71iJz-Z@3;oH{lNe-EHGPBFwCgp#}tVN4dXUt;{6VyL3BB6|A|^ZRq6?H{dB^WPWk9|i4j6iDqZs;W=) z>uy|j+kcViM^DbiQ~RIZ+gBD_ajJEF`K>FKWp5^|jgDV)HgV6Uo!fGgy}YJ{hP<&W zP$>WLA^KJO99hpck!q8hx||P{p~oM{!a8x(fLNn&2P1P`tzg1wjI2hdAs?J zd+x(yz0&0`1eV{PwDHUP`->MOOf21(UN|+>YhTF@?rW;jk_B6@Ep+}_RV4x|GeE;qD*LrFFXt{TuTSZF?OK8ZOvPUL-#qwVpEtW3T77`X+I4Lmj z;r+VRJ4&8J#w=w&IX$o3ap#ha#Z$7UPJch?9Jo6S^8NCsZZy{4(EA7^J}jXJFGcJ8swJG{gz zIt1!XhwhHroP5ODQkQLAb;_&z|Ao9J&;EYx`QC3y_jVlrw21A^>@Pq1#qA1$LYyWNSJyW>=rTD(@dF4JRU>LgSiK1yyJUD^vTn|^4~u?&`t7|iU{Ay;v2(}4ZL8en3j;JvL%`jltnXH5 zA3gV*y3Z4&gipVU57aucg)EsLMoT-o(C)X?x^W##Ae^K}MBMn3oQZfyyPet=#_hU-<|$PW~Y z*jKY`OU$fQd(WPlB_S(&Z+H2ni;G=P&05PXW4}*Rb!qzMwD4uizWsXCeU{HWw|=hM z&DE#=fl9$SYzzfb>n+confX0D?A^(eGiOh@aPG&&r>B2=d55d0Z8O)MIon#_!op*j zwpQ8clIQ3C$0Q)CK=ps`?g~%2z3I`C+;!VDxO?R1E3R9xf39KjpPj|Km-+A4x3zVR zTv*EZk*8AIc)9QH@*5i%`OM#5%Utt5=7|miL;4v{7srsjueQ}gqptV)D+T%39UH>c z>i!hQJ2*6$ZC;WRSyWUL5U`-;))LQ#QqRX*_BoW4?AT{nn`Zj{<&FHnw0V}Fw-r{t zUAxE4#Uwl|Bi2D}%gpo?_f^>g9?RA114Nzu6vo^|i^j%ge5=MyeY5e}P9p85%BE+{|3G_^`Kkc*g~w zSth4;Uha{r-906E`L_C>Pp3^(&j0-GMs&NMaq_W>%x!=7s$XWx%>4Ux=CNx3xN@oW z-}#|qr-hGsZ{Cd5jdIzNbv5bR8}_-@XJ1}ky4a1kuZQRL1w}pe^t`zizG2sntXNSm z$&?dyao2&3$wxIcZJnKG&pO6oeSeGd@{d*jA*o-g>+%N=TQ1h+j0~W{3fhExJlQXJ z>BpV07G?1H^_QaxU3v6nKC%yewIf9$#c3AZ=Z_uc*>kqtFO z{BduV)y+V$celPuy{-TGN$Yal&5v8Q{FATyQI-01Ugc-Gx7T#klnZVe0biW zlbXTL;>%+fm92dC_4@pYnZbwG91J~XuuRr^n!4Jy>-jY?dv=)Xt$R9AxwVRSx&QQ6 z{4a_{`JNiw)wJ7}8+nsW-bSqS-VEpVPresrAf29G>E#>Q(6EZ#^;L+siId z|2`?x8#{K*S$n)!`k9K%soY(`9v%U%NAn=oefku8$r5VYWe%oPiv~?o&zbcia`$}V zFaEoty83jNT+i~ryhA^Adv52w{(d^1Ps--U^J7+b*}^jueUfZ$-CaGu?$-P%S3W*C zSX%Y;^z`#@uC87^r%<-d`Q~!#nRAYn_qonBciXiz^Kt?tK9+G^&z!Pc@3GOTKgv&6 zdY`*rBsRVC{l4n;=jJ|}>|eypy#4~)=PH4isk3gqK5PCw@6L`V=d9UZ&DV=EaTR$! zJHPBkdEe)fywT%uKE}KUg)_I^NT-@BRJ# z$M@A{Z?*Kd{aTQe^n3mOy3@JOE&R)&H4`}8BwmUg;{bP?LMnSU_$p0W{YN=hW5t>b z8LlXl*|LQTptEK3mDSBGt1V@eb8fX9&gNP7EJSmMSIe_+xARL%x&3#iKe3VVn)z-^ z;p0h~!N-1`*jO;TC3JT0$uly+AzN4=rL&^#f?ZF4zrQbUUDmOEp7Y};GpoNoE3Ayu zeECw-rkEd8J+LkRct~=u=j4VrZ`QEQ_B$%h3=%zde$KLU{&QIT0--h2{&M(?$;a!} z{!0R{NexItz6I3aZ^}+z*xM0)eE3?{`-i~p5yhZM~ht$%GnQwld5@B0u!K_l0e8*R)N&I%dp;b@AkRJ{t0=9D$hA_A}2#~ z=D+IxOKOjWK@qp?pGEI#`x`5xmn$j@FaMadX@>7Hbx<D;y+pE<|2 zY%qdoIL1Hc+3NM%c%-hFTUeZ^P(3#5R>oex$7a(e^_*#&Iq~JHi2a%KuCC8n_0`j6 z*~3?-^g`=$r%28RH)84@m>h27J#j{+_}`!1$5Pj<>@K6LGh+w00hi7mpCGkJBDFNbcd zyKJ*M{$|K_zr}BYo?dsG`LPo;WcZln=~282R7G$hKgX7RY5U7F6{6 z)O^2NeabJOY~`oy#bjP1ycGJzPxiM{XLplvrrP!Jeaf0ZO*Y!r3HqJfiq24ocSMY7jQ%*?nT+0 z^;^>(YkiwJah`3L+s@`|Jl<{^(9~x4*5s6nLo(AMqwIj0|Cg6YrTQ%MReqbj?R?Ld zH}@tNvB#!H6g3@(v?E`g0Yzf0DwCA3z|_d*Q)^_FUcTY(71>>T)@vb4V#s@%U2esD$bk)wdBWMMBd}K?A;$9zjFQcc4$9#|CX>>tLzn}AVu!V z?UK_>Z(Y&a>MmCIxHtXl_VxS!^@Nu#M{a+#Z*Q{~7u7v^M&_};pK;}%P}!?{TsiisQ>)-HG4M|o!?X0U-nw;{nWow)@2>jLY|7d&eGxq z&E+s0$b9ABwsezFs`Qh~mc?>ecYm##G2_LaJwG?6+e=7Fs^y#KM!nj`KILusk2$kn zuk*g5cXiLdU&cncSsM($1zpWBqZCj#YueeYa(qjm&H`19pRpYk8{Bv_E z>r*5!Hcw-u%SmW^9p`Fid2U1fWpU0TZjG<2Eo>gZ(st!~er zoVj}L<~PGRk0Kr)<1OBFy{a|Ht#6O6wY4{or^v$U?<~1#9v%})JiylK>fcvI_W5eB zHMtY~^m3)}zOao%FByWg#lbvgS#ONVa1d+q)7{W2yMAI|rd?&{imMOsWiAVL1{ z&YGWR;`Z)3b@T4SxNOlZPrhFhuY%h1tM0FkTN5_x)|O20Dia1jkgsAxlX9CswPeNb z-#!P?(>})Y5jR}QYbiBSm>6lT};5@y|0dD zojzq&@SYP~MDO}OuSV-|P-N#O-m8UDslQjxY+c#2H^l6W)Zw33g89|ew*CM0di$Mk zdo~@qxHx}$(W@)p^!MK}DteOpOXA_ANvWo{z%D!`kqGMY%*wLtU7s4Er5(6!p_Sj_ zoO;vE22(dqUniB;_0Z(5X8SgO~Muty(XY zUbXQSa+h`1ubJON;=SJP+rSz?RZO?5` zQJ4%G&;^b8f?Do#*p|aPv*5)x;8N>XfW{OlEpRCpvwUH|4oGTghUY0>@aXV@gNpk( zw!Seji#`IIjgK#pN`3n8oyos{BD`RUtdXJ_Ai)qO?h>*=tR=wCi7RWvm< zRaBOEPuE+&|KG3wSCaJ1{el<&UcKH3GGKINS*p`LB`$DDX8OX!IPHvvzW#i>+N!Fm zU1r9*y1w^Loyoks>~6*5-d&f^%(49Z=jZ3w*Vc0L@lAVq>Xa8~4bSH2s@xvFxy}F_?WEKk(cR(PbbZ< z-L^4&{kn@6A4WzBf3@e$JxsiK$NdhagspZ)E6Zr&8T_??|Uer!ukmEQ8wx&4!{&@Dx{chk?$o61?) z+tG0$?Np1|=QA^n&(1c#KKI$9quoZIKRrEt?4_FTtR1DZK71&s)&6zn23Xl65r}a$t^=AIk)+DOXm_=FZq%*4)lFyn zUc6qmeEAFG1Pk%pYdj}IJSvuUc z=-neV_n4OU|72^sWA`$*R0nm7>%Y6c{{D-Li}$`W=?%${cXctbFMgIg^T)T_b0=!fKYU0_Kfg~|_!7fj z+lv<;R&js5I<{Du#AP$hcB@HW4c}5O_4J=rq102g9zSJa-`Q-+(D1E(zjD!{ zLnZG$=V$Ku{$%523GFNCelrXno|vdST`%_5=5+s%kdWNCqF zY@h{)o2IiZz3k%JI^QPpQOcaIOPP1x%?h$`+3d0{<jp|54Cr78|w= zJc#Yb%wYQ3r1;qx!KDU$f_8O(D!jbBGBQ?V_G~!rx42hu+FFU@9QyJ5_9P$gQ&d#+ z^z@WA%USWX+TS>>NBsW`yT5ji_o~0vl9Xg#=C{}V+^=t-d0^0@LoLvv!@Za9)cx-D zx3hGd_UCN=v6sf~{rh51tqi`s|4-5B6BD=JykC83R_>nfPs*JQk?>K*dU!NP$e+;~6 zk)dGjvVF133m561+J9q_C$w$X<^&p^Z@6sYv3%vfr5#dxX9UhY5K|Nh$lw~Vi!w0_Nxr_-a??bZtv=U!|Z@mNK6ncpq-jAzfzar5y_dfC-= z*XZuf;@?`9y{4wYk`p|4senuNWBHI}i)#M+cDwf<=@kB-dwbh`>1+Yxh`qlum%2qP zo-U(iveWm1iQjGas3`R{D`%c+@VTU_39e(lezxlUR`TDqd)b%Q3M=C9ha}1?`NENXl_y8|A+1TW$(|4aT=_f z0a?D7Ytr-b-egU`ONppA6;g6Xqkm)`^w4ZgiZE7GC^|Wzvm|Vep=Xp-3+N-A*)mwOe&VIT&QzQs<%SL zeiF3(830nq6R+$u6YmhTI1eZ;l^X$@2ub*d^ z{s_G2H(8`!^OHY#zWkVbJ^RAEhZ@CGz*Nrmo93^w<9pfvj*kka^(zoMUyOeMX@2oWYMdD}07= zx?f32$@_bI`(>?{osZd=-13$FW^uGK8`kGk@MKzaMG8sa)zQ!u2ayAHBJ`*+_A{ zprGKgnNmja)z#0=%sg?zBR8$0V#mHkdoQ1OwQ13%s5f)nc5=c!6l$W@?Q1FMz?GgawRYCRnJ|vucoG^CNJ;Z z&(F`(&(B+X{>+IJGptHiMfAlbMnuf8D?5HHbIR-ou)tm*)?r!v%*EAp<}nWG>6Y+n zptNVhnhco(yTNNycHFpeqm^4+>Np3#gn@#ALBM?FW6DvF3wkzWBEsqoOVegqaGMN7 z_%VZ{cg|a>ZGkf%XfT5_K)Ut0vICHm#CWc(;qryApp{&3rHBM)ahuUy5*z~-w;7?4 z3|bk&&~Uk68*`r#xD+hd_86XK(Npi7Hc+Z(1Q`KlS)Kwr=Kv_dgINLUCcon0>FWyn z=7+El0flfgXgGoyY$F4R1m_mef^_HrFayZVU@!gXJ1enK?&;^_`ci^k5Y};F@Z`r$`yL37sS98bBQ zPiNnLApjY+W&1O!`+x1Pv&U-9xB1?_k#^#K-5#HIsBv~jmTneZ?)5!bW}5HZx|z~9 z^6wwnSmra|qEa&2%;HCLNbEY_dp0`w3 zX4%IN`Sa@^M;h<0TKNIdXRaUaDf0i3Lcl*Dof70v2rVSsxwn5uYL4gLI%1M{C*qzQ`UDuFuo9E_>o6aAj={tz;cEA;T%Ygn zI4@aVa)lPkevh}}U3YTcvvum!>aev{zph2+cXV;do99JjzU2CwVvn-2#IE?ykDlP= z+p_a7U;1@=`KB{lGQaaln>oy1xjtjPAZ)^+v^sOiIcep)N^_NCRb*A~s?KeLOd~!p znKxZtzb2sO?*HiW_w_4s-Sp)}MV9u8uPuyzIK!~q#l=M4=*cqk`*W%v9*UdnHplYw zHlGu#b&_YT6rH(#?_Wr>`_`EcAJTqxeUnmLeY(pp@B0sr@mB;cki|A`u*n%%3^YFyYmeY8Ra^T!#-ieSK(jt=hlz26#s6rP51{mwJeK@af-|pFOkpz2W2? zf2tmSX~~=0)YKfcWmndtHSRw1^W>`jKi8gSwdVhmlanex%e}p4d(c8B{M@5ui93&l z_Q`7ddA^jCx^=}$Cp^rA@3gK?jEwkoBQvwAgH1kh#V0LnTc+eK7(PglQnoqXZMLQju(Uy?q463tKLm#b_)naTD1Z{GC{ zoHly>&q3213>LlomcHkvny;(R-y0Yyw5xQI^XJ=Bi(~KBor?Z{>e-S+$c7Py2PSq; zOg4#5-o*0naiUiCy|aZcO>SQkId=Ed;~sFXW?23aW06T3X!!vH*p9Pp=U!H3$8Wn= zU6uCKCfslG{(^hf&c`bE96de#JFo1lTMYS%C*w}i(7 z=iL3ZD3D1n?#}LtkL%a(*1LFr?y-F*ke%i`)t;wbVAu3E?!~CtZ(Nl+;u?KYRdcx7x*C6$id94ReuW7 z%Il6R?z}v|MBC)&f4h}S-gnH`3(XGjfK25rW~urA_xG{aCR=AJtz2_Q#ZWCL%!Km- ze6IZZy=l|mPpXBE^%l&M(n+_!yJz3u2m9mK{=7ar;D318^Jn)9?@yE4zvf)5`qIl8 zk29;jz4>&IJv+SZq&#ba|wAE+P#^m-XQ*?^onV8N3g+S+Jjqoe>y?uQ8y0MD${bre*s`%JucnI7Y zu<-q>30)XcynN+F5zo}8eskP*F8Y^QRukQl9jXsok$udCX?Lgfy7u{PAni)2WJ|pV@kuF@YNkphc0`Dks=l{0An`-XGiY zjis{=cRxG*vfb%po@TU#JS5^*hAv+ikhKn4du^?loA$97yk>JxG2$B`rInw){rKpsscAdgbhnY|*6ZT& zIoGC5Y)uu73=A{BmUj0@czmv;$%_1ff(d5JCo*QQeznaI7B!FE6w=P^*}tjC-|yU= zmX@+({d)2D!lQO68E)L0dGgMk%A$Kyp`Fvu_TmzjpSHbuv!+}8d)L#F_wyFqnI`&s z+u0e0|3G6^%kNL0H*e8-8GAeDKc3avVyg2`8NmjymhD@#*X@KBbl?g!VVVpIBZdOd z*0Ina_Ma~fweB_g__+T!6BE;xnX0O%Cry6b+{EPFZQz?6fS`XW9At|CXhvq|7igw%IciY|*Pti-ZNgtb{dRVwM-0BrW!x z4cgU}r2F*g?l=C2kD;s&@#;0uTb$jp=T>%$#B7Nf;5oFol37-n@b->H(X1CQK3uva zs$?=*t+(i%$zu2WdQY#cd>dc4Gxf=d+k1-UrXB0~c!}roTe-(Zx8};`N?v{|2kB;j zHla?PT8+Jyv%4(;D?1CHnBZGQ;^%iGu5i|xHJyQh&k}bYOC_l)+rW2v?Ppkk@LtcX z2=F~z6C(#nwxC1}t%dv^e}=3x`7{p_LsIK57brqz(F_Qy|Z|(Ye6n&{6$Q)>Hn05I|+OEmk?l14}cXvFvC`-*>GI$zvnUJq@ z$*d^v@}kg1iw^nvpZ>Za_t+Fw=;D`P`?<%|nhuCxnwvA{Smo^=O>bxk02=vTxwS++ z{OPjU>n5MA)UND;XXDbz@3y3#?hcQ?n{|8J{p{ox_nsYFt#TKGGCOGH`fHP4wsUV4 z&XV#f-(=Vyx_aKbOG}*#3Id9X_Uv1ij!;)OciAuGMPi^%0(dN`KnmhKkbxjU1_sdJ zN%51`QrB>P+lkv3&+-dC?{?iN0<@19v_@2Vxn=#I*Rm`5#Y!cniO<@!@aWp=fA_b% z|6jH3mtS%|^VRa!SsQp?2ea7T;F5x_G`q6utc2#f8H#5wdpVwtf8u_BQS645&+Zrf zzT0{K@m)}V1~e`)%gTAb&E|KfW|u6y=;b&0^;T{(b?$rLZe)JxL?7Jpo$eeHI(w?A zp_SF1^7l&?yLV67IqBD~_}Z3*;3M-))O>W4DP)N~VF#zViOH$@Ft!;Lh<6vFZB%KK#3J)3WjJn(yGUWV!E>~t-rr@vHSfv+2w_)(rU{;TKu`xdHKZZcP3Bb&3u-x zTph0t4*ylL8#Fs)YtsHJzExgtakhoCT+S}$!(o2;H}~f1Zd-U3Jf(hW$FA=xixPHy zUvekF?O4Og;P*e@?f(9y--d7hmYZ|8Z24C;`AfC`sXyMoV_~V(wEp0;uKKun7oS%j z&5Wz7bUWUc>*UllX_D2m=lU1Y&dvJTFz5H%;~d=#Gmmj-n}4|)9?b?G1Z^b;GYh2r|J6v%J_sJ< znzQU*45;S_?%#v*;^Wumb%hU?C&tYM@0>f3`R9D*D}#-jX3bX96o%BnnF4;n*_~6r zzO>@?oC&FJdgU#8Cm-<&ez({x{okLH8#i9ey>&!H+@56ar(XZ$erry>3L30){hrgZ&mRQ=Dl{c_v17(?MYKQ zFN5Rsfk~f{&Rw;zU8idI6eO=CmP7sD=6}snBIY7QB+v zV1-(vrSIE#rpyiEvCx_I_up5U1kLJ#`7clF`zf*Tbv3Jkm#=1KUO(Y_=<0dj7PK`r zxn7T*E+KVmOZ|U2cD^Uqnl6h#Cf9$1C)ca)u|mrG$BX?QPqjE^W&bn5e?dlb^8{Bu5Y&A|z$GTb7I z&dq6$+P+UqP0dO_|KFRN{BCY-CvW@Cp0?}m9HXU|q~^c;U~_kWJ^$Z8tDtM^;}wc? z4w=5atnEKv&(v<}jkk8Ye81e;m|U5ZRQ>nc*`wXnj~_+JSq4eS-`}<-r};2%S>3g5->C~uaH%xqH#{EQ0z{h;;FS=E^==r(1 z>s8c`cjvsly**4`IVNb+ndIdg!9jJ&1G=OS(}sulKkfPT>P<^aSz}}PiR`knX|;!^ zyqvnsy6{%4;`ZM!Y%T`xo>%hwt@*2b^Sl_N)Kd}tbC22WzubM?(74zq@S+f;b#!d` z+_s=>*b=^vC(W-`K8wr!ce1vsitGFx@UGi~nHv8?CaC!`^@vY+b@1?XaHkpE!d&7v z>HCrO;6;wS*I^sqc_9sb&}LisbOPw439hBjAl14b=x~JVpo9+Er?e1M%QJuoq>chq zVKeB25b!pT%m%+?9@j~nsUHNOErNrYHHJkeB8t(b<$XXVfsE@l-@Bx2PTHFriqYHm zt?)hFvd2{o)M8>NkeYLB@AR5)H;={b-R0)qo}TJ^#oo3wt2!#`|1;PMl+>;jA=mzZ z3Vq&J(lRnj^b7v{ST<$KytA`nXU@9yx?A5Y+xYXRXX>h@Je-`bE-gJg%XI(NYch~* zwe7<~=bxOMZzpggjF6 zyO5AK*Or|=U4Ak;g$YtK9L)UZpSmVPzO~)ly84^!OpD@YxwUDa<=+vL)foNes3|S_ zx&8h-ld}`8Qk|Z;yS2S^PN_oF@|U*2=7fbInUmM=@jt8HOPPxn9rB;2v+`1fl=Sk6 z;de8a$k;}0$+$SB?(aHT+h1kbXE{0F^2zI6SO)DLL%Vn~mS^8?zyIUOWZ_e%%l|$z zfBeP&sM!+ezNQ!D9fuA%xw^+(odX%3+V}gN?c=@6C5?}HpS`^N{_^|PvkV^k1x}N% z`;qYdU5=r8_Sxj)e43h(%Y09>B)34)pwygW6EAlpetC1#^~lWlPOIe|dQ+ za50;^TU+T1f$5Wt!)IG&Ut?C1H%o4TPSfr~EE1PG&awZ`r=C99+bu0Ds;Z@D&c`RL zt%R&yx%vz`(~3w_mp}de{@(ukon-TSKaA&BJ&S|p5=hlPOUp)Xndjt&cXx%qy^lXV z6TTDbW9h6_Ruew?uh6jI-R}qP^8b5cB4-o1!))*I=G>>x^)oK3xkXPrpb1MbAH$dL zd^T&x-QAlx=fIi*$1?Z47W;ZElZlC`?pLOLV=yF|dgZNqO>bpBI#M6K_gCiI%h%)U z-R@;+r@{6Wde%?tsogSJM~!>8@1#wcS&xtPT96Ad>dS)Wj*e$)q5*E!t?lNQ z!#CcavvtZ89dExrel9K(y=7;*HWf-e-8RKk*aA9;^W$%+RO*(?$K{`I$&pljdSc=s zEz4fRTb?gXPMwYPo^58>+S;ujb0a!#-{~7^*&vr_ZC|O@nkqH@yQLF;Y4;GSKYziaXOb zr6q3{fIDXC<%q>|pXmJi^ZD`?|L13`zwG9Y9<^|bn5mMg zi_+!%io?9d%U7Psd;HE+EC3(;0XmQakw*5tHQ6^)&h-;~-xh3nE-$D#37RDZt%d>@ zcpp|bUfxj-K9lH+^TLYlC%!|?LmRR=xU_g`(J9a%&WZA#`V4SV1Wkf5fLnMB4B(x0 z$dm;ymE;piQ2M4gyF#S3HMd!uraK9W5U3&kJFEt!Oyb%-5oy$ zhIrSy#h~rO3@gGPm@qJaoxlKc1OsSiHUk6LQWPf0HmC{&Q?Bsao12oxX?JQqpA{4o zJo1(Cit&^CrQ7rF&a3vf~I#q2KA-T#~6>%8f4Ri0ax%?i&hkYe}{ z_-^O(d7hKiK1TCjaF8%gJG1$`UH4@M2U`^rlakZZbpKpnHW3J08)ceuLSPOX!z;yJ zDbq*catj_7e0XrMqk{v~rIBLzQ2iv{7Ca&c_VK^RCbx`rnV6Y(m%rav`1shZpA*04 z9KCeuQv9Ds;(>vIXJ?tdzP|qcs?gP6`oq@8>0VtIv-8r!I!*aEiF4nt+N!_*Pto;t zvFrDII%QY;>xJ`_Z}0ExujS(6`t|dC{lAOu@;7xf&&)DiUHbZ3ue7r3E zUN3ZRpI7tA)AIMPO_x1B%hi6l$Z!AW!(@Lu!P=b<+oZqr8yOi{mA+D0A9`0mIC)KO z@V0NyX6Nha=-5O!ex6{#ni>DLAdW{e(>5grnW! z+4KLsE8p+!??1hB%a$$A=T-ZOJii(q@9X1p#ct};eM=|NVa2=#qD9YwMhHa1`}j&Uoy%tMqkPK){0YCTi*@EF-FaUv!smZErt)4nT5Q|pI^ z`R#M=?b+$G=li|tNB+ACSXfw2$UI+MX0z|RN%1qEi92h5e|uRRbGLevUgcTS>lxzf zo@~v$ybR*w6{^d3{(LqYbgBh2JD<-Si@^QPUye!Vm%O{P(|^9*uXs`3zwAlUyUXAE zd3#?@yI1vkt+1NU1-*m}lk96b&(F;@Gu{2DO*$`PXVKH+^7T4QCZ(@Ja!Bo^5y;g_}veu&X}Q5wp3sF@~wb*Ql(OtH%R9uY=j}22(Qza!OSv(j)rDWY3lUo`O zp3kf9D`o?g)DP}o2d#<$ZD(Tu)dmMLWjd=Yif{OIL55vVXr4FDEDG!Gi}s ze*D-irfc+1&phwWj@;YZ*6;l`%g+6ln(mu>dv||h+3%(okk<#ZB_CwVl$Y)Dbw4Ki z+s(8nT(obR(V`%`+9wm;UD~GU#opRiTfKUd#`U6Bi&N71djiA4)Fv&o?~Hi7`Mllb zPY1sGzR;C1$(T^O+ianq`^kAMpypGhu5S z`TA*{%I9T{DMW(?hsG=T0rXoKb&WSVH2) z-sUB{&3LgG`zyJSn`+tGwPW>{TCEan^qMtkT+>~>F4$J@h@N)V5u9w?#ZU+6IRAHDY z3hHDnsI%%-SU!Kk1cApj$vI0*ML*3HlxmevZ9rQ~Bx1j2Sb;bfa{lx4pUOF3-!)KYjc9eZN-iYxw%o^wg>; zD`)<)+r|6Xr0DC_@Y9(Qv)^4^J^k!bwN#bmw{17YJ4CJ(%>M0b{bI>PxjDgikG0-P z>FCM=EibF`xe=YecWHVTBPe2eZ)Ki3b!yG^%rzS)9^2~HBcZt5^RN9=VRgShPbT}z zRXk{n&fDo4e@rU>CD%v(zx$eB?*DCOy8pu=ZbwJQUtdhG$1K)Q@ZAv-w$$fr$i30_EnOW0?3%f9M=Uu^p0*p=;h-%r#rrfzkMah(vh66%;;r*2dl6g>TnZc!HLm^_bqtNK<28QXF{ z&bhzu@3*(Nw`Q(<+bSLx@U3|2uWLU+cK9XBJ4P+lZxEI_)_Uts^`&)ZUlcB^|8ZD; z$M=@Y3=AP>GpB5vxK2oE>usy5MN2;NO)Or1^4z(;?(XQVSyMB63Z`al^M{1m7o8qs zW##0jr>6dTw*^DWCc#U4G%M_yRA#$2NK) zmcf0e*TwDzwMygvz6!7X_2uGvIYT$lkxMIPUDilej#YKx%HRKYTan88zdLUpX=3Gm z^!RaeQKDI1>^?Q?3S-#1oYu}o`TX0*yVX}7Fvg%oWkDR6&KRvDRHs{`+%B-wabu7pG z<^P}3UcUge>eYd{>RH^}H<^3upT*5BH-(H1fldHr1J6N$N`{7CPfX$hmFmB1)o0e5 z-i{Rhe(}|lbAodHml+%m7tOl5I{dWzulsLy*xH6Xw+VE9E|ID z95p+;xZR+}PwZl`M|W@a+zhP>1vSHdc$JiFNw0o;cZ=FeT{E+=l0OF;nX|90nV6ZX zjdtmOi?z|QGdxL@W^1^?$#lKZU>UMK+b06L75~k)eV?n;iaz=&~ z$;&I>@BRKnXVLt?Cr=cMS3Nd4HAmrhagS#0$$eVqk8#{qv9i25L3{be{`yPP?(C`j z3~CLkdRzC`6iqt&WP@4w+b!QZ1(VCB7VdV_-`M#m=-t-UThz8&ueQ;s{q?2t=hNw5 zw}Yzay7wo4en0zm`h|ae&o`x>uKM=o-q`RzB4 zXKHGfKQ;Mw(+3Vv%+x=yO`fi3S)0Zrq-M!?`?C9DVYxgZNx_EL%@e?ym&zp7IKl+=c zmv1kOI&~`6vbWYX7uZC-Wh-6UMg>j-kSCG$z*>m>6Jbk4rMYhWL?Y5`l-L}VEhX6^LLoR z?HJH0$_FzU4*Z`BI>ZAk#Bd;!fuTU^!|md9+k11$x5v%yJ)X(1fYH*obdlKV|CeLb z)79j2%4Fv)+`BbXzFca4*JZHbr!rp|WL@+>|0w1ocxa9xzCX``5+^-`?Ms z7Zlu>f8Q=wbmoNZw~Q^<9PGMw#`|}NW9o#3t3Nj$-r)9H?*@yr*6g>h94*}ce-*Sl zmes$j`{b7XIVC}}GbNuIN5z<4y?W6yD*5HSQ_JNgZ?FGjXK`QixAU?!cXHP)|D56T z^!v5V`#^44^~_|Q6MJl{$Sgm_!|nX%&z!mP%x9iW<&h4-UrfsqT(h4oy`6iLT~ex0 z?pnqz*6@Q9%mU}G%R3fyMDRSWZ9?c*OBoLO&AzLi)Ss?b7IeR;_AJ8^ypDTL&HTb?fml7 zI(=uG$(9PP$vE3yv|IPLg0u3u!&1Jx7x1*%WJzZ~J(AgTbyqLko2kzx?!9c`qhk7~ zaMyAp-!nJro_;_0)9sYV%xdy$y)oj&-*G0N@c0b1Kap+wTR4GR{j0m-jtJ* zj&_T`UU>FYf~&gU;)VUDUYU6cQ&-PeRVqC>Q{M9B60^%j zr;JzB2Ft2VvMQ9?{&Jof=Ss8t?9Z*AUdZ&hIQ84kdFK`zPK`G>|BDNh=Qmx}c&;J* zuP3nk*ChQt9}b=Wcd%Q3--`bc(aoZ3XHNfid)1`N7W~;E@0yNX4UgYj^72wMJHOv7 zlatGC9+R4aX0MF;=%#hCV)LLc?Rf&c6TW7&bcv zSAO#?o#FASOxy30ZLUyI?mqr=<){8l(9|xU{raViRPfKeU)QV$^>DQ;c&}Khs;UMC z27Z0Ee$7wsiul*L;LNc?b(UG~uOE;5ADe($*objH3tmto)7NigE+iWk1UcKy63%DYP@n5~fciz=M z-#2k}ZQ)gEze!vZq3Mf}Qqrv`FT@9z&D_j?peE;(iAo|17qFT`$p`r?%h=a-ly zy_Ni}a#TF7!tvY`a0B=8RK23z@$+Pr!+$?oWj;q`?XJI3yLdNzxqQbL?B?$eC+?GU zezBzW+N~*;P4iUws-`V|sWSOe$JX>aYMN5Z*UtX1ru)vj>FLK$T-|r$OWW-wq1)rV zw=+(wo3*{`z5-D}g1=l_loZofg zZCzzq&z*PO+RF=P)V+#qSUUe%-Xjx+3mfJf%Vk-tz5L@r38(G4A$cA%m0v_YT99rz z%g;!&H=_F4|Lx`9{6k~D%l9{RbUhL-%4Kuh%i)-0>?tC@Y??{n^2wcimpRkg{ypHy zSafV+hWg?qX8W(CsJXa0bSDHD9G!V<*;=P9Z1R&l(u_Lz6+Yeh$M|>Q|3lwv?*4rD zz2yAO&ClcJ>94=ef9BrPH}5Rx?=3#xz4!D!WiN)Q{DyOcSo^eh6^mGieci2odP%7B z?*j~{J;5G7aHVM00S-6&F)=YYyP6x3%2Ql(RPVoj+*xYU zZj@!c=IrAszt`MdwRv-JNSmY}C~uy8Wde4_g*je}(>Ql-U;g8%teLs_@@31uegFRb z>(|cKY15`D{*Q1k)>ypl@GTp^o#$_@b@3Gv7M>{x8bF+3;x~EX#KPCtbl=9R-Fo75 zHIpgWK$fSnJ^T7P+uC0xuCA_eaq~8-8C<)lZx{7;!~CL|?Kf}TI#uou9=0%;IcM2| z1q&7~bktV5^~A|EQ{RBK_=I}S`P|^x*uR&I&&{!XT-9cIEpYdmw;Q%Cox``{uGf{8 z>K5?GQi74CZ*1({cXxMhRa)e$7c%)9Q?NmM&7p61%>MrU>plNr%zMdA9i>x&2bPr0nl)=yfJTcec-$@diOKoD@|)An zo;rIrHzPx0qW`5WTefJ2uiMdXQ1ig(HFy+X`LW44r}Fah)YPYoT)W+#OfLELC&gEwBdf8W0LS4pw=SAoyZ&Q^bT(D?1eqi}wCI}z?h zjzvYAHgDRoqvGqUtFErDy}i9YexTrJn0lFG*REYc!osn^KOeTs^Yq?L{XNahPq}WF zpYo3C@9#DyACIg1`Bc`r3}JbT?UN@@EcDB57Vq8r_uk&>ci-)zf;Z;xEPZ{=w)$HK zbLRf)Tl?$l)6<{d+gpA2{k(gX&*w&O&-?oIYwXS<*BQc}g+X~Up-8Iz$dM!Aag|GV z?z|a!|Ki1swZFeTdGch-mMyDRX*I9Bu{|d{J9>XzZB5Ods{Rk#@7Jxqr(E;r$H&yu z)6UMZG&VNgylk1wY9aaTet4@_4WIIKAU}beuCQK%R72%wVoHaiNxmr_4~Es{HYb7c{YK)m)AsZ ze|KkRv01%s^s?BhCf%*kC*40TNvQjDQavgB@-p9I>5ivcwwM_5u6}!!tt~U?o{R5` z5^II`@w0cle7U5e^2LRPSFT(++ATicwtCx^Ehd(hk$cvxUvGZptj+Y_xk3@Vj={l~ zPfgWkXJeZ)-PYE2k@5EY``avE);%`m4>0-hpqc;K`T6_P&d%Ch{$8pql|#GtMJ_Wq zSfq}GJUMCjp;+qo7Vn+Rx7PC9+F1PD&v5=p-XmY$oVi@b_8>Fiu}PcV>Dd{==C*T7 zzK6xe&Ydvff!_LvjY?fyEO|l^yp0z+y1Ka1e_r;tzq_w?_fyaB((5Z579ITe_xI7T zq}%5ADh_YZ&W%{P?Ng&Gs0XlY-Q^Ya7u;W&e9N5vDR4`)04W~v$L~x=N>aUe972yWi;!%gNhU?YXzjeovOOh}(Zja*mq88k1eydBG{EVrRj_L!Zyv>;KF9w%gsJi|6!`B`V+d zalH*QDoXZ0fAq+;D_2yOeTdy%mRY_oS7GwJd2ykks%>Q-9vsw|<2HMT&8Z`yQiZFKq9SD{b~cSfJQZyVV*)$RK>$j)6}b-y_r?T0xzIg`Xf z4r?wxu|b4M@tOMbrDfWZJ2x(W{`BcnZZVyRO(~w4nJdel-(oY`x^?Tyl`AzhHRWr+ z1d8}A_Px_{C6h_}!=3ua+dIoPv=!^NsM*`wFM{}R<#!Hu!7!yP+Urh_}?DT;ZKKX@(g-@S8O)j&@>I0uw4W2&+2MeeS7oObM$oPGKyV@rn ztE&4xoey`PcVwHx#!xVeV@5+^+vLB?dLMrI_UGqkRaMn@buwvZXHA_w`}Tzk56pi5 z`Fwu5e!QH#ynfw0i$W*6Ej2>gT3T(9R{Py8`rER8566oIW4@f)O)&>wKeE;|BX8Nk8E6S?0lj;&E1*Z{c7fs2p7Q$ zbx;MRJUP*_uduCY+qP}Kv&~dhR95gOeSAGb%KPQdBh#DJw+eQ)HS_)b{y5@E>`&e$ zix)dzdHC<|?{iWc72>+4Iy>&1{qp6@wQJX|x*QT3svE!Wj&1h4&#^3^5z8Y|<&)>k zk$E2E>+0GX@vYi^#a)9X)qJ+qEE_D=CW$-}sn&XYvwz#tzqcRE&fiy9yaUuQnsaPg zr)0Xutf^C`*i?RU3FRt2{v^Wdy!t*Fo0YvDCNftZn|xZw!>p;JV^i~E!)CV~3vPJr z%RHuE9_;fWNnzgmc`S$6*2U~xWSgB7S*P=UsrU32r7z#Vch66{`JpaA*pT<-ymN~i z=T3fob9uV`t!dx#o6nu|3uG~2UCziLF_Y)?$6jNR*%ei)|4-d9G@o{9^G>L}B_87W zA{G;#J$rWLO31~f`}Wywym0A~QOd;KFAJr>%H7Df3|u4zo+{3KR?g^ zf9L&e`TZ_F&byx9*;#yd^6Pb1-nrkt^e(%rE(};r^+&I$XXk zXcU~$$Sn92(mHBgt=zbCwxp!w_Po16{i^4`%**G=&dPf7e%_Ju>-Yb&va`Ea*|*`F zMq}rUS6*vZW_(XBn{{BjV|KRoebB+O41(5YkMtPd*;V>_o^5rDXU6{OP48#i_sVry zRCVD1$C(3-A>rZszw{WVpW9)TdhV`{hDO2v{hs^$l-2&tnIrRk&EF^L_CFuX|JV4X z_DyZtQK|h8v-^c+bgW!AMO%M)-|F8Nw{5AH?s!<-Z{WwwAh7W=kM9YK!`rrP`}+F& z@#Du=8)v)7evV$*>k+~)CDABpG2!38e@o97tozOr`6Tb!)vIss?Y;fEH!&&ck@osM zm+stoV+NW`HZn4D$v^6E$#(EkCX=w?)v33v>$gIznlfd|9Q%4XU(oWdW1nYM+q}#F z;nS7=u2&0k(BA>j><}oIfsVQb4Xi-MS7vdV81@{?%g)MjT6jU@ZOxK*`z5dLV19QC zY|f#~KbHiSKR9dN)_#GfeajY;?}7)E?XoOC8=1{X`|?fyz2&hP@GWW5%%u(JFdwAMc`@Z!nI>T~ahg@klWuVXcw&-Ye2 zearI0{nq90_WXF%-B|r$inr_9*{N2`($5=Cn*u&6PI!XM61JeM%ks7x``*>c6|H;N zaU>|Kf8ANfFEw|f)v~kZ9+SEKa=ZLag5e`dZRYP*J0Pq_*Y-wk+X08Uqf$nB|-v&R48@XZ?F&xybB#flHF+ zR(JVJPZe%i_kLUOY)3epS+j(#u?^zhB;~qyn(z+t}L@(weorv!rdYJt2cRG>p7IkWc_~oLa3Y5<5qnY zTyAP?96aapsZ*yw<(JjuZ3@o>Ga|U?e2XtmA~I^XMQhutW7EItj zYff}_}I~-sp;wQyUThvgPM*#b1yUW{I+@9I15&Hfp`8Ve{4N!(RF1< zPx+DjV##w4bGFSr@iHp-VV(FKHiiU|xyu$WPJVc(_0!^qM>a(~uKdw%#r)Iua{eBd zlqoq0Gi-ZIqJ)-z6iAkw4C>3gh+D3yrKP2FP=9~ZsXgxx3}|(UgI-9W~5dq z#n5oERO+C9-N)`-yR0?_L`Q2+vn_8qk=XSrWXW06D|yyRjMI!Rx@t-763paR?wYpc zO=oJ_^0M32-`_ob@E<`Y;dmCJVF1#8497x9%D@7!E$do-dhZBm~$bMCF&R<^k| zm6vRu-(;_xm2A!2u3Ta!!^gc|Rz~K`nKOF|AGhs1bSv>##4!~=W(I>-*E3ljz5iYO z{M_CThq&KK<<3~N^m0#J!_wZ%Gn7T!Uz#)ub{Z9JNpZ22Mwylv(>q+%_WWvCZ{LsWe%0*CD(wietPeWrz-QTJ! z)epeOjx+c%Kepe0?C8;{)29c6)&MXp?_7B@t*2SS{cFb)FOY6<4*=Fl2W0|0{U>m~ z0k`eIEk97(4v7a|_z2B7P|AmGx#Y8X;JRkQX5mUn(5xhb_VP-<<2S5*qoQt2)egUs z3a*!wcKaFoXi7eNc6qtKyo^l9bVg7cNMhRMj_LDjK6z@0%reWJwcAZ+`O>AadnztQ z7Jq+t*EIXunfdnroB8bu%=7c}>;Hbe{`}0$$y29(y&4|BlKt1a-S0nr`jmElo^D;; z|G(esu6NCmoo8EZW^7#i?99xE1wXE=3|4;R&j1<4I-Obe?v5slYn-Kl!G$YVwiG?} zdcL$^`rqH*?d$$jyuY{i-80b9WtEkc{{H^8wY6ns+o}{cPR-EYR`vaE`SzTfi{xVC z#154pI_kE@kdC^b_1VMi{CB7G^72MTMjEG`5qSOh(W5z2i=Uq>z11=Q-LpeZcer)) zynkLgy{Gc?oV9W`6%*#n$tj!l=+UFAtHZ@bMNQ4jj4Z*O{)-m9e~d)9u3o!lSNm(r z=FOM?PMv@G&xgbOZT=D0Gmo5iSYEjAp;g(N8>jX6?@2z+_Y5+A6XB=qvvlQ3PmZ(e zVt3z(x4duLIrUSyzxBL}_wLobzi0b)yX&X0#{0H=KcBPSo_F`v>({%Bo_4)phV;=5 zbe3!C>&I_MI5%K7ISdV1(wKY4dzP_rM*I-j(k^eez`I#@8mV+LC&fE?xTe?c08N z`@D>d8ygZ2x2!t6r2Csp^75N|tG_ogvl~dv0ZmR_*12@`>eLxCR-99McIT9bu%5M* zmCIw$$fN#I(8%Mi+p8W<&#Jf4oSh}KJh5+%b@@7rmQ>l4H_c{Or`EB4>^Um@_T|lV z@R(AU#53{un#2{M3G@GI>6}|&A^s?*t2is~Wmxpv4OL}V8gH~L$qKi+zH#5bU)f)m zWNYi(lCdh$Ff}dx_~_^&kwdAICr>_l`q!_jw+w&p&1vjh3#w9Bie}xr7x(j5%eBlc zJEsP!#J~nM#e&bBn``}aF-u!KpQh&QTPl9`dw;ymuh&*v_2A$%3&R>~zpdU-EqA}-F>kT=&RbdSw#q>pIX$ng z`}6z$|9v$-i*n7kh?aFD4G0{{Z@6Wio{*#sDx#P9CGTK(aL0Yp?AgD!@Be%Dfyu2q zUcXzsr$2j^_HlbreSLj={QQWF%*=`XNqqaSEX%2yWWl`uv_O63eCu+*GZ7C9e(e2z z&-jX?oAj23X;%UyNF|4H7B` zGygPs*y?Xp=91a87qqq^W_OwIZQk70znd)1u!h{9)A&9e)INA*np#|392GSye&SY9z7nao z3|Gz5AN&TLn>1sGpYp#Me!jlGo}NEnEbc!8cEh*t-}P(TicLM@CY4f}}#_4^a3EtWHcXlMcH2LN@`<3HX6h}ntb+<6+2vJxQp3%EG$XZGA_k@tr zr4#yXtH1r&n~&iF0Y7E~6Ulkm;(YD@e_h{Svt#)2U=5vU3}(stQp z)~b#`-px890-&+?j5)`C-k$?1Ptw!>|NFi_JUz@Z^y0Jq%Z@8BXuM*+ne*uTd85a# zO%{j5f!9lRXf7ADx3;#HmX@Bb8(sG2N1=bSN3iJeGnvQ!HgR1CZ}yx~;P<%T;h|RX zxC+O(_m$_mZtsAP@xJ=Xy#F*$V`p>LgGE&(mFk}auhtxgc0lGWpLc@$)(!9dA8)za zoN|%+kSWn;#q##z)`e3WKpPhgp3Zsp@Nj#Qm5D{y?meler%jqPN!@>5M4e^QWD5xi zp_kL=tvFj=^LFd?D*`T+2i3j><>gC$)DU((u>5|(6~&DHb!!#DRq2r_mnDpJ78lH_ z{QS(e;=_S|ZTz#396T_=WB(VI+@1eItupy?ztQnilkc0Qx9kia1*&y5`0szX z!uf(+Y_u~tC?4!yKCwjV=hAqM1(qt8^lbxgt6j)c+U0)3?$O0#nP(b1>SR9@OP#-X zRSJ9@<^hqSS?kuV^PaAE@;k@uUeG$`>ThpezI)eqE_2JmhFb?*EtL$FmY+O--oD_0 zLwfr2e}8`~7fHPpe5)*X_5D00-XB{^q~2cKY6@BVx$==oQ%eiW{{K&}`EAV2&3%1+ zeSd%d_WkY=bt`#UudwNz66_ST?45C|xVZS}o_+cE_ubr_e%reDTgNxS{>JYd>}*O= zR=wX|+=9ApO2Mof%Mk7P59&Rg26O8FJeKDc*L$)ByzuPol;2bOySq=HJGZawZB&lM z*)@@y`(!K+%>*st1*bYN0iLVsP+cy$S!7A4SdYQMRKe*-L7U)ayz(o4bw%@ekU&?h`ffPf-$MRX-;`(~AyS6M`xN!CA*T25L&foV_ z?Rw_2L#3e0qz`5?C|sM9c6V3l^K)~J&p5a3IQ1e)9D=C zzy5xurq~hhjhAj_-P)3wnVISI=8s--M)m9MYv**YTC&YqPo8{~T3cJ|qJF4&%>gb@))H8Hxuf#pN z#d!;-UOcLCOWitavhv@kRXh9jT3cJ&`Q^)|9ktn8{M_$*I5RV|udlCm__{BbnR4_0 zZkt+cxV4mnXG4hem#<%Q@9fyPabuuN_Te_(M@!>VubguiFYKw!; zmMvR4rotOWAKo0_yx{HH``e22mTlu}WSn-3?a<_wtQKguSu$5`im%S}`vrF>L$K8WB!{JzI|V^Gs|YZdi84hJkSN2Wa#s_Oqnq<6wi{GxTjCPh~V%E9J z#>&bnU;k(0=iAEeeS7|XyDfNE`Azw|Co9e!c$hK$t$#}mEOG3;d?01c0SzWdtIUrX z+!VIpW$-cBwR`vENs|hs7&;t{jEwHoPhf1A@f@_YuB^<=kD0;HBQf#e#^mEa7O>Ay zdUJdGd-MH2L9=>>C+z?KJU?a1l-cI_pCb7MKL7c7zW&^a6F<(^|7*U?;E+@F^V3sR z?`bmDWj*=}8Iq<-o9EU1c-X!$;KjMQ)`$NbIgrVa;PiQY{omK&`+tQdB|R!;5a?bL zxA)iH@ArOx-~ZqCPd_(k3o1hrBbX|XVqjnZr8fp}j%EP&CQz72Dv+3SAP-TFI-2026 — Patron Composite aplicado a Lista de Materiales (BoM) en Odoo 19.0Patron Composite (GoF)Aplicacion: BoM (Bill of Materials) en Odoo 19.0Component+operation()+add(Component)+remove(Component)+getChild(int)Leaf+operation()Composite-children: List<Component>+operation()+add(Component)+remove(Component)+getChild(int)<BomComponent>abstract (interfaz Python)+get_product_id() : product.product+get_quantity() : Float+get_uom() : uom.uom+get_cost() : Float+explode(level) : List+accept(visitor)<mrp.bom>(Producto Compuesto)+_name = 'mrp.bom'+product_tmpl_id : Many2one(product.template)+product_id : Many2one(product.product)+bom_line_ids : One2many(mrp.bom.line)+product_qty : Float+product_uom_id : Many2one(uom.uom)+explode(product, quantity)+_check_bom_cycle()+action_compute_price()<mrp.bom.line>(Línea Componente)+_name = 'mrp.bom.line'+product_id : Many2one(product.product)+bom_id : Many2one(mrp.bom)+child_bom_id : Many2one(mrp.bom, computed)+product_qty : Float+product_uom_id : Many2one(uom.uom)+onchange_product_id()+_skip_bom_line()<product.product>(Producto Hoja)+_name = 'product.product'+name : Char+list_price : Float+standard_price : Float+bom_ids : One2many(mrp.bom)+get_cost()+explode_as_leaf()children1*bom_line_ids1*child_bom_id (computed)*0..1product_id*1bom_ids1*Proyecto: SAP-TFI-2026Agente: saptfi2026Patron: Composite (Gamma et al., 2003)Aplicado a: Lista de Materiales (BoM) en Odoo 19.0Motivacion: estructura jerarquica de productos dondeun producto puede estar compuesto por otros productos(recursivamente).Beneficios:- Cliente trata uniforme Leaf y Composite- Composicion recursiva (BOM anidados)- Operaciones polimorficas (explode, get_cost)- Validacion de ciclos (_check_bom_cycle)Trade-offs:- Puede violar LSP si Leaf no soporta add/remove- Dificil restringir tipo de hijos- Ciclos deben validarse explicitamente \ No newline at end of file diff --git a/docs/12_patrones_diseno/composite_bom.md b/docs/12_patrones_diseno/composite_bom.md new file mode 100644 index 0000000..a3f96b5 --- /dev/null +++ b/docs/12_patrones_diseno/composite_bom.md @@ -0,0 +1,211 @@ +# Patrón Composite aplicado a Lista de Materiales (BoM) en Odoo 19.0 + +> Documento vivo. Última actualización: 2026-06-18. +> Formato: Estándar de la FCEIA-UNR para documentación de patrones de diseño (Cristia, 2015). + +--- + +## Diagrama + +Ver `diagrams/plantuml/d_pat_composite_001_bom.puml`. + +--- + +## Documentación del Patrón + +``` +Pattern EstructuraProducto based on Composite because + +Cambios previstos: i) un producto está compuesto por uno o más componentes +(sub-productos o materia prima); ii) los componentes son a su vez productos +que pueden estar compuestos por otros componentes (recursión); iii) es +necesario calcular el costo total y la lista plana de materiales de un +producto recorriendo la jerarquía completa; iv) la jerarquía debe +validarse para detectar ciclos; v) el cliente (interfaz, motor de +manufactura, reportes) debe tratar uniformemente productos simples y +compuestos. + +Estos cambios son los admitidos por el patrón Composite según Gamma et +al. (2003): representación uniforme de objetos individuales y compuestos, +composición recursiva, y delegación de operaciones. + +where + Component is BomComponent + Component is BomComponent (repetido por cada participante que comparte la interfaz) + Leaf is ProductProduct (producto simple sin BoM) + Composite is MrpBom (producto con BoM) + Composite is MrpBom (repetido: cada BoM de Odoo es un Composite) + children is bom_line_ids (campo One2many de MrpBom) + Operation() is explode(product, quantity) (método recursivo de MrpBom) + Operation() is get_cost() (método polimórfico) + Operation() is get_quantity() (método polimórfico) + add(Component) is _onchange_product_id() (en MrpBomLine, agrega un componente) + remove(Component) is _onchange_product_id() (en MrpBomLine, elimina un componente) + getChild(int) is _compute_child_bom_id() (en MrpBomLine, obtiene el BoM hijo) + +comments +La interfaz BomComponent define las operaciones que cualquier participante +del patrón (sea Leaf o Composite) debe soportar: get_product_id(), +get_quantity(), get_uom(), get_cost(), explode(). En Python no existe +interfaz formal, pero los modelos MrpBom y MrpBomLine exponen estos métodos +como un contrato implícito. + +Leaf (product.product sin BoM asociado): un producto simple que no se +descompone. Responde a get_cost() con su propio standard_price. El método +explode() retorna una lista vacía o con el único componente (él mismo). + +Composite (mrp.bom): representa un producto que se descompone en otros +productos. Mantiene una colección de hijos (bom_line_ids) y delega el +trabajo recursivo en su método explode(). Cuando explode() procesa una +línea, si esa línea tiene un child_bom_id (computed field que apunta al +BoM del producto hijo), se invoca recursivamente explode() sobre ese +BoM hijo. + +La relación "children" del Composite se modela en Odoo como un One2many +(bom_line_ids) desde MrpBom hacia MrpBomLine. La relación inversa es un +Many2one (bom_id) en MrpBomLine. El campo computado child_bom_id en +MrpBomLine permite la navegación automática hacia el BoM del producto +hijo (si existe), facilitando la recursión sin necesidad de lookups +adicionales. + +La validación de ciclos (_check_bom_cycle) es crítica en este patrón: +sin ella, una estructura mal configurada podría generar recursión +infinita. El método recorre recursivamente la jerarquía detectando si +un producto aparece como descendiente de sí mismo. + +Verificacion de completitud: todos los elementos estructurales del patrón +Composite (Component, Leaf, Composite, children, Operation, add, remove, +getChild) están mapeados a elementos concretos del diseño. La repetición +intencional de Composite y Component en múltiples cláusulas `is` cumple +con la regla 1 del estándar (Gamma et al. y Cristia). +``` + +--- + +## Estructura del Patrón + +### Participants (GoF) + +| Participant | Rol en el patrón | +|-------------|------------------| +| **Component** | Declara la interfaz común para todos los objetos de la composición. Implementa el comportamiento por defecto. Declara la interfaz para acceder y gestionar los hijos. | +| **Leaf** | Representa objetos hoja (sin hijos) en la composición. Define el comportamiento para objetos primitivos. | +| **Composite** | Define el comportamiento para componentes que tienen hijos. Almacena los componentes hijos. Implementa las operaciones de la interfaz Component delegando en los hijos. | +| **Client** | Manipula los objetos de la composición a través de la interfaz Component. | + +### Elementos del Patrón Mapeados al Diseño de Odoo + +| Elemento Patrón | Elemento Diseño | Tipo | Ubicación | +|-----------------|-----------------|------|-----------| +| `Component` | `BomComponent` | interfaz abstracta (Python) | Contrato implícito | +| `Component` | `BomComponent` (repetido) | | (clientes múltiples) | +| `Leaf` | `product.product` | clase concreta | `addons/product/models/product_product.py` | +| `Composite` | `mrp.bom` | clase concreta | `addons/mrp/models/mrp_bom.py:12` | +| `Composite` | `mrp.bom` (repetido) | | (cada BoM es un Composite) | +| `children` | `bom_line_ids` | atributo (One2many) | `mrp_bom.py:40` | +| `Operation()` | `explode(product, quantity)` | método | `mrp_bom.py:419` | +| `Operation()` | `get_cost()` | método polimórfico | contrato implícito | +| `Operation()` | `get_quantity()` | método polimórfico | contrato implícito | +| `add(Component)` | `_onchange_product_id()` | método | `mrp_bom.py:114` | +| `remove(Component)` | `unlink()` (CRUD Odoo) | método | ORM estándar | +| `getChild(int)` | `_compute_child_bom_id()` | método (computed) | `mrp_bom.py:734` | + +--- + +## Análisis de Cambios + +### Cambios que el Patrón Admite + +| Cambio | Soporte del Patrón | Aplicación en Odoo | +|--------|---------------------|---------------------| +| Agregar un nuevo tipo de componente | Sí (crear nueva subclase de Component) | Heredar de `mrp.bom` o `mrp.bom.line` | +| Agregar un nuevo tipo de hoja | Sí (crear nueva subclase de Leaf) | Heredar de `product.product` | +| Cambiar la estructura de la composición | Sí (modificar Composite) | Heredar `mrp.bom` para casos especiales | +| Añadir nuevas operaciones | Sí (añadir a Component) | Heredar `mrp.bom` con nuevos métodos | + +### Cambios Anticipados en el Diseño + +1. **Cálculo de costo multi-nivel**: hoy el costo se calcula para un solo nivel; podría requerir recursión profunda para obtener el costo "rolled-up" completo. +2. **Visualización del árbol de BoM**: actualmente se muestra aplanado; podría requerir una vista jerárquica tipo árbol. +3. **Variantes del producto**: hoy cada variante tiene su propio BoM; podría simplificarse parametrizando. +4. **Manufactura fantasma (phantom BoMs)**: ya soportado vía `bom_type='phantom'`; podría ampliarse a otros tipos. +5. **Operaciones (work orders)**: la lista de operaciones ya está en `mrp.routing.workcenter`; podría agregarse navegación desde Composite. + +### Restricciones de Diseño Impuestas + +- **Sin ciclos**: la jerarquía debe ser un DAG (Directed Acyclic Graph). Validado por `_check_bom_cycle()`. +- **Composición finita**: todos los `children` deben ser finitos (no se admite referencia infinita). +- **Interfaz uniforme**: `Leaf` y `Composite` deben responder al menos a `explode()`, `get_cost()`, `get_quantity()`. + +--- + +## Variantes y Consideraciones + +### Variante 1: Composite con Interfaz Diferenciada + +En esta implementación, `mrp.bom.line` también es un participante del +patrón (es un Component de sí mismo, ya que referencia un `product_id` +que puede tener su propio BoM). Esto da una estructura de "doble nivel" +donde cada línea puede ser Leaf o Composite según el producto. + +### Variante 2: Composite con Composición Compartida + +Odoo permite que múltiples productos compartan el mismo BoM como sub-componente +(composite shared). Esto se logra haciendo que `child_bom_id` de varias +`mrp.bom.line` apunte al mismo `mrp.bom`. No es el caso típico de Composite, +pero es soportado por la implementación. + +### Variante 3: Composición Recursiva con Ciclo Potencial + +Si un producto A tiene un BoM que incluye el producto B, y B tiene un BoM +que incluye A, el patrón Composite entraría en recursión infinita. Por +eso Odoo implementa `_check_bom_cycle()` que se ejecuta en el constraint +`_check_bom_lines`. Esta validación es esencial y debe ejecutarse cada vez +que se modifica un BoM. + +--- + +## Justificación Detallada (en términos del estándar UNR) + +### Decisión de Aplicar el Patrón + +Se eligió Composite porque el problema tiene las tres características +que lo justifican según Gamma et al. (2003, p. 151): + +1. **Representar jerarquías parte-todo**: los productos se componen de + sub-productos que a su vez pueden componerse de otros sub-productos. + +2. **Tratamiento uniforme de objetos simples y compuestos**: el cliente + (motor de manufactura, reportes, etc.) no debe distinguir si un + producto es simple (Leaf) o compuesto (Composite); ambos responden + a las mismas operaciones. + +3. **Estructura recursiva**: cualquier nivel de anidamiento debe ser + soportado, no solo dos niveles. + +### Análisis de Alternativas + +| Alternativa | Razón para descartarla | +|-------------|------------------------| +| Lista simple de componentes (sin recursión) | No soporta productos con sub-productos | +| Clase separada para cada nivel | Explosión combinatoria de clases | +| Tabla única sin relación padre-hijo | Difícil de navegar y mantener | + +--- + +## Verificación con Código Real (EV-COD) + +- **EV-COD-031**: `addons/mrp/models/mrp_bom.py:12-17` — definición de `MrpBom` con `_name='mrp.bom'`, `_inherit=['mail.thread', 'product.catalog.mixin']`. +- **EV-COD-032**: `addons/mrp/models/mrp_bom.py:683-685` — definición de `MrpBomLine` con `_name='mrp.bom.line'`. +- **EV-COD-033**: `addons/mrp/models/mrp_bom.py:40` — campo `bom_line_ids = fields.One2many('mrp.bom.line', 'bom_id', 'BoM Lines', copy=True)`. +- **EV-COD-034**: `addons/mrp/models/mrp_bom.py:706` — campo `bom_id = fields.Many2one(...)` en MrpBomLine. +- **EV-COD-035**: `addons/mrp/models/mrp_bom.py:720-722` — campo computado `child_bom_id = fields.Many2one('mrp.bom', ...)` en MrpBomLine. +- **EV-COD-036**: `addons/mrp/models/mrp_bom.py:419-474` — método `explode(self, product, quantity, picking_type=False, never_attribute_values=False)`. +- **EV-COD-037**: `addons/mrp/models/mrp_bom.py:133-183` — método `_check_bom_cycle(self)` con detección recursiva de ciclos. +- **EV-COD-038**: `addons/mrp/models/mrp_bom.py:114` — método `_onchange_product_id(self)`. + +## Referencias + +- Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (2003). *Design Patterns: Elements of Reusable Object-Oriented Software*. Addison-Wesley. Composite: pp. 151-164. +- Cristia, M. (2015). *Standard for Documenting Design Patterns in Software Design*. FCEIA, Universidad Nacional de Rosario. Disponible en: https://www.fceia.unr.edu.ar/ingsoft/patrones-doc.pdf +- Odoo S.A. (2024). *Odoo 19.0 MRP Module - Bills of Materials*. Disponible en: https://www.odoo.com/documentation/19.0/applications/inventory_and_mrp/manufacturing.html \ No newline at end of file