From e23a7cb81923e27e3b96ab97a90c325a703fef68 Mon Sep 17 00:00:00 2001 From: jfa Date: Wed, 1 Dec 2021 19:12:39 +0300 Subject: [PATCH] bos #26453: SMESH: uniform refinement --- doc/salome/examples/CMakeLists.txt | 2 +- doc/salome/examples/test_homard_adapt.med | Bin 0 -> 25892 bytes doc/salome/examples/test_homard_adapt.py | 96 + .../examples/test_uniform_refinement.py | 100 + doc/salome/examples/tests.set | 2 + doc/salome/examples/tutorial_4.00.med | Bin 0 -> 90242 bytes doc/salome/examples/tutorial_4.xao | 652 ++++ doc/salome/examples/tutorial_5.00.med | Bin 0 -> 183720 bytes doc/salome/examples/tutorial_5.fr.med | Bin 0 -> 551208 bytes .../adaptation_with_homard_advanced.png | Bin 0 -> 50289 bytes .../adaptation_with_homard_arguments.png | Bin 0 -> 73552 bytes ...tation_with_homard_boundary_analytical.png | Bin 0 -> 48904 bytes .../adaptation_with_homard_boundary_cao.png | Bin 0 -> 29105 bytes ...aptation_with_homard_boundary_discrete.png | Bin 0 -> 38167 bytes ...adaptation_with_homard_boundary_groups.png | Bin 0 -> 43478 bytes .../gui/SMESH/images/create_boundary_1.png | Bin 0 -> 4347 bytes .../gui/SMESH/images/create_boundary_an_1.png | Bin 0 -> 17969 bytes .../gui/SMESH/images/create_boundary_an_2.png | Bin 0 -> 13325 bytes .../gui/SMESH/images/create_boundary_an_3.png | Bin 0 -> 15276 bytes .../gui/SMESH/images/create_boundary_an_4.png | Bin 0 -> 15154 bytes .../SMESH/images/create_boundary_an_co_1.png | Bin 0 -> 24514 bytes .../SMESH/images/create_boundary_an_co_2.png | Bin 0 -> 24414 bytes .../SMESH/images/create_boundary_an_cy.png | Bin 0 -> 20877 bytes .../SMESH/images/create_boundary_an_sp.png | Bin 0 -> 19424 bytes .../SMESH/images/create_boundary_an_to.png | Bin 0 -> 23389 bytes .../SMESH/images/create_boundary_cao_1.png | Bin 0 -> 7331 bytes .../SMESH/images/create_boundary_cao_2.png | Bin 0 -> 9974 bytes .../gui/SMESH/images/create_boundary_di_1.png | Bin 0 -> 10728 bytes .../gui/SMESH/images/create_boundary_di_2.png | Bin 0 -> 14094 bytes .../gui/SMESH/images/create_boundary_di_3.png | Bin 0 -> 11395 bytes doc/salome/gui/SMESH/input/adaptation.rst | 53 +- .../SMESH/input/homard_create_boundary.rst | 169 + doc/salome/gui/SMESH/input/tui_adaptation.rst | 15 + idl/CMakeLists.txt | 1 + idl/SMESH_Gen.idl | 9 +- idl/SMESH_Homard.idl | 183 ++ resources/CMakeLists.txt | 1 + resources/adapt_homard.png | Bin 0 -> 274 bytes src/SMESH/CMakeLists.txt | 2 + src/SMESH/SMESH_Homard.cxx | 1184 +++++++ src/SMESH/SMESH_Homard.hxx | 242 ++ src/SMESHGUI/CMakeLists.txt | 11 + src/SMESHGUI/SMESHGUI.cxx | 31 +- src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx | 1213 +++++++ src/SMESHGUI/SMESHGUI_HomardAdaptDlg.h | 233 ++ src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx | 1641 ++++++++++ src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.h | 1244 ++++++++ src/SMESHGUI/SMESHGUI_HomardListGroup.cxx | 326 ++ src/SMESHGUI/SMESHGUI_HomardListGroup.h | 254 ++ src/SMESHGUI/SMESHGUI_HomardUtils.cxx | 659 ++++ src/SMESHGUI/SMESHGUI_HomardUtils.h | 112 + src/SMESHGUI/SMESHGUI_Homard_msg_en.ts | 255 ++ src/SMESHGUI/SMESHGUI_Homard_msg_fr.ts | 871 +++++ src/SMESHGUI/SMESHGUI_Homard_msg_ja.ts | 868 +++++ src/SMESHGUI/SMESHGUI_Operations.h | 1 + src/SMESHGUI/SMESH_images.ts | 4 + src/SMESHGUI/SMESH_msg_en.ts | 20 + src/SMESHGUI/SMESH_msg_fr.ts | 34 +- src/SMESH_I/CMakeLists.txt | 2 + src/SMESH_I/MG_ADAPT_i.cxx | 8 +- src/SMESH_I/SMESH_2smeshpy.cxx | 5 + src/SMESH_I/SMESH_Gen_i.hxx | 4 +- src/SMESH_I/SMESH_Homard_i.cxx | 2838 +++++++++++++++++ src/SMESH_I/SMESH_Homard_i.hxx | 310 ++ 64 files changed, 13644 insertions(+), 11 deletions(-) create mode 100644 doc/salome/examples/test_homard_adapt.med create mode 100644 doc/salome/examples/test_homard_adapt.py create mode 100644 doc/salome/examples/test_uniform_refinement.py create mode 100644 doc/salome/examples/tutorial_4.00.med create mode 100644 doc/salome/examples/tutorial_4.xao create mode 100644 doc/salome/examples/tutorial_5.00.med create mode 100644 doc/salome/examples/tutorial_5.fr.med create mode 100644 doc/salome/gui/SMESH/images/adaptation_with_homard_advanced.png create mode 100644 doc/salome/gui/SMESH/images/adaptation_with_homard_arguments.png create mode 100644 doc/salome/gui/SMESH/images/adaptation_with_homard_boundary_analytical.png create mode 100644 doc/salome/gui/SMESH/images/adaptation_with_homard_boundary_cao.png create mode 100644 doc/salome/gui/SMESH/images/adaptation_with_homard_boundary_discrete.png create mode 100644 doc/salome/gui/SMESH/images/adaptation_with_homard_boundary_groups.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_1.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_an_1.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_an_2.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_an_3.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_an_4.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_an_co_1.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_an_co_2.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_an_cy.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_an_sp.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_an_to.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_cao_1.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_cao_2.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_di_1.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_di_2.png create mode 100644 doc/salome/gui/SMESH/images/create_boundary_di_3.png create mode 100644 doc/salome/gui/SMESH/input/homard_create_boundary.rst create mode 100644 idl/SMESH_Homard.idl create mode 100644 resources/adapt_homard.png create mode 100644 src/SMESH/SMESH_Homard.cxx create mode 100644 src/SMESH/SMESH_Homard.hxx create mode 100644 src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx create mode 100644 src/SMESHGUI/SMESHGUI_HomardAdaptDlg.h create mode 100644 src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx create mode 100644 src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.h create mode 100644 src/SMESHGUI/SMESHGUI_HomardListGroup.cxx create mode 100644 src/SMESHGUI/SMESHGUI_HomardListGroup.h create mode 100644 src/SMESHGUI/SMESHGUI_HomardUtils.cxx create mode 100644 src/SMESHGUI/SMESHGUI_HomardUtils.h create mode 100644 src/SMESHGUI/SMESHGUI_Homard_msg_en.ts create mode 100644 src/SMESHGUI/SMESHGUI_Homard_msg_fr.ts create mode 100644 src/SMESHGUI/SMESHGUI_Homard_msg_ja.ts create mode 100644 src/SMESH_I/SMESH_Homard_i.cxx create mode 100644 src/SMESH_I/SMESH_Homard_i.hxx diff --git a/doc/salome/examples/CMakeLists.txt b/doc/salome/examples/CMakeLists.txt index df54d5a08..54215c734 100644 --- a/doc/salome/examples/CMakeLists.txt +++ b/doc/salome/examples/CMakeLists.txt @@ -42,7 +42,7 @@ SALOME_INSTALL_SCRIPTS("${EXAMPLES_TESTS}" ${SALOME_INSTALL_DOC}/examples/SMESH) SET(TEST_INSTALL_DIRECTORY ${SALOME_INSTALL_SCRIPT_SCRIPTS}/test) INSTALL(FILES ${GOOD_TESTS} ${BAD_TESTS} ${SESSION_FREE_TESTS} DESTINATION ${TEST_INSTALL_DIRECTORY}) -INSTALL(FILES Mesh_tri.med DESTINATION ${TEST_INSTALL_DIRECTORY}) +INSTALL(FILES Mesh_tri.med test_homard_adapt.med tutorial_4.00.med tutorial_4.xao tutorial_5.00.med tutorial_5.fr.med DESTINATION ${TEST_INSTALL_DIRECTORY}) INSTALL(FILES CTestTestfileInstall.cmake DESTINATION ${TEST_INSTALL_DIRECTORY} diff --git a/doc/salome/examples/test_homard_adapt.med b/doc/salome/examples/test_homard_adapt.med new file mode 100644 index 0000000000000000000000000000000000000000..1dae05c2a7662ef5e686ad7af0f8ae5a1873e6fc GIT binary patch literal 25892 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�oPP_u| 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 J_%ApD{{uyccA@|P literal 0 HcmV?d00001 diff --git a/doc/salome/examples/tutorial_4.xao b/doc/salome/examples/tutorial_4.xao new file mode 100644 index 000000000..415904a64 --- /dev/null +++ b/doc/salome/examples/tutorial_4.xao @@ -0,0 +1,652 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/salome/examples/tutorial_5.00.med b/doc/salome/examples/tutorial_5.00.med new file mode 100644 index 0000000000000000000000000000000000000000..9c1893a767296fc01c8d266b0bc7eae4c2c2032d GIT binary patch literal 183720 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 literal 0 HcmV?d00001 diff --git a/doc/salome/examples/tutorial_5.fr.med b/doc/salome/examples/tutorial_5.fr.med new file mode 100644 index 0000000000000000000000000000000000000000..d4faa4c73728f4b7f9eb6bda9dda6c983a00527e GIT binary patch literal 551208 zcmeF41zZ*D_Wn02ihx}x1}4}j2KGYIAOz{|+}j2_u)DhzTMTSPU5J5=jg4KXC@P|; z|Lr{QzMrce#e2^^=YM{>@pBj^_MVwFGw;0b`aaJ(V{I&~ifC8RmVN%w(vlUB6_@^0 z{rV(+jKZ~~MXGt#dOz`phM0~K)7AO#hlcF)KbcHVEH5Fx|Lg6#I$B!Flv}F4Uo{mU zlcj6oFC2wxse1amM8L+<%;EF7x``7u64MlMpNUyn2Rkc!CtqtzJ4;8i&X!IxOFJiD zTQf76m6?;YiRwNzR(&9ksfJARi~F~@xPOfb;e#wbkNa1qzJK$G=kL1u>-$&Lj*SuR znkp`;`%}8vRSW;b)XC1?LPM7SU+wQhao>LLD-FboC11V!vG1OQNBCbLz^pWVU7bk1J_08ux*!}Qx(n{s8uRrH# z+4+Z`Q|<42@8QqK`T55fJpfr=@8Pf_*j{!0F{l3hyF}pYc1+c;a}f8BDh{@09Xk73 zx^-2}tL}eNE%*-_cSy1M^(f2z~bl^IEYe(o=5DgRk0$0(nFN-6*Q z{N1YW|Gez;&)3^K+o4JQ{`Oz?N1Pn7{rAoXd-l z&hxr|jVfR}aohjf5v%|F9U}1c{c9jjIz`++su);ywzO3yQkD5G+YX&OTl#ufI@*6; zr+Tlb`a7!a^O}C$Z}I!;dCBYZ>h*}g_ugYu%3=Mc@|dC>$oJhmqH$$xr)s~_;xX@r ziTd|19syN5;3ppF6mh=kj6YO)swI6e&oP*O-CwnH{&7DyTM1x3f3jzwZzJDEG8x)| zeE%B1go*nW-~R1y)qBb&YJ+`0-fp#6os#n7?RJXQW3K#oJ1w!gyZ(>2(-W)vHu&*&s&;yg_`aRuy8Wl^ zbgpQpzt^r9iR1X$b|t+Aj$3uUKRyff+FvaK-)mQl#rsBezN$QrYFuHXTJc{_zaD3# zi1*=t`E|eT$24RG(bkI#qp9q%ef~3FzI@V>{4xV+zK(L)=QiQN z6b&p8%asx#WzXgFqWl_0wUiU(kLuHyD=B)2pSO9O6r_Zjsy6`E|J}d8zOPcN|J_IM zYwXWVIS?@ZJP=U-s3V|`fI0%|2&f~Vj=*md0o8alQ}oM=i}AoWvr zo8ypFEeq!U>G_)}O@A_w>dn500P;7DzgVW8QAa=>0d)k_5l}}!9f4mv0;=)qCebfX z72|<##;boafAh9I;;8CX=9RzEvcmT2@#?RA|9$W5zBgW7BJLyA=l-hvjUQnTL&g5S zc^>k}-@MBsf3vy^zW-;R2R|EZuYMj7hu`h@_nwDMpGE!u_VZWgZ*0u}ZD;B~e>wtx zU;bt_jC23T^fwOHKOIW-hW{1;qS77zv(Xe zzjOpt`5R-= zFLw~*fp5mEe=>j5Hw0l+^(yny-;4>z_UiHKFMa!c_vF4eUNsQ+k?MngRsJSj3 zf8RV0dE{^2=8?ZK5_Qmi_IXH;R6h@@YyLYzhDGZ z`I}79FE1{}1K*5S|789qRn&o3^(ynq->e>hV5{>tzu-;x6Q}gO@oIX^mmmJC@;5f3 z4s#e|f8RV0dE{@h{*}MUC)E{I-S?{JjSk>@{SJQT`~T$gW+UoXtM;4M^ClaN<4`|u zh{Nyp`+LuugJ_3U@%XFrLl6J|mep0A=Ks0r-9KK)GtITV> z8a5HztH-N<(~a;C+s*gJt1@vPsSfwA$`7%~ucVK~p1ye=^2iUp`B#4EkL!hNiT|(I z&pr=48ONc19#mKU_nLn1c_=R0NmVrd>io^>ubw~Ee$~?-N8sC2z zH=8E?IDYE2e;fhiZ`Ad5{x~}7rRoT%BcP6eIs)nl{F)I^YvQt z=q@_1C=b@;a;UjaPa8m!JHr@;5_8er1W+-#5=g9{HQsdE{?W z*5W*V_IVh(6x*wxhcB=H?=ttj=OJ~`ml61@^EY9l9shE#>bblk@b~3!QkLOZR4ohU z{^|Lf?o0BDpnCluMF9C5b$y*bij8`iIs)nls3V|`fI0%dY6MjIn<=7SzDbM+z8SCn z$^4DMMnq86tIR8ZW1N8PRpZsPc+9)~sux0iUSCAud*jui;yzGq{J+lMIN8}-Xvhl4 zjKmI1Nwudxo|=lqZ^i$w>W{aQ$!x@movOM$-`P-gfAQU7>Y2R6lXu zzG+wT$b-GgBM+9k7vKN0?aG*~*k0YP{Nrz-zvKYF*RG^({&IJJbsns{cprYbSM^+8 z5%~M^V5!@1EUK0TbN}=_Sl=yqMNqx|k0S6n57yYX(I2f+FH=WA9RYO&)DcieKplZ! zGyKxH8-zmle-;7uPWFE{^)SpoGD)Y*NrHT42>hbC?dgJABTHhP5j^Qsq_`lAB zslMIH%+|Ml6W`C>W8=@=V`;vrm{*oRec@@*x0v;R2%8@xy(_W&_86F z*K==t1P7{q?*Abd>~B7d?>+ZJ#rr^YIDd7XYK(YasrILy{#*q9zC2am6daMNM}fJ2 zdY;PQ@Xy6jz15cyK%VM`)bZ9Y_EP_eR;ipm$~n~uZ+cg zq>97;x}T~Vw`Gb}u(;UYH{-TEIOEGaIHTzmoWajN51FahUj00%uKe#c{oeCHqMcMl zKoxu4Si1ENTDXR9UPT;!x8L6z zuV!BRG7^7P{$`WNucV6oee*ozk-vG7NB-vR6P(A-J`bC2V|(@U@a6UYUFN>`Jjl|& zjKE)=znLT2@h|tPp35r&e_#IQ?HwG8s%634KRti5u9xsfu~9Em zM?f6`bp+HAP)FcbjeshD!=hiFeiLW<&3N@s=5Mr~<9k)TO5|^3GUYJ$iyu{-jVj=; z;;IGe>2DQ*ug9yZyv3$xUxqu`MeOgJ=OK^$jcU&tGHpq- zttS=~m*I}~%ffEu-`mMT- zpI?@r7kv9UT<`z%a}F;5-ToY0{=5CzS^Vt&OvQN@kd;>6eGcMtB@Eh$dy!;KbYx9F z<(D@5moEl$nft$qkG-R`>OYN-x%H2aS9M)f*EdyL9Dy#T-yFwZe0?=!nt%AdF?x(Z zrQon+dA)Da-(f>lJ0m`(p8O^e`1*ZgAkN!Z^g~o(Ft@jt{#5$dq^X_g7pa~LJjJT5 z^Pb{;lTY-Lls>m`%^!Y9^tBZOMwbNMxlaz#*|<@>kje$5HKY5(#VN2WKxmwo-YpKXU_|GIPj?Vyx@;=al+ z-W@VoYR;GIzn)W#J2OSQ`Sp6${J+}A4DljTt@x#<-NvirRZ| zy4_g&((>+YZimsl9=Dzz>8aDkq)hnBGP7#z70a={S{QX4G_d-|McQq$y%)}Fn_V62 ztA+9S7G8rtd{WSJ+a5Wul~YA;>hVZ9P2F<*-X-PK=XM#_B<1w>ifV^eD5tA?y=gd7 zIUO)%)@Qsj*4p|CHb8V9__oag7X_h{B{e^-qnr6JLsGQ!Ydas0Qrh@djvhjrH3MzAZmu=!R z1qIbii+J!}ezc|Oqx7aqB$ysmGIPRzNgpjX$7J_KD+ z(EVqxjq6=jkYCb)&}WwvG;qg(rRy##=tRCcHv=yy_p`jdLAmn^3JJ|0eCVw5e4pHk zSDaDMmie;xB~umTy=ivmgi{LY+bDfm=ab4fyejqa)^TNg7Rh~j9#bCw5~G73QWW%} z)v$&mjwr}<@YW@ohZR)bLZ%mcP(iuPm(R>OprBS~ua%EVQpV5yY24-g3QA5d)4csY z<$cjW3lDR^8-b)&sDH^A|zXs*x7%o%Ly{T&&v|ge-?%+w?IxSMrl#Xu`ofjy`EWos! z=R5_Cn!9AM=N#qvuN|J{GD|^k^_xc9&QQ=gv%-biO;g6VmGjEFQ!ThX=DBn8PE z#Fuz8UO~Pgp*PNrRgm_}*Spt`R^DHkn^z4Tsi2#kU&q-GSCH=h3R}t#Q_%HegU;R< ztX$9i^DiE#pzJ*gE06xl=VHZ<`NjJxs6*qe`499_(1u&dgB87$@se2=DceJNzpPla zai>B-j@#>nxI`();+9jR=i$obOJhn54^_~Twz&mM1}jMCm{rLI0SY=)b+1WPKV`h0 z9g1A)t$Z$4r0lNfsi0}2>Q|laro4aWdoM2FqP!3G9BA6ZNqK!n9l4w4prFU$m)5tk zQ=aF1pGk8&DZjV!v9T|0lyTfQda;$2g3gsHm^#y3L8pdn)lVk{1vkt;yk=Vk9Vs7J zFr<|-o-(VIOHCET-6{vBHC51}y}oU#oKXPtcOE2vhvTEk-ND5#M3 zf(uIw74$6NNQd1u6y)E;;Kr${3fkmRW%`ZE%IA1M+we#F3K~-At>1G!1)Xkoq<>}^ zWjm&8v?HUW@_Fn!yX@U!%J{}jn|o1L*-p97p@W5$&&fhV-S~pacE^u%r{q`Om!5Y@ zc9$vVOO~|n_(4uJQcrEJ@=i{NRxfCk`9@Ct`hCjSlO?Ca4+b2L&6Lw7|Jf-PPvx|x zQd*YAV>xxNaL8u&eK~1Wxqn1{M^1BgC-tXF=2?FX?jtL5bA zaLx66oSe$bC$~q-zvD+#!pd{V645#;(Zh?vVODV!kZ|XqI2uE|H~-qb~HBn(bFh;GI@qq z)T1bJZkRgr@!cpI+aj}CPpY0yxrOT;qoZ5%80#fusDi}w&}m6>%1sxHZu6`@R?E6y0UKchAB~$ zZO|rqj3I@UC%WNZ}GIvqE?&Y&m?^i3??wy$!&P^b5udqvS=w@Nmy ziYV$6C(HE;kD>)R2g>;bDZjU-$pQ~w_>O*JEDuAd%B@r!CKeLFFdqFOaKr7@Azb@gP=;jxi4B|=~Kz`#iAy+5U6ZgeEs zFBqlQxQFsMHdsUlMn;mYM^@03;7Hn%IQ-sD-$?4b=E2)*?vZ4$uEdgDC*^hpUSBO| z7fE;GN5(g>QJ$yk&N620BdI}HY#IC3k<>o-a=cr!NUHl_+f8rdNa~PKWW7(FNRlnQ zT*|XXB#mECQqQS!B%Sw6*kz@s{Qg#3a+;Qmq=OE{FB|A8KOcI?tx&;8y7KWfvK*FL;L)TAN=j;Qqwkmq(k#(X zULZDtwlBYyFn&M;J@qx;RJ2b76};XpWTGO1`UQ5oSSU<+oEi2SgZ(4ua5aO6&pje& zjNkL|-d!W8^5&CI58Fo2%hSh;*0YYFVMgztPoM~DbWuL-QHuzw7S}A>%p`(jMZ&Ah zsuw}mTb9?oUo(Q<7xdcKs7eH_&arCVPcMRWJ7&ftmWZHF*A>IwYe&$<4p+K1E1*37 z)Q(wEAHu0fz-8~nZ^B7;(c+mWpNG@=)E)D)ABNMsSFL+gx*bl1Hg_!7?rJ#Y_xv!) z>wGwkd)4D|pOfJUA3!J(~BZCe{o z@|DR3+n0w^(3;1#2@90p_w=00+L__>Xy~%mizbEBh zI%cnGZyin*YlOQNrf~AjH}}PHQ|12WB*cts6i!px-+pXSC!BU^I(L3wEu1<{HeDF6 zA5Kr3?787tI-Fcz>69#3BwTrYJxteYhSP$N7ai?BhS9k32>}^z!bo#_C=7 zZD_@ZVdOHqr_YA;FfusG_N_06QSQX3)`!o8(Zb}lH9H>*qbpB0>7F_eMgy8{d)aAE z7-`9$r5)N5Mzade;8yFyXhx+QYvbcSkC!y(>MsnVW})U2M$QbQ9fi)0d@?bNKFKmh z*^W|YIu^tlYwA zcJoz7Cpd&r@6KyXPTPc0*z&+lMa;tJRp)YMHZ8*F?R(7!gByiWAI+Z2H`flMAiqU1 z=~ct1|B6#VIu*hwyQpJ zU6kuREE`tt5K2>A7p}ZTp%h!+({rh5C`HT9+j$#@(qePp*fK_;6cOW?eY8p_Sw(7Y z>|ZXFqAI4YH7piNtE%Z_q!tXNDw~S+j{X=zm8Ukh(0da?SL$B(-u^U%S`YO+;BYU5 zRvQ-W_260v9q!ttNB{F7WOHuVzQQL$XiK3Fo->m}sOEEnPL=kAP^BuJCoWA0A&W!T zt5;haLXB57ExveZ2sN#?)k$w|2vw}R`}xEvA@s&}&Am^fL+Ez=oo0$5A#}RHiMwgh zA!N1uP-Z(t2sP~9#A|tQ2+eso&?vum2o0`Mz}2^F2u|cLYpqwH-2LjLYRH{(J!f|oIG%&H$#BKAH+Zp$pmOL$( ztT&vgaB6HYjVv|A@WRkw+H}HjcUnv^jk>6NK1~r!gZFNUz7QNt!xv6ne#$GDxN1eO zgHFNZJ>uxn?Hz;3YEtp&6=uQod{)?%DW<_xazuyJz72z^|Ixbc-nD`$DQrx1+e*s) zzeuZHv2-xK8a%uA8|`3{CAM`tsS!-^H#%Hg@-~P{uWgdq{do|rl@D0e=6(?AXwLso z@OlvKxK#YriE}~9eyYcW$;W~y|LE)^c1c0>=1K5s?VUm7zo2HrkbW~Zu15>q(&?EqcLk@4|x!^KU`u^ zv7jLG>e|a-tw#{eUed0gS(hNXV3<4Rf^`tRe%7E%NZTNq7wdB_t4R<&ep8~v;JQI% z_aIeAvzl^0(bW%)(F>yF&ePf!E*3<4=B?~EN;8Pclzki{%MGM6@9wvZc^OFCw2clv zei%r_Cz_V=yctNn?cy4yTnMBAOR`HhJ`qSG-1i@zb3nQL{1~g;oq^Op^VUqSje&Hq zxcl~9D+0-;;-EF976j7JLD#!SObeuX)wGN58xu&n1E$9o9TG?@256^x_6el-b7gN= zLw?KMwXZoTZc7e2^Z9Cd%5lEkw+8lh;GLYs>w5V6LQ6Ob# zr1Wz(45Yh5!ZwVm6iCap5|3{!6-aF>xu3gPIFJVIyLh;eERYsNomf@xO#tOLJR4(| z5kOi|Lrvwk189S3_a|f00?1#h)wHFj0%-I3{tb2<3?RKS$C8fj4xsh>l5H<<3ZMt( z`On{589;tBYPdXK5I|!p9=z~+S^$L{8r(H!OaOVjdT}miZ~&bfx5qiVcL0^V-|y;+ zhyc2K<9Ns;zX0++>X38YC4lDjUOnS<=K$(or&r5;?E}bjW0#CIrU8^@c5mIZ1_3l; z-s%2*YXs1`CkY;&6_m$&tC4N1;sF%1__>o_!2r5)aB}yT@BL|c==QjyFZ^jkS*@1~ zANbR&wAvosuKQD``bjt1ob#s&+P#MrKI%`EuRkrX9u&kpxC_b0p8>Ao5*{AtLMW)qh+@TY3ctg@(vKh6G> zIQ?3Af6D3Fp?jZV{&el~+;KXZ{-hP>eRt72KWfs-Vo1YGKT4eQ!E5h5Kk_$hImG6w zALSlc`ye&dkIZ(;=C~a8qn-z!PQARxkII*+amjtNA04uG3BR<`kCMZicXV9fM;EjE z4>&f}k6v9r|FPX@KYAOTb0J}%AB9d>n6G+IKdS5!J!(p*AC>CgBJjPJA8F|>oEPZm zM|Klk8yvOvqaGPm4C=K}?sr6dj|q+asBV>=H69!K(W>X!EiEhgQTy37w=XQIoUit7 zc2*%jYF66k;KX;n6cmtKui-skDtgjfe*CmAWgK2JCSbQOt(qMd`zp?t>^#@`44dpr z`!t#v6z=a!`gVJdjSuprmKS&X7q<7Ma{1Og9M-~@TI=Kwd|lm_+U8oE4=n0S)i*t9 zck-sPMzRG+b*3fbv@dL zRwq~8UESY@D!AT=4({Yb8&{3CUDnixF3wzLcBP6BH94`>rHHl?jk<_s^ov2EF$UW2_zqlsNo=P)nYzy%zuI(pG1JukZ#t-MIK zM2cCp_s&lN}d&Z16)60{VH!SL>=j};ehI<}uxALUe+g93Lj6JE^REI*A)cio&3 z13hS=^EK_a!5(yBYVxHJdk-q*IXdu+sRtFGerj{`Y96F}oDR>`@u24BqvEn(xl{Sa z)(%~6xYIk&h9_4ZaVOi`_bb2MT-;m2okEglIzD^nMzMbH4_3JAM*ElM8k?VVqe>Mz z%?sV`MoaU}Eih)Wa(Ronz2e5WQDXZ~j}v>iQCZ6&iZdQ=^i1cJ#%*&ql4~wq{j8oF z)oi~ZB)g0o4ePzWUG7I$s-EfC{KErR>axbY%ez!pa&FRZYSu1Sx_>a@{ljIhG_n4} zX;;R(lJ3oQo+-UuDfvNn_XKZODxLLm@*FEyI$`rH-++d$H0nf^?e2Q6ROEw2d=m{< zI+~@Qq4U^DGDsXloa0aAoT*Gh-L(uyanWw|XvALN`&iPQ!&_BJXtacQ=0CkZwU0AZSs*v8=i^Le6aBLeSUHoX{&YK+ zhR(Du+n}|L(4Iw?@H&!R^YyJ+VG@pm;y4X6G)H6jiaJNs}(re|_=GZ7O!5_?J7*SQh9) zA?Qsrs z8}za>^=;y?>0?r7dQ;(m|A48Tsg2F7-dTQ~Y0~Z$nIXoVsd|HB*DrkPL=W|EnA7P_ zWU@1{&dNodXv7P%d4&|6sBO27^McxRBHt-n8t>KZM6Dw{BTHQCNUe_;boO7@k*3$Y zb8UV9j+DJEw&tr29Vy5oy?*oZ9qCxy^$&d>cA(Q2ycTZS(Sb%@rP2>Zb)Z@f@`&;- z9q4G^!>g=ocA#n&jn4OYWkbz6OwXR3Y(u3EpDn+8nhi}^bg_M!zYWPeNA-VcY(tM~ z9ZS)Y+0fzBT2Z;38&4OwXGyg=cGj~kmbCWx zlPl+AmD8xJaXY$LQrkoAb7vV?Qr%Id9`$@~LCc@E>(yzW1${cSdzryR3+f&eGvuYG z1?^lFULvWE1>Jr#(r-eJIpwrV>fJTPoD$y@cPT&HoLoyq>Rt^tC%qDf7td{CPPLxu z={e^&C)1jqgNmGOPaU_9xO8Aid+Mq`sX?D^?dfBu?&E5-ZBK4{YGkGAwx?+>E4uf; zYDV$HGqkI&HKWD`ua6$=YepGEc5e%|HltaQrWf;F~$ zC!ZWfH08BHA%6#=BKfsfy{JrNZPwiN)0K8gKD4Gq*}m;)%&IU=qcZI%d42C=O%mFY z)3B3sTHCj!+U0u>ZI{u8%9}(?Z8NqFnY$!hZC0xd4Lxn&t!{E_WggGUOW&_G%{n+g zq2PyBVI?9;ie=;4@{tEZc_qU7N^r{d4Gq!l)L5u>}eq$}nt_j?s-No%L=yHS5_ z3u0O1rFT{>XolwYUCDP$=}gkvnPY~U(!SiT13FYPrPWoF`WM{YoGjYpF5mCcoGQI9 zRj5x^GkU$O?ABUSnvqG_QhUzVYetqQ_38~d+LUxIG%r^xq$#yLF?7Pwd`;CdUvMtix(Nkb)I7F0&4e1ItkP=M$3)qFoT_@Xgb6*aJGrL&hQ@R)Ik)=#j*ZE4 ze7*YJA2g!w2c4+)*fV(keRe9o*`J^Geuake) zof-|vYwoq=Gu{oz!(g@6o>}#26wMy7_;fuQK-XM{Xw{=FhHIC3nAIh_T}?(d>R*R$ zDmGOqu%$LN>E$@>>=PrZw$S0jf*MBDCF0i5KyO1T_^wr(TC-}=<3e*B@13eiSMJxp zwWLr@+AyG5VRx!Q8m3Pk7wK1>WMxLJ+`qXRHJW7RrFdMG+AMIZSD|`U+P$%0^JGs0 zdf-~D#W|xY)H}K1y9)Cvk!9(JFT8as(&pF%zXby;(2;!Fqc1+yqx&r)R_OYcBb(m# zxouO+(877mPRPwl(+tCf&T|t=Qol+Xmy@cOp#IrO^-tF>M&-j}7MIc0rNb6g$GASz zq9*V6h0RRWq<7054xCQNM^R_u>lUr^shwB)ijlh+B&#h-2ae#C6kP z#CeD&;y%;}*P%fau8YSdT&Kvlv!&}c`Z2EKIS*XdW8 zCm)P)-xO|y`{+h-+*j#iai0y-$9)%5T-=9dxG%ez;6Cl!9`|j&L%5F@56697B@y>| z!y35nA3niz5Y2clR-VFhGVTzbo5Gjz91T8*=gQ$Ep0f#u@Z9w)is!KPd_0#yS$Iw- zG{tk9Ssu@E!Pj`M%kRc>e*MEX>ABa=iICcXtZ`@;YP3c>@tn|Z6d8zi#AF!Sl{K@` z&ZH-z-6^>W?a+xMXqP72p`8k@i*_rz1lqBs{m`zJT!D7(;$pOW{ms!1&S-&lvB{^x zQaicx1=`I|T4+b_SfO1#ppSNTe<<4B(gV>Bdsaldd~pcc=|o4g+p#;)jvLybT_0Qy z?R=jEwEKZo@g8t^g!e-GB6v^47Q=hv;Y++nYPQCErC1i;GxwI`y|d5{@1gn!@LoFe z2=6KPSiHBQlJFk89ESJWr6YLHxh3MgXSEgY!3!JkUOe6g@5%k6@ZRihf%m9J3f`+$ z@9>`0^~QTQSQqc%`}^@;etR76>5A3y-frZI_jvL=yw@!c;5{E^iTAz>p&#&}H~Ix0 zozYL&eF^;r&9mr7$d;mCG0z44j0OqlccfHBKcr_e`XxO>&`+5)0sWTfNc3Y8pQ2wA zxfT5!13mP6yy~DIbYwgFMbQ@MCmEMRzbV03^rO0tRa4-5{t>Vxx zJG~SAwA)?KZ<{g+{Wx1!^y^G~(a$rliGJVG*XRe{d5nIc-E;I4_4c9Pxb`mkk(tTp zS0>q@pE;}^`kgC3&XoG0w-=yadZ-Kfsi7CpZ`H6vKX!%#`nAJvp`Y8T5Bj~Sndk>E zSc`t~oe1=kdqtt&Z03!Aw2m+O)wzYx&$bRkzx(J5^ut%LMZY}zJ^JbP$I)+(iAFy@ z_Z<557fjI4*YHEXzt%#G1DdYGxFFwQj1wNNz_=l7D8>ABu5V8;sKqq+#5a7KCw}NqLOx%y(m)XFCt$zTCMO z2Wr>GxbUnM#)&UtF>bu~0prM3;TTt%X=9w(Z#%}FK4}<-X2>xvT~Qe0RO53Px4syS zaqP+g7}pkx#aMnW} z;q7AN754Zb&#*WNc?Yv=$V2oAM_wZRIPw%ziXv|@^&avVV>ckL;m`wljn<}@*=&>kSFPQ6nPURzn1bSUEGmZDK!OomTOMPyA|z|&yaOg6@7qiVdEj>akQeUkj6Cto z@yHw35_#lmBCo6|^2{&8kavD%g*>!PY2>AsCL>SXV+ZoqbwwU~axLVwAI}zf?v}`V zH(icAxR%I^*ARK~10Rt$@7xr5^i_wESC4*$JiC7{pB)yUId7=pb0 z=x-^E=E#-oKRK0GAZt0_Nku3EEu)H)vHD93iqExI!7h8BUe~cSs5W zhj^O|E-`ZvIE6tvxW$pj;22Bif@{1YaE|B=;2tw-gM)1C1uhbu0#1^99o(euJ#dsK zW5HE=WP!5`ItcEvNFN*~dOEnwhxXt!ycgW2UTJWgL+8MCdKUucNoo%6Qy~%@sB|rG zq4-E}qRD%~jqEFeBW)=JuJmd!IMX{BxYMc$;7~;bm)g??oa*guaI1oXWBH#1*D549 z*QWm9Ugi3OgEg-TE;eo;IGLk9xY@~K;ApYW!PN$x181Ay2JRNS7#wbZEx25{3E*^z zg~9DE<$&YqmjTyHnhVaC(h1zJX&-RFF89F&pS}hsTsREeF#9Pu;-y;PigOo(Gx|7z zJDMK?hg>TIm+UqdoU;CUaLYkAz%h+|!8NDc2j^VA9o*A*J~-&B$Kax}QQ)K(E`ghF zy$Ft4r~tU?$|!KwVr#%%*IWmOeZL!A_W2-i+M=1@wtGUsaeJqL>*@>#=Y22}+_&9C zaA4=*;KDl%z=;Pe05^_K1VOf~uqbhU<1}mXMXnYX51f9yzDU^B!-NMp>&@nVSD|8J`&^gSi1>HmKA<#h_ zsRLbv_7vzObT>jbF}*5u6mI&^RWy!(&cY=cx{Gn`p~DD>f-XZ|4?2wjF3@cpb%&0l zwHb6BbGAU|u{#U8kCb%iKooDF3n^s_ok+2H(2d+`2pvh-N9an*PKVCKs62EhH{78^ zS)T}9N*`&M3A!bVma#LWeY16S}15k00Xiz3p3qgb%Yx48ya{wy zCX=AUT3P_QtiEQ@X*th^Zp&H&I<5lMq3bH!0XnZD;n00;s48?|d!P$zW(b{Fmt}sJ#g~!alyx6(&@L&T#G% z=ng{zphL{M3SHt=ALtb0mO;0eRSY`DO$=S5$x!GVdmV@FvB4SWAWQUwF7h!!CwVLu zy2(}zp`-N4gs!qub?7YJEQ$G{$}W!FV2R} z`LYRg&;7eW2Yn_Jy679_p_5*%1>JP$Z0M+$dO=rhw+=e%kJF&L&b|p9wvRq^*-qo3 z(=KNM-FCxs&~XoY1YP%#&Cq#M4d}jCy@d{Z*mCH?*SkU|Zc-4s@g6?VkvBO7UHSE4 z(3uYlg6_Pa(4lv(1YNrI2;0 z&VP>;bpNRh;RCqc625?Ei{KN`625_0J@^PTg|A@qQ1}d*g~505`ZjzB`ofp6w-0;@ z+4tdFC?I?c{te-4xbqS|hYR`PdnhM-5KV32ix@cxJ_(D4@J(!}1Rq5e;j1tbK8tmu z;k$Tm2Oq|Zaqwm63ZKSkYxp*L8^XtNwIzHVCo93{F`^NC9|IS_2QscBd?7g*@QEyb z2j9qtjqs6lEe2o7zI6CZIwZh%QbPDp9HZb%8E+4t$`m8`R+a_9$1=V-d@Wn&!{^e* z5x$pl!Ut1c_+s>gPbRA<&CUHF*J7lf~=q3}5s6uzfjCh$R7315_7Vfdtml!b5VEx|{n zBYaiw6XCO}Bz#xTK3PgWtXjgCb*KS+S`CG7tC{d|H4wh80>bCjN%+1Tgb%E?@P(b+ z4WC#g;TwBD5w{~C~d~B_SuWiXEE6L|p zP59pSHG&V$O8DZs37_2E{qW5>3m@Iceel(J2%p`<=kVQ)egPlewP5)2p45j=ud49v zg$N&Cec|gHAbftgYvB9S5k9~p{_q8s6Fxx>f^SeEe1tp@zCt(QGknkXp?g$^HkMLFQbc4?_ z?F@XE^Mns`w>f;7mj}V8IbHZRhX@~MJK^gbA$*=ygzr;R_&~jcFLbEziIxz)(Ra(> zBkd=ArFDhRw7Bq{&K5q@mBN?0RQOb*g>QAC@UhkrzSa}l;d8yx1in{K;e*u@zF2qR zlN}>`v-5?IHbVGnKIsRB@J;U!KI)0WSFIs@)_THsZ6SQva^cHQSc z@Ns7dU-tsx^X@Ku-;0C~{EF~}y9uB8ap4<}5I*t@;VT~}eCG4-NZfqCN3g`r_Xm`d zxcUAQ;O6_Uft&9)36Z!t%fZe06Sz4$f}8VJaC4poZq5nd=DZu+oI}9Pxq!aJ&G{a< zIiChM=OA!%o(^u#S}i1Q&KIoAU>=WK9uE(31Pt-#HB6Sz4)0ypOh z;O2ZD+??lto3jGkoQHs$^IC9ot^jV%>EPx(9Ne52ft#}_xH%_+n{)oc5;x}u;O2Y? z+?e3~tW3;O1Nf+?<<%oAVKHbM6Rk&T?>bb_X|SjXn}L zXCH8L-Un{ZTHxlKAKaW5ftzz9aC1HhZq6~_<{SfV&hx;{xgWSWCxM%DH*j;V0dCHI z;O2ZB+?@M^n{yLzbKVYa&hNm@xi7dm_W(ENy5Q#A4&0p2f}8ULaC4pxZq8l6&Dj*( zoUOpkc?GyRKL9spM{skl2yV`sz|Hv;xH%_-oAYpRb6x{(&UeAh`3Sf6@&Dk5=oQ=TEc`~>;Hw8E6+Ti9q9^9M_z|HwRxH*>uH|MM1 z=KK=eoHv4-^FeTPz5;H}O~K9C65O2a!Oi(2xH;>BoAY^abIt-c=ZE0tyawEy&B4ui z0Ju5(ft&L)aC2S-ZqALt%{dF)oL7UJb3t%(b^)z2N4&6x^K6!Ob}a+?;QNoAWeqbDjon&f~z%*%92F$Ag=53vhFG1vlqt zaC7bqZqD}L=IjJ+&Sk*O`3AT-mjE~CW8mg22RCO+aC0sVZq6IP&3OX2IfsCo^C56^ zUJP!|55djZ2;7`YgPU`8aC5E-ZqA3n&Dj>*oC|@Q^9yiuwgES118{SG18&Y8z|GkZ z+?T= zIRV_94Z+Ph5Zs)HgPU_LaC4Tel(;!ZfSYp;xH%UDH|LJv<{SZT&SSvM`2x5(R|hxe zXmE2D+?=O?n{x!XIZpvM=N{nZEVwzZ1UKhT;O1-&Zq6a#=9~y_&Xd8-S#Wb!fSdDq zaC3GAH)kVob6yN?&I7^CxjDEw6Sz6sf}8U!aC0^UH)p}kxgfYXXMvlu;O5)`+?{If}8VjaC06AZq9n(<}A25r-7SuMR0RI0B+7l!OgiDxH&t5oAWbpa~9m3 z--4TS8n`*n12<=1aC5c*H|KTW=G-0JoEw0f^I&ju7Tlbtf}6A8=IjS<&Vrk>2Dmw2 z1UKhx;O49aZq9<6b8&EUUJGu{x!~rU32x5Cz|A=k+?)kBXI*e}eh6;P1a8hQ;O4vw z+?)r3o3r5NJOtdF*MOU|;O5*G+?*?dn{!WabJhkoXTi;R1h_ftgPU_IxH-Q9H|KTW z=3E)voEhAl1vlqn;O49YZqA*+&AAx3Iky8h=VjpLTm{^mpM#t8HE?qt3~sJ0_at$1 z7TlZ-z|C23bKVbb&VrlseQI<-pCkHn=$pZqD)G<}A253vSL2z|C23b3OuY z&K}_AEVwy005@k1aB~*ioZZ09IUU@b1HsK%aB~*ioCP=M>)__>0B+9S;N~p2IVXdg z^ILFp7TlZ#H|Hnd<}A25KL9u9#o*>#8Qh$QgPXJ9<}A25XM&q^5V$!X05@mB%~^1B z7TlZ#H)p}kS#Wdi32x3Kz|C0~+?)kB=L_KG+yva5mw}seKX7w)0XJtGaB~*ioXdfm zb5U?}7Tla`ftz!4aB~g^H|JL1<}A25uLU>fWN>p9+?)kBXTiq`I1vh8G&ABqTIlF_KvnIGX2ZEck;O0CM+?)kB=OA!%7Tla; zz|Hw2xH&fiH|L$;<}A259|bpO!Oi(KxH$`M&VrkB3vhE5+?)kBXTi4Y)aX05@kjxH$`M&VrkB7`QpF1~=zM;N~p2IllupXTi-m2;7{Df}67& zxH&HcH|Im(<}A25+k%_3;O3kOZqALt%~^1B-U4o}94|@SoCP=Ms^I1 z<}A253vSMWo3r5NEVwy`ft&L(aC5c?H)p}k`7O9P`+}RZ;O49cZq9<6b1b+y4+S@8 zGjMZW4Q|eYo3r5NEVwxfZq9<6^9^uw7TlZ*ft$17<}A253vSMC;N~p2ISX#if}6A8 z<}A253vSMWoAWzxa~9m37lNC!;N~p2ISX#if}6A8=Bx>B&Vrk>;N~p2ISX#icfieA zaB~*ioCP=Mg5c&XxH$`M&Vrk>;N~p2ISX#if}6A8<}A25Uj#R2J#cdt+?)kBXTi;R zBe*#mfSa@6<}A253vSMWn{yFxa~9m3`+%FX;N~p2IgbQ4SN8KHZqDPu%~^1B7TlZ# zH)p}kS#Wdi2yV`To3r5NJOSLC1vh8G&3OX2ISX#iZNbf158RvuH|O%;<}A253vSMW zo3r5NEVwxj05@mB%~^1B7TlZ#H)p}k`31N+3vSMWo3r5NEVwxfZq9<6v*6||xH$`M z&Vrk>;N~p2ISX#if}6A8<}A253vSMWo3k~zISX#if}6A8<}A253vSMWoAYyUa~9m3 z4}+Vt;N~p2IX471XTi-`aB~*ioCP=MQ{d(-xH;#7o3r5NEVwy00yk&D%~^1B7Tlb- zft$17<}A253vSMWo3r5NEVwxfZq9<6v*6||xH$`M&Vrk>;O2ZC+?)kBXTi-m6x^Hz zH)p}kS#Wa}+?)kBXTi-m3EZ3oH)p}kS#Wa}+?)kBXTi-`aB~*ioCP;$!OdB4a~=h5 z&Vrk>;N~p2Id2CyXTi-`aB~*ioCP;$!OdB4a~9m31vh8G%~^1B7TlZ#H)p}kS#Wa} z+?)kBXTi-`aB~*ioCP;$!OdB4b6y5+&Vrk>;N~p2ISX#iSHaC$aC0sUZq9<6v*6|| zxH$`M&Vrk>;N~p2ISX#if}6A8<}A253vSL2z|C23a~9m31vh8G%~^1B7TlZ#H)p}k zS#Wbc25!!Ro3r5NEVwxfZq9<6v*6||xH$`M&Vrk>;N~p2ISX#if}6A8<}A253vSMW zo3r5NEVwxfZq9<6v*6||xH$`M&Vrk>;N~p2ISX#if}6A8=BhgFEb6qgsMF4(PCJV_ z?JVlFv#8U~qE0)DI_)g#wDS(|eO?aU&!SE{i#qKr>a=rx=ml8RY3CKt6R@b$&Z15` z7e}3TZU#L9i#qMR3wi|}4*dc*hn|5&opu&=+Ib1|4=jfsg0sYRz6!kr7e}3TJ^(!h zyFy>V3g|8P3iKB|A9@VF41ETtL$AS=P^X>Cp-wx8K;OYTp!eY2(0_0p)M@A4(1)-d z>a_EH=tnpndJ;~DzJyOfZ^BEUKjALoxmp2z3fDrNcGg3kc8-Cbg)^XU;lt3oaF%$E zbD)ReC(y@m2=p=>3;hhAg`S3;mP`5?j)LBXuR(vqyP?P7An0>=2=qF9ANn0$20aho zg}#S#p!Z=yop!EfA?blw(^RU{&K9WC&NWb{olihd#LZBroefc^ook{_J4c{SJ70x9 ziE~A}dmH*Cu8%tHoDF>wpMu_rmqGu;`=E#79neQ{DC)HH73inf9Ch0HCG=HnjXLeT z2>L6wN1b+_34IoiLY;QjswmZI=RMGK@f-1;+6=uH4?>-G?uI(;ToHBJc`)j<^9$(5 zxH9Ur^K?fL@KwP^X=5LeIvbsMF5wsMF5r(7*9^ z=;62;>a_DU@!rq>T&mN~IxD3*?YtIs+W7?Zc02@i+W9*4cw8Vts?*N01yY@M-UIy} z-xvLoOz8XgG4y^s40YQ14)lN=k2>vq9eP1dM4fg%1wA1rqE0(oqE0&-qE0&(4V3D% zb1dq#^BL$B`5p9&ycBiX`33ZiJOy>yc{J*@voY$lb7c>yPCM%^lIpbcQPgSYs$No^ zc0PtW?c51<+BpOIOJ0IH?feY-Oumdd?R*Ax+Ib%8v~y$BY3Bo|)6Sz%r=1f}r=0^( zr(IcPN79RO0_wE0DeAQIE!1h}m(ZKC)@-RxJ8LhJ>a?@=U8znxH$t6uUW+>I9E&>b zJQsD^c`WL*^C;A5XFJqs=c1RTI_+$OI_a_DG)M@8ssMF3LP^X=zpiVoF zK%I7;fI97b5p~-69_qC7P}FJXnW)pw6%R>u+Bx3@Ne|4r4w62Y_n}TZx9%y`Y3C+I zq&n?<2zA=o3w7Fg5$d$FJ?gZxNqebIJHJGocGh?$>6dvJ>a=ss#ZsMi)_W-FojDzK z+PPi-hM()Sv;JL4AI)B<)6SPsr=1&yNp;#e9(CHeiHlUHo%NSU`fD!HTGC_lC)8=@ zC#ciT*HNdP_n}TZx0oW;Y3Df9Y3D1b)6UiMNqTVBT`1|p*&TJ-ISqB%*?OQa_D|)M@AX!zKMZk3^kzPDY(}9)&vXtl=){@A(qywDTv_Y3I49)6SPsr=72( zPCJi7op$bxI_;c*I_RZ z;Fd2XKLX!Fop!ctD)|-IVy@(0;Blza&H;{+zd@<1ll%_cq_pIJ;Q6T2&W5^@KZ0x3 zm;4gE26fswY_H^};5n$%&PPzEop+&5JGb8``7yXkxa7~^OQ_S%lToLg@1agRpF^E? z9&9f8Jy_3E@_+CS)M;nq#gadSGf}6V(@>|K%SK9m63#)LcD{%@?R*h++W8{tv~!!i zl0StnqE0)nN1b-QiaPDwZG+@*;dXA4--Y+0PCK7Pop#=XI_-P~b=r9v>a=s^g_56! zL%k$_4c|hYcJ}BZ`ENK4b=tYdC&{0~m24%y4o_?;`FB`1MDp{nRW-@q!wsS(zYiZr zopvrZQt|_F0_wDLq05qAh)<$UI~RK?`HA=`>a_FV5t84C7qyrCM|=cz+W8*pv~#_a zl3$54P^X>44@iC{-hevo>>nrjop`RFA`Iev9M}{BgX>K=RA+WMj!c$1M&> zembr`Rr1%dV}8kR$5m@f{yQ$YSMuZW{OXcFkKdzCJO4kH&N8g3ER4dosECOo1}X-2 zfvtQBiUo*DNcX)4*oul`caMQ$VW8O9g)XrZ8@s!^V~%_6U-y}DWG*+(*?Yfhy{Hywf zh?%DPhImF#JM1%59}&$HRX-6Hr&M1Nk7ua#q8ph+3ukp7`Ld`k(mnOZ7o9D39ugA}UPvMKK~p^+)lekm{3S;84{s z#j+69H$}O7s(*@3dsH7479CVS6~kt$zA9eSR{d3s2vdDl6tGbJR%0Em`mRW7ulldJ zbU^iCkta~~W6`y=>dT__Jk_7Y+-zn3dD>xBU-fIzVzKJmqP3^$-(u-E)yFmR0IHvh zSD#g17pHfq{x15us6H=#2dI88()?847prQk{x25Bsy;9dyQ+RLX2q$#Fk*VE{xIg2 zRefTdw^#jQv`8%Q zu0L1(Y@j^3bLIin-$v~m%F~Wk2UNcs0|Qjw8{e*~{x{}ls6IGMuBso7RV7qk98nWh ze;hsHRG%ETgH^vAWnEO?9Pv>7bL7jd`snC-LG{y7H%|4{5r0SZ*YRYS>a%0Bx9Ybe z)ceC8X4Q|!k0R$(e;&`WRG%LA52$`Uo-S2=dsMbp{d*i9 zulo4dG*k8S;hU)X`iLK|`uli%O7;0syQk{+W6THD_ebO?)&ED|bmaqp-96<8z=ZY6 z7l3kols^EY@+hAGYF}4=0eIa|z5&EfQvLz-d#!u~xV=RA2~d8I@)e-)bLB6<<}l?m zz@K}{Z-C94l>BR#RTP_FuoVcM}f3><)=W05z1GA5m8TtrmndHgmcLN`7EBwid@ktnUHM(GXpHi`;PX1= zf5D<*$_IlovC0nvhr!AhgO*>FKL&kIDxVCj8!NvIre#n6=V`}VALVJsrJKsrj_fJQ zPlMVml&=Q67b$-Yf~qN>4SpO^o_5Gy<-0+@W6FPnQYDoS2glkgKMs!cQobA`SEW4d z_&fAsW2(Paw-w~GIRsJJ*+bSOt8ZS|PB-pwu zUlOj~RQ@EKKCXO9Xc?gVO1Qk9xzS$>m468V=ar8M%?~R-6S8knz9vjxto%*b=A(R0 zST#WToe=1$d`~E9sr*k!o~?XP_%coTp)j_O@p@L1)Of~#5irSK_9`KHh( zNcpEwe53MFVRuL6r-Jof<*P!I#>!uXr$>~}3PsB*zZIJ8Q@$%>-KzXo_!XgiSa2z- z{8%{9N%^u+s)_Pvq3kZ@(?a1;<<~;x3Cg#HCk>Q;3(IOK9~X{2QGPC%<|$tnW|UR_ zE^M_`J};EIt^8i-*hBfgFmQ2V9d~gYx%bxSjI(p+Ya^_k-nK<@>`o7v=v$^S8Ag((qzaWNwSH3}vpP>AMxSybWgcx2}`3bT4x$+faOKasX#EmTFGlatn z0T zMa)Z6K1NJhsr-zHh*rKvG;XT=jR?J=e2%ykul$bKaY6YW5tO6iKTkUfr70gI>V8vx zNNnz*e36K@QvOH`ic&sFtdCHBN!;nLe3S6(r~H%1m!^D_Xz^9~DUmu{`6}_@sq$AM zm#^|!qJKB#x5TxZ%6ExIe#(Cd@0H4j3ESMt(~eK|l`j(wJ(WKb*Uu}TCKBH(zb0~@ zR=!QN_@(@t#y&^+I58(j?|+_lG_0?Dop9)_{GD)#R6b8kOj3SNBR{2lpEz+;`9IMx zP5D4k>6G$=qSq+p3&ntZ%F~W7!OAC!Z7q~v6b&jV-zbK8DgP+W9#%e5gf~)tQdF(1 ze5Dw0Ncl@~?1%E1VsxDHn;JQ7yEGCpvepuA$seG|8=iUC#(~inllus7(yp&%SPySQBS-kI{{ImG8Px)xk z=aBN#V)RMnt3{40%3q6IgO$$~3(qOPEhfxVzFTDbs{FSI%v3&HoQ+X_T$D&tzFdPJ zO!((%hhKZ;(?ywVMgDo(v9pZw?IO-r`FAn#i}LYeQElbt#m0lm*Na`1l)o2Y-pc2T z^drjei?1Qd_lu&_mH!tDswp2Zx=dDnVEh`We8I?8P5Fai-%a_1(Xs@4l0W_^-!KMS zDo;B~byGfKWDiz;Vub8fzG5UDRQ_VroU44s$Wc@Ijq#z4@*SgG59L2bzysw&#>zv= zkBk9X%9o60Ta`Z<$C8v!87t;1zcR)LDBm*n`6&M~rma>!W~?lxJne|HQJ!|}ysZ4q zSXs#XpQjx&9F^Z0H99NbGjdrK|L1AP?H$SojWX4g9~yP;DPJ@`Jyrf_*xyw?X>9(e z{L-j*Px+?d@m%?*QSPSlQDaV?%zvJCTyLp-)i`}s`K!@ksq$H4(_Q7aMx`L-yGB_L z<-f+dK=yjCwo!g;-0Q4-*=T)G`Lofgt@3FjCR+Kmjq4kG!;9UOe;ZBiDjzpa%~gJG z*ez7PZde^w{%$zWQa*2dv}^v)(~j%4l&2l1ENlPsv}0+q@`2++kn)4$eN*KNhy8Zt z4@aF0JbJoX>k!n=m?*z?Of z=d#A*>V9)76)+yRKB$!Q^L?{yzPk{X-#8;=Kbqz+qTJl>gCt<^x|@z1zz z**h4Ic~-mcFKs-U`~B_v+?YpL&hmoYHsf()i_<6KjK>OtzV>QrJQh3=lJDDHvyA^> zm7Hcg+WQu6U@{*6{^@hj#(3PiuxZ<4cg)gd#E9d4jK|(7ZC$L5M~mI7_UycEJinhQ z)w>yw4Z?!vzrJOb;tAJ&jWHfe&Z!n$+;|)|B7AT1P2>5UnpdQT@#wzpYQ&ZsW^w$` zIIW)X7;Jap`zB*f;`?sfTR0exy#v3+FS%y?+|}E5Ss9OL`}_6qEVI=A^~&z?RkQ4L zNOJFBJa)cPe#rVOW^qkhu-L+QEMC<1K-guo#DC1Vx$~0obG~l;oY#2F9sRX{_eEo_ zVy*q8JTbAvV z&3Lr9n%utD8M6#Iw%pa{v{@>yY~EtHF~{-O)x-viPnzXf|LaxvoG|7y*0Q&~c-;8& z$fW#FkC`RI#{B*3QL_~IwE0Oc4dnpsZY&1jKhi&-2Fxz;_n$$0;Y=d2vJ(Re-g)h|=am_zxbMZOYu)|uth ziTy>VrW(Ibt#L&i*P3Pf!}-?NQ_M0iPpvY;R+}ZzH=#;NV_xN-X2%`3tT0Q+!Io}q zl8yIycKKk#1uuj0tQ{J$)c8GZiY$7y*etE05)bxEGK)*y;V(WcG+wW;ueN;?&C+dL zN3ZAejnBcUozsJjd6(<*4?UmxpYi^uUo6#Pj`6&6o)?eBeU#v9MqCOUigSmXP1 zr%2M8(PnwM$F=421Y`bXR@;|VMw%rqf7pu9c;j<){8q&LVaDgZYOcB`;>_~jvkG~? z3^v}!-lLz}4KhpG&e*Ir1B}(XY-|X0{#yrjry&mtl7iBi)$h0i*G{P(apI^s54>RU;Zf$%2X^2_A%ufn` z5M;a#UF74n0As$W)8zk7cQ;FZr_(NbeT~=aSwODU-o_ly$+NFa?P?Z}FB!XHy^PQC zCb#wOp2qulWylr>cjNu8v*GyP4#xAT((?U9W6o!uqZ4bbXlwlZT@T}9T#eVkbK_md z*2do-DL&tvjo0DY_j|iq7~hNe4Mz=VX3QO()y=U+6XW%7z4iBl>ekUpa3-sAJ3-wJi5{LM^k@JJ7vx)f&e4%&*ks!wzP-eE8t|fGTF$Hf>A) zclKrpz3XW?x`J8iOv!Pupq=r4{Hir|ei^gawQt<7w5?e@D@^LQxTIN@ULQBDl(ktR zO!G756g5kgu*$_P3LA4q|126kw4hmr+JqH&n%^wb93G@~wlK@s_LB$g%x#u;4KsXf zavJZ4`*-ib*^KMm9t9s%jDm8HAIcu6y&~ zeS1t2GVFTp9Xn03{q?!5b=yobbMm6gi?^7hVaDEHQ#P7p{JKq@2N`oxvp#-4AF#$G zA6^$8*>aUh-b@(fS2o!s)jJ*w{kFt-o>7qtG8Y-Y_mbPcRxB_{!GImJ`_DB=sTF;E zTFy2}1?$-z^UN@b`=_P-P8oAm`<1mjIc1_TXSG0L7q@Z7?{{sMRkqP4Y2S4A@9iT@ zVm+=x`RHLLDZA#>;9^6JxvBL^G+*(9@1obTPWxiSCMqxb3k zjZKnr?tr(E}i$**R*JPy{`4Nn;WC$bcc1b_oYV5@cqwTEm&>LpY5Ky zw68I5wr7#VHEote%Yv9Ni;~9N*{0LC9(pu4T54Bqa(R<6e|GTXl`?2rwAe3Pp11L& zXmPxFx7ydS#++HVB5SuA^Ju59cs!=(aN~K}TkR`1Bw7k5H}}fyZ_K5gWZyR4m`_{# z)}Td|dqzt_!>1mnjXAZ;kJX5b35%8=Uf*sMFy_@BZ;)eqik~s(Ht_G;7RKD#eBDxJ zUhp*j+;P)?VaEL0@@eOOy>4s#`$9N9xV71i&v8~yU)3;P*BSN>p;eu`1zP^BT;{tm z=eAFIhktW$|E!2zvgK`*%(hLP@cBiQ*lhgoQNt%uvhMJQT?6k&$=B{vvv0l?B^Ccv z%y^s?CF{>8{IIzcCGEzU*S9+tB}al*T^V>XN**=%IdsX9C~@iIv@pY%m)jtJ8OKL^ zqm1iuT*n;7+}tcX>w9I=jDL>a|DnN#C}SR2lW}fqq9kO!-#p(HQQ~^*ah1p=QPQyb zrY13oQL@}7;ava!jCr~HsyrDuBT5?W8Zdf*F;_Q1oRVY5MTt|HW^JPrqKwbEcR&AO zQPO{tw|&P!#vI)PmO+jC8b9Y!C%cNhqGa!=XFV;Vqa^!_t@1K7NP>$Nc-H}=5y#HW$+aNr+Qdk`tb%Ao45Tagm`^il0rS&=g9u}9YN3z4#L z%e@L6&qPZ0*b#+JA2a6kp0h}HGv@kUDQL>VzDU{sA%0uKosp7uu1>?$Es=68TBO&v^;^7cly zjWfa`rI-7qkj#Kc*<1AfaZ8^_>A1w^N!!lG^Lc9CH=;wN#0@;uF3mMke!CZ)dEb~1 z?2)I_Osgi5@^fcMhsF&eNLl-(h_oZc97gOmPrteQQ)@p}gQ+$@|cQqKFF=~DJjgxqPpYDSfB5z-*{m6M~rH_c1nc&+Egub;5g&w=D1&{<;Vze z+_a`guDA%X>5(wvct2y_a7@qM6OB2<4Ttt>e;17Z8zo-ci3-z z+SDaNx<}3}Y||-1S_ZakbhJ%`SoACzp$cP{cA=@ zzImVBzg3QqMeS-|m}3_qhuR!%UcHp@`&>Od`#{kMaX8%If~RGK zTdp`otP7Wsq4w(!uMC&ZvoDvauq0gOy!knG_uruT9vX9xPYf-+y`q1( zJl^KsCZub)WD9(FH_@1X9Q^dtxXd=;a-dC;Q%>h_sdxYFhX%$RX2>H6FKt&O?KE4{)dGz*j4TVnFLJBG=?iH z#IDqb9ZQBu{qd7F>!b*4jM^73bd@njO6rD!ZZ!TAQzgO7V*GoGi|T%9}xhmaaDDFb9>o*I5o4 zbC(^Tv}>q2e-S%^=sJp|Zzs$B4@GX_Jm0Ate0KariO@P-IZmW7KKRF z4fZGZPYIE(Jzobn4-b*AD@SMT?-e42qrzJ{1sZdprxyKhZKn`9a>Dvri54N^zvNw^ zQME#3e4s;%M`c6gS~Zt&7h}$ImG8$#FZmNJwP&bgEqG+Vsp| znY%aT$EAb8Ql(kzO4eI~CD*_)zFy0NCF$?S`IBY^i*K7skN1uWmexa)U7z(0mN`j3 zb`>_}KTF)fR*qi5vNC1Vqb{w2CCB8<6}{^PON~w~6Gm4EmOM{G;%65LmRhza7B9|j z%$M#{;Ngn*L2{(YL9bQ!gT!v`(3i_E7;~P(E^JLa6eQE!gV#+>3zA+ZcV8Zw93&1_ z!yF@K2gz;Q=4aeS2g&U13zt^y7bNGRYH!LB79_Pt&i{R_bCCQf(r4y636dS(y`zWJ z4U)|lo{w`bA0#WkpM0I8aFDc^JAdV&zk#xA!n?J@-v&yLxS`qV-3=7~i2lbnxW1v(E`{3th%#p61oa^by>VeXrb@8Wew#Gc_4tR0(mN8d)*rjvM%~Aqn_Zz#q^X3J}$S*V2 zy%-lD4KJTfYc|lBCtYo3yGaoNa?Eo=zw=!J1iq#^#ajnR@qACmb*&d5H}CHqIHP=k zG%m3)`_V!Ha%*Pe+F$?p%lg-ye^+|rFAc^n>gRFWUpn}mn?B%-zbtl0={9$tzc@zR zI&UH1{(?{ouUA9-#khOV{~B%l`(qX6|MB*hy2;tPWpCpz zxq9@x__u+-#M#&t|6$CbuF?H&>32o^W!Ko=ukL5_7pG;DCS|_uE@wl(eAsQwqwY{+ zXzitEyGydwl@K`$=zj$$>IC;A>AdXtB-d| zbaz?1J?H#b@9y$9?t6ND*Y48vN4E1H>UWpa4v)@ls?go|9LJ_d7w#@WuX`-D{p%;U zHm)3a>b0NPm3r2C@GU>_o|Mb7+-c*Ve;&JdXpf&1D*0z&*jhhnS#@aS@A-amv9yKL zyzzcAb@FhlY6JbmBX!ls-Qj+c=Ii~`)yq#N77u-O#@SDL&l|e^O>$jt8SB1k*0^%s^3J2{i3m$?F~8cJ==`Ib)Toe} z%f^_C{d8dMLa(oMlg2;m>^pF{n>6aWw7~SVZt^{)XHLIm-NbhNgw=M_yGiS%k3Kyd z)=k#78}ezDxtlEcS#M3aPdBlgZBe+aF(*53uebFs*Xt&22iz<)$*!AhvCY`fxL`NA z>$kALlOJ6rb-iz$S_Kku3{ZC@$1jlU1dw+wmuW;c9pSRMx8BK zuB$9=@uJwA0$t^A{F^q#j5*r1w@rzj{iKVm%bp%*dAW;>uo#yx?ob!m_V~_-@0+^F zE61~gdoAuFSFAi^ZcOeXTP&g?+YT}2Xg4SvvN_V2!(FyZsI@UyJNMa|z2cm^$n~Qu z#$2n}MV98;mFi^MMQ;D?{cvX9F4A$$iTY1Jd5K5Fxkb$$c*&^ZW6Mp?^pZNoUg73` zFL_kE(Dq4QimOtS9X@m6WiQ%o7Gv4b)FYs8qryrM!D4**VCBKy`qQjQs2(f z**pL39mX8)1gFM_PSxuyo;`BpyY)%vO3Xgw8a@uDLBx= z*CxeN4i{N$Wk1SO#vQJ+$-&=Ko^E{FteT^zn2$e8uVm#Z0a<=cOF#3Fp96z;S!Q@h zM4k%Gz9)Ieyn`oB-!tZO4^AH0=dh=ToR8~WGr5|F_}t!aF)XKttgf4s-{ZEsG+)x7 zaoJt>D0Df~T|G<$f2pIvabs%h=21a>u&5%e*^gyXxiKrN&V2areJ=GUjbtH=TQ- zlk9N6(YE#aPU0Vab<4|fo#f%(<|AhXcapdEt#;IH+)4gawFx{^q?06AeT|EF*-`f2 zC|2~#k&g1R!|Gb&jQQPmSr0B0jO!>KTXN<8&#R+!Ip}h>SdETyd*$`IvvPHmG25~= zw7AnjHhlZ|VEC>Ml3ed?iHYi zy?kl6uE@2__OgA$gPgTf+e_J**D@2vw3k;7XNR8+XfKO{a#)pgYA@!!d#43jwHLQR zP5vx-+D=~d$}rzVJK0rn(Z%A6+R5?5xm$M_&`$1^?U+8iQ#%>Fa!ZHQ%Ize%$B1_q z|F}uHs^7PN%W{(r4SFxNO>>j7e1M7>YKLGzVzgT`N!Kz(|xx}FJ0bNYK|UNXvNUB(zSU;=!!0Fjq~bv*2`+N6_*3u zof31kl_iBdj!wUA%=zw7_DsUgHWE3?rgQAfHjQYUU}0E!V!j-%8#Wso8hh-c~Xvdjo%m|5}NU$JXA5dbN_Ph4O9kb!{c>F3zv? zvP>(9o44=k@XsO#PiLLVcTVJ|U#GnDQbZ=t9yX_Jf=J^gNBXbyHO8oqnYyV;U6BCG z2A$Seh&(*jY*mL0XG#AZJiXNbXBj(cL1=?Y&hq2Y#_Hv-w3NWvy}sq0&{Ep(U3B$D z!4v|IDV+d~V?(a)v zaP8nIy9=MFx%@{1kvwLL@9P>!#-^J)JOUcX%e%Q+Cl_cS-`^eG^KM^#N!gvfdW+um z#d>PevI%AC%l<|~s-8VlPdelsdam$@dXl(je6m-qdNOnDn2j@U*Oj6Lz5kw?URPem zK3tizWnGC1bLc$aRvj5KeQ~`T&Fjc#yAQdWFR5*;AHF?F{9Q{Lj2`voT~IAaI`7}m z^*~LDNa%iTPPv-Wu#xARTO(^ow%|f@D&DOwdyB;0j&QCnO)JTZ<;$vxMah7R*Z(?5 zTZKAEo$p7IoKaOqJ7#R@UB0U9yBldSe^eD|wqgAKefKKM-}}Fx+?L8RG+<5g zujQ2_cywSMo9vZjXxneK>xS9ONP8crHis(8t)g8T_*SSW)25wh9X+~&JQzKHMF0Ec zC8GPn-@{v#mr7TH_T+Z4ld&Ir_OQxXPR^N1Iu|`$My__N5L;wyY5BOst-7U)t*pA! zeoc;?rKD;2Gn>yDC8byCM_V6`DIwVw|5!u8dt$Zd?ILXlMK6OwN2#vqMe$A!GB%t!8cZm(7_= zW>~+sIW#7_#IB2LbvV}_=X|$Jga79I?%c4?sb!6FesVSs8dBmoQrMwbMf$<`u`Nl&;M_T4WCC^ z2|llVEBQQ^=jQVcUc%qQAvb@o)cpKCXMFswe(%y_`8tfx!PmvRJzpmr$@Zjsb>;_+V+0XakLnpp3{RZ)UDm{wtTkkx4AFWFAeYI%H_xbfezVG=x`8k+% zg`bNv%lJ9zbcvsvq7M8V9eTyj)v5gaoGs4J&)u1l{2aRH=I3&*7eA+`s`GREr9VH% z^^Wj!eR3c_=R=eDxt~&u-vg`B{9gR(#_!2aGru>t^YD8VFoNH!$Zh--+iTFdXXRW^RlC+6q({>va<2Z|5obs^>$uM_Bkk^%3S-j5FyUy#*&}zI6%^k?=(&WFb)phDcDz95F-ts!u_Z6>eH3E2@TfK!iy~UN?)(;B~ZNDPC8jC-XXcYALU~)|tExC%W;v?ERM4X{#Q* zZu?pDI=;O)uj`5Jd7Yo+&+C50?Ys{-P33*z(jDF>f`;+FvEVE3BkACMrF}l$XBsB( zzEhyqvx zxK445=DOuSORi&@?&G?qqbJun9hz|6Q)wjELG^cYUDV2k>!kmpxo&!vlk2EaFSxEM zznSZ-l4H2;a;?jCm`x?F%aWqGPV2jz>$aP=T*qaA>$+`rT<1MCbKU3KpX>$&U|}`>&_tqxDKuLf$P%YXShyHuFZAphR^Q-JH}oRzt*{#c&t>}R{U?hX#&I($zD zuFG9}bDdsyFxTx#H@S|Vbb;&oXP#W=&o0V!zw09I12)v+z98fV_X*bqao>=zl>3OK z`?;@(&B=X6uKwJ2L|*1Tr2i4_OFpdQK4k{DZ^^XcKBiPZ?rXNr<34A{pKfa3GkrAo zL03(BU*yPrQdU>)o6O1FM`c8CU*+M+eOAx}?z@&OAk>J##qs;We9cUtY|M`}9@|xNlGC#eMwx_1xF5-NAi+P!I0= z2RQH?;L}x}3mm`6bAlQbcy3VNn&$}3*700nfG^J(TuSlW;d(!wLnQU!xy16BJg2Dl zgXb14+<1;5kjjG@jcO*vxaB>#upPv+D`Zc}A?{xlhf5JO>Jk=DE-X zU!D`;5zmc=z2`a7na?~|8vdK-O#9aI+-XfsoAeu6J-G&-tuR^W1M-Wu5~*eZ+G?%j`TStWk{ThTc9r zNBppc=ZbYF@tiTvmgkO-D)St2hc(Y7k9_Aj<(;s=a}O*@LV(3E1q+HwCA~} zS9_j=KKQ23MThX5w97W0n{I5)bJPmaJXf`~;5lnTI?r7lj`19}Q$e1~eyPTD+PDy& z+umEkbKLMTJlDPE%X8k!C3)_<)x>k)+sk+^9CMWC#6PC<+&DIb=g7S~^IZ9e1J9Ws zh4I|EQ&pZr|McOx^uy6Srw)9@bL(j{c#i#~IM1~w-{U#=p}aizj`86+cs~!Gi`R7E zIr+VdJU6fMndj&suX(O+cai7ptNQcYy}2*X;rAcnx%``rJg5JDf#>$Omhv3`q7k3} zcdmbO8PEAogz((obe|l+sWrJktsrs&yVK+b6&{i!{Mt*dkXV(RAts&N;q7^Hh`)o$ zB|42Kr?@bO+@j$(a*S5z$u-)3Bj=b}nB3z)JUK{UB)N#)Hgb}lrN~XTTau%EIZm!p zq7ykw=TLH&wR6Z}IyNSk$sbEjv(1LwX4+$NoXs7`btX{7<{^UxlnvgRU-b3zm!k!#z`7m;+b<@bHmVYI;@^T=@`s+`wbuo#Y ztNC$qukb14U=t(A#d@zGCp%##H(Ruh94)0bx!Q#prHaNL|<~j^_|HH=j0$a^tL8PoV|oxaZMR=#t);& z9lup3hg^1$T2HxuKBbLIcLZwa?eq#$w8f>$wkL6A}2i;KyLc6 zJ~`?%8*PlAKsSSJg?^H>j#soBZ8d$NI1Fs-1l*Q0H{hAU909sBSI{+;IfL`P znLB84ojHWUI+x&mk2!@0uFNfrdBPk+r2ys{EOgG{RUC5a~IoQGlyZLa~aD+nA6y@nYoSr-I(LZu5%spyEEsp;{tOZ z{^ytjsi1QqgP$`ea?p~wk;w;`BiYuRxsnAg%$YQ`V(w&!4|6D$y_rjCpTV4p^A+Y+ z?z=L_ve%8d7Kgdaxy%k_?qzHQb1+XYF&E>|gE^Vt0On@mBABD;v5&c$&gGc1S#g57 z8}B&gaPsS1P9rmOI$bt0xAQ$ab3CPWuBUQ5b3WDgF!y7rb3m(FGZ*xB7jr_6ZT-#;b=Zq9xutu5;o#<~-l8WbQK~iaF4~<(LaSJd-)mfPBo2_Ksza z)Jo?{Uk5U0+J7u_r&lwXL+$jNxzq|er+OuWxmA}9%(3n-#awH3opY_BbFYnBFbBIo zfVtS_8<~^sw}!b{Q&;9_m$@@nTjv;aw%127ciZR+bGVtCn9FsX&YW&Fo!d=s#vE_t zJLY;T=$!AOYRvsMwPFsq^A_fUYv`PC)2_@7JLnwo_xj8g*VH-Vi$|F|-s;30a@bAg zk|QQEr|i0%x#fKonPWbb%v|%fw#+&AxWL@AUm|nR8zwOq9a)7r>3-9gn?Bc@IqKxX z%vE>uW6pZpKIX1->Kt|zoy*>A%ba!&o!jnPjyZ0RD$I2k*E#PY{>*((oW>mZ;mXW~ zx2VFL_{J*CjnDRDj@)GebLFLU&V1xg=FW5J9QurN%%ulzVNSiK&aHQGXO8`HB6IDd zUNh&OPv_q4bPj&XPv+uV>74xdrOeI$NMnv3@0hEf8o-==`gG>*N2N1|e{&ym`R6|| zrytXYx&7B?nd3j>&RqYE%dn(hItUBg~LUfmOL*1Z8o-6J^OjJ<--pV>2b zx`w?2OWi}LuX_m#Ke4A!NcR@9=^n#;clH{N*JaNkHif;1=&|fUBsF0#qJr*8bke%-H>}8CPWKUyE2lh7F>K;c2-Rr2QdmeXF+54Dv zh&_q_-b-`cgK4OHF)ejZ=J6BuW|oGsM{~9`do}lmuxAsldp9|B4`)XV zdpY~2u&1+s5_>xrC$Yz~tP^`ZLAvMjz8!l%KdQ0^^sFR%K^D3vG(VKRp-a*15f#$C zqC@4`Gn&(my`#RmhqQ7sdr4RBu%}c__m(>79@B7N_L|nFv**-L_nusI4=POeqQ0DD zPpXpcOTb%B>W%On5t+npKE$+o$TxH#pdsKzJxwXgGqqEe#y2-j{H%j;J+Ug!&P2J0z zt9yDM+p)KI&xSodd)@2XZOxwFgHP=JIqDu@qV5HT=$>GE-5Z>(dxT%cvR8OCls&^I zb=W(663HIouafK~+UlO-$64$x=FvUI6y0mgt$U6wb?-4$_aI|+FLH?PN&csMlOOi7 zNBN)_dzII~p5<`eyWF6Am{WBxbFA)ZcG0~}E8XL)uX~-zy62gud!Kc6546ATg}UpW zXf53vEv9><%XF`_gzlO4*1glVx`&!a_fpS(WKVUx?yWwFV2?Fk_gXjVo@<8gy}nq% z9<1nI?8PhW$*$GC*<-p#>!^FRxpdFgNB3@nbPqR5_j0qM*wb~^z1_~b$NQ`Zd%dM} z&$o*1{m#%m;QYE5yh!(iN9o>hJKZBbt9!-Gb&zrmmHvb%0FkbxBP7+ zd(1Yv*E~)4oZs$Z@41`qK{wOA=q0)*{X+Mq3+Wzpf8DG8d7M4#BD#0IME9@@>0Y+K z?rHy6#oqQu-Q&Kbd)+&A&s%iwdyVdaZ_vH)WZe^w*1hpQx<{U_d*zRG&-~?H#mx^| z^;O*bV7|?Yn;*<;skr&U8|3B(o!t~SKlqj09Bs(WF`wKV&&kd4f!rL|$jvd7+#D|C z<~Txbj#P4UG$c1iGPybWk(=WdxjCwno5QNP;^xTXskk}zk((QHq7^sCUvhIKkeeIx zb`&?qFmiL0CO1b3a&!D7H%Ccwb1Wq{#|?6G_>-HXJh?eC$<1+%+#Ku3&2fX=90BC! zSV3-%Yvkt0H9&E5IFp+ri`*RJ$<2{SZjLhK=E(1@xVhn1Roonp$juQ>ZjN5$<|s>U zj+x}bCf1G#{hD33?VniTyk@?B{xR{ za&t5$H%9`wIg-fDF^k+B@5#;ap4=Qm$jwoo+#DOo%@Ia!jx*%u7*B4F_T=WUAvZ@0 za&yFxo8vsWIZBh8V>!7wg2>HLoZK9t-RfO>%QYkeg!( zxjBxIo1+uCIhv50qdK`chLM}&HMu#`$j#A<+#F5G&2fU<9PP->F`nEUkIBt3fZQC< z$<48i+#Em1&5=rOj=|*ScusDPaB_20A~%OGxjBlGnah2R0Wy#Ian%o=- zH%DV~bId0Zc#xaJo!lH%$<5(J zZVp#+b1Wb?$18Gkj3qaRJ-In-$<5(LZjRFA=2%K@j)COnxI=D^qvYn;MQ)B4W5~^sOm2>Te5H^*#pb6g}h zM>%qH>>xMCZgO+XAU8)Axj8Jz&2f#~96ia+ahTj328R5XPew4gIhK-}8@_VI&EZ3C zj!ER^2p~7dd2(|!BR9u!a&x>TH%AU~b1Wh^M>%qHv?Mo2KXP;QBR9u>a&uUbo8uO_ zIj)nNqc^!ZYLT16L~f4%$jxzq+#J#5=5QuAM-;g^;>pe7LT-+NyD{gMgNmbk&H_6Sho7@};4w0LqB)K^zkelN< zxjC%J%~6xw96sdc_(X1w`sC&qN^XwFbEJ@)qXoG+(#g&7mfRda$jxz^+#Hw4 z&2fs{9H+?5VJ0_6BXV=pAvZ?_a&y>|o8vdRIW#wi=H_@$ZjNk26gP(lxj8P8o1+oA zIb6ui;YMzb>Ez}(NN$cGa&wd?H%BjWbL=EH$2W3w*pQo}3%NN`$<5(TZjJ)v=Gabd zj_Ks)NFz7LByw{&kefqub6As`<0!c~G&e^Xa&wF$H%AJ&If{~-;}p3$G&je3a&sh; zn?rMRWD8K-9GA$=(URO8k>uu>L~f2)a&u^Ij>Y8WSW9k>OXTL5LT-+_Y$G?vLUMC#AU8LBjEb8>b8};!gW~2`OKy&jxjCwln?rMRXl{;YSM?b8~2J4$aMxL2i!i zxj9ylo5P#j9GaUW7r8k!H;3lt$VqMv&CTISZVt`O5l3zg&CQ{?IW#wi=H}4c9GaWM zmfRegn5IW#wi=H}4c99_xHp}9FUH;3lt(A*rFn?rMRXl{<5xj8g9#~X5UXl@S8&7rwDG&e^oxj8g9hvw$c+#Dy!&7rwDG&hIl=Fr?6nwvv& zb7*dEtVa|#hvw$!Lv9Wexj8g9hvw$c+#JWq&9Q>q9GaU$b8~2J4$aLmf!rLLo5PLV z9GaU$b93AyH;3ltctLIs&CQ{?IW#xNV{&t7ZVt`Op}9FUH^)wLb7*c3&CPLu+#L1D z&7rwDT9BJVb8~2J4$aM>xj8g9hvw$c+#ET{&7rwDG&hIl=Fr?6nwvv&b7*c3&CQ{? zIW#wi=H}4c9GaU$b8~2J4$aM>xj8g9hvw$c+#H&lLvwRzZVt`O5l(In&CQ{?IW#wi z=H}4c9GaV>IJr4AH#g>WDQ*tU&7rwD){&b-b8~2J4$aM>xjAN$n?rMR+$1-L=H}4c z9FNJ(p}9FUH;3lta3?p1=H}4c9GaU$b8~2J4$aM>xj8g9hvw$c+#H&lLvwRzZjM^y z=Fr?6nw#T3xj8g9hvw$c+#H&lLvwRzZjKJ*=Fr?6nwvv&b7*c3&CQ{?IW#wi=H}4c z9GaU$b8|S8n?rMRXl@S8%`unU9GaU$b8~2J4$aM>xj8g9hvw$c+#H&lLvwRzZVt`O zp}9FUH;3lt(A*rFn?rMRXl@S8%?%y3@;5_sbDSeLhvw$c+#H&lLvwQ+CO3!X=Fr?6 znwvv&b7*c3&CQ{?IW#wi=H}4c9GaU$b8~2J4$aMBOKuL$&7rwDG&hIl=Fr?6nwvv& zb7*c3&COAZ+#H&lLvwRzZVt`Op}9FUH#hbfikm}ob7*c3&CQ{?IW#wi=H}4c9GaUO z`$6R|hvw$c+#H&lLvwRzZVt`Op}9FUH;3lt(A*rFn?rMRXl@S8&7nQ*(4KZUe(;K)1!tm$co4L$7`&in)JG7kX{{XREjUIHP^Pv8Ud z6o_TM0x8T}AcOe}G+-VByP3~`7xNluqd$iw=xN7D<~tC}ya)2q(~bqqgJ2f(A(+Cv z2%0cIf}YHi;5YLnxW~K+3eeMT%;!^{c2uUP9e?%r?j`dp*vmYNF~3vgTX2kd7ZjqW z9qpNi!4&;HPh(yNfy~d~G4nJCV7>-}nYY0L=5LVBJPzWS&%qz&b?}z?9pfBZdD;=e zd=FMK?}Mw%|KKk3K*-)edD?N2c_GxHryWh{X-6k|+VMtTH!m@NgwxC;A)WaoEYa89 zDCU=tx4H7P!_0gWeCTP%NamjqMo&9B($fxidfHKoo_2)L(~e)vS7C>~Z=7cS3b}JC zPdipHp9L>^+EI<3cFbd*3*G2xhl!qc1oG1 z<{Od8yd&c2X-6k|+EMzq^0cD`J?)60rycv5r^IM_+R=udcI;yQ5{dM*V*@?ySV>Pi ziZoK5c6ig%j>+`2V<0{47)Vb$V(Do|x?bm&9i%+%SV~Vjrqa`nKziD-nx1z2W&RXj znMcK6z0UTbryXDPI(#fW?PyF-J1#NriUfMvahRTV^rfdA)97hOb9&mbm7aE#@mHR9 zOr@tC_nE)NetOywNl!br(bJARpOmK^<=-ezJIYN|o^}M#(~b~&+Hsnmb~w}1j*j%S zqboh_NT8=3tLbS+O-tozM~>^t(~c4Jw4(z(?dVERJ2ueMjuG^<;~DeK_{zL9#?aG_ zG9Jp)j&ICI;}SjXct}q>cGA-h`>M**j=F!9rybv!zeW;0?I>%bJniU8PdhT{X-5V< z?RZR2JEG}n$4PqHkws5C;^}F}UV7RwnVxnWq^BJ}=xN6UdfMUQr9ADJPER}R`zlX6 z3R){qJ0{T6j+^wf!=IjZINesBc0|+Dj)nBJ8}l@kryW!1X-C!K%F~W6^t59+J?%I^ zPdhy6X~$K1+L1(0JEjGwygsT`Q=WE2(bJAe^t7Y&0Oe`NNqXARYQ6Hb!>*(9wBtNI z?HE8$J3vo6UdO0@0cO+FjtTU%;~YKhh^MC=Gw5l@b$Z(IjGlHppr;+Z>1oF_dfG9S zo_5@(ryYOkX-D@i%F_-9N7bi*Z_wX=o_6%4ryYS#%F~W9^t2;}o_3t0ryV{6m8Ttx z=xN6%dfE{-UU}LPLr**MZBcy?^rxrYn3tvcBIrd=J8sj{jud*@v4x&?jG(6-zv*em zFnZb%+gEwo5xY`(+L5EQ>a$=nJ?$uSMD<j{WqsLtd)B6fV=#j;WQErya%ns(uv`>1oIRG@W-`j^7`~ zBaxZC_a-x0rJRzisFa5Gd_p$ao065i%SuL8$d1b@*?VMU6JMK9#_u@S`Tcdjz9Z`C zdG7n1^S-Y4XBj>1NTa76m+5K8s2a-Cj=Hl|e+%#EX~&>k)$hWBa>~<=sY7{=J$|(E zv?H0Gb`*ZC`eJDEQuW7Rk)rx!h^MC=Rj;VN8HSfq{WExfQGGNxUs3%ujG3(ZY8Yuy z{WaK4P<=L(ZmarjsJB}6-LQ$Cc1&%i`fzZlp!#w6K~For($kJ(^t9t4J?%I{PdirL zSDtoM=%f002rH-hdH7CGJN#d({vH~RR((F~=tEBNo1S(gA5@-pBoR+O# zgX&{qUpwV#m(N$#*TfZi+HrQb^0Xt-SoJ&cm!5V!r>7l_OH+MPG!0YzQk3>neN)`0ryXl90#%EOj71{K(!@^7TWAUAycDQ#{{aFmRRef4?hw9g2N-5R1MZ34Ee~YKfm8Tum zud047#@?W(eF>-z>PrIC3t@_9?-LLw|I67YSm2q#s^0ea{J?(IRt@_RK zd|vgPG#}q#>#=jV8&eKaG_>s!xqZXH>r$bvCNLHTIaR{x$ZR zsXjL1Myq}{jDM@XHgeOHryaezt3EeUHmQC$Mmwv%H{9%1{~NvDs6IFbHBlia(QmEl%j0{Z^0eb;it@DM_hsd2$A$5#Z;wV> zRR13Fhg2UQZqcfrkDK1Aua6h+RevAOBUPVYayixSM_((|_s5IUs{fDhKgtJy#|GsG zfK5H+3qX}I%F~Y7Rh3TwA1#$%02lq3o0zdy`3GPbp?n0Gx<&a3;J-)t3Xs!H`3ul+ zqw=)lQIPT*AZVrX9l-aj@*g1aw(=q1Pb1|=z>n$5mw;V0l|KP1*D)93S4sI5u(}X) zBdL9re*v4km5%{w50#$*v1ZEGfS9?;-+({f%IARd@0H&H9(|SX0Ts3={{z-JDjx(~ zhATe=ws%s#2z*_v{1Lclp?ng+F6EcN$4KRy!15&JpTJ&&@=+jef$~#ezy;;2fYEy8 zuRx0c=5nStQ+^BF$XC7#JX)yy7q~fD`7mJASotx~BTe}-@X$v2GjJkG`842J@asQM zJ1TTnz6}^pRQ?V0O;A1#7*9}s4h-0)d>yzjSNS{ewU6?7;Chbodmz8M@_oR4gz|r2 zMJMG0!I$OA4}$nmFl`jQ9&6Pg|0VkAC z1<|jRUj;E&ly3#gf|P#+369Fgg6l7op9O6~m9GVD6P3ROqO0<`pw}klcfr8h%J+hR zy~_WBR_V$IgFQaV4}+>>lrIL$Z!3QcZhulf8La!M{4(f&NBL&3rJ3^2;9Xzkqrsd0 z%1;APLiuV??1l2zAiRq5*`U-C<+s73kIHu=?*qzzgQ-5shl3mD%8!FV;mVf-r{>C^ zgIssz(?MQ{^6MaGvGVOm9;Ey`7@VklJg|>cejcP&Q@$Py^kok5d$jWTVDv`i_d%&p z<@>?B7RvvF=Vg=+2&c{~KM<;(QobOhmQem693QBBLg>{^`GxTDpz;l&`$Xj*!i?X_ zM}*J4m7fU98!KNCwtiIpA~Z=+J|hgOuKY&WG*|hKF!+!1AHlz>@*!bCQ{_iOy;{nb zga`AKKMCu1D4!Av`6$1V?87ME5{{cF{}NW^C?6BrH&uQnWL{CeCXAY){7uMOpnOh9 zy083BDE~$Io-pON@;@Qxr1C*w=4R!GLg!@Vi-OZg<&Q#&mGVg;BTMYt|_tMimk3q5j`UkeL!ly3_ge3gF-Z3ZbH7yh1BelECfRlY9FeXIOk z*!5ZYyzq1%bILzcnOpvAru<(x5}|xxu*g+@Fj!4ezA$`uQT{N5_EkPHJovzz^!obB zHwNFa%0Gr(f0U05yF8Si48yl8Ul|tfQvNa=-JpDCsOzNsW~lU6`OXltRQb;^V~Fyh z;Z&6JqoH|Ck-h~L9p`pRL-?*_}Y%J&9S59NPD9XsWN!>p;w4~P8+lrIjgO_Ve(sZ9@d*H{~k=6DIXucUsrxU zT&b^oeQ;Q%{C&7rRr&nndR+Pau%xN-{UJC*`TwwMK6?#25|kehk#m(V5dQA$LEMN? zK0%C6Qhq_?cq!i?s&rKTLA;4nK0<7WR(?Wcn<`H`9<5XULO4!PK12Meto(+O<0#)D z>ZP*Bk$7485V7i!@*~1(qVgpov83`R;&!_7DdNyp|}N?0T-e<=aGlsPb>( z+)3r*#FmN5&nfR)%GZf1O_jeBO)n^)C%QCHeotg=SH4e}3|Ib7%xs~2pz=Pa{GgaM zPx(Tz;IQ(C;=@S6BH*k#tJ=NU?IZ@{{637v(F(NpIyZMao&_ zGez-A%5REY!<6q7H)E9l6lFIlA1a(zDL*RGt}0(DZrdn-D!hV~PZd^9%CCwoOOEFj}`Izl%G}h(v+_inMIYS9ZyOqpDUJ4SAJLA@1T6I*fvG^U-7z;^1)*0 zbmfPYf3EVyqIGfQkHrjE<&%ZYSml?+NTGbQ`14%(XED5r^3kGfQRQjJ?S9Hv3(rc* zUyICp%4dtbwaRY``y0x4iz$K1e~XfE>&&B&&%BPFW5&{1_ z?TCw0zFnApRsLN>u2()@cx5U-FECX3dU4%f`Fru9iSqekSyScrMX$-q_lu>4690MH zao1P*fZ_RE`GHYlzw!lRdxG)@V`2;C6NbkokIFZUj3dfFj8Y!TM~uYN%1?|> zyOpmPV}~h!F^(6w`OnjijwXHodD>xhLivu7RbF}8@iJEVka5vg`H?Z}z49ev+JDNQ zjAeC|PZ`fkx&QOD%lEtTEhGKD@-Jh^T;*ei%UtDW#?xBL*NlM`*h77nrhLw*_(A!d z(ZDGEpQjzyGYb6kw8MV2@dG&TYLnTU&6vU- z?Y(5>qlTBQ@>8Q*y7EDc>~)PE`JD)N7@D*w|#R{MZ=T zR{64#*jD+ov9{9Lf1Y-{@2mXUX#7X{wz2)Z@^53P(Vu^wcI1pxer{Y^r+nSW303}X ze6&+OZ}e%c{NDJpoxNp`^~(Q^J7bg&93{&7|MRqCP^&@zJncA?$R6~`MeIdqXDPop z7FX-}&(n@Z>y&>S-d@T_jt_U0pBy1Ql&2k&1C_rVfBP$+Iof_vesj2{DBn3EooD{@ zv?J`4@}Z;L8RbXE=~U%Q$LKiaX@_mXxPPAZ6Zft}{PVP*Fb%oz&(nUQxZk*c{`C`O zYNq`2v7h)>@!dZ^`-#)tYEH7QE9U{fnZL2Eyf)wa<*~WEma%Z{P*Yydt=qb_guFUk z|JC}toD*E#-u31~d37whJr433_^f#7I(ePfe4^`kc^&rB$jen;JMCIOroOyxO%LAl zrFMjPU)H(c331CTv2%~U%S8KSvi0B&CSgfC&}wt7cZmM z^7{DkB;zMFBjkL@dbQ`vYp-|@kGAsKd|rd3do?0N#R}`p#>?xk9oH9Elvl@rS6l9u z^NUXv+V--Gyl%ZU_~6ZI5n|DuRvUxlbwX01EpOypTvf`NzSIUAJ|T*SJ!#(~>I6dEXN@j4C0oAEUNR zA0p=>&z-YB`C@rFFZ$`z4-Mtjs%LNKN#!EM=T>ItugH1Hy*4`p)|A&tp2f-zC?kKa zm6Nh}%lXN#eU6>`Y$oTrTfVr|T3(xZRQeEEO3uMvF``+boU80Nv{Lk)5)tCv*M`3e z%WLT;rxsWgm-ENxm$dCK=Pf6HZBlG<(FoCful1LBId}PRLBr3(MdbYG(^sosFD&OS zk4W%)Dd#Xpw8%Z0TPQ*tKlrD;vAkXyl6|eXoXh;d9kHbgMhNQ?=L5nWf0c+mA&rExy_Y}FMN3>PtGfT=eKnGPx;T? z_XN$8bDR%^r1ly3UCupjwARNV*C4X0FP&Xg&UKzO=+dqK{>^oMFt*Fl&vI^ZR>rki zpX6NMA^%Nv`e+b=_ElWXJ{ZJ~_0#Mx%X!Z)M|$^*{m&qdI^K#EZw;c5L(|7!a^(Et zb_={V$@$NjvF*R~d1Vkj-Tn6D$~n*zYP4Ut`nf?^y8m8m^~@lq-+6uL_7j8XZqcUT z(8mVh5La=iakfE}IDF~vl7|NIyUNo2wI9fN&Br#+-zMio$Mxtux5Yh!m{UAq=k7ZO z;r#aR*Jig3V*T(D?v!PM?=)5RK9+*L{^C|Ni`;IX3BX-to}2cNd`PUYcGg=>!^O5g$xHaIAL3p(` zDVZSWPJdtAeCXx@qP7D3}WHY6U)2rmVZt|r_BT89BS*$DcRA< z264Q*t>gM_2H^&AFLjGS?DIBVm9g0%-Wk1^b!(GBPKs-^K6`^ftP{0gzgQ=KFX!s` zzm7ME7o8>-e6>c-bzVRF){|B8`&qX1&fOITaoRiA^x`u4`#4{4;L#-pQ7gnOKWULc z9I_s9Y(boyb6srut`YO)yy*JNul1cP=Q&R(+^}V=L6{_%?_MEs9Pwh(0Ce{Ww2PzD_lwpU)m+5QA5mnRFR# z5LK5&_y0LUzAhO(UL?!8)^(;G+T4GLLHxJdVy#J}e7`=boVjCwK~!sZv6+j(Aa0J^ zmGL3eAl!@BT|GBg&J%wfn^-SUzJAF)ULEu^h=Oy^26y){h@i?fs{M=3%RdlkPm));g(75F$263cP&sNC=4Z^6`))vS9hKr{S zzKzQK6)r06+irYA&dqMIqRaiex#41VY3pBEU&4j;_Y#JCAHzkVw6@i6%K6zX2U}FX zAm?Y#*fG^`{8hNHIGpfj=ksuJY+&)HtDc057p)!3PM34ES699g7k)on+&|gSr`z3d zv3~Q{f`uh3WHia;|o>xWwtRkIMPi=Iur~910gF-#8rpwLe@eTjA9=Mb6i5v*c&z z;9YY5_nke{&64H!_q9m1!&|~dT>03d0g2(_)%W9l3dlLzS8^@iu9I`N3l(0pVh(&GBoiM%&r90r=`UaR-2N?6`iG0Igk5B)#B#{w3V-4dTi2~*5P8^w_fivo6CPb^%L$t{X01&+p$Zpk}z}KQL|CgsO6$cf~rvODoFvLH$N+x0MYSw#SA$94#f^2P-%E zWEPXZufl;(ZxoiV|LdOjvI@%i-1|-K9{mXuXGhppeUvBXaGzKdmX#~#L!aAP@5X02 z|Jt=_zjN=ygz2udyu)%%_oeh=6}HMb-NqG|-?i*|^3d;H2`JvzbY>bujvQ4YF zh*@FcV}*c*SyRKrv8|J)51S~zzd`0<#$&@o=*n7G7LN=Q#q!FWtT{AHG=6i$ddt8t zQM&Jq&duZ;@1fhvU)~uMCM@zhyfXKb|Ns5Gxk+B~?;Tztt%iG;=s4VA!XoD|F|(FK zMuA>oa?aJY4MQBm#7h5d#qY{_-m5y#F|oCgbIpfXEL`6qOpN~#xZ`gd`Ol+o_4jEh z=Zc%TtligCzMkV24L5BVCO-V=f8V=~oa^m3Bx_6cFmcUf!O+iguJ?e46W4Ss7bdFs z{qdhvDomW7bNfhIQ8{<~XXfs_Lh|3Ai?_8jl7G&oN)ZF|LxuU--_7E4L&cU)6&GCm z6e>QAZ#wVCf1%=|tx@ATuS3PUErG#~&qBq2+sk)~coZs@pMQ}WeJ@m)l~1_3;ijAq zUfXp3;VYryRk;suFP#q+;}UAVe{@#P`_2zu`X55Y_z$zQbB~6K%NPBw{{A=Td&q7> zfxV$(hP6{tft{hEQGMh2f3}2*cbhg<|FJPtgyVO=_wk{kN71JppR5cOy;s)Byt*V* z6fd)&P}%}HH+%ih|2E5c-`oDQn=yB$oI^ga%DKT)UM|RL=drG}K|( zB{}!|KhqJZ3wnhLfeCw^97Dxm8|#Q7cA?_R?m2gkTg#vKvO|H9?d06>I}R`FwGI{g z7ly}NGY=J|x<$X3&@fbZT%KB>o}B;fJgv=x^lG6Z%5Gwmp<<|b9o6w#p)#SuvUJaP z3B^N2=jrn=v@IMes-AlmnQ0U%o(4C+?wubZ)_C{&_41pXkKM7>f5Se8h`HtFZv6fx zMEsdLy!M0_A!0#7YIuIOoQqw`I%=$(13vr53+K;r4)_++HD4pHgor}JI)^>T3=!R* zAKK`2CPXY*_ipFm<8nTB;F*|uheJe*0rgwY*%u6TsTzg{rr_SgQ(JQU!w&0;5VqE^zmg@(Eh$lt;7H5Toi2OVAu9uN>!HeJd z`?0H>3;y%x=J!!@F1UH>(2I$3E_lG7-gB=whKT7-7R|nk5HW8>sXf)KLxh{xtx7g+ zL&T8T<3fE}hKPb2-!G495+XLOYrJPcJvj&bSGAN)HRR8+H*Ixlr4X^*#(2n?GIH+t z%BSX6i-(9ao%-IoE9ZlMtKVbLBRL%-gC`e0_26Bw*xc`Y zx!bSg{OlDUJT5*77Up5Y=AF1N=W@5|mb&{^uvqwd$n~{Xg2jVhPoGC;28-I>>)s7M z9W1&V*1vO23l>?Wp1rV;bHdN>54}@5C0KY_*E{`I&I!*hP-FY)L^*H!xy$^O3BlrR zr{jYMt_&6~k3*e0E)Eve>U3>tGA~%%xfEb}c~-FK(E7luB~#@8SEgsC$2d91d~c0i z6-Ne(g4f!txDgpFY`4VCnjbE|zc-fS9pt?5pP7xKet65T{}efXo17PZDW>Rb&)#w# zc{Ahn1-k_czx;sH+eNTA72EKOvsJK|{K~J@=QhE@Goj?fMa_f7n-rTn%^L-aY3p+B zGiu9u;(m7Us~Rla{TjJ^DktZY$L#$wtz@tmY4a}GtVpm(^?5pOwNbE0X&difSI!O3 zSkc61i<}$2BYnxRChvlTnDTnv)|WvdEZ6c){l`J#;@xPMgnL2aTF?J(l)n)q`n(=F zdiKR25qYLryPs!+#Ml81D;Z7%i6eK1Rk?mh&HJwNW{Ll|GB_s zInVn_*;zpeLBeO!C!6Cdf<$!coSK#8{P1LBj9HSF340a?bdb)RdF%a{hUr z>wOCpGmkGgY4u*t6?cw&(dSj5xKM9i@4&}_Vrr|B`9tmnik$nUK8(K}C`$a^({$#A zKoN7l-0nGN0)?Ta*Q5n$f#PTFb<5)p$Um=pv0w9d%X#0sj_!)x8YrfpzqNb1oG0FL z<^-d0a-Mici>n(Vm&mVQ{e7w5JULJNQ-%AzW(A5G51dE0pByNx2b~YCJtk1Rt(CmJ z@Gv=#Jf~9kHxYp%xL$kP3qgV6=&F_rw)GDbgJ(AGILj?i^o{Ky{G9?t?9n5MmR$oy zpEZdFQ(HNIyh5uv_u9#yV`g;8tt|sZ`mSrAM>Y-=W7DmzZRA|>%z+s}~O6z*2Qs%Tz-$ZZh1VdC2WvB7Fk_L~O*V%o;xxo(#O zL_e1suMeIG5EqKSJ5(`6&K)0KeZa7d0b<<86ZvPB1c>UF+l?$gD?kjd^W>U;RDj62 zS*vQIAwVqK?B3_OSAa;X`*c{Xo&jRwPV<@ltOG>Y*kyB~o5^|QF*Bq0%K74tclwXN zC+CazTQnyk|F6IJwt1*qH#hF#jJeCMH^6Rfp55CykU)-E^q()**fAMZhwY(@Ze=#kpYMz6UzZmkvymqNi zeqzAyvqP>w@e|8x1iW5!-A`0HJS5KPw4XTgJuJqXrqt zYpX^1t3LXO#Qq!ePe1k%&zf!IrkBC|_V9tmjAJH)|(S4Mwk7(~*VE=GCAF<1>Qu4so zKBCW(Nu2`f_=xM1E)H}q^Y81{cCaqsBML;!-dgvQoDc5WB+cYWf3YN~>bU1u`-|+F zKOP-Ne-YWh|I^Yv{e|z{oW0@e`-{n@9UEFM>@V(ic+>m$l>WjYVQsThL;H*0H9wx2 z9w6t5_nlRxv$LFMKIM0_@3wND`MSIU$u0T|Kd)MA`q%6)z7{acH!0O$tlTiT{?6at z!u@S_6_@A$fdRx5x<|XEhP44UT!b@1}H$-l`Dd&&hvz=b>jF%W< z{dBqKJ}>e6rt!|L8@)u4t{xfR7I}&7SLVI8o#rK``1zEZIm}Bmnh@3VY=E3+?zLoL zL1!=VH`DOi+SW^KbJ*@ayt$X?{G`m?jdBk8cW;l;SLGb?QN>!d%**o>y*_xF)_&tD z)@+V3w!h~o77rX(FYuhFC|d3H!0`t?Md3Da4;ChQ3inG*Cu~~gDN1e{(_`;UPtmM+ zo1SSSJw?^Ls#DJddkU)p@84y(dWwmC1})DJo+2l?@5IwBJw>Z2p&O6Z^c3wggNpAd z=_!&LlsK~fmxma8zCp_Tw;p0v%Yn6stG<(VELFtt;+4I@27z3+w>!{j{jjW(a2cXIU*gLba(ZX!IyP@~S} z&bROoi)StCHn)a{Xj6O0>+U5y#IbHmeiY2_Ct4J_I{t7@Ke7GShvAWT`w1iO6OXH9 z^b;bx*!hgqe!}MYx>myy`-$p(oGMjV(oeix@@VRTY5hdevyLY-=k2eS?+m?W*(>E#up7I8mgZxOB}SrfaUdIA^n@ z=(*?a;?}F&rrmD1i+RBg?@yhSbILEccv$ao7dJ0{3fq(5F49*1u2omgC9m+VXUxJ0 z?&4wTl!W{N?!xkBkpUrIa_)Fsqnr#!cX6YBPMs!g-NlLg1{GuKxr^0>4xM{a#$D7u zFs@TaBX=>Oq~oah@7=_j`9DTHdf+DB+YYvFcEL^D+%@%T)L}Pa{=uy6@hxuR{<0r~ z3NCjOKF2DL?K0C%h`)V&r;TtErzefCb}Z0M^tw0x(3d`L;+tiwc8zV^M2)r+R(PAc ziPwKRWye%;6PMb1mflxH{(F-h&F_EfE6)jQS{Xf;^T>xR>`?c*oKt@FrMVsCoN`x_ zN`7)a`H2Nre~p&&$xCl){&?=3zG7p8f@c!O_7&%vSSIfZ?<>aGZeMxSy|1`7xL4d+ zdpWsKujI+OkF^RKU)n`XHnu40 z`O8^6uJ*3p{yWa1mG6|wCH6Usfo*R8=fA*N?0cS_v}1s?7!^I&>6?SI@F@5nlJ2&<4&ECSH#kb2BcJ~%d>vnLtH>bBqoHM7`)3DwmAnB#? zOVL~09NW$QMYZ0dcjnd$*||>QeVrmnx8%I?W0wQ&r0;MN$q)8~?Tc{|@s)pitO<4! z!%B5XnQY@E3YiWW?^oGLh!SfLwg1vf)O~b%c*)DX#Nqr`$&a@75*_1<4^E!ZOZ?nt zadf1AFEKSIXl?tBy~Lb^go@wG^%BM3yl=VpeNSPt())cxW=|2{a+@p|7WoYSdlqJ^kX>g96>f+8*Us*gfbbW}KMa zZ{vY(;>&z5+rJCD39DnPJiP{W6Codhx9sfNO>`b`q0Qe~-9%WCw*`CWISOn0tg0(+ zI*Kpmd#63z`y$>!oPSd2MBgzEqTivVZb7bce)%S|b&=){V(NpHTSl2U zh|K!#BgbWT5d}|&nNE=N%S+7o964@D7ja{Mtu3PlcM(qJ<1`;cWlD4JK2k+_Mh6F zsAw2+JK5S! zoW8avY<_V&5!ZF!B##$D{G8V#tNIBcU)PP(9un{L+=>ofW@II5OKysx9E+t_ycp74&s?M3|4gH<{T%g6899KF~< ztTo#({m7IKBB-?a{Zxw%!ndAL&z&#Y3t#hP_t&p%FPbI?tXVe;anU6!}Jz|9p`1%oCD_ol4!=Mm#=z)^luN8_{od-ud?B z+K8Su^BaFXYatGm{WWptSPS7`ntn6H+(LAS8Q7`Pqt;@|hylo0*jjR;E`vvRX)SgQ z9_w5?x0Uc(G-u?wt*yjWhx`|VeOieNJDm2FF4amH9V~b?Xj)6rKE6Yp_?Iojq%6CU zH+r=YImH`h7fNX^0#?17)VgAGF*{{Lg!hDI;#gOwLlYmHi@zp6X07RJE^>VLyh+{O zRBRnI?e7J%rs9>!*oO~CH4*7MH^jfa*H~PPE8+dkwy}6PIiqp@rbeQ{$0rSbn>G?< zzYiLaKe(ZAu!|~@d%b~}Qnqa4ckLU9wZiq*+QF z+j^m{C=u4ERa~pOV)wb!<|CKY5p_2Exw+@n7XADzk5~lM7N_Q}%dI}UmUv?~FW`!6 zO%Z45`($FZ8lqyf&8`M7s)-}j0)Axfswze-`}k?V*ec?3*SeQX>?@0BO&T1FFJ4L1 zdeZb$>su9s)#k8-QwimTnZ0SQb3{2Yy`*E)tkz|Pe|F!&LHVV{*s|$QFT|ROV{1LG zU8!DDv^jXP*p=PIM9}0BUo!1Y#juk%Kj4;$`1r{^bbo}gSW_-AH8I~vH1o<>P`}3S z&XHkje&^Z$=sek|%G65{Upnv3vpU|f#=FitLP}=bhnf|SyHbdM&Z6(>>d)={EI|D|n@;lYt+$BZNBKVdzFtN1`y3X@@4MO4 zv+C#Qn8BaR?^{>(bG~W9pS!|*z79Xn@pU;~hOg81=6v0pC-HS$Zp_#9^I*QtgR1j& zPjABC!}^i@y>xNq@2T`E{@xOf@%Q-Ki@(?RQ~7)T4*uSU*W>$Oz9rum!wU0#(ylGv zH-+BveN^c=-&a>g@O_3EeBT|~!1rO+&oSzKxh8<`(}ym6-+uo2UA>P}I`VxzX*1vF z9`pIWfAqJ3`W%e9%+E!OMf{xPZs+GFJ&B*A3%2}RxzFY2Y`cMkKfGuKwjP?bzi8O$@@h1cHTEWp5lEZEsgh; z={IwGS>|C^_t6Em0dxzYDNpCiYz_*^MEgwL7Xo%r18cbw0m zo1OSvs{EGEseYaL-13;l=U8MRKG*)n@;SHMp3lAWm-!rY6MQZftj6c$(SCex&hX)L zbYuxWR}UTMb2h#+pSx3T@;Q9Nn$P7ryZD?glFjF~<)8BEIUae4&-JMt_?-7>%;)~2 z6s`j*PvyFx6u3^fRfp?_`S-Yv@LbPzMNlf&8FwCW-SK)L*CA(Gab2=(5!Wd*#&O-U zJCN&`mQGyPm|fvIr$=$FdoJwdI%tq7*G2z5<~r%iCa#-G_U1Y&DU$1|LQS~Na_Y== z*O)?Fhq;DxT{ikZuG5?jbKPb#m+QD?$GEQB?Z|arx@@lhTlX0Sa~)_^kn2LDYFsDI zImdP5zVlp1{+`8k<&;8PXMW1%x^rbJ*P*@axGoKI;5s$49M`S4c5@vYa+d4bqr14y zT``L5-U?T^4o+>zb#cFCTqiep#dUMy8m^<)yyUvNdRBkr?WALYKQ%YE*{+P~qx?D#|O(+XGSzO79J_i>Ml zabLG!JNJ3!f!y~^-p765o;BPT9-hK|;*)mVH+Cq>ePr1^+*gkG;68KTD(*XX$8sM! zYa92a?>}&#dMbna*6`BY$2!;KzIMVu%;&zniVOGgj#s#^cOJ}re#2ti_a8Rq zIl#bnJQtYto96^a+VI?9NgJLcxS&!!=Qy1{u+{^_(gdCZ1=#Czq0Kxe zS{}f2quob&jx=vE&y`L)@to=TQ=U7$e#mpEt)4uWa?R&C)h!dATZKCE9P2?%o@-gp za^PITvK%N`djo~?Rcs|dSN2ltzjNU^_x>6@_s(C-bMOW2c`j~I zgy-a?@9^BbR(+nMFRH$lpLp_I z|Cv9}`D-oaxxeKLa)4sSg*;NrJ=3P2#7KqtsbTuCnMH zIm?GEa+e|z`dlFQsIPENDA9Jx*VapXAN){yI5T|>?j5=ic|b}>27ylD+HjDZsYZ2jr_cH1P`SC}Ql_KHsYWJ|TY1kU$1=M{t~IwZIoG*8 z>PF5s{TR7hZ$S=c-GW?hcp^F7wK#IS z{yWI=7SAHrdlW^^_br*+&$13VV2MO>!GIg&gs*Cm8!oy?j`;pPx#G;BYAHB%O^+o-At}N`!PBDuS4YSWi*GcsJZ-@+T`?~?vvXe zF(=30bD3O!&UbSDzfR=-KXaG^IOfM(KvkU+Sks%ift@XxBe<}ixq`j>nKOu<$lO5@ zokQ6FoVkQQgP2no5zE}di#yCQY>Hs6Vfkt19LBw3?jgSia}eL|Fc-1l8*>r^Co?y3 z>nw8=AD1&%k!8u8#iRbrU99QE97eln<}xPwGN(~q=Qg$_Fvn3==Q^guGv~48C37Ed zW-|v8oyT0rVRPn0zC|-P^5-LSB(-&}q;C#$CSgg;oiw@19Lm}h=2FV(oJv3|=2re( zWRAtYHghde+040=(Ycp9&zOTT(Yct(R?NwK+Q;0CkXj5aWLv^0h}q;a0iC8aE9PHAf|=9XsuW{$~qKXXmBbk3>uZRVcp=p0lL zor_wR$DGu#W6VwEK4y;U%tYp@k{dE-_3S%yS1so;hgDeTvJT`ir!{9ab6a0$Gsm^- zBXeEPrZDH_9>Lt#!~o{N4ks`dHsl#|VoirKH+HEAb7Z@}GgpR^%$eXzJQ&TiTz=I*}lVh(RvC+6}7oM29`g3j%I8^Ro)?M>$T>gt@|*Hg^>Ii)fO*ih#J zi|L%8c}?a9V|Fn|SYGD}Z~SJ?&{*dV+m>byam)(l5=WUbr?}_@bBmRAj?t|ibB(*K zm~(tEn7PNF7np+IglxgMy=-0PrW%)#~;#$4=*Eaqgx z@|c_5xQ#j5F0Rbg`sOfaYx|SA+m$Pr!(BR%x!g}%nA2^bbGws@Fvr_U=X&R?XU_NU zN#=fg`!ff;at(9AF|C*r4i05*xP{IUpIgOTaS@#}zM0P4v14iGkWa@jmt0xrl$XtC zZn?G2F|XRdT(fsc=A7SeW$yWP4d$Q=>Rhy_z?^h3oty5ulR4^9F3eS5%wW#i<2ZBI z#yW?6Wgm0dw_Y))J;;Q)ZHE=iaZf(VT=%(p%z2Nlz})wm0nC9n)wysJofEIGbK@IN zGDrUGD|6+W&N63SN$1WB=^XmKOU$LGKW0w--XrGL%j+EboB_Kfr{!|1P=*;P-~TfOl)z6XT~uSPAy^YVbyB(AZ9FNFTz6iBp$A3Z^BvkD2#Ql zqOI;(e67UZg`MtURMx$W`G?rkc%01M#=J=OID(I{*Re_t!uZ$ocxlGo$Nc5&fkf?P zFQkj^i3IgzZ=|~JksPSXUdi~$?3tW5VeiCB_fXcxv6oU!_f&f7-ioE}u|%b_*V0S( zTs9wO@5M^@U{*h1FUC&yWVZd?rg}5Jx<_N8do|JJ*t03DdpE|qhciI;a^ml?r?apW zdpkG(=Bggg&Xer*)X+Vj{Icx*80j9+{j2N++3B9p@7e4P8R;I;m^thfUEj{0(Zg5l z9bGKO9+H#pB`s~sp3-RDTME}brZrR9YbvdKPRp0F_w;53dr-%#vln%-ID1mh-mo{7 z`+z;FmbzEz-Fn-TNx2dte6L z3mdF^Vuf{YtcmWC<#cARY@F_y3Eew;a)LcHC*4aspU9qCVclD+t$S>#pV(`A|BXGj zIlA}ut`&Q5O>{4=wC>5Z*S)!tx<_~4g1x#dEB5T#>E2yE-NVbyV=wR2S@!gL>E2#L z-Q(+|dwoaeu;*7>_x>Dp4=_^q0_}BA@beq?23zPJp{4E>J~+yr;U?WX+;@mQ#Qzqs zm-w+Ydy3||xA@47J;sK**H~Eh97pTkV}R~K?(4!{VS z?p^NEJxnXz%Uq~?nhSJqbBOM7Uhl?UXU2c*dEO|--e+zed!UDOFSL>FiRP?gZ`4}% zNb`%cSGq^{OyhL#beis=Hq*V-@59+sEvI{{Q*@8DwC=Tz)IHaZy7zkTF?+BFbuYGw z?#WKjz1h5e?9qN|!(Qzn-Lu`Jd$)Z&*~6`&d%0(IPq&or?Y?-z9&eED^=9av??T=C z9iV%_*18wmTK9za>)vpb?h%jHz2ZDO_KY{^-m#DFA&=0#JjYqkGVobT9h6?n%eEus3~2_oxf#UiC%YvyRfe>tniyovnM>YjjV$mF{ha z>K^wr-Rt($J#Smx`>yc+9=Ps>pV2+>lDaqERQJeJbg%rB?wJSORNVYT_f3kMpXh0& zxcQ0R>lHUYVP&GY`H6gT^Aj`3&2g999A4z+=t*vl>M@F&BZ=G`LFDFeBR9twa&r`F zs<=5?lAEJKrsC$fOKy&Ia&ttGnbHi)5y(XO>T}t$%>of61h39lbgeb+#Gwz&9Q;p9Mj3o z(TUs~-N?;xjNBZ3$j#B8+#D~+&9RBx97g$yo1-?lIbM*P<2$)IPLrEsHn}<6$jwod z+#CbR%~77*9I@o)upl=_7`ZvZ$jvc`+#E^d=CCCMQ)A+a&sIZH^($` zbGVb6V+Xl8%9ESJlH45E$jxz{+#Geu&GC!e9Gl3^5kqbcTXJ*EAvcE?xj9aeo5PIU z9I52y@FO=z7P&d9k({6}ss=N2h$j+Nx*h$c73UUGA^AvZ@^a&tMqNO5yqCO5|ra&vqj zH%BhHIm(cmV;i|SijbSbncN)X$<5(TZjQ0!=5QuAhbg%^R+5`zAGtX)$<1L*ZVnrA za~PAGV?Mb#4w9S0C|YrIOeZ(TS8{X2lbfRtxj6=qo8uz6Iqs61Bb?kE$H~pHn%o?f z$<1+y+#Fuy=4ecAjxFToNFX;yC316klAGf$xjF2}%@Ig$j{4;0SV(S;G;(uXBsa$+ za&wrGn`0=sIlhydV>-DxGRV!*o7@}`!8A2)Q|)lAFVd+#Kb}%`t)89I52y*h6lPXmWFWBsa%ta&s8S z&E;H5#mzC1+#Juy&GDVw9M#CpQI*^ro5;-pa&z<|H^*RdbCe@DM;N&|I+L4Y2e~=? z$jwoW+#KD=&EZOJj>hEXI7)7gLFDF$Aveb{a&s&tH^*CYbA*ta<1x88^2p6Gp4=Q4 z$;~mE+#CzZ&0#}sj_Ty*NGCT(CvtNHk(*;QxjCkho8u0-Ii`}E;}E$yg2~M>mfRe3 z$<5J<+#KV{%`uqV93#oiag*E}jmgb%ncN&f9JDW9DT^m(U9C6 zugJ|&irgF^H-`neIU10g!=2n5FUZZ2O>T}Ab2yQk<2SiE8j_o1JGnVNlbb_xbEJ@)BaYl0_sPv+Np23!&5=fKj(z0j zs7G#&Tjb_=MQ)BRLY9mvgLM{bT(a&uHBH%Du7bBrQ4#~5;RxRaZs zKDjv}$jvc^+#GMo&7rwD+{n$bhuj=h$<6VB+#F%#=J-HvjsxW8_(g7xIC67XlAEI} zxjAZ+n`1G#x%A^JZjL78=13tohc&r5rjeWD7r8ln$j$MT+#D~+%~6Nk9PP->QJmZy zoyg5Gjocj7$<1L;ZVt`Op}9HAkej0nxjDv?o8t|+Ii8W5qanFD>XDnnpWGY|$<48t z+#Db`M+mt&){&c|F1a}tlbhocxjBlGo8t<(Ic}4iV+*-CI*^;AJGnWok((oo+#H&l zV+y%Bo|2nGb90m?H-{s+x%4C|ZjPGd=J-Nx4$aL`l-wMn$jza-IZBh8%Q@YOo8vsW zIhv50;{mxj9Lde0xjEX9o1-YXIf|2;%QD z$9Hmbv?Di1Npf=pk()zvb1We@#|LtAM3b9CkelN?xjDX)o1+4`IU>l-F_zpMnw#S) zxj8g9M*(tkXl{-_X4g5b91V=%cnG&jcqa&u^Ijtp{hXl@S8&7rwDG&e^za&u^I4$aMRoZK9#+xj8g9M zbL5hnBaYl0gUHQso7^0q$jxz|+#H&lV=cKkG&jd2a&uH5HVA-nwvv&bHtOILvwRzZjQg?=Fr?6W5~^+xj8g9 zhvw#(LT(Pt%~62d97D;?(T&_3nwvv&b7*dkzU1b(MsALa6}dTzkelNmxjE*Nn?rMRXl{<@xjD|0n?rMRXl{;3a&u^Ij+Nx*(A*rG$j#wEZVt`O(V5&FtH{lvxj8g9 zM?-RRXl{xj8g9m-~6e&E+~ladVs|H^*vnb7*cZ z&x@5`5Sp9Ah1?v4$jza-IW#wi=H}4c91FJp}9FU zH;3lt(A*rFo1+l9IW#wi=H}4c9GaU$b92-rH;3lt(A*rFn?rMRXl@S8&7rwDG&hIl z=Fr?6nwvv&b7*c3&CQ{?x!g}FKPWUehvw!uL2eGs&7rwDG&hIl=Fr?6nww)bxj8g9 z$6#`EXl@S8&9Rx>9GaU$b8~2J4$aLmgxnmOo1-bYIW#wi=H}4c9GaU$b8~2Jjw0md z(A*rFn?rMRXl@S8&7rwDG&hIl=Fr?6nwvv&b7*c3&CQ{?IW#wi=H_TbZVt`Op}9FU zH;3lt(A*rFo8t?)IW#wi=H}4c9GaU$b8~2J4$aM>xj8g9hvw$c+#FHl=Fr?6nwvv& zb1Ww}hvw$c+#H&lLvwRzZVt`Op}9FUH;3lt(A*rFn?rMRXl@S8&7rwDG&hIl=Fr?6 znwvv&b7*c3&CQ{?IW#wi=H}4c9GaWMirgHUo8u6 zxj8g9hvw$c+#H&l;~cp;G&hIl=Fr?6nwvv&b7*cZ=l?1nH#9eg=H~DvH;3lt(A*rF zn?rMRXl@S8&7rwDG&hIl=Fr?6nwvv&b2-mW`N*NUIW#v%8o4<%H;3lt(A*rFn?rMR zXl@S8&7rwD9Lde0xj8g9hvw$c+#H&lLwnkxJ?+q*c4$vKw5J`~(+=%vhxW8Xd)lEr z?a-cf*pT-_d)lEr?a-cfL^Ce{?P-Vhv_pH^p*`);o_0KE9s%0Zjuy--KzrKpn|TIk zPdiRC?*Q#-$71FoFj4=WPcttee;$>efcCUw4f7Sa$GinRnZG~?^B7pndz*pu!(3^P>Okq9*Pnj3NTjod5ke+t5q^BKwnKwZo^C$SIKUd}G zX~!u2x!cA33Y?f{K^pTd=*zqd+SAjH!OX+p6!S5-&b$o1GCzaP^t59t^EGHmPdkP( ze}e)Cm8Ttoo_5rvryb?!X-7?Z+Hs8e9z0~;2Tz#)!CdBnP~f5RwBsoALUQhq^0XtI zc_Qp*z6kI1ee(?SM<_{8JB~1)glqb~8^Zh&W-`wN8+zI?mw6|+($kJU^t7V_J?$t` zRe9QBM^8IeF;9hM%vZsOo^~WNe4jxF<*u~%$p&W`7C=xIlPdfE{~ zPdhB>X~!1l^OJ?(I&ryVtNl&2ks^g8z_^P;e!ryXg` zlge{vGG6(Vw1n?5C$45%jd9H9hU{qo*Bv>1jtG zJ?%1Ip*-!VXrVmqxIj-kN}N)jcHGzdqQ)y z7lR^t7WZJ?$7yPdj4iX-D}L%F~W4dfIW0o_0K-ryZt4l&2llt0_;r zd_JrEJaXu1$98(!(d@qRw8Lz=^0dQpf%3Ft3q9?aPER{-(bJCk^t8i`o_0*2ryVcp zX~z?K+EHnw^0Z?hJ?(f(Pdnz&(+*#H+EFJ%dD`JkPdln@Q=WDh*HZli6x*))3W%bo z9S7-YhqJTtv?GQyRNKZRH(9@37^t8hyK=oNrL>e=tryXHKm8Ts!^t8her9AD} zOiw%7k5_#e1pQQ=cKoEL9bF15Pdgsc(~br7w4=jZ)yF|HJ?&UXPdjWARewjGC#gOU zYJXP!9t@nIJnb0RS$Wz~bt}&`Ba)S;9c3@5z7Xco(~djzv?Hv%^0eb8J?)rEPdoDH zX@~PA)lWj3p{lP0lTNC?B%i;k&xGNL%F~Xw^t9s&J?*$bPdgUV(~h7G%F_;uzp6il zk%N?{9k1zW$2@x4F?hN1v}4XViKwA|_%Gf^^K- z{aV=Ffr*OU-LmXfY_Yo&yMGURpYQtKf986vfnnx(&e```_fb!~HHVeH7RN0UPditt zr=31MrQgM&>BZB|%j#+8KlQY;`xfbk@vVB=`AvWL&A9cD_?jJD;nkomm@6 zAB`gih^L(w)YHxc^|W)RdfGWWKs@cN-BtQ-T&13Nmdho5I4&M3o_1DRDt$TD$twLh zmir-nI<`zN{W`8zPdneJr=89*(#PX(^|bS57K>@^a(lgk@O4sOFiu@_gnghoRvX5?c97*Jnf8A zPdhjL6i+)Js;8ZK{z<=)wcVxfNZ0w&e`Mw^(ubtu1nEcepnBTr8zcQmD@7-LO1f^B zekDWeOW%^|qosezQT3#c$z7$y)6OgEX{Spm>2K0=gY-EW<|+M7_M9($PkvNSJ8!F} zot<7vKa?x}h^L(|)zi)#q0%R{KA+-g=e(WLH)W~1(m&;f6yj;;u&2^b<=%SYX=l-g z(qH8p^|W){1?jgkV>Ri!GA@UB+Sziu^kI2JJ?+f3M*6Z$@ml(`j6b7XaC4&cYq@&7 z^lfRYDE(X3{w;l6E}5vD(fft;by;(%^mloBn|RvkAETV|ysvoLS;JTQzx<${c6!#A zelVlGr7z66HKjkyP4lHs%vmR;U(B*2q;JgD-=u%coe9!M=0P{>MX4ae}ePJN=K0pr*JhU=(%3{R(X7RN1 z$tLl%Gk%}+#p&}%`s1v&TKeSN`$zia{M1T3?R2wC|D2&4rH{@(C&kmwC2ys#&S`Pd zUuSe%>9g}jN$Iz9YE|jG^ZOm~w6nlp>BDp09qGq&P!;LRGh=b_v~zU}>C63WcS?jL!_vslaeSW4ZCZ2W{dnJ8;jwmVpeoqiSL0u*NFdt zF4e>b!8Weqhu~;x?j=(v@kcQ8Sn)~FIa>S@w5=821Y0i>{{)|w5FZ7r9}+(Wuk8?D z1)~dU4yW)n@mVl@y!b6RW}WyhSa6W|FPPz%_%N70*@+}iJ8KjbUk3N?*Bp@FPw{D3 z=ah|3s<>{--RvaitmLN zM~MH0lV6GthRGwu55plI;)~(DwVH!_T1Z6#opLyNHj59hZrp zhS`dXuZC_N#b3k2QR1_q`*QKyaG;m?ZkRQ-_;0u)R(v?@{Z9NibaxeB4sY)ie-6+8 z6Q2$zP7=Qk57@=G!~5al-{FHd;^X1sOycL^sLA5%Vetg<_i$@E@%eDgE%E!%W4HKz z7_eFVKO8hfd_deYMEpSX*)6^xy4?|f5Es@LpAakD6u%H_G#B3xZ(SDu5I6gYkBFUy ziJyp>yv0|KzXT;u5#Ban3KH@v#+RWlVVpO8|ka%g0_>p+VCcY%1u=tZ$ zzoz(z9yF0EdD0z+*Y5|=iDW6CWAB zrWHRKqxOogj5o81zl=Yoi_eVijl^%p>f6M3#z~3dKch>u_|SMDPW)(Go}x{Xr=6uo zia*WbFXB^UXJ_%Naip{O*65z1UXrJsPA=kON;rOVb_~KZvm-ypY0OFJ5jE&-#WB+R6o8w!Ge~#~u zijR)x3X7kPdn$;pjvXleIy#onTz>uB;>CfW7W4BG>!{el>;>Y9kCF09t zXD{*R@xu=B>CqvJ`1ME^@$E5swD|WpBSw6D^xGqTK4uOQUmtsK7Jna)Wfh+v9c<$F z#d+`CX`~&d=GM|-jw><3}kU{)`yj5I$f-D~(enAG+5#J!UycYi; zdruJ`AwAQHr=6a8#8=4k4aHx`UQfhl$R4G|Z^)oO;ydJk^5Q>ahx+0}WSyzvM`WgY z;!C7^4e=+^sjT=Exp{{86&b!!e2aWAT>Ojd5-&bR{&EyQBhOwFUnBQF7Jnl*6%n5! zqjHPik$JL;?~xuk#s6sKlf?(g^C?~=dD_`JR(z4nx?lW}oc}?5l3cb@{E{s3QGAo^ zxK#X;++9U{l+2qTeo8JFCca9>?Gb+^!!C-?l6Urs-;$RKiSLs3*5bdUr7Ge^oXi<1eoo##Bfd_aXe<6s zZa5)6PZpXZeoqD+72hYPeHH(wl@AghC}(96KPbanh%c1Iox~r?WBtV^%8H%DFUnk- z#5c;!ud5|_+Bq$U_(=KgfcQyi&#k?y>Ivd6rKhL(OnD<*{HEM6N_?k`TPXfhzN@3X zu3Y`ZkIGap#h1#dapF(4)=T13wSJ!BS7qu7;#+0?GvZ%mi;3c6Wwrz2XSL??;%nuO zM&fT}%n|XqGCZAl+F9?V_+Ht0kN97iv8niAx#ynvVR@s4_+puOO8l|hm`8lFj0+OK zEWdXX-z@8w68|h`wiF*N(_6hK%hS$lt;APL%+?;>hAiT<<@`zFx8=MR;=85y7xCZH ztDX38dGE6Laap^a_;RiD*u|gA7VpKU%ZKm9ugje4#kb2-ImOe?oX^F_%PQ-{&&!Ex z#MjF$AI0CxuARi^%YX>+`|{*a@%?i30`dP6ac%dAg?fhWYE0_=kDto%o2^q_FsjnW>2QikY^W_=}mYj`)mueXsb9S?RL)j=8Ua z_>Y;ri};YaHPe$MPdk6#6JIi`y%2vgZI{KT%;h)4ugsZo;#=nVyW(Hw=B(mrXZwBP zXXcz!;%jEcwc>APvR2}AroEW>o%t(|_@4QGj`*Lg9EA9w*~v-#&ND<{MU&OiT&ADqj3h%cPw z4r>oO-cx+y93L-!aXuX(zH$Bx6#qDD6)d0RX=jHA;wNX>q1wA%)LcC69F)I9lBb=U z#*3$&pL29d^0YIe;*lgzI~RNwA3E37x|ZZ=XSvXhNuG9IpCF!gu5dk-8ha~^vQ0!nb`L74eBh9bZThQy_ z+mpQu9L#WIMbCPVLSY_he!X7Hq5qZmyClElB< zyL9laIACe+OquXy|KW-k%Vx!uf5{RKm&lIv85Vbp-j)Luht@o2YnTh4J=^@QADq9*4k>O?}Czee6!-in6#yk z{O7#(PcM{0xi>ELO3y8g(cTY71o)Ie_i1haEGp@UkwNWeUViNe7ym6qQf)7bJ?pEF zsXDkE%H?0TylcbqNal2>)9`c^kk4t}=%p7c;CGHS>Gsd9h>Vl(9KGaI3402qocp+B zWgN=!+V{ij$|%*i+P@)PsvxF%(QD^%?Hyec9O z{x0#XWi^Z}HLX;aP1Vrw?S*2evpeDX;nnGC_H#n!_|#{X-gLsZ6W2PXsaxGTHzC!c zu%*@U9XbAf3-qQTw0W8N9pM`@$YlawEaHS zMCDq)SHyYNLUe({gVXG*gE& zfZ>T=u2^w&-}0hUtaDgiH|XPb$Q9Q|<$T%uy(``xY4m$;(I)T-za6`~T@(17etqj| zR1-Wo7&Z6Z_9nQ#bMwViPn#fYOVqHud77eogG>ucH){&7@jivB4Qz^RO~?PKy|yW0 zPcLz*f2%3p{Mx>|e#U0l?R$HqOWkJ3nWgN+>b7Q>cX;cmvP+s_3II&7|L@m1B=%#;jWH@#?-@cj6QMuWyZ}W~eN3lj#ulD-f9B2EVSlz5t z3sh)r3(x1-0@D(Z>-pFgxO>HW@s{1zwSR87xM$^u;3};U)pTy(Pkz?HFZqu651G*lC#tpG^7n8nWcCQ{ zJT$Qtrv9zg{#$W(Ozf91C$fV(TEvYhaCcPFc}LxEH{aooZ~GRW-~7ZKSv-7RWzXFj zoPM=zk0z}#qD$q`C;PQVxc{P$`B$~ZkTP!JVb-}z_r66u+m@ycO1`b^`>kdh%=mcf zbj^@9=*F;Oz2>#SmuF3UR-J5vdM9S|yZ)^WUbbksHCe8~Njj7B$-3^K2R07N^_AHg`YJ7W*E>jB&r(7Jd3B zrgwYO78w$EUuu%79d54AmQb%?I~0p7SkS3@J8ZZ8np>(>JB;+b&?I+YJGA!ORWgNj z9#+Hj*DAl6)echvTLoNM-wxS6)!)DSXghpdf6*!Wb~`lsQ|$DBPwlYiT$ceIGPcKw z0SoI?DA69Ru4T-c!lgaR)QJCZwS9YZ^v`l9HoQHCEO~RTS5$jU-Y_H1WkGv*oh-Q} z#kTfnwEFyl6Q|qb*vK72#yzyo^~#WcI}|n1IBegou`F66FgNd>oCErJ zpikZ$yZ%n}z{HYi(u`W}0ndXc{-xaKfgZ2ME**Kv0~H$#e)#K!2O8hHdboG8j_?jX zTlZPsj@XlbR%_479dUNQ|ED8OJL1|xTbT;h`EcVFzI`^MUq|a)@_dy(Pwoic=8iww zTj$CRAKk%q)BcX=|L;o1G*>#pIpVQf*H_lx%XlE!`sAL-vS)tj?+%{$oUmhW!z!K_ z-J{j6am_r@Ambv3GrpcUd-cJcbp1UsbwcNVji-3Rb!fx?hQxXzcEPPSoA-O-V?aRv z`-@hD?Q8vc-U*R? zH#GSDw-a(S+7$dPcV~E|Ubg04h0b`8@j~)PjXNWKli~JDT{~k-qkpds^y-YAwWIsQ zj_-^GDWX%2U)mXY^1Cev+0_~Qmi?~M_`G$Fq2I4#`JZ$~(9t>V-~H^2bocUKKbXA> z>P6ggo8Z_5>(7_m(zZbtcx7|@m(#Nge4a0(8CViRg@7QEJwOt+k4GMR~7r0hgS+ z;@ym+H-fG6BKLH>li_<%SG?(4{>SM5x?+_*Ety27o`jqfwoc16jc*C}#X=TUyW zxnl2>>s>J;k8i%zZ@Z#rzJY}Yru2f_jJC(0<@3UZM@=)dtKx<6W%j?^)zmugvT_zb z2Olrwh*}obua6g!dEZEJVS*R3ZO`FYJjM%IYwW((YnK;xH7}d);5jeU&vIdZ%Ew;# z*)8MSCO^FJ^m4QLqq2IV{_ao|=;Bk8=m$ln`!1=$1O*rL)S{o8R2Hx{Q-#FLlE}yOQRL|}3%$&g&b>=Q_c&msn za;+KXzPyGnMs&K@Kgi7&S&tRlSHj;Hg>RnEdAGkW0$X$&F=MhX#zc4cjpe>rk*DnF z*Smf3@wRWS8Rvb`@N(a^RUi9e&X(5=&VRSgh5hY%HNZMoc3Z}j0bfdV!;}wQN~>xMG(W1~LDc7yHY+VS1@b;I=Y zjcsQycEgMAzbjOJ+70`2`5v2MotOK%_|JKt()wY{yi&UsTj%P&dH=0WlR|#zS!7Si zS7rRrXw1f5ldJh*@0%h;E7bGD+$o(Zoo;5G8>_6pm%HSR zE?fO@zJo)W?r8t8s=G_J?)d(CTURgZ9PKL$E)E`8vO7vQdb)mQrS4d>x!s$!&fRgc zT%S6J8g<8uzH4S*Y-OE0e!A_CyPn-q_5Ru5m)5!7e$NKo{utgJ#U}0V_^oeutp5D* z%8y~)vE%qKk00Z^<7&ZU*S=Wihi{x+()0bI?$$YhDX%_VWt|6p=%{flPdk6C{%oy*K+7rNt@bI;e~Z(8SjM~-l|J?f6uWiAhB{l@w_BG0X^@YOoM z{Lu9iX_EzDLZL2K?xzpHhja(d?#LN{DkDNSjkV5Mua)A|ppIn%@OX-Ag<@5$bJmwP zKlZYYb)I|u2H5NxfSONcE$P)d0F7sDyIZAm0Aenr{r$#208JJo`@S+F0Plxni1)J2 ziSIOIR#cYZ0T@s`LzYA118{ce-Jany12D7T(6u=i1t3fIF1z-ww9aq;@Nkaz<^aT9 z9pCi#o&cQh5_e+$5$o4uzU8WR&N`32b!_ER*8sg%v ziPpLDd0q`j_B#Nn7p@vKHgzB}xzDVhK5HNb^)GRJyh9-7J&(_rx_BU*zGcrotb8CI zNBLg)R6P*&-dAcDTt5(n9Dk3$)+`VYVj2u;*e(z&J^B<~*EJ9mPh=mOH82n#lh2*f z%NB@T3x>3f?;nW%8|xn{KOzt(?t48SH6aiK{o3xiIWrKqo=4XxwU^-Nc9+Jo@*T$z102L$14&go^Yjj;ayrc3!ROb9}Fl|eI)&I|$% zsl9wfLA21bf`~!Y3aEAzLH2KGCm(aLLE1Zs_MAbQ|D0(CJSQyvF7z{VR1a7Ur(z z8kZ#)evO?k4bK~lX@~cnty?r0pRcv4_SG>MJ-bd#xuI$>a4>Uy-#Wpllsx!BrpCdD zKUn$YZnt0@E|RKKH;-W4e(|4UN}pi#?pfV?MNlv%tT_Imfjt=6Q=fZsvwtv3ZhBnP zK0FxCt=B&NH!c{y<@ddxGCkOOzwYSZ5FL!Zt7~Lix-1xDkKZj(d|fcQ6=^kP*|uN= zzc1=mXn!!ir2XSH=cx7XUKx2P{kdSI?bxo@;H$xSRVGWH=XZiJbcENDwoijmpu%0B zU2mRmGWxLwir%DKpRP^#%<{X0fPK#GPL<)MW9iFzfGq`|X;mcL+jTmnvRoa0mhy+MK+jLQu2nm;r+)hT!18 z0&i!}3_--~M>E$i2*I%Y6GILy4}p`{v9R;&LXiAWK zDo+0yf@{7dFZN9liuD6qP3xE;6i!*2MOMoZid`!&1ZK=1iWt8o10EC$#n#llS8OdC zit4{pKOa^#6jj{wHf&xy6f0H)Y{}d(6kA%Yb-LI*6jy4kK0Uc@DDr$O*sE#hP`JgN zas1uQ`g@_h-fs*E#o@@yN4n#kF3kqYEq!#l=GR)@_Up#icZ}>9Qddjco639^W2{oi%qRy6q1|u6J89 zT{seo8%NibYIPJKK3$zRqz=RM&lz*1$sC5#HTK{0$`yvu)0`J?ED(mo)E!&> zDjtT@jUK&nEfl_A;l3|_FBMiYUzpZZ6EDYY^4vz-34#VH# z%TulG7>0fa!n0iW4#OD77JvT+gkg7z+*e9Ogkk*jRg+wMhau+h_0s->!tkx~@D+nb zgdtne!O5nM3qz5S%j+(g8ix9BuXwJT6NUwAU%78v6o%MUM~m)S5r%pr>R#BnE(|Y* zI(6K-H4Hyyj@z+jPZ;8S9bPYt3&Y+DC%#QQ5e9zlmC)~e7@WQSO!dARhPqo@=5260 z4Dp}q_A2x!4CycJUij@r7#c2FI_LcRFf{6(;Is5=82ZMy{1o{o3>jM9@~D|A98UM_ zBY$NG2U>m@a3FiQbxv;6T7w+It@E_K4^=G^j;t>EGCeC5j%u01ip;GLjt;Rkzcq9U zNB8TtnJ;UHW2@t@_mdHhqVZ?5RA?5CR$I@%J>edXU4HK;`FMmQv3SuJ@4JTM#+x?D zhxvzNWk8SXX+y(N^=^;gDfVzU_%+^=rC&H6thlpn(h%!;vsbpIiVDZ8!ee#d3FR`aB#nf-Y?8_ck0k>s(tA^C=uFT9vDJ@<%wn|GhBi<-c%r3pw67 zZJG!?Y@02iXr>5+x@`YZBS!?@du`j>)FA?^7Ugj0P&fhw7ANHNDj9)*ZJ9UtmWzPv z^PTs7szkv1cf!WbH6ze0G%9zSx)C_jX;1EkjUw=K1O?Z*H3}dgRI9*uKfcdtj9%T9jf(;z__?mEr0iq!1C|{ znU4Gyf#5aMyhcSuV3jh4o{vs--)o^w?p%7dKiHN8K0dg{5%4c zN7nl>@l6CyZyxG-V>O)Mw8RmkN<^ z+YnjRRy7hoXJxz5H&fF_i(@12ip6ps-w@8$}x^rc9 zYeF&bmDi&t9V5|iThWQ_yGEi$DW^qUyG3H*k0W_~10&HlHra3Qut+TFT&Q^`dn8Jx zb^Fz-PbB=i9mrLGU?fUhjGa|(Xe7=>ISeKGX3^?G&Bu(7~} zNc_G3@6?XVk=VNEtV@dte$J~Wk$5m|ws+*qNCcgZ z>i_a>B*tWX_{cvo60@3pjk)$U6056Z*y8#t68l_&vTpttiDOIK9?F%)y=U^-aN=>+TDc0_@On_?f1QilFsZ+5 z_UO_!9Dlwf@@hF7E-#suEn{UHDpd*nUDwHm&7THW4zFcHOsWEFXS&$%py8s>T@7sb zzZ7GbJxm+{1dFUe|_{?QDa6{Ojx$ zylptxX7P)%el~2M)Z}0BKpV~!x~5O&b8t1wuX5wMB8xe=Es=fi)~0{+vs0mnGN;Y-syBT)`o^3T90yXu%V7~t$v#~+pN!ZI~UjO*7wmq(dp_g8;(96;LDv zGz&Rw!-n;BQaw3l!{QOoK6st7;nRrCnJ%8SzVG{KI@P;qL;bnF7gt@jp=e0iei^UZ z(Bt;4W)TTCG4k27O8&}vJ^bgL za(!#VrsqRWM18Qqf6%`-`#)LFyJnHghp*Q68-HPIk)PJjGe?d#E&tf?*z0kQp2_T( zhrITIOuW#(V*3f?cfV zubgsJsrq*87`~&x1K6=QXPWpqjqTWSXx!4KP3;(4_{@aF=60N0=sPvq&5ro68yj3& z+p%Ws$tO44+R<|Vks7@^*s)-t&(c($b_^U_vDmE6cHCTfYF|Mw>(9SC9sI{v?uxF(8{41Ai-eb2T zN3v#_^YpS~_QRvY?0xL0Ty00nBmJz`Y31&P*#_EiZ@;~1*THtQ=irn}|Fh%hnW2~O z4YMQhQ2y=tM%r<_)tA^dqpaWmuyyr_G1l{c{IYMuI6ImIhupg|!Hy1>fF%THmKj$5rL0+cC3Y`m_yZ+Ht=?jsEVl?dY~{)F;omcG#k0hI!4m!?C+_Uatjq z3~2fNK*vRP6b+i%!)=N6_h+oFR5!+sLPLN2D6`ypU1KU;$`WfwqsBkCe^_b#y92W< zKfl_J=wgKzu3T%!@Hcms3|w!$J|6!zG~H;&wdHk=XWeYK^k=TmuWYe{d9LM{wat!O z@ynaJ@34M8(ZORv?zJOL^WD8t?YASh+x+;I2khAJAa|`s zhpgZ4@-{Xh&W=)-@8pX-Y{#=&E9U$-Vn<5XWDZfs>?l5LM@;GycHDLuX$}1CI2q%3 z?9VCdeY3>o+xv_ir$6WX`|zwCfmI(YZ*|^|7F*`E+IGQ?r3;h&$`NnJk=GA5+AmqJ zZ%E3Z{dGIs4<8A6cf*b=@4i&2kYLBdJC1(> zZ&}a#)$!c?+t&M_|FOjhftv)+#tcUGV9+v71lRY!CEwd2RL7<*^yap}!@dFEM<+pJY%y!H6?hKEn;f7a`gE&cE6*5knGbLVwS z`u{#(E03`r@2@O=e5Lj1{U~>*!`9=)?Ps6fupVuF(d(u4_|Co8k1y8aq}txY{`~(V z-|Mf_u78g4`uFIo{|+DNzsoiHJRG9W%QgCS@P~d~+^t_HSLoNxzxsV}gnnP_tluXq z>i10teI2+`Ul+#f>%?1u-8o8s4y>g=7bfb@iH`bnV~qYB zY15x8KkLt#xAo`FZ2CUn5q)2HCNa^?k(zeV_4xzVBE_--pbr?@I>j z`;@!&ean6NK4v+6UvrfcCy$>a>jv-Wb%gu$ zy23!c&TzP1clb=NLtL)cB|g#X6o2S-i_q&Bi|cibsh#CIM_0Y>v7}xHc}}m3tf|*Y zmeK1bOX+o#;d))=ZN1L&w_bPoNUy`JsMlqF)9W-Z=yjXR^*YW&dR^ykz0Na4ulu~E z_W?H6`vMd7KEY;s-{2CxkFbs2S2#!SGaRe;9i}TN_aW}r`x3wEeTrN4zQv(>AG17u za$jS?M7hs#nBMpJQSXB+5-0aXzSsLChwFWl84t*Pluz`&N*}$?@`&Dd*--Dpys!6V zhUk5oUG%=q2YMgpF1@d__!+s+^N!y4nex4?1DJ7@tP8kK*9knY>jul8CF=;@)pZ3^ zh08jF$rs7GgZp(I!sog!;Rju(@RhDx7^UkNKGt;&H|jcvcXi#v1G*041zi{MfUc9+ zMAuC$lR?%|%o-r;Dn{u#ipGCdyk%X;GrCTso30!AM%R&Crt3<+({&~jblqv?Mr9q!1-dR}wIZ@k9jHQ;!K8+49WZ%Yz zx{o6U%f5~Up2$9rKDzH?g6;!ZIaKzA+^G9RR`-;BBMZdHK9V`=%D$5Sbf3vLy6@y& z-G}m!?n_yFy6jUKtNT{o(tRw8r;vRuGcA^VF1tLCeJ^k7KA6q_lYKFro5((yZ*OP+Hbze`9VzSTYMcwza z(kPh&aE#6ccueO69H(;wChsD11m4uS0{`ipfeUo*z*{&czQp_u@^R zgE3Ep%*FUa=VZL0b2Hx1IU29)T#fY(%AAeYb?(LuI)~$Joy)PuCYjR_on>yvgF46K z6`kvGzs~u1Tjze9sdGRUUMzD#hI-4KkPmfk$gb^Vj>wxjS7h&hGG}BVcbPkKiq0XK zDOl!`Y*t+6l&sue=9WCGb4+F(BXdn|(>W*8Cdk~A7jzEFtcfxg#S$Unz@p)C}`rM^+ey-8EKc`m_4!}A`gbT354B-T9pHjF1 ziDV&1MqJ>*9vaxUs&PyX)gJq`+=ioWz z9<2FAI0#eq6)wVI|Adp!Hd(j{Un)mo$s@v5Sa-f~7N$ER+=Wk-!*J{|;W9j~oQ5H_ zgxm0oavY9MD_n=83Jd4q#NNVvSSD0B5Z9&?F2qFTM6AC`xDmfAN8*1r;Y$3doQdfv z+=0q;dWfuLO33;D%WFLZ{d9G zP(ZjJ8_f|8$l1vXCUHS#ttOn1^%e;?WTQ615xL~Ma7F%5&d4{)9eH-Aa7gxSEL@U* zlv8qBXW^ENtt1?i(RSgQJmxB#lQRYi_oO{iI4EZq5-!S1C4`f*4y@V_C)=S~cJX}<`Gvf~lhi2sz!ll{hkZ@}D^%8E) z@7IN6bM6u0+6-|O&du07!o3+ZPB=Kj1_~GFJzwGEEYw)IIsc<@bf!-&T%8>*31?@O zfx_MS-#y{*d^T9PJU4d~PH&y7B;1}i4+_U;R8`^nT)9~|KcD6j?$7KOBnQBkHzXIp zhleC5z~@UOH^5RQBuBtwVZIg6_@txcK3H_QA z6|R{oITmJaE4dctS}r*k7V(nY3v*nT91I;2B^Seh9Fmi<{K%4nhQY{}_x?o-L_Sjj=j@o?h`$@Q?=G|BmJQA)}EaPCOS z0nsyq*IRd?dLowq7PVE^a*`xh@U~lbjdFJ4o(} z@wX%gM#svM3*+~Uk`v>fdy*StiYbyKd!CkD9CJHMPL7k4A56;4@x7(EaG&J%*!zU!_?R!RAdE>U^KzZ(@El-2wV%a2Aa=H4i|TJCj|oGtV0liV%qI7<$fFOEqrmpKYaPM3A}OK#U%w@Qwee*z@e zOV=Ed^JQEs$^9~aZOH+%@NUTkGrOPUgjss5=xR$x$=>o#d+N?k72G#ypeUHA4nS4x7t%NG_Y}UQ14!>vKtNn}04zj+--k zNUodR9!budaVI7B%{zgT182Tfk_+d+!jco`pEQyiXTkcCBWM0*k}GH57Lqe(>ui!c z=lS%KL+6;Ll1t~Kfs#|_*w2z%=Z=k%W9MFH$+ffPY00@Wv8v?W+3T_7;92&K1b{diGD=Bq>)`-Lw8u$>H27{~VP~dH{UULwW&pOm#J>C%_sLq&L7k?$RS*+se`_plgiu z3^*somef1o6iN?){}qv50*gmTPl1{5OK*Wc8cUCX_1;Ubfn|omG?E?$Z{Lt!2Ft#Zo(9L% zm)-_z6p|hXYqgVJ2UnMoo(Bu`klqK=4UirPOJZx$oCF!luH%0NJ9t*Q=m0k<0ewUsLw}eUW zg~3^*2gCkB(u?870O`r_L2v2Juw5_d(J;eS>D5^G3+dT#{SfKh@Y8eY;V^Y4>E*DG zhxBxqa9esibnYxY9(t~jUJnbTo}1M3;n!-?`(dp%(gU(Q@X`z7f{)S@V%oFP8)Ads z(j(&aZ_+E`>=cnnJtI0-lim@_MM@8eO#-Et#0d+fr^LIy(p%!08&weg7ny!?!5Hc zI6j~B+*mbSdT)$KyCbOwN5^Z@i{rd@(v#zhS<;*1rV%1W=19uuVJ$bWsM_sA4wr3cAU9@2|s!#vWHpgg-! zdZAo3S9+qH;3d6L#(7GQl+#yAuas+YMkMu2`JcnCq~0m_U6mdx*JSOO)Jx^e>e5qX z<+jpWW%?|+l6tI`Z%=xyELv82u5@}Jy;uHtE z;G@jc zR7>xdE#ssI%$7~17i_J|q$kXXVCfBWrMvWqiTlzk=9SsfGp1v-^p2VLsPvH8Y`XN4 z`MXHnq@FS#R-B*ITju3Vm6CeQT(wMk&HU*jJ!k%`BfV#q-yuC{Iv~b-r_Gstq_@q1Vabzv z-0VN?NK&tx4#@{5^}Kofj`Y4+V^&;J51hYT+9mbE*)#d(q@H-3f40?0z45qjN2Vn8 z$m2#IIG@xjkNY&^R#MMA?*I6?;pQ;h9EO|2aB~=L4#Ul1xH$|rhvDWh+#H6R!*FvL zZVtoEVYoRAH%F|=6Bup|!_8s1ISe;PUXxES+#H6R!*FvLZVtoEVYoRAH^(QFk1*UE zhMU81a~N(8!_8s1ISe<4;pQ;h9EO|2aB~=L4#Ul1xH$|rhvDWh+#H6R!*FvLZVtoE zVYoRAH^)koPchsahMU81a~N(8!_8s1Ilh}bjN#@m+#H6R!*FvLZVtoEVYoRAH;3Wo zFx(u5o5OH(7;X;3&0)AX3^zwA<>qK?@ZVtoE zVYoRAH;3WoFx(u5o1?IDa~N(8!_8s1ISe<4;pQ;h9EO`)c^S>K8Ey{4&0)AX3^#}2 z<}lnGhMU81a~N)J!yEVxH;-7H;3WoRxVxp zE4NIa#c*>pP;L&x&2icEVGK9NEz_4V+#H3Jno1>s|a~N(8 z!_CoDxj8B+H;3Wo$fDdFhMU81bDTH*A;Zn_*7S=EH^&mwKQi3h>ho(q$#8QRZjLbJ z<}lnGhMU81a~N)p(#p-zMY%Z)H;1!wb6ha}D#OiTxH+DhKGqG>&)Q}BTC+`m%W!iT zZjKYC@3q(TzYI6G)-Bo(Gu#|!O@C~*>63XWH^*tyH#=_nXRVc+!*Fx7R&EZ%&0)AX z3^zwD<>siQ+#FX-A8x1V$E`MfxoOJHQCqn=iYqsV;pQ;h966Mm!*FvLZjRK-&0)AX zoRyoyaC1Z`H^*G%<}lnGXH8$waC4+oZVtoEVYoS7nEqi2<>qivZVtoEVYoRAH^(v4 zZwyv$4#UkcO1U|rl$*nFbCgzYjy1~7t=_cuD-ActH`Bi~+#DZFKQo#tlS(gO@GyJ zb7W9%j>o3&YPdPBm_BS8<>qLw+#C&+o5OH(WKnJo!_8s1ITkB7hvDXUZTh-~o1=$v za~N)pt;)?|xH;x4H^))s=9sSB95&_Vn5Ent@ygB7Lb*9wC^ttM<>m-eZjKwu&0)AX z3^&J9<>u(D+#Kzco5OH(7;X-ma&vT4ZjLI-%~43XISe<4;pQ;h90|(JLFMMSsN5Wt zl$)cWa&z=iZVtoEF-N&M3^%v@9NHHTRBjH#&2d+`ISMK_hvDW(r`#Ndo1?OFa~N(8 z!_8s1Ic&y&GACHIUXoChvDWh+#E-hn`5JLb97Q}jv>m; z@l?4vDk?X}Naf}TP;QPM%FV6!v-$zXDmOnZn+#D5^o1?9Aa~N)pp32Q}N4YtQ zDmRDW=Gd&<9DkIX!*FwaRBn!n%FS_7xj7yyH;3WoFx(u&m7Alqa&s7NjyuZDLFMM~ zP;L%)<>oNl9Kp)X;ilXitCgF>aB~=LZuQ{R7m;1LIr1tuM|b7sc&^+W#g&`mqH=R= zQErZw%FVG%xjB9-H^(yN=9r`099@)~V}o*YG*xbnh04t_N4YsVDmTYR<>siS+#Kzc zn`5tXb5OZCLY14NfO2!#m7C+5a&tr|H^&;~<|wY*94(cbqr7r+6j5%D1p|o<>n}-+#G9^o5NGNISe<)4dv!=S8k3i%FQuYxjDuuH^)Wg<|w1w z9N(0iZxysFPMY%b$DK|%qa&t^pZjN@!%@M8K9EO`CTDdt4H%A%e=BTIK z9EO`CmvVDVQf`iS%FS^_xjB+4H%CR~=Gd*=96rj;VYoS<+#J1>o5OH(99M3RW6I5O zQ@J_5C^yG1<>m-eZjNHg&5=jBIWj9ZM+fER=&#%y$(5Up}F<>v5IZVtoEQD3<^-Y7T6Qsw6G zP;PGZOVy8*Pq{g+D>ug(<>siT+#FYwo8z}~b97a14j1L-NUq!*la-ren{sokP;L${ z<>tt)+#E5=&GALKIii%CV}){aWL0hsSLNpTq}&{K<>tt#+#I`=ns|b7WO+j*`mF@l?4vmMAyJapmR+R&I_d z%FVG=xj7t^o1>+2bM#Sej!VkTkzctvo+~#;QRU|7rraFf%FWSLxjDuvH%F*)bGRut z#}eh{2vTm2rOM5*M!7lGDmTY3<>r{K+#Ej2&2dnqLm+#F|>n`4x6b39OPj?v1^u}!%-b}KhWbLHmvpxhiil$)cBa&rt)ZVo5q z=6I{z9Q~A=qpEUqj8$%qy2{OQPq{hDDK|&Ba&tUXZVpG~=2)oQ9D9_TW2AC(JX3Ct z(#p-@q}&|2l$)cqa&t6NZjM>X%`r*2IR+~?M^WYG$f(>L-;|rfMY%ajDL03=a&t6O zZVsDrbKF#Jj)BU}F4K99xx}qpEUq3{-B8v&zlkr`#N+l$)cM za&sJ0ZjRx~%@L#A9K)2GW4Lm2Tvu+6ddkhM*IWIm*_E3kuX1x-P;L&pa&yZ+s6N(6 z<>nZn+#J5j&2d+`Ioy?-qn2`WZ6TRZjRx~&5=yGIZ`M$$2{fcmWM}uw|~B>|F)}gbDULfj$F#k(LlL5Je8Xx zzjAZzP;QR?%FQuGxjE)5H^+MA=Gdv+9NmvV7 zsQ%!h%FR(%xjDWmH%DLP=E$ww9DjV&Pwb`K9CMYMql|KM{3$Qo9PgByBcF0}bW(1P zCCbfVS8k44%FS_9xjB|7H^)fj=Gdd$9OIRnW2tg;^igh(t;)@@RJl1ODmO=I<>pAH z+#CtY&5>8RIm#(Fw?4n>k1nd*9P5>vqoQ(iv{Y`6{L0NSMY%byDL2On<>qLn+#Kta zo1>_5b2unB$13IKxS-q|HCwsLdSR&I_U<>v5GZjM>X%~3_UISwl~M_%RTNTb{w zHIuhs<>r{9+#D~Jo8yIYbL3ZUj?&7_5v$xB2bG(nrE+r=P;QP1%FVG% zxjCrZ93_;SW1w<#^ipn){}FZGaW($$A4ef8D`aKMUdg6cq)<}P-s_xWWN%WE88SXr zh{#Cx%BWn*4%u1RdvCJ(-mdHYd;I>oA4aFn>74t1zpv-(`MN!Xo5M=DIj$CAZjKn? z=J>FLxjE8=o8ws#=H@ne<(Zq?3>R*0Gv+9BbDP|F=H@o@9&u0mvCCoH(|*jN8uzpx zn-j)8?Z;NQb5HxRiaPFTC&vu#X{Y=W!t2{K=bm<2e3*OMY35({ePRy4)!r^I>Pnc6&@(OdC zNPeN?Fv&B7=5bFujs3wr?b`iGxu>1(_(&dN`vS>FWQIy!Vo0FmCvK%ko}!1jBl_D(=_QO`I^s=yiLWalE3LV zUGg~FS4ckRX}aWfs&0||&ZX0m=lRcB@;!r_OWtR4Malncnk0Fks+%Mqba$QPg{JkA z{7^z?$rE)bEcLIaosN8zyiw6ol0SN8FL|UBH6@>PTrYX0s#7Ju6i`d@OgEz>-<0Vl zd8gPk$v-viBYCLkYLbtduvhX@;q@dxHSne6sd|@_d{u0D$y>ep#69g~*-i3T6+d%N zJ3Zehd98IplHY2bC3&u^FD2jQ6C-)A;m0Nab;lriuv@1kALf%Td9gnGB|nz8Q}SdN zx=X$+YnJ5A#@I>z%;=2d(fa)4o^~qlFL^aXS;?=xI3{_vpE;6mvuGfBxAvZre><5V zdAL4Vl8+nOTk>+Ako;WXSjp4*IZ3`QJx}s>C9g>Su2_=f@z!`qKCjJQ$?N6Rll<$THeO&BWqzhiGD4;Zmu@`3fuB`+AzO!9+g4@#bJqMhUm+f|di;ej@i zKm6e;dBpL*xu=~*jFG%z(+tTkc2AZ(WGS$!m*8Ph`Ynp^&IPdhzcBYDnKu9ELG zT$j9OF=xqtE_0DQXzWADhjtq$dC|)sBtN=#o8(EK43T{4*kO`4?ddQ1)3Sk*NBvV$ z@~M47C9it!qvTgpwn?7#$1m<_Czl+_yG|T0`PV;JB@cVUO7gMAf+R0%xmNPC9a1Gv zYjjHTwXZfw-ga=bYeSn|S_r6oVSaFXPSt)eAg+~l+5jpw$K{BfPCl1KhoMe@lN8%SRH_EE_% ze|#Z%=AGRo-<*9@^3J!yB>&vLy5ynljz~V*IYIK$e^yC;x=d5aQ(v{0eD$Xo$y-0u zUbuhx>#c(&kKMDhGURr;i0 z^6kFwB=3G`wB+CYAbI#?Bgw~GmX^G{b1%uye}Uxb3pz@^{!S6e+k2Qx{{F{0$>XO7 zNIrl4amnlVyes+r@q;DL|1d}L{fkW{@4w`!M*M}d!^CG8HcI>kyHN2RD(8v+u)|Dz zh`4IvM})_VFLC05_!EhZ#HV=PQv3?bXz?v7`-p#0e~%B%gG4wUv9XF53^^v_%V&Qi7yk9A^uFv zIq_*4{U?4+;U@8I2D^)Y^W(VqI3;d~pVQYte4W87#NU~1CO*%#TjKZBza+lTxSitv zEcwYj?X;+r_(4O8h%dD8n)pMboWv(GDeVRL+tyP++_$E$Kv{JaZQ z#MjHxiNE(FTYSD{iQ@OweIUNy=~v?aZCE8f;1`G=IDV)2g3FqUKe&I4_=FSAh+p_8 zUwp$BPsKlcGgo}XQJ=+6oOVKd#l)K8FHTr0KI7k>;x``85Z|$dnfQ;Vu8I#iwxsxx z$2*EIS!1a9lV**@r`$1A{L1(Y@hu0`69004N%1kiOcOuzR}t|wx6BuRvs{w+oJYHh z-&ycTe9sa~#QzMwAUVtG6kpbQocObD&%~#F z_f`DbwbRA7{qa`(+q}l&Q2!(U#BPh4b{_{BH!#5X>0L;T~C#^NJy9wvTr`4sV$x8;k!{QHRb z%pW4fZ!Z5qeCMNj@t?<@5g)qD4Dq91EE8YaW`X$A9y7$JK2%ry>M3i)w;rD^{&m!K z@v*n&h@TxSaEBgCigutEI#V@BfJU*0bM{WB-=@yj$5Kfh5u z@%8I%7JuLBg!uerEX41x{7!uTq!Qx)ceo;b0Q(1WPdhDdEPVmZqNG3IbTjD_D6>fV z1rt}fC8zTJ#9^<92Ag-tM7laIxK7-*cq~BnQhx8qs_2!;->Sil_ z2rKtVKf;mE+|y2H9&k@P4gV&63TFMKU!i=0^esGUE&U6F|8h?|Rb49m3{9&`U&B3b z>2KJc&OPlk&O!PeG83im;dycCfA9{JK8VvTxTl?b;-xR*g@g1*v`Ujci6Zx;Ut+qy z^i6n9kp7AL<+!JvLXxGQ!YNStD*TP5zv979?rEodNA77SmkrW);pZs*7f~Ig4ro_1=NEPWf#3Sa;0X{U81q>sZwC;c2TBc-onYAxyS zm{wf+JU$HNo^}egmcEayH{8=sGqa=*UHQ`NrG zk5X3AT>R%!0V@YWx{VZ7)+|y21qPVA>KD_3h zcIv-X`dvIWN#DzdY24FJYoQJJ`eGuQOMlGR&(bIJ)|-3U>C-OmX{VW= zrGMsFF88$4_ch$pPCtUUr=6PRN`KAqKGJ9N>Mr-R(~myf(@sl&NdL|A;@s0tXF79F zJH08xJ?&I}qx9!kT<4y48g425I`=PfPdk;_%{}cjE>QY-_STbro>i}xKg=AL#Mnq`GoSeW!7J@3Rl z?KHtr`jRgEk^ZC(I__zwv;oqugf86EPG^0je<^yk^f7&1%{}eZV-NSVQ{89W(@vd# zaZfun)N@ZeZS|18r`y}5|Hz6T*m6%hxzymEb_)B!J?&(g z%02Dmb%cA`DM>H=StoW#pH_EU?rA5dMcmU)7TMg>PVbLOA6L6-+|y3Gn@eBUzS7d) z)g+pG+9|7&^n2Ac=AL%?C)E3kdXPX|zJ?&IN zdfLgUHutoXLoD~SQ=M+y(@vhRxu>0;f0sTuzuDZ=PJgCJU)=K<(jV9A7x%Q&&r;Ga zw|yD+v}?Y$^v{)+o_1Oj%suT?M|#@n%4+Gads#&K>^64do^~4EihJ6rxb(DB+!^j^ zr_|Ei(@sb2xu=~jwdS67delYw^xh>(zn+Qov{Q^ZdjwQMdfI7EH21Vq2Lt!C)7MAR z-&a$5+9_ik_q5aZXVUj)EIsWM+?spZ>G3D&2fS{?J?&IYdfGL=Uit)QF65qevTMyf z?X1n4X($h|~F5{kdnxf;LcFMWUJ?*r<7x%Q&y~EtoPR`QPPKT;OsQ%AuCAg=ZTC0B05~?rsuod^TlfCq`Q;_tuQ&d&%X{R6Ho^~pu`bdAJ zb5A?fR(+-K3w!_TX{W}j&-7F)?rEpis_(Re>OXC*`cREkKdPhjw3CbUv{O^nr+VRt z^sClZeXGA_a!)(?OHVs_NKZSpQGKlwrKg=tRiA5T)$h9h0r#|1)&cHmr*5hbc737! zzn*rguliy$+j37k*{eR;5z^C6PmXa1n6mDcsXeWmJFe>0s_@r)sKSm%_NGorbIaU7E^0?c}BU zd7t;>o_6Y_`g@`Jd>g5L-+`*{H&XTg?tjBQ?KDL71J6`_!Ftsn{5_p}+G*b)?rEok z4&2jDr}}YEI|Zmd;zM5C(@r-pb5A=ZNKZQ*>BT+mbSsj3+G(lkJC0KQ$2O`DIac)} z*HL}R#Z`Z@pXyVNR{hEqRp0W@4cyaClT;sbbJfpWLG?ASQ2ouDRiAT`>USQm`kvRS z{^w?@5BmH;?rEnx?YXC&d{uw6iRzQ~R{hd*RNwS!)jvH%^-(9Qe(IY`xTl?_sQ&6V zMYyM(rm24GsjBa~rRu-F_mF$q>G?74X{S`xm%T~#XB$+Xc8coP?xFg&Emi;af2xoB zNhtTU(=OH5eNOdv_f~!0lT^RAvFiKIRsG*)st-Iw^@Fccec=TSxTl@WRiF5m>D<#! z&n=~IJWchFFHn8tMO8n!x#}yoQ~l);s?Yqb>Nj7i`p&ni{_{7g4}Fd5M<1#B(i2sG z`fb&x?xp(Gb5!5@5Y@l_M)k4Jlb&{JobmjijnOrm+oN`x_b_^5Gjq@Q>bH#F*{msd zZe2&CFE*zq>&F)w71+$^JJB}V_^(axrytCZ#}q|oncnHOjf~NyMvDd$W|Y7o^BT|2 z8F%@B6cGbj$tV%HZTF~lXF*Bsa z{@r@9XBBibezNy*OjXo!d}01Is~Qqd_uW#=s5*>hJ2WfXs|J2|uQ$BnjG8FzTFs_X zb}d}LJ7ln_kp<>w`X4Uds}AZrulh5^wl21hUmiL7VO<1IKhsk;y&f`3x>+l!pm!6Cd;E6 z<4Du2-NWiyV(hyUt8K^_0{oe{ko=TUUGPTs7*6W8(4lx z{rk<3(PF^6yVIKE%UJK5ODtNT%PF4@c9|`3Z+!H-5B@E&a_x_2EB~~_{wkk}cU#*E zJ!hg#9y)2wFPv|SCbL$rn^mhFGWQj2)_qtzRDE;u@Q0)AV0y>6XHpp}yiU1uz}eRd z!;2bB3bt9{O_?(-*8j9Z@Pryw?fSLH%n8%do~&w*N2eg5tJ&Ea<$etu zx_6E>PMO*c>wVK2hi*Q8a?P>>j^7SA6EvX%Oq*XX_41TT| z5%H-rrVl;P5z9Wh9(iKi3H9Dxt>81L6CU`rnV7S&6N1+)eB9}CC)C(o)qX?I&RE#< z(I$IUGOTt!UT)xE~r}b)|=6}UC=-7Y}ss!u1H&Ndd_rs zSD0MBUdKq z$={P!cE?7)5?9VV?~dLF6K=ff&;x-BhW;oys|So8?r2u`dJim_x+2J`p$)DS1T3%} zV}rk0U6cD|**y7-w z9$Vi&v_+ea<$gPs>WM$YJBM#+(-RJTboqszJ@KPx#{l=Jo;c$^;Nh0dJ<(&*z@YCJ zdTQSHi)+2U_C)mfy`2`+>V<=?y=GqR)l2i2qV`uE+6&o6xyL+~^un$p@76Cp+zU31 zVqGsh=!JRPI_DUf*kP}8TFH*B?eNKca}m9V9oEI|-nBH+4jp<$n`R{2!P}dvKF+bj zo%Xe|ihs7liPJWv8`bCypGA2uVA~t@6Bc=T8+zl#G;^2X@x5_UU;BL2!QQYmbw0Tu zzc((Wdt0wGw#O5f4^`GRx5u+CSwS1z?2#Q6U4FwPdt5tww`Ssc?eDA4jaq)%9$gKc z+Q+@K$I{}7R#U4upw*j*34^u!x##ZoD{u>Sz_}T9_H~-)fS+xLCDz#EfJ==E_W#Ip zfQKRS!v)`CLm|QR6idjM*>>83~xI=wVVQlBW zYoGT)`@=`(`)AGWU3%-5valy^psF=QpOMPV2Dy1(jIc%$VGq*1; zUVrx~@>^ecj~kg(r*=P7{PMnPMlbFD?iXA2_ZZR-ac$mrf4!(5625lIa^xb7#e5tD=YTkHsx!goYyz0BDWvq7pce+)%(zg?i zm|5=o#L(A{C}nBxcfO(%e%H4>(590UJ{|5hZBc*|h6Uf){W{hO=bUca_e^zy*YGM` z{=4i1hl%d755GI%K)#_)GmHL6zG_i?xLtpgbaQCEV@QAOHQTr1`J(>Nud(V>JFP#i zwq9M@Iln*V-c2`|Y~&2%iNjhXHFd_0_0vXV4{*k%%riL;#yKOYc)hL#tDVtxY(QGs zEN85{;nk()3uo*)^&+F8=>W9d@w{u(_5*M^tM$$%J_As>;u_Ni(E|`P#>CTn^8ox> z;X2*q`~Va!>OTAP#{t+MGjY$GGA<}I6f2o;;exi-osOSt>w;qLrSlJH_l?)KkDiI1 zE_fg2&@y(23nE>X`RXHGuwZuY`woj-kekr&K%ETgS{5g>_RFy=v@=X1SZ<_I7qfk0whpCTRDQ z&$A3~&?V3ne%-4cDH!F7X-;dW9gKCwo*kbeMy}BAJKw7OOv`QB*H?N&chX(qW;VlO zL9Q$6hh9wR`p6Y^x14GB{EI907Y=(IU(yW|jMGxAYq(+G$qg|#Te#u=`4&Sb+PJ}@ zwp&mY?LPAdtttfW3UfoeNqCt31ntkJ10rtEb;HH>7sd}=Pq+A)8(vO**SoTI-}yP+UsYaGW*|noMPDdqF%XF>_l=mMqX=RlO%Q5ZbjeIQDu)!m-29|#)q{z~7;1CiHs)YZN72g3Vi>Na!jKJ+c~H@Q#Q zGZ0Ja>n`8U9*BghUutx`F%X+lJzFn&F%bD)tI9n4IS{*QWNq(MZV(*C+$le&&LET; z`o8V8wu4Y%u}Ov6+I{Jhezn~a;xP!j`b_weY#4-oiBG;fo;(N*Q)g|evtSU6w+u1z zS~mzi2PT$TuxAi@|7v|SGkXxej%`)`?e#(ERxicaT)R*Gq&K@(+WZ^@qX7fYgqC&3 zivG!qVlCW}KWYEFq&Duz`?T!-(Vp%I4)+bZGRPe%WzB~_)wv^i@BQLmC%Pkk_o;?O zaC;kY{vko^u*?f&(z^yTeJJ#~k#cce>^@9uDX zwl(*&i3du4-j?~eh6jAUuc>jVg$GI(u6%H)hX)+D9WIyX;(<=BYOIS2@qn}Yjm7?B zJ@7E9^y7}RJg_wRYP{)6?LPM|1C~8Z@j$zj)gN|i_qDG-BrkF51rIcOQE#o?eGlj= ztbSqg(F4r~hfX_N%o9$P*7(jc^F-=NU8GH8Pi)S6`ru1PPb}`(ZN}!lo@hOCLGU17 zPc+#2XX4*so*1%W&#B~Tp16{E(ZOMn_UE6I3!Wx3A?;=h|UA6Gl+iF0v* zRZ?$wLLYr;SeF-`ICg%;vy%nd<5}L1>R-kSOP*b_zFf--hl{N&?%K)=d1gUx&f9pw z$jkk?ovRm;Qj$L(3h}~&xl>G=j`c#5S|--ZW_n?{<)pAb%e|nl_IFkARxeEab?VCT z!(P}u$GEITju$3Zf6;UNT`zRrxpC~dw_ZqpJ2CioIY+5&GPVReeG>IMd=3x;ZBzoVk z`Jti@UYpl3`&r*d^UsD{DYWvz=A?!Yw`BXDj)0(y?bW&HXqbzx_QulM}2V4>*9hj=Y6nmM#3oPd>^!Y=kllF zJ0Aot>eTA{UmqNUr$Iw!X0S(ziD2=?e#!S)(qw`NF7K ze4ja?zDT=vVNchwz9{^*aNDa`Uvzq3r_Hiuz9_hQ(WdKWUrZbO>c-uJzA*RB`ZVdZ zFIHu5UR3F(FLHLh*s=MAFK%4D<J$I<#hm<7a=VzN~$KX$1 z4qg4w_i?)}h^~h{qTI^q#|wa`@wqlhpkiI`{C$+%Qqe`^h4dBXWtg9 z;E$G9UdGzg^+(&E?z#zW{4t@@i1=;rN9wfYe{Qc2^^*I)LBO_yV?$q)Te zIHJts4IllHQsc~;HAMpu{XB5$;)(&-3Qix1CcZ2t*_0LK&;!| z;B5N5K%}GtScRaY4f&>v#S(@7}Ei_pH&Y++T9V!v+4zD_w~GZ zr9smm>~?J(mf0oMa1qP{I)9Td^0Tw%d0p__KXM5L^cZ2Y~e6Ou_o&+JR^E&SduY+)E z=3?jbpR_-Zel^qLXApkAo%}bVXfR%TnWY^u3C56_b9Ne62*!c5l*f+Mf`QHb+!t8{ zz2O5Loh4SFRjwJ5H$11usb~^1k*qNxHd5+1Uq~D)LG6A!O=C_3$Db6 z;N-hsaZ{Fupy`rpwd$=6!JeQ7so5JtkhS}|b?CMb#Jb-)TDUs|mDbhjwkj<|yZ`UP z1FbVdaQaGZ%j^>&7?yh^eqc@r+AVi~_uz5}X1}^;JM?Aw_tU))tUeZ#J^pD3 zPIRCC{`>0?q}X*RJN{D$oXRgV|M(*Wb3GSV9$XlL4jy%W=NAu!Pqx+N0cAtsawB_j zW~ET=bvW6rS@lrl^l5c@Nu5x1S@yO6k4B-`5L{`mPm56e7dG|x;dY_;ajkias+~j8 zc}R7PunENozaAY=_726|u>UHUJB4C$dX*f#TPT9-WQ6bc3dO#&Gw=Ti2!(Fa(2jQD zp{O~0$gtT%L(yk&ROIPVp$Of%Ww7zYP?R=$*t*BGP_)?9GP%_F|}ZU(`nqHLitXyx%bYhPOje?st>! z%^!r~s#e6+>RBjm75DIL{U#J4#jnS=_@w=NujGY|e}v+%$9cEfe?w6s(Bn=8<1n20 z>u6cDbQqomrdhu$ABKAEHWt5GB@FXZYb?*K8HUYsnm$Xa7ls98?|zwXsr`FVo8tj3 z!_XuxuwN&uFia`o6mQx&49%P?#Xsy3hD~FS_t|3?hWpPAM_m+Omy1gUUjNde`q)+XO{KvG%_5EcDgrk z92bs&b?&2lCWphdR#$snR5%h~oisc)9Byf2rjMB$j+I9nKO4I+97oKfE{LS=VCbMQq)iLtKsPIw|>^s zyl|BEi7UG6Za6ZtKc$U*7>?#UmOkn5EF2qaq|EyIDjXFy4qve${7rKmR&{GqVSF1MY(MVb z@Tzzx39d)QQXmkAK0Xh`= z6~6C2NQX;S#rALZ(xI5!kK1MZb=Z2Ud00fS4zoKvcg_jd!TRpFghoTOEM)m_~5g*I#k~iQRK`=9bVjZ{cqD(9m+YM z8WmNb!@^a~SGxbvp7*;)C7Kk~Bg@P=RanE*?Cw_dM7>Rp1Cw^U^hL=?(uYbW~0ZAY7v9S z_0q$AYh-p22R-(seDj{uPmfoBd$%a-tjE2^w>!^w)xKZ1`Y|T%+T(p&U_9MRkNB+% z=&P?D`)!vT&;{yotADx2S3|U)@9W4u-F4dE|8D(s!(cr&oy<679HB=S=Y?4zBlQ^4 zwra7AF?v+oa&CO(33`~s)~l+!nGN;ijCJwj{OIXiE* z9{7?t>fAg%Dpy(TSYn|bWj2iP=&@LjLZ1VRNB^hC{I&VNH>}WW_hk-Sk(;2`IKru* zA8YlvKP%d+c9I^C-d32_BUz8LpTA!6-J-|%Z984YZPRO>0|pKo3KozTmA^s{$g?Ql(xbko#m%RD`5|EwNo zbX$+pTbm!bb61aJK10gwzOViHeNb%lBRwLXCs_17%z_>7k$K zoxb|59?!?tz3=rwkJ)?P*01zgk50o~W}p75M~}FhWhVX5j&rN-Zv0F8y1A>zT>7KE zF8vGK#}_dmzeARXxsd@Q`pzA9u($z}nmpR$Vq$>KJh;sB(gwu-O_)BZoB@@B8=09@ zFu+;AJZniM1Loa|onO6*0bT3O8MUUG0cHAj8dbA~0WW{Ij9XsIfSU7)9V=JI0H^x{ z%1*Cmz`FUnM}KHw0A(Nh=-b$UkDk@%W;ZdQR;G6+%jO0=DQi(UtEB-4e;egLYHh&P z=P8%Fv@<||Zs*;F?G0GgbMK#f9SoScXi)p+owc8Hd57pRT@AQ#v*1BmcLO?4gU1gW z1EL4)xZl2~0T0t2PmQqCzR!u-EjQR3kk+`z$18mdIMRCi>B4^6^SM4@ca#1GjNa*x z+JAud_2076hPxUNGk5XzxPb<=eBo=n$=!f2?Q?n^@ibtZ_1vX7-Ueu+y3aR#wZ~t+ zI^>bR0YCTHKYSi&fc@9E!(Rp)u-UywndhMfSPy-A;6b-3?tn*?`c}!5f068t@>`{&nMN+Us!GuE)zL0}}34T)kzw_BxpB ziiXTE;6;AHNb{N6&)0X>%X6~~XjlE@kV$h47_)oimj?3;FsW)c>s*}n_g{b3iCCaL z|Fy2i%fuV-v{>;Wn->|dJ>yFC?n?~X{p2TI%3Z3xU(Ov|5U|Vu+gL}}m&*+(AN;+> z$dv}PX*1>3r&R{D3SW6_)M^9l%qu3mSz|zOiLH}D6SdcOaovC$>$La7u^tY+lMHy> z^>q8)8w}{{8P&L2vi5yTw5&CGlK~qZFRyZIvjMwX##U;-)quli(ksQKXs=WEQdRG5 zGobC!cC}h=H=wSWQKN}F45)J4uFbKX+W)(s)xFqm?fJIr+uwGN0jKIG2Ta{-KxX>- zQTz585Vx=FtY`ZTa0ooOy2?R=)>k}iFVYOSIkNDq{*d-{$9p`QcUXJBCI0%Ea>Rfw zt4f-kJgWU%Z`!xKo31^NaUS;XGqkTiWE1!|(}2tOPE0682J|^}M4KBLu=en`&6TqZ znDECrqf)j39qbaWlsjR-@6WrQ8J{#@pShvnyLPM`wz~B5QwF58Y*6FMX#;MJzGZp% zi~;X%th8El)&R4O-MUXXr~Q1V*4ugH81UO$FB?!0{=JO*6$664@Az8sssSTE zXWcod9Zf3L$PB)w{a*I0SYvYCfZo^ZPDs^`sZCb*?{~w1Ccod*d8!=`+W&bwB~N=_ zZrYb-dQ*Gf`Tdx>Ry)2Jw7+|kTL!q-xm>VQJ2wB+X;0hR+T(1y5xQGDUO%_2V)Hu& zjEW37lB69gENL2GcGrM%Q8$0bXvY@8{>$HL$HZTon+?i0pxB}0!w0ov_-6ZFRqko; zlgP-^Bedi8RbA{)X~%-UBaWHhH=wp>1uMOFjQV7nv`0IZJQG;z$G^WH_kC!W2ioh} zJ?G3s?O3DiYRBYJOB$AWWWeBWA8cxC$5Au7yEoU4nU}|fS!>6qSQ*jv z|BrM`{+>q5|Dz%Db+kzyhxW?j(k}Tv)K|VQ9h0Af?#a(Zh4OP!N%^_SAkTv=p~6Wb)rIf-Dsb@jxMid> zsw(eGnkMg48ZPf!Dyif5F|CmIH7%0&In9&zJ$07P0S%GQ1^toF2|bX{4VAgUpCj%5 zeEhkh#_~C%Liya$Yxx|~5&2wFWBHuYDf!$|`7iuAroQsIrg`!?r#BOx*_K=x-aK7Dr&{& zIl3a}J!&oILFyvsMRJn!B)yaKCS8^DDCNj`l``Z!OKau4OW|@Jrjp(Gyi5i;Pm_n7 zw`rQ3$0=CO>*OfsdFn6ceQGJ!0Sc7s0{xcj1Rap;2Ia_ggo+#Sb%i#_b%tE!xx|=a$Tbgxz166T=&T6CSM0>wpw`r1G$H`Bw>vTb`^AsW1eQL0m*8x;& z1+NQ8FY5$Klyw7HSo1o9JY`)$+hv_WVY2R^wXzPO9XR=PAN3w3A+9!D(L*)+f zx`uYhI)}n#-9tvVcpaqOSA^F^v{%+ilr8HfS|;l#D)xfcRrFNWS!7m@*Inc&>oBV8 z#p^QqAnP>Bm313M$~ummWL-x!|L{7Gy34wcB4iy%>9Q`Q>9S6w-m-3_G+9T|Dp^<3 zc3EfAMp<`K#g4oVC3jhu(p*`m(pXuy(pXu?(r{VVQiiN^srEQt_fn#)gDFnd#pEaJ zWZER_W-63*G<}zKH5JM_n>=LQP2Xf4PBUa(PMz2DI-Rb{x}BnA9Z%V^uBVZ*&ZqgZ z?x$|D51@UrFQD2!yicGw**DNb*+)>i>?3-3dy?mOO>ki~4?r;xAg zTPRTWF_a_w8twjZyw4#=+4s;u*#}Xy?2BlV?31WPS>88Mv0J>4qDa|SQ9s#d(LmXE z(RSH~QKan4=!NXl=)3IOXol?LsJ1ij>*$B<^XQuF`{=Rk1L>gb3#ox6?-Qv_A@3Wh zK=zTeM)s9d+no2AG)VTHlq>sC%94F4J(Ybb>15wZXJsEtd9tsisj|NxV8gD%P3gT}}lgh=Kh^iJj^v{>dQG)v|vlq+); znksV^S}1cDx+QZMdLeTedL(liijcVt&6hb2#mQWU@@39Lg);XcZkQnbu*>ATEzDMRMGgx5Ux zrE4+=rZ|}kli5g~6VpnW8`CnGBU6UVl_^)|%rs8s&QyO6&!Oq9%%y3l%&93}=GGJ~ zb8MO{b8SkMIX9Jf!EAeZOtG(qO> zG)B*Jc(R?sb9t&@&2xHckic_$N|rf3Max{DdRO5&KNZN_pS}nOpbX&xlrNlsP6#)k zmBJCIsxxy13a`wZfxZiOpuiW*A*k^<<`T4BIE8k9NahxlDjb703D=-X<(P9&i@D4_ zsN#0!Ae16pgd&2NlaOm6a}$aejzV)hnXAxB;Vkr4xC@1sU=Bk;?U>6@f^Zrt?$6wY z5`^PWS8wJz6cfpuhgJ*sA&Y*@f#{)dA-XP{h;9itqGiI7sGl8kCE72XiLMEEqFmun zbW*q!B@3sbLg7~QR5%tL60Su?lbLgo+d1Z5RJ1O0FshlsT#TB9Gbf`8{>;tjj&L+u zbDg;wbqZ(BMh+p&-ROaEI2zTLxf~_fGpEz;tIgbwj7~7eqX)wE$jXa3AAJ|@M}vAZ z2c%Iwm|t(6 z`e5dmbYHk8MZRawNn_VC_auW2b5QE`g}Ep_6;4V$r!hCBm%>r0P`E0Y>}SqO>64ke z(kX;+b-tx?qDSjMtW-|W6+?l=$hbE^!%%y4XM&{HsZUA#@8rYLLHaWgxu1!N* zFz2StVa&ZLIh;8-#ZP1|PH%*hQ*a;V=CtS;b98znT%Ei+FlQ(KIOguO{1$U~+EAU0r=%?fY=#S(CC}%R~2FP*?=LjhA z5a$YL;4ID=&~p*UduMS@f!w-qZh@Xw;2Z<#{&KE?9_TseKs_38 z?t!XL;2Z?at--kn`p}+p5_I05a}zXU4d*DRy@7KT6upIW78JOfa~Jf|fpZvSxq)*T zbT6258Wg;ea~tG;l5-rCe1mfx^w*Me9#jy+xewZD!8s6GxsG!o6i|(GBDC6=b0c)X zjdLWF?9I6n%FO4S3C%6fxf7Zl$2k=G>&>|o%6Z2*74mT7+zM6M!Z{XNXV1A7av8-r z7uw#9b1(F53Flzwd^^s?P}WY)$j~Ad-a^Fq4p6!* zZ2~!$LoqElr$g6%ac+n1E#e#x-I&I?9xBp=b3W8JgL6N0zdPrE=-7D91(9bl&IwV~ zKAamOqp6%DqCttAE2834IA=sdQaE=+IdPmrqHoTeOQI_;Ij2N_YH@Cf294$%6RqgR zxhDF&oO4dJE{tE92S!21I2T5< zpL0%(X6JHljFty;j*QmZbFPf8Jms7jwGZRm8FfhJ92(j7=3E*%ZseRA4Y|R&H45Cz zIW}r@igRtW$Cq<%RAU0?-e~y^&cV^mkDQC6bp@Q0BcD9Z&C!+?oTH=nZk(&5S3aDx zBb4Rb9hH8{IXp5{=Ug6DSjss)dhmgBdt{i!IX;T^PS?4(CNHwxJ_eclIat@L*hj1>E9340(NgvWUH%Wb_a*mQ_{NY?B zed*6ROIp!{bC;CzfpeJDbPwk;X;>}JX;N|==Qb(gFXuQZumS+K#nS29oRih|m7JTUF;zH6 zO9O{-u9g;6=A13LzUJI5xkhjfmqNC4E|>leDXzr`bN@819eV&Yb`N_2)XRlE0cv2&-hg&rd-e#ZR15YB==&A+ z3@EoDdk55e6?+JDy9Rp+q$|Om0{z#Fy#)$A%^m~oTEJcdZBJy+friDg_dtPz*n^;J z2KFLo%4YT?=#>|H6I7!!dld9~7<(18VHSH9^w5O83%b9KJq+qIg}n?aG-pqP=p1_+ z)aU?v9JJ{odmWT;k3A3SHkG{(+Ek7`5W0Day%0LGl|2zMi)L?x);wX4gkE)IuY_hK zvu8qAYO!}h&3)KIp$m7|OQDBP*;Anj(d?~I+<5j_sF*u@Ewp7YdoI*2i@g`JY0e&u zcK>+xV(4-e_GGBSBlc#<#*IB18hwww8rqn~o(-j(V(*69r?Q7bw~w%wL&inE{PT3E zpc8vLbmInlJT&(=dp&e5l06@CzQ^7V4Rm1-h$`-9FNmftXHSTn+ORi7zr)xgqO-@@ zE25OC>=|k2E%uJ6W;6DXsCf>1No3!MJtexcjlCr*If^|dn%RoICha`Oo)gWQ&)yR) zI?Nsvef+{+6#1C4Cq*Sju{T8r>$68iTeH}!qJ%l@S<&%c>|If|H+xvL?<9L!RIVC( zTC{5_SPshiaj=ZX~|w2jf!E!VDt=SLUkviC=iDzgVjAFs0)NaxE2{__NBNj!Ul zROSnNgfwD3dxhkGmOVqt9>LxrT@PRnkv=tLFOgO@V^5Ksr?Iz4D~*%?d5o0r$6h1( zJYmm~D(q+Pk#;1q2T4(_*o!3JjqFL%!Vm0C(zzq-QBq|O_9|&hHhY%zWfyywG-V`v zm~_18wSQhFbt~@n&(oyt$JpDXd^7eq>D65JIw`jYd!97s9ebZN^9_5Tw5mRPq4eBz z&_7Rm;(QbZN@Q0Zd^d#P08J$tIuq{yj%-YVTV z%^oY+C$QH_Z|&K0rKwffd!=({*n_34CG5pg?^^81Qk`k+%~Ea@d$ja0mAzUD?7^Nb z^*_blEv;Y29xj=@XD^p>*RrQe$?oj!(#Wao@lvxk?DbMgPxgFiiZy$`w9T45VA@#i z>1Owb?hC}hcNb#>ANj^$>iRaJ!LAM z%HA^ht!Iy!?oD8?nW|R`_~$v(q&7qUdCznznLTLAUCdrIy}iwzG_9}M@1HkK*6Y}# zCcPJX)%52kd)C^#bj2%~4snITSaC;^t7?9EzJ`s>(kqZjKtl&7rtC6gP+B=1|-mb}DbFxH(p; zJf`C2P~04fn?rGP%u)GH#m%9(ITSaC;^tajO7fzLn?rGPC~gkL&7rtC6gP+B=1|-m zUsZlpadUJMZVtuGF-_%Pvs4~dadX6}ylhvMpWUnSw6%nrLveE`ZVtuGp}08|H;3Zp zP~04fn?rGPC~gkL&7rtC`l-CI;^v4_dE#W1FIL9EzJmadRkc4#my2 z^PuFx6*q_C=9r`Mx!GhTjkr^3pYo&%D*da zjtaufp}09Lg_}chbF5eSdd1D5xH)d9Jig-Qn6L8sO@*5yOy&6%H%Cq3=1|-mikm}m zbFF_ud;!JHp}0BTD!)K+b0}_(i^@lsqWlEK&2dxt3yPaVadQk)zJucCP~2S0TZH;3ZpFcEGJ#m%9(ITSaC z;^t7?9J`foqPRH}H^(I9rzma?#m!MvxH%LzM=jyzP~05Llnj8guY;^t7? z9EzJmadRkc4#my2{ulAxHY)!uO8Ibh!p-qR`ErVzBVGA)ikm}mb0}_(D#Fd7xH%Lz zM}Tm1C~l5a<@YIWj%~{SOIALh;^t^B+#HIVW2^EB6*q_C=1|-mikoAF@)H#|hvMc? z+#HIV!&taE6gP+B=9n(r9EzKxws3PiP(I}~g3(!p)%f0d71Qn)#e3O9%1=1|-mikoA< zaC0;fZVtuGp}09V2{%Vm;pSK&+#Hs|&7rtCb_q9!;^t7?97e*;@lE;Lj>65cN4Po0 z3O9%1=IAHf9EzJmadT`GZVtuG@ml%iLBh?UxH%pwA6;>C_z5?M;^t7?9EzJmadSLU z{`*$p=C~-_9D{_LLveEyD4+hf^6M2hhvMc~E8HAz!p(6_xH+B(H;3Zp*dyE=uENdn zM7TK=H`jVYq#vNWaC4XoH^&^|=6EmM967?xp}0A$gqtHuxH$rZn?rGPG!|}-eBtI$ z+#G(w&9PCqITSa?58>ue+#HIV!(X^L5`>#WadT`GZjKD$=1|-mvxJ*NadVs#ZVq?h z=BO;(9EzJmadT`FZjLX)&5179!p%`dxH*anH;0>Wa~KIX$6(>+I4j&7 zUxb_EvT$?!5^fGR;pSK-+#H{Tn`5nTbA$>vM{nWgFcxl(qr%NGTDUoO3pYn);pTWG z+#HF*&9PdzITSZX3*qKS5pE8D;pP}1+#DB#o1;LuIRb^7W0r7p%oJ{pWx~yoDBK*E zgqy=kxH+tan*+kl(NDNJ48qN!xH(!0H^*+_=GyyS`eK#|H^&X(=2$D-9Nxmsv01n| z-U>IzOX23|A>14$!p)%*ZVpr7=C~)^Tssd)|Bd42xGdZpLxr2eNw_(_2{*@2;pUhn z+#ChM%`r^4Ic$ZSg5(!p*TsxH&2dH%F9kbIos)KByVO z&Cx@+xpp@W>5tki+#HIV=15_hr-SA zL%2B#%S->)5#i=&E8HBNg`4A>aC3wTH^&{}=2$1(9Dc&hu|v2yb_h4eNa5yKBHSED zgqx$DaC1}@ZjM>P%@HHq9LI&5qlIvD_z5>hW8vngE!-T{gqvf(aC1BoZjKP)=IAfn z94m#JV~ucgtPpMvE8*rSDcl@&g_|Q*xH^-2sg(V;pP}4++6D^l77AV!p*Tx zxVhG+A$@$`gq!1{aC7t$ZjM{R&9(Ko^!qIlZjNB#=GY17Gg_~o8aC58>ZjO$^&9Ona zIj##gN1AYRRQw-NXBk#i*L7h`6cF^WTST$Iz!rg_A{HT10@86XKx7$Q zlW=pi5pIqf!p%`axH-NGH^&v>=9nYg9G8WgqmOWN^cQXpW8vmnu3P#w`v^D358>v> z6>g5r!p+fFxH)PFH%C+9=IAcmTzlV1-)Cvz=75b_zF#fpBwd6K;;H!p%`hxH+7Jo8z!>a})?ShnH}3 zbP{fkRN>|*7H*DX!p)H^+#K%0&5q=j2 zE8*stA>16+!p$*KxH*0oN&oC{;pV6)+#J`0o5Mr6IZg{V#}DD=fN*n65pE7c;pWH^ zZjN)p&2eA2IbI1jN3L*l#0xh^8R6y_EZiI(!p)H_+#HvLo8z@`b1W8aj^4t}u~4`< z3WS@(UAQ^Q3pYoaaC3|kZVor$=9nYg94CdF!%(<6)(bbsTjAyyE!-Sg!p+fMxH&os zH^+71=6EdJ9H)hwV}@{ZOcidf^=nF>@B5hr-R_A>16%!p-r)NBYd02scLu;pT7^ZjL^}&G9Wq`q9&co5M%AIm!t) zx7&D$xw+ltVCLp_YX>nmx7$>gxw&1}Pyxu^YD@(%84KbCLEJ?+Of zjOU*AW955sPy4akkGZFvni~kOpIAfq{e^16^RI8@o_0D?MtJ|wHNyYfmk}Rezk&Dx z$)C8Votn-Re_%;T@d-luh+lB=6!)}Ko!R0a=yeqz;k&c=3EOXRPdhmu;huK-;V3@C z_%Y%)G@LHJ!>F?2KUA$QK7>gZ@gqKu7GI*0i}({s1>Dn4SJ#SP;dWJgi<(Wvzc~Gx zd)n!;f%q9448+&CT3!4N_cG#hB)f{=k>6Z=k6$Cj|LAy9e31On;)hIIExyR&%Hoey znIS$&X%F#BvLeJcd01Bb6aOjVqeScxKc!X)@m1p6h`;i5miR1VcZ=V0_9geUYdKo+ zUzVne4^v4`{Fpcc@nwFD5r3w}Sn+A1bH%S2y-j?Zg+I8boqALdAE)&V@pIZ2imx-d znfNeAC$35e4#-*#2-2X@rhzm#V>NW zExu9JMDdTh)D$0SNUZot7gEGms&PsDr8T|8XBzm9d)leeVDX)NtBU`0po;iVtNVx_ zHQz^ksm6Q7pXxGSe5xDw#IFjRD8ALIZ`{*PMB-!hD=&Ul$7$kgHSHk&)`Udyxn6mQ z-?j6!_+Al<#sBJjNqn$eBk{v}^%Gxg<{$29r$@%(la06~e%bT(;+yS`6#wkIgZOA^ zdg7;zb{Ajm**Njng6fLTW;RCrHjkF#yHy-7{+nM(@!=f)zWLYFPS?!Dm#dv2{v4dd zr<>v~eqGZz@$HUu6aVhEm-u)-ZN<;)mMgwqL8AD3D^`flH)x9ZeI3HZ_giKp{$JO_ z;sZLmh#%)rTqnNc-CE*5o+R-h_th6a@_B^#l08R?KN)^Ne9Bcm;#aI&pGA1_?;VCitoAo3-`3stexV6K3FGysK*iUMcuZG zKicq`_@r-piC=pBhWMtl48=b!-B^6oFAc;`eQ`j1)xZGpR}c3UpVeWQ_^oZmitn0y zTm09!%i_bnbP+#x@qgmW_FN_Y><&xuX@hQwUweCu__oti#J^p4M10)grNqxIGg5qA z-8J!dN1qg*_tO^fdl!=UzL$-~|E)bjeBiyy#1B63$NgVVJ0;8zfB3pid}94};uqg= z6W@67dhw5QLc~XQaS=b+e~$RdDJ#WaUO!KKX3rDiH_vS>zOzpW@t-eM6(73GQt_j6 z>x(b__Ja7+C7Os&z0zF#>bhOUx9-|c{Ojm#;$uf!il2SBlK9#cDvQ5;CrEtmo2lY= z5B5ESuT0#8sNo~b9?@=WFxsks3=w0;0 zPd~a#eD#Hs#9z1UDn5G^SMl4sC5i8zHdOrgZCk~M&)6q^y#HYF?{UVc-YJFFXp7 zJVR4M$v2qolDvaarsN-Py^%b`fv1v>n7UE&5|+m#KM@=*d5SAulCL;kBzcQTA0&Tq z;fv%kCjaK1b~=(Sd5v@n$!}!4NuI-Hs^mNVZjii3N9_%(^|VuRn&d&^BP1V^@Ko|5 z7mOu8vREg1lHC<0UsCa;T(j<@5W}f78 z#@CX(PEljY@9eKCd7e{0B;WIEj^urEt4sc8);7rlm3b}spf6^U7jo?*`Jtlkk|)X- zC;6fQdn9j^*ZX_EqZ(J2ywq-;ts{OXB7oWUdyqGq}OSnLDIhaK0KyjY~Cw)`4`Eb z1-_9yn&}nEr)?f7c{Lj^$**M}mpt3s?UHZ%aarZ$%Ty=S5~qUhhM`LN37;3`NRQ% zl2=S$Ecr#JPLgLdjFNog-Wrm3jDI5e$6b9T4>@M_0Exeum5t%``!+a{BPrRk_Ud?Q}V$9J0veW zJyr6~-uRQ1-9jsoSMWzPfO{Tq(-$<8e0}eAlDBs`A^CgqmOQ>&hUD|}he=-Fwovl> zmDX@iJ9#{ieE%bR$@|AVmHdArU+!tAa(lR^onDWZzJSiVr9YtceeP+e+Qr<{PGcrZ z-#|?d?rEnHAEl3Ajg9mZY*{UR1$*B}e?g5!+|y3$0;JzyXQuQWjC7a&gAys+(@x91 zr5|D6W!0B(QTh{1mvK)!jeQ~g3dfA3Zz1le^e^n`Dt!z|J*1z(+L(LVX`H9@H#GL( zo_6YULi!!-3Z(Dhp}q7!Wc89hh-OQ6fX{XvdxTl@WCv#6b zwK&8*?PS!Rd)jGJcj?o3cYu4^soh)dX{XjFxTl?LmvT=#P3kTE96uenr=1>7QvDrX z(&zE(BKNdYxUckm{Q1c}?R2uW^nsi$E&U(^N^?&;{prR%?exw=`b56@aZfvC{g%Fw z8~)NiQn?NHw9}L=(oeEtuJn~mGnD?4%6i<>PPO)PPdi1Hk-n3VM zM;V&TJ?&IjN%~XfJ4&C5$t~__C+mFfX(x{h+|y3&zjIGJMe1=+JB_NxJ?%u5rN8A@ zbM9%U2A#O4oz}0AzLy1UrT>K{NFU7SFzJW+F`0YX>B}PFb1KN3**~`e_zCmA;zxwYjIA%8cfob~23Oo_4DJANRD=kI&rGPLn%wPdn|J zBmFp~>u^sy1!i+kJGo?YPdha$=AL%4e9S%Vlo2KUJEo1er=5mW=bm=D@k07~JkD}Y zJ1rc;J?&Jh1NXF3Y!UagQ}Q$E{|RWvJ?-S^%suTC)r))DX*O|BJ2ig6J?->hn)C|| zy23r}6qC(8?X+?`_q0<)3iq_rpxWHiPN{a>(@uW-xu=~{v)I$5)77Q#$iEr)w9~NL z+|y2Tw{TB8ecUL0NjYKCpQI-}?Ub`X`jrNi=bm$hl)O9=e zw9|+*?rA5T8~3!+S|{#lr&hV#(@urcrLU@E0r#}ir5(~|)h>a1+Ns$r?rEoNYwl^M zu=mo3)lhocX>~L1X(wxA?rEp~JGrNwTD0SycIx8BJ?+#~dfMrSmGp60xN=WBT{*=) z?X;&od&m@gn|s=bm=DIE;JRX?;cRX(x|?+|y2b4zqVnrKP8x%%!KDGHY>9JC%~2c8adY zJ?-Rd&OPl^MS9w4ybt%Z)7*IOX{VgV+|y1r=G@ax+s(PBofZw`o_6XnhkM$omh`mK z)MD;wr_$2XPKg(}r=14vyl%2pm?KC}`d)n#tVfOMV|1B|@HX{Tpt z+|y1*s=v=ldfI8_XYOey6V>;pr~3bvJ8@4t<+bLXc8c1}J?#`elY81}b!YBrCsXNZ zCr9aNr&D#fr=2!@;+}RITZMbtDQZ3Uv{R_`wA1@!?rEplq1@9>F@3qGogAd6o%%{o zJGGIXcDkRzJ?*scIQO*E%X!?>P9~~f@$dxhX(uP?X{RUd+|y3OuW?U1X$8CgdfI7o zP3~!@A7`BZ^|aHztK8F0hN|yzr1Z2?c2DkUr#7k|a`6xDX(t=iAK5|mN!qG@$tO>_ zr=3y)xu=~j)aIUcdN_`I+9_Ci+NqT4uiO{OJ?(Tjj(gha$UN?8rz`Wgr=8Y1a!)(? zNl!a{=*>Ot^s@=~wA1tI+|y3wRKMo(K<;U$tKr0?rKg=X z#&SnLPU+d)(@rC#r=5DJ{?H)lX{WDexTl>OslL&ws(;i# z^^rzMPdlBP!aeO&MfI1Ck)C#%BR%cpsQOM_RsZRhYuwXL2C5(R$`|fwr`oDNHSZbs zw9^9VX{So6Z}pZd_q5Yg>1n4G($h{wpSh=W4iM%{}eZUG>K%OHVs#^ZWkwv{R8e_q0>G^t6+a>Z6U7o_3n9`f43if32nJ zvt24Z?ewWP_q5Z48r;)PW~vYOU{&sEr$?W;r=8lV{@fMP(@p`ZU$>9y+g+skcfZc$ zo_0DF$UW^^uPpbp)6-DyX{TS+xu>0Ksea#23%RGA%Bud~&C=6OWmG?~t?CO7RQF>K9(B`i4JdaZkIJi|3wpx=GyAPLot$@iyscr}?VSc&6$%9-#V;jaC1#mFh!Y zulkX9slMdasy}(8>Qi=7{mPcAZ@IGSUtX*Fn5(IN=3%O@*+KO;msNev7o?}1W~;vE zry-nUrOB!fdb{d}&QX2QFE?;cJ3;kHUy+`6N>_c;xvGDaPw{ zebzUmr=9Fn-*tc0fBn1?_q0UH&K1&KC0jR=O*rHr%$T?{Hp3h->>@7q59I(RDb$5 z)u+B*^{a=gzV+d%e?43Eu@^~CJI%j-W?(_YRlBmOMtN5w9^38d+U02Hx^L_X*4LPR zA>xx=4gJ->e|Gbo#|c< zJm{Isfl4J zCsL{)d?Dqw$m4 zSXgh+!^ySlLeC;T;F4=SydAUlYn^%ZF=jx!EUSP9a9ri*=Kiw*o@DQ{9JS08&OS|A zFKFEmePY&hOF!2T{wGTHIT~(;M~xgTFKcto%Xe@sc#zx(U-kcM`le%J2V$hOKrfZ(IM62y3^Mhuz!t*r8Jr#{xwTD>U4T*+>RLU z(%@@rT&~|Ea!ijlI2bvY@)owin3y45tKVybxutTig|x8J=4JhwynVbCR&+{e`uUU< zGM4>3+p%(6bl!K$YkXi^{N5aWV&C?*2>3PS&pU12`K+_if6aThgY&lY2Yr^cL+Ht> z_2xfnr};bi4G*?zj}iqjSq~?-$K`XoZt9Sb5F+*34Bl@GMcB(^;E)p1$JnjhAh0G5K!0@=4Qe z@#>DAqwNJ-*hFV7c~H|1FKmBbof2+`Bns23w#N>&>=qei{I!GaYvZxC&4HcYjd`3!tQtNjz%_% z*8K|Zj9kKdFY3pE_EyJjt8AT?F};RfrHH|XAkSu z13mWCPa7TC1Jh=F95!J|4@@{7R&J6u|GbBp`=|-`d*Ju26=|c(*yG%KleNQI*yHB@ zrEWp4_UQkh^sxcs>=8Q5<~G*YqlZfeleqGNFXLpR#> z#383CZ}$51#OnO*+Y_hvM4?g6r_jwk;kP&CP{;E*5>Ij7#psnh0M(#YQEf42W@vlYED`Mi72t=YYiH@8KZR*!qbsqD$4JIeLJ ziSHGLHE-Dm!w&o?yTPpwOnZ!vtvaC(Y#k=OnU&H9o2q`Xc%Rb;`*z*z=Jlcv?DJ}x zXBqd!+MV03)@aukQ^wA*ALZQ_fAW(@o|)Pg>zh9Hs=cW%?329TMx5!3>M!25+WodK zlGdbD`&PLh7CjG2?%25>D(ta3Jj%ZxT#^kVx6bT`t3RJ@y_en(ws&(zRJhm=L59f( zJAUd1bN#4^el;ACRH4(ZsWy(tt^UJvb+99D-rgCuXRae&UkJF7yUh{xP4zbyX!Fox zPN$!{|J4x{#`o&}q_z`Qr9Lh76i#>;8)xt+%n3tHJM}M&bHZH9FBi{cI-y_t)6)-K zbHda)2Lm?zaKh>i7sKY%b4HHYe+gkdoU!jq!X>*1XPl_#*raNLGfv;}N_?`*8BMxm z|Jiw6`|rlFBgYjxe(pjQ!&72Eg6i+lAvyn6N5=K6d& zyxLp)_k+JpxjVE!jE$^T)S0S{NZqoD?i)1o%;F9Gv1{+%TW9w6$KzzTPJeRy zhK5qk5+*7yMuKN3?*E1iHcQuk)Z8Bi-P8q{jFjv)piJ z+4rF(m%E|WJCpWD)7((FV|xDBLvHwD8)-?s!*mS4#0F2R1Zb;ohO92l`G~l9JI}o0s0hYjVx59!T3<>D6o}4^$2M z@a(O>2U=%0j&_gsK!v6ErthEOfu7Ee)vGS?fUan5>*!4$7p1OYi#6vGU@TS+2?p5Z)l_d2b_6ZQky(Ui0gEB2~|>^4XT2SigN; z?=tYjEt?NTU0ppf=$r0Iv^Fn&)xNI1){pYU-4|*47iW3m!0Jb4-@80mKHGR#!Yfa_YHXCX?w2Q~oCz}AS-}hAriE@e zT+a(_whfq^)5;5{oQE#YgBNC%c>5;L)eB)iYfV2H?1c%2ZTn`A@`CTiaea2r^1{Xo z%_nVK<^`{|3+^o3to{4i&xcGr;Dx6{CYS}D_QJc=xuv=ndSU%LuW}7udf}Ww>sCL1 zdcnoVb4YiKM4n!yKB@0Ws48)vCWBZ;87>Ij* zzLjT157g$P#y_{6F%W}$dggsuG!Q`rrM9PU7>KLZkCuDw8HibhwlO77YF~G+Zdk^( zf%rUr>j1|m195P?x7DjJ1ChGzc)2-cy^*xH-PJnPz47)&sRfx$yz#xvjLx>5yfN(h zpG&8Ed*f1UzKe^uH(r+SyZ`cFZ?t@QOt1e$Z?uV+YjHNt8z#fPcEDQui5{NH!5$4Y_$EiH=;|L6qhmf!JUEi zSNqh{=Af_rSz>ETA2gl*+v1z85B3h2UDM7*o2y>`{mGaB9~@6fwm31|2OgbYI{lvJ zgW__X&D$;XLE+68yTjM{;6-Eq4@-CYz_F!CTX=M6y^Kivum^LG7o()C1PHB z!w)_v|17zabqQa%Og%rurIIhsE}7Cbz|jM4O|&$GgPd5#4;TFL0ClXjfl+ zSTZW{y-Xke_(RsS}&)=zsqe}tsh{yEmfAHC;f)!kIj zAAhgJ1fRF`$K+Zia^H3J$D!RPdKx?WqvjEh`%QfPao)7g!mdO7(P@>1r{e^F3`|?t z(rcbS%#+Gi_e=7}ubB-h_;2>dANLW)KKuMJ?r3}s*OUI}(Oth;kE{M@(|W8;>qq_= zym`1=jSv1fvnVd2_^&?(?C_shsLfZ8ojYsJZf(B$jq%Ik=2!&a?e-S4JgfuI((F-m z{k{PxyV>2jXkY+*3hLL|qzk|!(}$P+$7*xbFLoGJWp)5wzCTuca!CMYjHoj>dV@Bf z-RRB1YP$lE+yCnG1IGgJVZ(^8ZWjYk$$IGhmv;gXZXUXR@~Z%h?Ny>n`JVyk(qgn* z@6v(De}8{utYILoY_9$@Pn)w|V(7bPrD|z&)pM<_ZL~S-e|B8{II3wNO3t2BA-$D0 z-@Iz;xWW#Bn7w+FuAFTk=y2Aic0IMZ=&^m^?-+d3dK={fzWFd?-ckT5IHWxo;W`XMAp&7 z<6Yhc;>_!756r%3-$!19?gqaCv22@r(VLRmobpJw+>7Od(9luu**0zN`tx75J?Ck2 z*F!dcx*w>`U0?99-*O!2nR3i+jZPM2#dde?lQwS2>Q<3zSsl@LGRVc2j3#JIp_XOi+2py z{@(4>BV=q4Had?#RAq`b_q}x&-yCiJ`qh0Onhe+GuV?Lxt5-vtzn(bdgU!*TAXLo% zZ+1{h5VD`#{#YVa`?`@`=B(Wsgo$x=Y`g3Z!rPnCHLn~D!q&m&)pf^$u=b=yhaac3 zIqc6zjhS~o2&MbIzFOsK5dPep(?6v!2uWYty=?SAn;$>z`P%fSLAaN@B)Zuf?dM5q z=9{L?VSn6yjekRJ4*OHzM-x`*1tZnw%~lirVA##w{b@#pV9fSw(*Hx{VAS*PMt-$| zv1jeq?s*M@QG2(|4a+9lJo1zZlNVVAW9Ku!)*ssj<5R5pCzme4NGuM>*@9r?Sd>~< zvR5$v%q>69%PAQ8ABRoMaMR|epKUVsyLT`Ky=*tpJ}?+jX$xj2ga@PT<+e#zhXrHv z?z%gwjS5Dc|N5TsoDhtNHv69~nHG$47X!*&oE?mQrahaNi4VrK2ceFg7YC!3&C$pq zD}r&qsDHwWlwcT_th*&=Q!wUPo8`RH=Cc3X8+xPSu3(fmdHlpmo69~ zZAwL*tQ3NMyR%pAs~!T+U$u8_tQ&&-wM};>nuVbChPTVdHVZ-Wya}PctwJzkU_o`8 z_8~ZwWW2MsbqF#Ytt`GF1o3~I=3jCM!N7gP&u`M^w447-eLGg0)86UE-}gPWIql7E z#$TzV&1p9_@LPNa!`P!WHQqzJn7lq(R@#WLL+PwCKs~eRrqs?po5gT85>jrHe z{D=Bqozg?_eEOFyZ?=cPdvK#RaeK7yJMiROvqK>`y7tZXLq|g}s_5Vb$CDvw6>S%G z=S&DLms|Zg;*$2~zdv#LsLgFZX>2`qyf(M}P|CjW;`VByEp{)rymbHqZf*Zn1plf%Z9?gV&69@hN1XxT<6QB zD}`cRx5;C5)wH?mGuqzC)#kTPzc{^wnKr+@W3M?+CYgug-oo&?ms^Bl=?(j*W^F<- zj~V$D}=zWv7P z5krbY(dP6T+je?kaQbm3^JnQW6vkc8$}S&<)_#Bdrx=G}>fOn!J68_F(=v&}KWcN{ zSNlcXN~;rw(m#A|dz)%=&L=DyQO-OJy-oTj?`a+e!?6WEzOBNL@I7$b-?m{e7;d$2 zT_=p){^X2tX4q;eU-#)KIKW&cs2>VHkT*6>JqH1@^WOv3+gg>>=D%M% zVfVssaTrVk?9KKs*XGtIuefipTASzICbsUNwP9!*7IG(JV;KIJjH&%un*+aMmC>y( z+8p?sf5umzx>K9io>%^A_TDg5tz=^K^I#Yj%_}@^l^uqnVOgJa$HNeuSZe*sQ(^e+ ztbZm?n+G4dp~ldU7s6m>JbzBjD`7a8vAdSdb#0z}y&`kJTVXhxK6=Z9dtuP8mbGc| zqcB{~HK>~YRC`@_WdA&*&4usc+T7#xTkY>Too;sZV;E{3TNHNdYZ&rI+Sa=FGYpIO zmg{!!PZ*Xz?^}4QWH>C#20pr4R-4zpVx#XFgK*d#8DW3eI2`jDHA&9+FC6WvnFcSd z77p(r*~=!?3dgeqpAG@qocI$nyn5I*49A08m5v=JEF5dT^m}{8G8}%n zv71-7(dNC^GCV!FeK@istp>Ey=EX0%7;InMRhzs1@b8+V2*-l^k^WQdwK?m{E6wiG zTl@Qm^sn?un;YL`z`~O0+T8eGw>u8>cGLb`^BtA+y~5G#t53^aKH*pzzj?cte>i$x z{*m}on;$>e=IG^>+Wh#E5B$co9~_Q9emy2!7#5EH9}DjUMTetIRKnViqrwr?=`2mt z=E#3?{%u!Yn$gXxm~gzUoc3zL>~J(FUE;1mY&i7GPHGmT&69tX zGCTjv0_}Brwdiu#l5i|pQ_14W@^F0D8+X6Us&Jh8+V0g_ZLa*?Z%3U=XmjOfRf#Ph zuqhnlKkL^%lopP1H+IIDYz;@#B|q$fcZ4G@Y2bie+I;!_FYOQg+8d4XmD3Pib@O7iE1ObvhguQ?rs&&uMe&*H>M3 zRhu{eqNvy1-&XY@4n-`b_(KBdzM3)8@~AInut)HEsU9X7NwuD%WyS$VyFn(9CUdd@o1NQVY@_m!N~M2B2TJJG(m4wiaba$Z|#^VvH& zmRZ+Io1eb1-dq-kgB=yM-eg70XA?+I;)V z-xh?r>X2o&%<{3D4r5|xm+|-1VZ2Xp^#X04{oA-x!M(M4_Pw|Ed3L~0`?}9#H<<-$ zbLR~ku9_dL{Tvf^r& zldamE`?AaC`1}~DgUO#05GSgqRd>UZg|v*^)yJFVSI#_t$dgm+26`Z0U`gNjjWeH?QE~N*ykB zom%qQYHg1EX;c5_YjlW1gXd4y>d*&G*4vkNxru-3cW%Dhw^>)<~FKaH{+u)84KMr2_yX3A8Z5C7;Uh2LM?XB9D z9R5Iu;WwTiy#7#!hVH)?cX_PC;JO_bt}4=A$KHNBzdq6azSxeRoS$j0V~50n8=vd& zu}AX4dduLGmcO8De z_FKB;hxX5g3!k3+sY8q68Ut?^>+pL2x#w?wY469IlUDrtt$mJG{SMdvtHZDxjopp) zwE5gdX9Fsg(B{j#Q*6bO+Pv$i`^et1dUk3;$qu-C?$M?wTkJ|OxiYfOqD{Ax0y$t>v zTqy!}srG^O{)@oV)+T2!Y1dYLom{3=jzF15kKUPAiNN%@y<5*~*QaCCVxp=>VEd%? zqm8OXV777WjLq70phM4$uGO_Ut;s~~+9ba5=0fdizsA$EeZ2_W9c|ViLA&01Fs0N(?Yg}GK)p8gBT#fL zwb~TzYTUrb;goj0IeYMe@(r}P?!~7+^wF-Tt4Br7(XKE5b18XDyKc%2-uX$pcHXgW zTqDy6L_XCU=&D^~EhoE9)UN)I4MW#zSNrl?7LazW)!p^lUG3WU%C9!xv}@kl^mLNps}qrn~YwP!)My=%u_)lq|0s zJ&@OtisW^re)2j~OL^U?n*1K zKr7|BK+EJgLB8_bpsn&8q3iNopl|7q>mEvwbr9vsx`-CYI*F#px`}kM zjv^mfSJ7NqXHh#@chL@6hmp0c%SeAGuhXd7eO|XwM_I>db2)fjMA#JN8@E3 zNcHCPx{xwtok*Ky-AJ!w9Z7R#T}j(yok7 zUf0q=S?AJWS@)8Stb-|A*2Pq{Gp~~=RMyS(OV-ikDeG$bChKepk##p2^x}0mb;#p& zIen3JIvG9Wbvxacbvy;ix}N^ZI-eHGx}UnsK7gjlzJQ*{K7pF|<9!1eoAW+`ddR+l zd}NNA{J}YAx?G$x-&56ejynYFmZ(rPNFI zsq{tmt<=SZ_py{N`&x38eJ&-*zLy;Qc^^!DWnWCYWS>k4vTxSr@9{pGM#{dLZpl8I z9PaSGn?}e!oML5PPF0e4pH8=A-%h7xA5V8=Ur*(tc%M&oYV*Edo0G-o0Q5r61!#+$ z6OiR?J~tqf7(Pd!_KAG1KxuN$Kr`jsfv(Fr1SQD11i8yO1x=Q73wkQ&81zuiHK_V1 zKIfnza_&Ko|^Z49^yyYB)>SXY_3YDtQ=PYEfh0k4RtenHp0Xdf; z7Z*OKq5X1hL!Bb|9EXbJT!#kBIS+l8b04z!%jZD!R?daUy&|6zQLLOBQKpv zm2*DoG?CB!C`ir$>4%&Pl6_e|C#1V_Zb*r8j!2#6^SL5zlXFH|DCdr3yNS;sX``G= zlIcf2r=+2BZb?Jr9FuCL^SLHP$T=tdcaG0JDM8Lb>4uz(Qn;Lx(hoT|r5SRLNMx%I z(GGrZ;l#O?o%^9GvE9d6)OwQ5Cq&uIh(+oLhr;Bp#PK9y~ zPy6Ito~Fq;J$3fsb9+jYb9`!Eh0pbAjhypq_c1>ACuyOMOXj~j~3NlV+Zb8<+m}5|aa1GiooP&n`VD3R} zn=%K{=Akhcp&5^ulTfj66Ke5m`ah0BONFaYrf?QICftQ~2#2AE!eyx1U*rm5J<~)=w+=l|zF$bb2!iA{k9_B<8Vawcz%CBUOL^ExeE75-8OmtPa z6LoFO9Ev=*F_)sjp3JEzdIfVU`XC&OZVT5UuNTa@Xp?X+dLbN){)=EPrhPt{lTp$> z=4RBmD|0m3CR~lCK4H#AS;F0@!9(V7^jf$aZ4pjKhE~k&=$LRk>br-z9^DkqM^)09 z`%%eP%mFE1xFGEmPDp9W{0C38gT{EN9FrNl93q(RS_J5q(Ayy>LzPvSrRms|GRmq@)haL21Vd=AyJTk2xtdpU&KroWC(grTvA>RViCI zD_Or_?n>ULn8Q-|5azP9rI0x-b)3)KmQD)CrAbej>(WKxyyP;Kxi3xH&m5SR?q@Dc zGkO1D4ox%inM>1rOXk#+bCQ~ zm!})T=_#=db9?$O9G`0cVXjX}cbM~Q^W~WPlVL;l04Ti=djT{rlRW`iagMzK>N%S| z0&;E3UIDFL&7J{O_{81;b-c?S0(lN&FM-OLvZp|%FWFn5>5bT9pu$z`HBiEA_8e$b z9D5J6^$2?qG$NV32zpVCJqdaz-UPkQWRHT@=CM~n@5QsAlWFW-(1{Q1VUVQ-dl}@{ zhdm8)Zpz*U{qD*h2i@DmUWYcXoIMY+G-mIEMvr0-gzkQ1FN9|0vnN7@X6%iS+YRFlwPwH13UO(JsNsq#$FAzJIbC7UEj;z4Xv)j9uCznU@wP; z%wtbS%hj^CLv<#w$3uq2?DbH2z1)AE54CT=-VYr<%pMR0{$wwRnxA7&h(0}LZ;1X9 zdqkA7iM=8^x|}^DniI<25q(>r6iGG`~$3)-Hu-8OZ!`O48 zy7$?8qNC^8gCdu8>_ySV+3ZQtlELgv(Z_G>QBiI(dsS3vCVN)2WGQ=Boc zFH6f=v!_L7XW84LJ%iZeB4;!9y2zz1dtNlhkG(I-vt$p9X1-)EjQp3fCq}29us23A z1K1;@0s8Ef(UceLnbF|o?441o5cbfhrduw!QI(uvs|AM_XDm9cn zH=5+m-Ww%lum?xaOxcU0F-_T%qlnw=&Cz^A_UPz^HG6gBv7S9Us@RadJL>1b9v+>D zVK0xIH?XHi6MWg*ql#tNK6`?6B#OO3 zdN_nVLVEC;y+T@J#GWC|j%V+X%nI2?xA_0rnOtER#J(nlOpIMmji& zJxB68z}_SEyTcwNt+r(^k}PhrCrRylvo}e%uCPZ*nStz8lJ`{hEXjBfdzWN&fjvyR z(~G@K8db!eCRzBgw@Dcl*yE&_kL-2Qm2~zz>0BgxpVX}$d!S_3fxS>l$Y)QKdTnNJ zlp>7TBPGw@?3L2E((IYiAy@WJwYk{rp;B}Vd#N<;JbSA2tSNh|bm#(mtdtwaUMqQ= zVb7IP=d<@p(}uAJOO(Q1EIoV8o-A!X$lfds`N=o0b>FgQP^``6{Q_MQ{kf~vT{XZ|6>UCpJnJiwhw@i=1*kdN!OYAk1 zMLv7ZR4tjkXNr2y9yE2V!d^5b-e6Cfx-4ODnp!nwkDBWIWv`mP>9c1|F^AZ@roxKs zVbjlr>}8X4clNZY{ciTQDgGmS+|+d?d);*87<=Bdv82mC@0*&;U=N%!@30q6-ksPJ zr(6;RMY&KZz#80QXXR3_&T=#&ZP5~yY*=M?C59nLLK>LboE zQ2lqDYoHbnIOjmMh;t7#-hguubf+QbBFHj?a}uQM!nq0B{fcuG+IctUD#)uG=PYPo zHO^horEZ+V&_4H^%b*eFoYNrPZ_aJdgch9RAa`5Nbx_wt&UsJ;8_s=@b9>H#Q2S<_ z3!$BhI443ww{vcU9!}#N3Hj!8u7rL!<(vs!DB#=)Wk2Q|3T4*kTnf#s$~hIPVZyl; z@~F%?7V7wfb1ihS$QWzo$coYSK1GdZ_Kw3>5V^u7z{x~S?H z&UsOp7o7W|g~vDtrmdGa7pDC_IVVPCEjTwuc4s+9M*ZSAS4RIG;hY)Gx8mFx?eESx zG}>^2b7?fRT-AR$HL`obxi#`R$T>DLa^PGWW!>YP8{O=~xi|WJnsacJS&egXbUci6 za`ZERb902ooTH;9eK}W0hJ~E7qw9{GyQ6MPIfq9(j5(J_E9Y}gPvaS!+atd(oZ};Z zSI+g(qbr>Aqpq%;`=b>xoC74scbp5PqIaAVq-t9^H%R9ybB>UzJ>y&D@`rIa1x(oO>kCU7Uj?>mtrY z(u4@kNz(ZaoSURSpEyTJ58iUFl6u$UoF$pm=iDV3SaA-M47+eHlL`-UPLtYP;oK%= z+i{MQs(N#-llB@F{mXgM-+P?8!EIJZilmT``iy3F8QEBUnLoGT5P%(+*p zx{hSc*N&Ia!)=jdQcKKZ|p;^y?evYAK=_=WOZze$L&J!6nY&l5Gg*a%qOy z_kTHEik!%~U9yPf94`$u8~-oYOa0Dq&X?S`bMBWylQ{=W+bcZ!mkXxVRfhe`32Xaz z&J9!f)|?}zCjOi&CL<@#8Pn32oI9qtEu2H9RWY1PCYz_6Q>M%loLi>H6FJ9B4|6%! zOy#F=&Y3cYbMBcs9p@Z0-Sy;LG%e5PoHTu!&bevQ591s)+1F|DFIP>04>)H{9j0*Z znlgGj{L5j}oLX-Ga@llxUhcn~HknlR`j^|LIhH5><+y3@XU=ug$&Lm8a^BQ4!sB1= zn?A$_{>y>WP5aaTa^c5n4oLo&6F+A0rslug_%Xw4UH|3CkCn4A`Ijp{_Ei7UznuB8 z|KsP1n?rGPC~gkL&7rtC6gP+B=1|-mikm}mb0}^O#m%9(ITSaC;^t7?9EzJmadRkc z4#mx(xH%LzhvMc?+#HIVLveE`ZVtuGp}08|H;3Zp+Rr2YgyQB<+#HIVLveE`ZVtuG zp}08|H;3ZpP~04fn?rGPC~gkL&7rtC6gP+B=1|-mikm}mb0}_(%F0hs+#HIVLveE` zZVtuGp}0AQDIZ30b0}^O#m%9(ITSaC;^t7?9EzJmadRkc4#mx(xH%LzhvMc?+#HIV zLr=IlvXn2RxH%LzhvMc?+#HIVLveE`ZVtuGp}08|H;3ZpP~04fo5M-@P>P#FadRkc z4#mx(xH){3Z>6|76gP+B=1|-mikoAL^0^c@hvMc?+#HIVLveE`ZVtuG;i`Nx#m%9( zITSaC;^tb8LHsnu&7rtC6gP+B=1|-mikm}mb0}`E`S9Y)DQ*tM&7rtC5|wZFP5F0< zn?rGP+)%!r;^t_pe7+0H?^E0yf0X~HxH%LzhvMc?+#HIVLveE`ZVtuGp}08|H%D9L zD=Kad#m%9(ITSZX2jxF1ZjNZ>M=EX(#m%9(ITSaC;^tcKf%unml#i*nITSaC;^t7? z9J7_*skk{5H;3ZpP~04fo1?4pM-?}R;^qhuZVtuGp}08|H;3ZpP~05tg_}chb0}_( zd&++eP(JJ*<;N;+j&91IovM7=BIVaAZVtuGwO#`8aTPa*;^t7?9EzJmadRkc4#mx( zxH%Lz$64hI8wxkaZRHa;5pItC$~RWr9EzJmadRkc4#mw8sC;I{&7rtC6gS6U6p}08| zH;3ZpP~04fn?rGPC~gkL&7rtC0)?AHadRz?DtW4BDqp3zITSaC;^x??@>$-(%`sQy zw-h&r;^vs5@?Mu!{!4LlC~gkL&GA>|$NCC4$0n68d!zDZikm}mb0}_(3o5UsxH%Lz zhvMewB-|XERsOA+aC0bbj+VmB(M7m9nhQ5aAK~Uu+#HIVqmyuRC~gkL%@Hcx9EzJm zadRkcjxNH@5wG%qikoAIaC0bb4kzK}P~04fo1?jKb1YGL#2qT1sJJ;4H;3Zps4CnX zorRl2adQ|6H%AlU=1|-m{=&^sr1F&Z!p)($Im!t)hvMc?+#HIV!&~^D1tR3o7s1Ubs0F zH;1QibF36@j^)D5v0b=1mIyaTGvVfN5^j!t!p(6+<&(PzH;3ZpP~03D!p+e^xH)oE z{#kKzC~gjC;pUhq+#HIVLveE`ZjL7^f33JVPN{tM1(nxU+#J(|nCyxJHpMe zN4Pm!2sg(_;pR}>95KSpaZ|WC6gNi+;pS*A+#Iiko8yLXb0}^OPvPdcAlw{L!p)($ zITSa?EaB!b5^fG7;pXTh+#ExNo5NYSIf{gv!%Db03WS?urEqi96K;+O;pUhv+#I!p zo5Mi3IrN2_qn&Vb91?C0f8plZoKor6_#oUIzlED4S-3fl2sg)U;pX@t+#ExNo5NSQ zIW7n{$1maL_$J&Ot%aMTws3P~3pav{bL(`KemXGE;sRYG!e6)m~B3Xt4fjg#D5c}Z@rDobvz#!GIlK1yz`@=0#4vPo{Po=R@6N=t68 zhDmO&GD>c)Dobvz9!YMl+$A?x`6M@2b0jxcVUnAxcaoc{_mZ2d^OBpZILXbGpXBDM zl;q~Bw&dn&iR9+$tmNh@P;zrMO>%QJM{;xJFS)t;Ai259ExEbUlAEhVlAEhJlAEi} zlAEhclAEgmlAEjJlAEjClAEhHlAEh_lAEi7lAEhClAEhMlAEhA$<5Vm$<0+6$<0-F z$<5Vv$<5UO$<0+O$<0-3$<5UT$<0-N$<0+?$<0-F$<5Ue$<6tDfu#?zrsU=-z2xTf zCK|c9sw}y=ik9451xaqM?n`d20wgzADUzG3bCR2@ILXb`Hp$J^ILXbGqvYnwPjYkR zD!I8jFS)t$lH6Qnk=$HGN^Y)JN^Y)-NN%oLN^VZ?kMvRIl-yh`lH6P!k=$JMlH6P+ zNp7w#OKz@0B{x^CBsW)UBsW*7X^h-lO_$tU*-LJ&j!AB=7E5lfvPo{Pyd*bQ*(Enu zwoi{$3&u;k|Io#f^!yX5A|N^)~GLvnL9 zQF3#&UvhJ0ExEaJm)u-6lH6QnmE2rKNN%onN^Y)JN^Y)#BsZt;O8Q>?B{x^;B{x_5 zBsW(#B{x@}BsW*vBsW(_BsW*zB{x^KB{x@dBsW)flAEjRlAEhKlAEiolAEhY$<0-y zj=IWK?<|?P;=E_%cbLA?zxf&q3xjG@ax%wfwxw)Bs{)dntJ#v9s}RY})qKg#)t&4{ZmwELZmz~kZmwoaZmt|8H&+KGH&=ZnH}{BX zVdUl>N8cK`xkt6@MsDs=#ofrwJ>1e6xw*&8>qbv|{Jk|sPka2Mnnq81eC}07PkX$L ztJ?+}_vC-46Jx?1w z?K(Kw=xNvAon>F3=uFukusdt?wCnTPWWOM;yzCpaA1(U_>#SuT;cuwyCk!tj`wBOl zWq%=NknA%wZ6W&&xfjd6!}>$A|6tu#_94EGll_Q4TJ|M|6|?M5xXM1okaV(N;a*kt zEi$|@dfIitr$$e^P8cZr8K)-5zJ^{c`x_5`8a?fLO`z;|Jn@x%j~_pco_4*jrtE`E zTrc|}9cIeD$n(D?{`Iu$5tn42r0QJRFZr`Y_D#-hko}X(bz~nUV7lz5ME8X7mN%zC(Y1h3P$UaZDva;VZ>9FkkR9G+jKV3@5K2Xz>=)b4@o7nLq5`$mZ^W&ddDW!XpCw@mhv#`Kqcr4~D6e`)g| z*=KT?Ec;C^y=C9&LL1qCI$2Nlp$guU{ivVwWnXI5LfN01cun@H-2SHg>uJ{!k+N^q zI!X4g;_t{lR;IqPpS9Cn_O$|z$o^KMyX-@4`cBHlJn@w&n`)8DD{Of7g2ad>o+DZ@ER|~%(`)fDdWS^~A zjO@4BKahR5YJZHLb{!fg`*7oH$bMWvY1x;15G(t0dB@2yL$K4Lm&*-!NGkbT8rHnP9y*HiWxhrE^jM(_Qy z?`St&_8%h;$v)&xPuY(=!-W|=?K*8&*`IW?l6^|6{IXv;}P)YX7se{C3|Fl)4Q(hbM|T=`<>?lPnSKHebijBvY*;|iR`N;{CHvPuX-fOK5Jll*>5dkEBmgq zGRpqzp`5Z0d!FyR=xNt?&&$4S7AM)C4Lv3Mw8>$zUmLzw_H9o_$o{RDlkDU6Dl7ZB zC9252uKz^Y-yPs8`@E4wWWRUP7uolnTR`@I7u=D3;Lp`%KX_Co*%u!5=ghyJcD-bR z>=WO9B>Tm4D#^aFe_Po1F@gafj?cTWe||Mo2;`{1Jv%6|BhQnD}pEwAj4=Zlwp^1O#+ zzkF?Z**A~hB>U%0-DDp^(?s-}E z;eA78KfY83*_S_HE&KC*s>we6gQI2Ne|Bxz|977u_W%Vl$$h}7-EuGBW-a#vT~g$pU~n3jnh2$Q@ZKB+V6_a@#i z<^H7P61hit-b?ONvP8(eO8g1AUvZf%_besO%6&_#;&Siu?6lm!+#fCXFp*p2KBkPf z+{?WD`|e*)yFT+n?rDI_eBTm%e~RA>vDfo zw3gf>-AI)Cq!&BoUa8(txnHswD)&sEw#a?clbv$!R6RlNpX%DkJ=Crnavzm@irh<8 zvX}d*!7t^WDy*m6SNR3Yy;boDxxWfZm3yqPSh>%7SibGgTx>@4?ro^9n`FIz>q-^=PG_k2SGU`^hn@$ z>3QTn^vn*q7cF%_?njfHS?o-Dfl6%$WO72%{ zSCD(w0qf+x_3CW7cWt*#?qBCkl6%+(L*za-d8^#Zx)zc9+05(Yp0>+%xvzcUB=@%S zFUbAv`}dZ6+OE)W-g-l{++Uw= zB=^{53(I}>;tF!F9d}3Ww`>2Bd+z*6Mo+trttj{2sYQ*Rc74Q0?!osQmizD%Z{%LQ z_$i~OUC-Gn_vC{^Goz-a=xNtumrFmw#^=(P@Op~$CrnO}K7|8irC%X=vh*$d`DpaC z>%wP^o_6i`O8OakY>>VN=PO1}yIvM6eGZPp{S$qAN*{%1fYH;gt$rCj?RxJE>926B zX!NvezwSm)yS^GJeHZ6jN&m(EEz*avvY7N^)HrMOwCnuEjh=S>+D-a2`b9~<#uazz z+lY>p{tcg0qo-Y;T_OD(rB@q0?Rr6k^mh#Rmp+f3k<#z6shRYBO!_VTA1!tpJ?+}* zr_s}{T@s9*c3mXV=xNt>>5ZOty)s4mMFt!)dfN5(htfZCVwCieY%MAMBu~CeUrEIo zMo+u8vodAth?fO`N^u1*0YV@@0 zx~GkvcHJ}F=xNvOvl>0^+F^*%)2>%2>5~~U&gf~^V=o##?Yf$$(bKN)&6Ylz`3cfb z6MoU?Y1cnuq`zjNyV29Gd&e6+?K-Eu(bKMz`%3>!of}3^yDqxQ=xNtqk4ayS_a39C zU6&eW^t9`Y3yq$3UAB|?Yd<#=>v+XCH+A6LZvV0=XvQ5TL0eYY1idbjGlJAVY$)Mt{okX zo_0Oi$>?deYRH%;8)2^LH7(MMe;iL2)wLM|U4I)UeN8>G z7(MN}bePf8uD5(QdfIjAzD7^GK3_-rpU!oZKBy_)Mo+umTgd2X*M0gMJ?*+lf1{^e zN8K@c+I5c-sH>o_5{gmC@6#>-;o&+V!F+qo-Xj2sV1!^{0)}Z&gBi z+VyBVqo-ZFbT@k1_4HLnPrFVdJ?+}NlhMk87-uFots zdfK(U^t9_6r;MI<-N?b{Y1bzrjGlI#M|#@z!kI=-yLOSDcD-b^(bKNmWj1=+_4`fI z7xuEC^oLnVPrFt*jh=R$L3-M?XSC7Nt_S-XJ?;A9X``oIw>e_;v}+sbY1fx`89nX# z<_n{zU5D5jJ?*+dl+n|!#~d_z+Vz=YMo+sQlGEsE*GqdFJ?*-T^t5YR>1o%+rKer5 zIcoH@>nC50o_2b*q@OLf^t5Xm>1o%uFB(1V`qV?Cr(NH^Z}hb59MaRSr}Z{^+V!9o zMo+tLB0cT;zO&KOu7@TYJ?;AObm^B{aK-3p*KzJfPrGjU!02h$&84SZulZ#3wCjLS zqo-Z(sc!VN>&DX4uB|P7cmAG6PrGg)J?(m^wb9eA18t3-c3oe3+I7d*Mo+tbx6J5i z*M8E|t_w>~yRIoc?fRjk(bKMPeldF5b#w-?5}$EMQLu3att zk3*!Voxk^5`XSfvH+tH2ElYpolDkGvyRK{Lm)!h!^S_>U-9dWVwXLO(a59?Q zuIpO*HGfYrdfIgwOaJCj>1o&3wirF_`rZqpr(IvjVDz+WFH4{2f~rPOyAG3{cHL8Y z+V#?LMo+tTu=ImQE--r9_3J33r(GW@VDz->3mJ``cKzhF(bKNK-8FjJbwx`b>Gvq3 zr(I{X^p#GLo_3u&!suz&p_YErfzs2iYg_tH*LO8~+I4kHKWbA;U#gX*Ked;oPc_ui zubR%%x9V)^Uw!3a^t9{YmVQ=c>1%xyZ}hZlFH4{6xphWQyH026do66~f8F!R=xNvQ zlZ~EsJxzMr^}9;O9h`Qy^vOC{`emz!8$Inhv!#DFsj|`2uJ6<`dfIh0OJ8jbp=cR zuB)Yw_wGTXr(Lg=o_4)UdfN5dSw>I0{^(-#wCl2#zTf*Tjh=R0($WW<&e9JYX6XwK zwDbq>lAdqxY3Up8Xz3r$X6YlYVCg3gvh)?lNKd=2W$81XW9c`ZW$8QaYw16} z*2w5-*QceYU0=^&^t9`5DMnAbj+35tUCPq0{A#h$)2`ht{mZEtjh=SB!_v<@+tSw@ zZs~6>XX$hPKEUW{*N&FH=dqUlX9r6k^dL(=bS+C?^zDa6PrKe{>63Q0^h=Ml^i8L< zHhS9irz%EIyNrSJOLBcrEXcd_(gpRx2~&$0An z_qOzByIK0QT`c|DyDfd&LoEHL)Dy>X|Kl>t!tc>#>$T_G8l1 zuCt|aNb~RMW3urgjl&OlnJG;T;|FQe*rc)NA74)|<8?=#=RsQIwKQqG8#V~^X&&h7 z*W9y-SHr+2KCK%1`PB7FlPOIl<30X8J`<0x->8-Gx`TZh-tzCMu<`sqALl3DP=k9PO@um9aX_56&V|L>pAcypTne4hXMxc}2R$?t-EtpDlx z|GjzSiILyG|G(z(Kh4N|n>hh<0_FtF378WwCtyy%oPaq2a{}fB%n6tiFehM6z?^_N z0doT81k4GT6EG)WPQaXiIRSG5<^;?Mm=iE3U{1iCfH?tk0_FtF378WwCtyy%oPaq2 za{}fB%n6tiFehM6z?^_N0doT81k4GT6EG)WPQaXiIRSG5<^;?Mm=iE3U{1iCfH?tk z0_FtF378WwCtyy%oPaq2a{}fB%n6tiFehM6z?^_N0doT81k4GT6EG)WPQaXiIRSG5 z<^;?Mm=iE3U{1iCfH?tk0_FtF378WwCtyy%oPaq2a{}fB%n6tiFehM6z?^_N0doT8 z1k4GT6EG)WPQaXiIRSG5<^;?Mm=iE3U{1iCfH?tk0_FtF378WwCtyy%oPaq2a{}fB z%n6tiFehM6z?^_N0doT81k4GT6EG)WPQaXiIRSG5<^;?Mm=iE3U{1iCfH?tk0_FtF z378WwCtyy%oPaq2a{}fB%n6tiFehM6z?^_N0doT81k4GT6EG)WPQaXiIRSG5<^;?M zm=iE3@c(84Y5BBPu!aq6kq&mSM|xyHMr1-}WI4Ja7G!FMLCp51yn>OxS%qsz!g@o zq8{p_0UE*+jnEiP&=k$!1#kGEIegIqerSnSXpJ`TM*!NQ9onMQ9BjWHODaR|qFOu$4;!em5X z3Z`Njreg+XVism&4(4JW=3@aCA`($pgvD5brC5gLSb>#Th1FPtwOEJs*no}Lgw5E3 zt=NWW#9%viAQn5Z3%jugd$A93*pCA^h(kDxBZ!B_Q5?f@oWMz(!fBkrS)9XpT);(K z!ev~+Rb0b$+`vsFAQ8848+VX|ySRt@cz}m^gvWS-r+9|vc!8IAh1Yn4w|Iy5_<)c2 zgwObbuSmu>e8&&`L<&;z3%~IPe~~6F|H2B^uz@Yo!4CFFj||9&OvsEZ$O;E!Lv}bK z2XZ18aw8A&A|LXj01BcIoKP4=P!z>b93@Z^rBE8qD1)*nhw`X^il_t^R7MrJqAIGP zI%=RMYQYWesEs=CfI?l=Lwz(rLwKSQ8lwrCq8Ys44IeazFIvD4Ezt_C(FXnqKwGp! zdvriYbV49HqYJvC8@i(hdZHJC&>O+%gAjzGFZ!WB24EltVKBll1Vb?l!!ZIQF$$wG z24gV};TVqzn21T3j0jA@R7}Hk%)m^{!fedJT+G9KEWkoUA_|MJ7)!7e%di|PuoA1V z8f&l?>#!ahuo0WE8C$Rw+YpTyY{w47VkdTCH}+sJ_8|`YaR3K#2#0Y5@z6MmV>pfz zIEhm@jWallb2yI+xQI)*j4QZ`Yq*XZxQPTL;udb>4w7&e_i!H%@DPvi7*FsN&+r^C z@Di`^8gK9x@9-WU@DZQz8DH=f$@qrv_<^5DK`MUXH~!!+{{6w97FMu^4Q!DPcCbf! zWI#q_LS|$^RyZIVvcnNMkQ2F(8+niy`H&w4P!NUSgu*C-q9}&qD1nkFh0<_F8I(mi zlt%?rL?yVOGOEB8RZ$JqQ3Ewm3vO^nZPbAW6zZZL>Z1V~!V`_q7){U=&EN%Z_@Fs_ z(E@&GiB@QhHtcO{6TJ|G-Uvn?gdh}s(GUGG00S`y zgAs-y7>Z#Sju9A%Q5cOe7>jWT$9PP@L`=eDL|_W0Vj8An24-RwW@8TKVjkvW0Tv<> zQCNhSdhj@g?c!H;RhUa*Jmw1KOc!Rfihxhn^kNAYo_=2xU#y5P&5Bx+5Qt=DF@dtnL z@0oXCaT$b-Ddhx{mjf+z$h6h;vg zMKKgd36w-Bl!i0Ppe)LvJSw0fD!~PnQ3bB3ifX8i8mNg{aDzK)qYgZvP#5)39}UnD zo@j)|Xo99_1}}KS2hHJ&7Vtw$v_fmNfj?&yJ@=!GEk zMlkvy1fl4Qe&~+@7>Gd_j4%wrPz=LxjKD~Y!f1@aSd2qB#$y5|ViG1J0#h&*(=Z(~ zFcY&d8*?xh^DrL^un>`m!Xhlj5-i0sEXNA0#44=D8mz@Stj7jy#3pRU7Hq{fL?Z^< zu>-N#iCx%@J=lwVh{Jvyz(E|sVH`m`G>+mJj^hMQ;uKEf49?;l&f@|u;u0?73a;WB zuHy!7A_0lGh1q7a-=7)4MN#ZVk2P!gq38qO$#vM7i0sDO&71Q%3B6}X}*s-Ze+peAa; z4eqFoI`Du(UDQK;G(bamq7fRS37VoAyx0!*zz;3a3a!xw{s=%@v_pGzKu2^! zAUdN9x}qDpqX&AT7lP0m!RUh!grYC{p+5#-AO>MD!Y~9wF$}{o0wXaBqcH|!F%IDv zj|rHFNtlcXOuQR;EJlKhU%z+ny3XgxT7}ezyk_(Q4jUe01e@ZMre#CXo_a=f;W879KL7)KeR+E zv_>2FBLHpD4(-ta9nlGa=!`Dtif-tR9_Wc)2tscJqYpw5ioWQF{uqFP7=*zH!w?L` zFbu~CjKnC6#u$vnID}(7CSW2aVKO2x1yeB%(=h`xF$=RX2XiqG^RWO65s4@)!eT7J zQY^!AtiVdF!fLF+TCBr*Y`{ir!e(s2R%}BwVz3=M5R0AIh27YLz1W91?8gBd#33BU z5yV5|D30McPT(X?;WW5%~$kqMcR1zF*MY{(8r>EXb4XU? zMBKt{+(8oV;vVkf0UqKJ9^(m~;u)Uf1zzG6UgHhk;vL@O13uytKI03%A{pQC9Y63B zDM-aH{Kg;rMH)N4{$T}c*uWO)UCS*nyWQ7B=Av+wA138fkxseBXkq`M% z00mJ9PAH5bD2iezjuI$|QYZ~)ltEdPLwQs{MO16(F|Vjh7X#<7cJn2mS~06Xaj!)pe@>=JvyKxIw269(FI-6 z4c*ZLJ<$t6=#60XK?p+87yZy5127PSFc@JNf}t3O;TVCD7=_UogRvNgaE!+UOvEHi zMg*o{DyCsNW?&{}VK(MqF6LoA7GNPF5rsuqj3ro#Wmt|CScz3wjWt+{by$xL*oaNo zj4jxTZHPt;wqplku@k$n8+))9`w)lyIDmsVgu^(3cxW8OF&xJUoWv=d#u=Q&Ih@A@ zT*M_@#uZ$}HC)FH+(ZHraSOL`2T8b#d$^AWc!)=Mj3;=CXLybmc!^hdjW>9UcX*Ev z_=r#Vj4$|#WPHPS{J>A7AQivx8-MT@{{sHBu!1#gV2gCHgFVtC12Q5LG9wGJ!U5Tk z9gfI>oXCaT$b-Ddhx{mjf+z$h6h;vgMKKgd36w-Bl!i0Ppe)LvJSw0fD!~PnQ3bB3 zifX8i8mNg{aDzK)qYgZvP#5)39}UnDo@j)|Xo99_1}}KS2hHJ&7Vtw$v_fmNfj?&yJ@=!GEkMlkvy1fl4Qe&~+@7>Gd_j4%wrPz=LxjKD~Y z!f1@aSd2qB#$y5|ViG1J0#h&*(=Z(~FcY&d8*?xh^DrL^un>`m!Xhlj5-i0sEXNA0 z#44=D8mz@Stj7jy#3pRU7Hq{fL?Z^-N#iCx%@J=lwVh{Jvyz(E|sVH`m`G>+mJ zj^hMQ;uKEf49?;l&f@|u;u0?73a;WBuHy!7A_0lGh1kf(t663S3bY)leNZP!qM_26xm(9e6;YF6yB^8lWLO(Fl#v1WnNlUhsww zn!^_@;D?rIh1O^Te*~Z{+MzusUZ z5Q8unVHkp;7>3~(fsq)6(HMiV7>96-#{^8oBuqvGreG?jVLE1DCT3wa=3p-7VLldM zAtDilMOcg_Sc+v>julvmRalKRSc`R7j}6#}P1uYr*otk4Mhv!N2V$`kyRaL3uowFf zhy6H!gE)l4ID&X+9K|sl#|fOoDV)X`oW(hu#|2!(C0xc8T*Wn9#|_*>0upfxw{Zta zxQlzZj|X^&M|g}Uc#3Cuju&`|S9py#c#C&4_=;qF!*~3^Poy9fzwjG> z@E89U`_jS+*06ys(!mb)NRJH2h)l?gEXWE6WJ7j1A_sCJ7jh#H@**GdqW}t`5S&mL zMNkyQP#h&t5~WZY&M1SjD2MW>fQqOD7gRAA@PI;H)I)tV zKtp(<5gMZjnxYxJ;0+%%hc8;d4=vFOtM@EKq5 z70LL9@A!eANI@!o;Wz%^Fa9m{riB%(VFO#FgB|RV9vP4knUEP-kQENdhU{=e4&+2G z)9hGPUqViZPW48~#{ z!Z98bFcFh584;L*shEc8n1Pv?h1r;cxtNFfSb&9yL=+ZbF_vH{mSH(oU?o;zHP&D) z)?qz1U?VnRGqzwWwjmlZ*p3~D#ZK(PZtTHc>_Z&(;{Xog5Dw!A;-PUA$8a1ca1y6* z8fS18=Wreua1obq8CP%>*Ki#-a1#kg#4X&$9VFo{?%_Tj;2|F2F`nQlp5ZxO;3Zz+ zHQwMY-r+qy;3GcaGrr&}lJO1S@dH1Rf>iv%Z~Vbu{9EWx3oBT|2DV5CJJ=&VG9V)| zAv3ZdD;$sw+2M#B$cbFYjXcPUe8`UiD2PIELSYm^Q4~XQlt4+8LTNao49cP$%A*1* zq7qzC8CBqls;GwQsDYZO1vj{(HtN6w3UyHr_0a$g;fY3Qj3#J`X7GYHe9#=eXaPU8 zL@TsL8~7stZP5+cLJ*3+=!gCofPol~8cA|_!nA}|G0F%8o(12ZuTvoQyAF%R>x01FX`C@jKa zEWuJN!*Z;^O02?atif8W!+LDMMr^`nY{6D+Lo{Nr9Xk+;hdAuV0UX33 z9L5pEL*pop;W$pMCK8Z{TeyuoNWxv*!+ku! zLp;J`Ji${u!*jgAOT5Bsyun+%!+U(dM|{F(e8E>F;~T!?2Yw<2srZH8_=CUrcg&L( zR^Ijut$1iKt^OjW@JHDI3OFc!x1@<6SY^U%qX8Pi6OGUq zP0$q0;015^pgDZe0)A+TR%nej@J9gJq8-|!13ID;0?`>=&=uX#9X-$!y%2=n2u2@- zAQXMk5B)I!12G7L5r!ccieVUz5g3V47>zL)i*X3Ycuc@VOu}SDU<#&U8m40gW?~j* zV-DtG9_C{K79tW+ScJt`f~8o7;@e9B42Y>PJkS{H)U=17CA|32tkMziZjL3w{$bzhJKsIEDBXS@oav?YJATRPE zKMJ5A3c(45Q3OR%48>6bB~c2c;fyjUi*hKB3aE%ma6x5Mfh($_8mglPYN8h0;Evj; z0}m+FMLpC<12lvu8lf?opedTc3*PWSbNHeK{Lm7u&>C&vj{vkqJG4g!bVMfvqBFXn zE4raOdY~tIAqc$@j6MiKDEguw`eOhFVh{!+3_~y!!!R5pFcPCM8e=dP;}DMVn1G3x zgvp4&6imf5OvenOCl9L&W$%*O&OL?oiH2#c`vcx3ahaOYq1XNu>l*g z37fG6Td@t%h{1O3KrD7*7j|P0_F^C6upb9-5QlIWM-UHstGI^ixPhBUKq7A8Htrw^cX1E*@c<9;2#@guPw@=T@d7XL3a{}7Z}ATA z@c|$437_!=Uy+P&_>Ld=i4>&b7k=Xp{^H*eZ(3Nv8aA*+I@rM;>5%~$kqMcR1zF*M zY{(8r>EXb4XU?MBKt{+(8oV;vVkf0UqKJ9^(m~ z;u)Uf1zzG6UgHhk;vL@O13uytKI03%A{pQC9Y63BDM-aH{Kg;r#lHjow6KCTY+#FY zu!B9)BLgxb6EY(Uvcdt`kR6W5ft<*N+{lBx$cOwWfPyFlClp2z6h$!j z0T_ru7>qCs!B7mtaE!o6jKXM)!B~t#IL2cFCSnpMBLY(}71J;sGcXggFdK6)7xOS5 z3$PH8h{7T)#u6;WGAzdmti&p;#u}`}I;_VAY{VvP#ujYFHbf%^+pz<&*oj@(jXl_l zeTc(;9Kb;w!eJaiJT#8t7>?rvPT~|!;|$K?9M0ncF5(g{;|i|g8m{98ZXyARxP{xe zgCyL=J>16wJj5eB#uGfnGd#x&yu>TK#v8oFJG{pSe8eYw#ut1=GQQzEe&8okkcwaU zjX(H{f8`x%VFhd0z!vFX2YaMP24qAgWJVTbg#)r7I~1zph%-O&R* z(F;N7jbQXa2tv^p{m>r+Fc5<<7-1NKp%{kY7=e)(h0z#;u^5MNjK>5_#3W2c1g2mr zreQi}U?yf^Hs)Y1=3zb-U?CzAg+*A5C0L4OSdJA~iB(vQHCT&vSdR_Zh)vjxE!c`} zh(-*yV+Uff6T7e*d$1S#5QqIZfP*-M!#IL?XdJ~c9LEWq#3`J{8JxvAoW})R#3fwD z6Th(~ygCwPiyc#ao%iC1`yH+YM8c#jYGh)?*8 zFZhaNe8YGAz)z$g6~FKsfAAOoihI(+3f8cJEz-db_DGKm$cRkHj4a3s2V_HbI3fpf zA{TNa5Aq@(@}mF>q7a-=7)4MN#ZVk2P!gq38qO$#vM7i0sDO&71Q%3B6}X}*s-Ze+ zpeAa;4eqFoI`Du(UDQK;G(bamq7fRS37VoAyx0!*zz;3a3a!xw{s=%@v_pGz zKu2^!AUdN9x}qDpqX&AT7lP0m!RUh!grYC{p+5#-AO>MD!Y~9wF$}{o0wXaBqcH|! zF%IDvj|rHFNtlcXOuAvmEhil8Wpp*TvQBub$)oKXg4Q4Zx% z0TodRE~tzua79&ALv_?ZP1J%L+)*2K-~olYsE7J!fQIlyBQ!=6G(|Ib!5cnk4qvo@ zA6lXnTB8m85rDR6hxX`zj_8CybVe6+MK^Ru5A;MY1fe&A(FY+2MPKwoe+>6n3;n1$JxgSnW8`B;F3h(r_? zVKJ6qDVAY5R$wJoVKvrZE!JT@Hee$*VKcU1E4CpTG1!hBh{aCq!fx!rUhG30_TvB! z;t&qw2;!k}6vuEJCvXy{a2jWD7Uyst7jO}ma2Z!{71wYbH*gaPNW?AN#vLT#F7Dwz z9^fG!;W3`zDW2guUf?BO;WggiE#BchKHwuh;WNJAE0XaI-|+)Kk%CnG!f*V+U;HcV zOA9Ml!v?lU2Rqm!Ju)C8G9fdvAS)b@4cXy{9LR}W$c;S6i+sqB0w{<=a6(}eK~WS# zag;zwltO7ZqYTQT9Ll2tDxwlxP#IO=imIrF>ZpO5s0BB;qc-Zm0}6Ff5B1Ri4dIDK zXpAOkie~VFH+;|>zGwkIv_vbkMjQAe0Bz9@?a=`p(FuX*j4tSkZs?94=!sqkLT?14 z4?+-%zUYVk7=VEoguw{I5DdjI495tJ#3+o$7>va@gkwA=U?L`AG9oYqQ!x$GF#|I( z3$rl?b1@I|u>cDZi6|_>Vl2T@EW>iFz)GybYOKLptiyV2z(#DsW^BP$Y(q3+upK)P zi=Eho-PnV@*oQdm#{nF~AsogL#6#mKj^Q{?;3Q7rG|u2G&fz>R;36*JGOpk%uHiav z;3g7~h+DXgJ4nJ^+{1l5z(YL3V?4oAJi~Lmz)QTsYrMf*yu*8Zz(;(-XMDj|B;y;t z;|G2s1*!Oj-}r;S_*d4M7FMu^4Q!DPcCbf!WI#q_LS|$^RyZIVvcnNMkQ2F(8+niy z`H&w4P!NUSgu*C-q9}&qD1nkFh0<_F8I(milt%?rL?yVOGOEB8RZ$JqQ3Ewm3vO^n zZPbAW6zZZL>Z1V~!V`_q7){U=&EN%Z_@Fs_(E@&GiB@QhHtcO{6TJ|G-Uvn?gdh}s(GUGG00S`ygAs-y7>Z#Sju9A%Q5cOe7>jWT$9PP@ zL`=eDL|_W0Vj8An24-RwW@8TKVjkvW0Tv<>QCNhSdhj@g?c!H;RhUa*Jmw1KOc!Rfi zhxhn^kNAYo_=2xU#y5P&5Bx+5Qt=DF@dtnLuc$XItY8fr*diV5V2||3fQ-n5%*cYQ za6mR>ha++zCvqV-@*pqrAwLSBAPT_=g;4}WQ4GaV0wqxjrQwV+D2s9^j|!-WN^n7C zRDmn1q8h5B25O=f+~AJdr~?lu)I~kiM*}p3CmNwKnxH9~!3*B-L38+`1^mzwtbMLV=d2XsUy1fny#pewqeJ9?ledLanC5sW?vK`8p7ANpee24WBfBMd_@6vHqa zBQO%9FdAbp7UK|(@tA;#n1soQz!XfyG)%_~%)~6r#vIJWJj}-eEJP%tun3E>1WU0D z%drA0u?nlP25Yen>#+eFu?d^81zWKV(TKrz>_9AbVi$H}5B6do;;$riNNI)WP;Wq9d33qW1_wfJ^@d%Ic z1W)k{&+!5;@d~f;25<2W@9_a2@d=;t1z(YjZ}^TM_=yyx;un775B}m`Nq1UU!5TKO zMLO8Q9_f(*8IcK@kp)@dfNaPPN8~_G$k7>c6=N}?1> z!x?2z7UfVL6;KhC;DXAi0#{T;HB?6p)I=?~!5y_x2OdzUi+ZS!251ORG(uxEK~pq? z7rfzv=I})e_@O0Qp*7mT9|35Kc4&_d=!i}TL}zqCS9C*n^gvJaLJ)c*7<~|eQ1nGV z^v3`U#2^et7=~adhG95H;D51q&(V@(Z=;~A%eHOXwr$(CZQHhO+qSLlvejMany32L z-H!(R5Wp937^5QjO!QI2t(6P)A}r#Zt}&T*a#T;vj$xx!Vh zah)67h2uUbH6Na#aBRmm^NF*W?g{VX$Ix&bzEMgOfxWpqq z2}npH5|f0aBqKQ~NJ%PElZLdUBRv_&NG39qg{)*FJ2}WnE^?EHyyPQ41t>@%3R8rl z6r(sLC`l}a> z$Rs8+g{e$qIy0EbEM_x@xy)le3s}e^7PEw-V?7(#$R;+kg{^F3 zJ3H9PE_Snrz3gK@2RO(f4s(Q~9OF1AILRqabB42=<2)C*$R#dwg{xfSIybnP^DMC?-QJfN#q!gto zLs`mEo(fc?5|yb!RjN^)8q}l~wW&j0>QSEtG^7!YX+l$)(VP~vq!q1cLtEO>o(^=R z6P@WoSGv)i9`vLaz3D?=`q7^O3}g_48NyJ8F`N;MWE7(r!&t^Ko(W835|f$2RHiYV z8O&rBvzfzO<}sfIEMyUjS;A75v78mGWEHDf!&=s{o(*hd6Pww>R<^O79qeQmyV=8D z_OYJ>9OMv(Il@tnahwyJDP6JlYEp~Z)S)i*s80hL(ul@1p()L1P77Mniq^EDE$wJe2RhP;&UB$G-RMpa zdeV#D^r0{P=+6KKGKj$pVJO2G&Im>_iqVW=EaMo@1ST?x$xLA?)0oZ-W-^P}%waC` zn9l+hvWUejVJXX4&I(qtiq))PE$dj%1~#&Z&1_*S+t|(ycCw4z>|rna*v|nDa)`qm z;V8#A&IwL(iqo9oEay1S1uk-l%Ut0q*SO9NZgPv;+~F?wxX%L~@`%U$&L2GCDbIM$ z3tsYy*Sz5^?|9D#KJtmreBn?2;w#_y&JX_PC%-Pr^&0^RL|}ptlwbrW1R)7UXu=Sd zaD*oU5s5@(q7ap6L?;F@iA8MU5SMtwCjkjbL}HSVlw>3)1u02IYSNIFbfhN(8OcOu zvXGT*WG4qX$whARke7VqrvL>hL}7|hlwuU81SKg&Y06NRa+Ie66{$pJs!)|`RHp_t zsYPw-P?vhtrvVLVL}QxJlx8%i1ubbsYueD3cC@Dh9qB}8y3mzwbf*VB=|yk)(3gJn zX8;2k#9)Rnlwk~K1S1*6XvQ#>ag1jI6Pd(hrZAOhOlJl&nZ<18Fqe7EX8{XY#A24P zlw~Yu1uI#_YSyrpb*yIt8`;EWwy>3LY-a~M*~M=5u$O)8=Ku#e#9@wblw%y{1SdJg zY0hw#bDZY_7rDe`u5guWT;~Qixy5bnaF=`B=K&9S#AANv51#OpXFTTxFL}jl-td-p zyypWS`NU_w@F#!qm2Z6K2Y>UEUl-*2jerCqFhK}PFoF|;kc1*MVF*h&!V`grL?SX# zh)Oh~6N8wF-b^DGLn;ml%ygxX-G>t(vyLVWFj+J$VxV{lY^Y( zA~$)+OFr^bfPxgFFhwXzF^W@yl9Zw}WhhHI%2R=gRH8Cfs7f`eQ-hk+qBeD?OFin- zfQB@pF->SnGn&(amb9WZZD>n7+S7rKbfPm|=t?)b(}SM$qBni$OF#NEfPoBRFhdy1 zForXNk&I$AV;IXg#xsG5Oky%qn94M!GlQATVm5P_%RJ_@fQ2k#F-us=GM2M~m8@bl zYgo%V*0X_)Y+^H8*vdAxvxA-NVmEu(%RcsVfP)<3Fh@AbF^+SBlbqr-XE@6_&U1l_ zT;eiUxXLxIbAy}Q;x>1<%RTP%fQLNdF~9Q%Pk72Rp7Vm2yy7))c*{H9^MQ|i;xk|P zlfU@NH@@?Ozxm0pi*f!&Kmrk%AOs~C!3jY~LJ^uUge4r|i9kdm5t%4NB^uF*K}=#1 zn>fTJ9`Q*)LK2afBqSvn$w@&^$tANeUj zK?+frA{3<<#VJ8aN>Q3Jl%*WysX#?4QJE@Kr5e?#K}~8=n>y5`9`$KJLmJVTCN!lP z&1pePTG5&|w51*G=|D$1(U~rEr5oMpK~H+on?CfVAN?7?Kn5|GAq-_0!x_OyMlqT( zjAb0-nZQIQF_|e$Wg63&!Axc`n>oy79`jkiLKd-@B`jqb%UQunR$y z!A)*)n>*a)9`|{`Lmu&%-}!?lJmneBdBICw@tQZh{7OcbILjp)Q6Cb5W39O4p>_#_}9 ziAYQml9G(%q#z}!NKG2jl8*FbAS0Q`Oct_|jqKzgC%MQ?9`cfp{1l)dg(yrBic*Z? zl%OP~C`}p4QjYRepdyv1Ockn9jq22(Cbg(d9qLk#`ZS;+jc800n$nEsw4f!eXiXd1 z(vJ3Ypd+2=Oc%P+jqdcIC%x!RANtad{tRFsgBZ*ZhBA!dj9?_A7|j^QGLG>~U?P*4 z%oL_Fjp@u_CbO8$9Og2Q`7B@|i&)GOma>fHtY9UpSj`&NvX1p^U?ZE@%oet?jqU7U zC%f3q9`>@2{T$#Rhd9g;j&h9SoZuv25Ry=YCJbQ-M|dI-kw`=)3Q>thbYc*bSi~j{afwHK5|EHYBqj+-Nk(!~ zkdjoSCJkvxM|v`lkxXPJ3t7oVc5;xDT;wJXdC5n93Q&+j6s8D8DMoQhP?A!VrVM2% zM|mnxkxEpi3RS5_b!t$PTGXZvb*V>v8qknNG^PnnX-0Ee(2`cPrVVXrM|(QZkxq1` z3tj0(cY4s1Ui799ed$Mk1~8C83}y&J8OCr%Fp^P>W(;E)$9N_%kx5Ku3R9WJbY?J< zS-EM^HyS;lf!u##1*W({ju$9gufkxgu73tQR7c6P9nUF>ELd)dc+ z4seh|9Oei|ImU5LaFSD;<_u>!$9XPrkxN|W3Rk(tb#8EzTioUjce%%X9`KMyJmz=) z;0aH8#&cfql2^Ru4R3kJdp_`yPkiPJfASY!`NnsC@HamR5MTZikU#_`2tf%(a6%B0 zP=qE7VF^cgA`p>CL?#MRiAHo{5R+KMCJu3lM|={HkVGUV2}wyta#E0zRHP;iX-P+V zGLVr>WF`w)$wqc^kds{GCJ%YZM}7)WkU|uu2t_GIaY|5Y(34*D zrVoATM}Gz|kUW_xyE&FaFbiy<_>qc$9*2~kVib`cmCiBPkF|3UhtAv zyygvWdB=M`@R3h^<_mxF7hn0tcYg3UKM9aP{u7Wu1SSYU2}W>25Ry=YCJbQ-M|dI- zkw`=)3Q>thbYc*bSi~j{afwHK5|EHYBqj+-Nk(!~kdjoSCJkvxM|v`lkxXPJ3t7oV zc5;xDT;wJXdC5n93Q&+j6s8D8DMoQhP?A!VrVM2%M|mnxkxEpi3RS5_b!t$PTGXZv zb*V>v8qknNG^PnnX-0Ee(2`cPrVVXrM|(QZkxq1`3tj0(cY4s1Ui799ed$Mk1~8C8 z3}y&J8OCr%Fp^P>W(;E)$9N_%kx5Ku3R9WJbY?J-EM^HyS;lf! zu##1*W({ju$9gufkxgu73tQR7c6P9nUF>ELd)dc+4seh|9Oei|ImU5LaFSD;<_u>! z$9XPrkxN|W3Rk(tb#8EzTioUjce%%X9`KMyJmz=);0aH8#&cfql2^Ru4R3kJdp_`y zPkiPJfASY!`NnsC@HamRkWl^;kU#_`2tf%(a6%B0P=qE7VF^cgA`p>CL?#MRiAHo{ z5R+KMCJu3lM|={HkVGUV2}wyta#E0zRHP;iX-P+VGLVr>WF`w)$wqc^kds{GCJ%YZ zM}7)WkU|uu2t_GIaY|5Y(34*DrVoATM}Gz|kUW_ zxyE&FaFbiy<_>qc$9*2~kVib`cmCiBPkF|3UhtAvyygvWdB=M`@R3h^<_mxF7hn0t zcYg3UKM9aX{u7Wu1SSYU2}W>25Ry=YCJbQ-M|dI-kw`=)3Q>thbYc*bSi~j{afwHK z5|EHYBqj+-Nk(!~kdjoSCJkvxM|v`lkxXPJ3t7oVc5;xDT;wJXdC5n93Q&+j6s8D8 zDMoQhP?A!VrVM2%M|mnxkxEpi3RS5_b!t$PTGXZvb*V>v8qknNG^PnnX-0Ee(2`cP zrVVXrM|(QZkxq1`3tj0(cY4s1Ui799ed$Mk1~8C83}y&J8OCr%Fp^P>W(;E)$9N_% zkx5Ku3R9WJbY?J-EM^HyS;lf!u##1*W({ju$9gufkxgu73tQR7 zc6P9nUF>ELd)dc+4seh|9Oei|ImU5LaFSD;<_u>!$9XPrkxN|W3Rk(tb#8EzTioUj zce%%X9`KMyJmz=);0aH8#&cfql2^Ru4R3kJdp_`yPkiPJfASY!`NnsC@HamRkXZf` zkU#_`2tf%(a6%B0P=qE7VF^cgA`p>CL?#MRiAHo{5R+KMCJu3lM|={HkVGUV2}wyt za#E0zRHP;iX-P+VGLVr>WF`w)$wqc^kds{GCJ%YZM}7)WkU|uu2t_GIaY|5Y(34*DrVoATM}Gz|kUW_xyE&FaFbiy<_>qc$9*2~kVib` zcmCiBPkF|3UhtAvyygvWdB=M`@R3h^<_mxF7hn0tcYg3UKM9aT{u7Wu1SSYU2}W>2 z5Ry=YCJbQ-M|dI-kw`=)3Q>thbYc*bSi~j{afwHK5|EHYBqj+-Nk(!~kdjoSCJkvx zM|v`lkxXPJ3t7oVc5;xDT;wJXdC5n93Q&+j6s8D8DMoQhP?A!VrVM2%M|mnxkxEpi z3RS5_b!t$PTGXZvb*V>v8qknNG^PnnX-0Ee(2`cPrVVXrM|(QZkxq1`3tj0(cY4s1 zUi799ed$Mk1~8C83}y&J8OCr%Fp^P>W(;E)$9N_%kx5Ku3R9WJbY?J-EM^HyS;lf!u##1*W({ju$9gufkxgu73tQR7c6P9nUF>ELd)dc+4seh|9Oei| zImU5LaFSD;<_u>!$9XPrkxN|W3Rk(tb#8EzTioUjce%%X9`KMyJmz=);0aH8#&cfq zl2^Ru4R3kJdp_`yPkiPJfASY!`NnsC@HamRkW~H?kU#_`2tf%(a6%B0P=qE7VF^cg zA`p>CL?#MRiAHo{5R+KMCJu3lM|={HkVGUV2}wyta#E0zRHP;iX-P+VGLVr>WF`w) z$wqc^kds{GCJ%YZM}7)WkU|uu2t_GIaY|5Y(34*DrVoATM}Gz| zkUW_xyE&FaFbiy<_>qc$9*2~kVib`cmCiBPkF|3UhtAvyygvWdB=M` z@R3h^<_mxF7hn0tcYg3UKM9ab{u7Wu1SSYU2}W>25Ry=YCJbQ-M|dI-kw`=)3Q>th zbYc*bSi~j{afwHK5|EHYBqj+-Nk(!~kdjoSCJkvxM|v`lkxXPJ3t7oVc5;xDT;wJX zdC5n93Q&+j6s8D8DMoQhP?A!VrVM2%M|mnxkxEpi3RS5_b!t$PTGXZvb*V>v8qknN zG^PnnX-0Ee(2`cPrVVXrM|(QZkxq1`3tj0(cY4s1Ui799ed$Mk1~8C83}y&J8OCr% zFp^P>W(;E)$9N_%kx5Ku3R9WJbY?J-EM^HyS;lf!u##1*W({ju z$9gufkxgu73tQR7c6P9nUF>ELd)dc+4seh|9Oei|ImU5LaFSD;<_u>!$9XPrkxN|W z3Rk(tb#8EzTioUjce%%X9`KMyJmz=);0aH8#&cfql2^Ru4R3kJdp_`yPkiPJfASY! z`NnsC@HamRkX-%~kU#_`2tf%(a6%B0P=qE7VF^cgA`p>CL?#MRiAHo{5R+KMCJu3l zM|={HkVGUV2}wyta#E0zRHP;iX-P+VGLVr>WF`w)$wqc^kds{GCJ%YZM}7)WkU|uu z2t_GIaY|5Y(34*DrVoATM}Gz|kUW_xyE&FaFbiy z<_>qc$9*2~kVib`cmCiBPkF|3UhtAvyygvWdB=M`@R3h^<_mxF7hn0tcYg3UKM9aR z{u7Wu1SSYU2}W>25Ry=YCJbQ-M|dI-kw`=)3Q>thbYc*bSi~j{afwHK5|EHYBqj+- zNk(!~kdjoSCJkvxM|v`lkxXPJ3t7oVc5;xDT;wJXdC5n93Q&+j6s8D8DMoQhP?A!V zrVM2%M|mnxkxEpi3RS5_b!t$PTGXZvb*V>v8qknNG^PnnX-0Ee(2`cPrVVXrM|(QZ zkxq1`3tj0(cY4s1Ui799ed$Mk1~8C83}y&J8OCr%Fp^P>W(;E)$9N_%kx5Ku3R9WJ zbY?J-EM^HyS;lf!u##1*W({ju$9gufkxgu73tQR7c6P9nUF>EL zd)dc+4seh|9Oei|ImU5LaFSD;<_u>!$9XPrkxN|W3Rk(tb#8EzTioUjce%%X9`KMy zJmz=);0aH8#&cfql2^Ru4R3kJdp_`yPkiPJfASY!`NnsC@HamRkW&5=kU#_`2tf%( za6%B0P=qE7VF^cgA`p>CL?#MRiAHo{5R+KMCJu3lM|={HkVGUV2}wyta#E0zRHP;i zX-P+VGLVr>WF`w)$wqc^kds{GCJ%YZM}7)WkU|uu2t_GIaY|5Y z(34*DrVoATM}Gz|kUW_xyE&FaFbiy<_>qc$9*2~kVib`cmCiBPkF|3 zUhtAvyygvWdB=M`@R3h^<_mxF7hn0tcYg3UKM9aZ{u7Wu1SSYU2}W>25Ry=YCJbQ- zM|dI-kw`=)3Q>thbYc*bSi~j{afwHK5|EHYBqj+-Nk(!~kdjoSCJkvxM|v`lkxXPJ z3t7oVc5;xDT;wJXdC5n93Q&+j6s8D8DMoQhP?A!VrVM2%M|mnxkxEpi3RS5_b!t$P zTGXZvb*V>v8qknNG^PnnX-0Ee(2`cPrVVXrM|(QZkxq1`3tj0(cY4s1Ui799ed$Mk z1~8C83}y&J8OCr%Fp^P>W(;E)$9N_%kx5Ku3R9WJbY?J-EM^Hy zS;lf!u##1*W({ju$9gufkxgu73tQR7c6P9nUF>ELd)dc+4seh|9Oei|ImU5LaFSD; z<_u>!$9XPrkxN|W3Rk(tb#8EzTioUjce%%X9`KMyJmz=);0aH8#&cfql2^Ru4R3kJ zdp_`yPkiPJfASY!`NnsC@HamRkXrr|kU#_`2tf%(a6%B0P=qE7VF^cgA`p>CL?#MR ziAHo{5R+KMCJu3lM|={HkVGUV2}wyta#E0zRHP;iX-P+VGLVr>WF`w)$wqc^kds{G zCJ%YZM}7)WkU|uu2t_GIaY|5Y(34*DrVoATM}Gz|kUW_xyE&FaFbiy<_>qc$9*2~kVib`cmCiBPkF|3UhtAvyygvWdB=M`@R3h^<_mxF z7hn0tcYg3UKM9aV{u7Wu1SSYU2}W>25Ry=YCJbQ-M|dI-kw`=)3Q>thbYc*bSi~j{ zafwHK5|EHYBqj+-Nk(!~kdjoSCJkvxM|v`lkxXPJ3t7oVc5;xDT;wJXdC5n93Q&+j z6s8D8DMoQhP?A!VrVM2%M|mnxkxEpi3RS5_b!t$PTGXZvb*V>v8qknNG^PnnX-0Ee z(2`cPrVVXrM|(QZkxq1`3tj0(cY4s1Ui799ed$Mk1~8C83}y&J8OCr%Fp^P>W(;E) z$9N_%kx5Ku3R9WJbY?J-EM^HyS;lf!u##1*W({ju$9gufkxgu7 z3tQR7c6P9nUF>ELd)dc+4seh|9Oei|ImU5LaFSD;<_u>!$9XPrkxN|W3Rk(tb#8Ez zTioUjce%%X9`KMyJmz=);0aH8#&cfql2^Ru4R3kJdp_`yPkiPJfASY!`NnsC@HamR zkXHT^kU#_`2tf%(a6%B0P=qE7VF^cgA`p>CL?#MRiAHo{5R+KMCJu3lM|={HkVGUV z2}wyta#E0zRHP;iX-P+VGLVr>WF`w)$wqc^kds{GCJ%YZM}7)WkU|uu2t_GIaY|5< zQk13)WhqB_Do~M1RHh15sYZ2bP?K8JrVe$fM|~R5kVZ772~BB6b6U`nRY(34*DrVoATM}Gz|kUW_xyE&FaFbiy<_>qc$9;Ya z5D2-#uOYmjUqkWdLH{Ys|1%a_6^j)4wf4{dHvD^YfavXl{4*K+zZU%O@_(roC|;z% zKcQ0n-)H@wC^FOfKXLJ2jZvvc#(yS%#oVu<_7#pU3%MdGP=F0sZfa|G#X3{~o{b|9uww+y0O7Tee)`e{LySpv*sI*((1j|0|xe z|6A|>ZBfYve-pv~)o)h+Z~5~7c02#8ulK73|9K7meIbJUJ0CD$z<-tmvS0f(5ne+F z{-?3x|18$fB$};e4 zFPe$WWFafr_|^a9ASb!VO&;=+kNgy%AcgqVn-!rb#rU;9E+=(3WeG#AU8Bomp*LRPYoogCyO7rDtpUh1<%RTP%fQLNdF~9Q%Pk72R zp7Vm2yy7))c*{H9^MQ|i;xk|PlfU@NH@@?OzxhdkfbyS!1R^j&2ud)56M~S0A~azL zOE|(4frvyRGEs<1G@=uOn8YGBafnMi;*)@cBqA|MNJ=u2lY*3_A~k79OFGh%fsAA# zGg-(=HnNk0oa7=mdB{sX@>76<6rwOiC`vJkQ-YF|qBLbFOF7C@fr?b3GF7NbHL6pC zn$)5;b*M`{>eGORG@>z0Xi77h(}I??qBU)3OFP=rfsS;dGhOIPH@eeEMhTB zSjsY%vx1eZVl``6%R1JxfsJfpGh5ioHny{ao$O*ad)Ui9_H%%P9O5uXILa}ObApqc z;xuPC%Q?<-fs0(?GFQ0DHLi1mo800yceu+v?(=|$JmN9G^9N6O$}^txf|tDFHE(#! zJKpnwk9^`YU-*;1_{ulF^Mk+niNl=%ej^}(2uu)y5{%%4AS9s(O&G!wj_^bvB9Vwp z6rvK1=)@oeQenwWv)U>QayT zG@v1kXiO8D(v0S`pe3znO&i+Mj`nn*Bc13>7rN4o?)0E1z35FJ`qGd73}7IG7|alc zGK}GjU?ig$%^1cqj`2)jB9oZR6s9tb>C9jzvzW~s<}#1@EMOsvSj-ZZvW(@dU?r)hZbx46w6?sAX&Jm4XZc+Bto!4sbHjOV=IC9inR8{YDc_k6%_fR9F> z_{76<6rwOiC`vJkQ-YF|qBLbFOF7C@fr?b3GF7NbHL6pCn$)5;b*M`{>eGORG@>z0 zXi77h(}I??qBU)3OFP=rfsS;dGhOIPH@eeEMhTBSjsY%vx1eZVl``6%R1Jx zfsJfpGh5ioHny{ao$O*ad)Ui9_H%%P9O5uXILa}ObApqc;xuPC%Q?<-fs0(?GFQ0D zHLi1mo800yceu+v?(=|$JmN9G^9N6O$}^txf|tDFHE(#!JKpnwk9^`YU-*;1_{ulF z^Mk+nNq`{opMV4+FhK}PFoF|;kc1*MVF*h&!V`grL?SX#h)Oh~6N8wF-b^DGLn;ml%ygxX-G>t(vyLVWFj+J$VxV{lY^Y(A~$)+OFr^bfPxgFFhwXz zF^W@yl9Zw}WhhHI%2R=gRH8Cfs7f`eQ-hk+qBeD?OFin-fQB@pF->SnGn&(ambBv6 zDUmk(Iu-NlH1n@R)W1&G{W>t;iOzJPE8XZ$4|>vz-t?g_{pimC1~Q1j3}Gn47|sYr zGK$fRVJzbq&jcniiOEc1D$|(G3}!Nm+00=s^O(;97P5%NEMY0jSk4MovWnHLVJ+)e z&jvQKiOph{PlzDalAq3R04a)TALT=}1ooGLnhRWFafr$W9J&l8fBrAusvJPXP*2h{6=1 zD8(pF2})9m(v+brs7?)PQj6Nup)U2PPXij#h{iObDa~k33tG~O z*0iB5?PyO2I?{>GbfGKV=uQuM(u>~op)dXD&j1E8h`|hDD8m@e2u3oB(Trg%;~38b zCNhc1Okpb1n9dAlGK<;FVJ`ES&jJ>*h{Y^nDa%;S3Rbd;)vRGH>sZeQHnNG$Y+)*>T;VF$xXul3a*NyC z;V$>M&jTLvh{ycSA3WhH&v?!YUh<09yx}eHc+Uqu@`=xU;ZOeJE8qCe5B}yS0fNbY z0uqS81R*HF2u=t>5{l4-AuQntPXrvz-t?g_{pimC1~Q1j3}Gn47|sYrGK$fRVJzbq&jcniiOEc1D$|(G z3}!Nm+00=s^O(;97P5%NEMY0jSk4MovWnHLVJ+)e&jvQKiOp-QWF#jA zDM>|Y(vX&Pq$dLz$wX$dkd00k*TVTw?cViczYB`HN|%21Ya zl&1m}sYGR}P?c&_rv^2tMQ!T*9~9j~5G0Ed1_iqVW=EaMo@1ST?x$xLA?)0oZ-W-^P}%waC`n9l+h zvWUejVJXX4&I(qtiq))PE$dj%1~#&Z&1_*S+t|(ycCw4z>|rna*v|nDa)`qm;V8#A z&IwL(iqo9oEay1S1uk-l%Ut0q*SO9NZgPv;+~F?wxX%L~@`%Sg;VI8}&I?}hir2j1 zE$?{G2R`zN&wSx4-}ufCe)5ao{NXSE3oiczARvJVOb~(+jNpVIB%ugR7{U^c@I)XY zk%&wbq7seh#2_ZIh)o>g5|8*KAR&oJOcIikjO3&sC8HNAm8eV=s#1;W)SxD{s7)Q} zQjhvHpdpQDOcR>YjOMhUC9P;p8`{#2_H>{lo#;##y3&pA^q?ob=uIE`(vSWOU?77S z%n*h$jNy!6B%>J37{)S=@l0SMlbFmDrZSD`%wQ(7n9UsKGLQKzU?GcG%o3KejODCg zC97D?8rHIo^=x1xo7l`2wz7@w>|iIm*v%gHvXA{7;2?)M%n^=qjN_c(B&Rsd8P0N! z^IYH}m$=Lou5yj*+~6j+xXm5za*z8w;31EA%oCpSjOV=IC9inR8{YDc_k7?ZpZLrd zzVeOl{NN|Q_{|^w^1l%BPXGcEh`h{PlzDalAq3R04a)TALT=}1ooGLnhRWFafr$W9J&l8fBrAusvJ zPXP*2h{6=1D8(pF2})9m(v+brs7?)PQj6Nup)U2PPXij#h{iOb zDa~k33tG~O*0iB5?PyO2I?{>GbfGKV=uQuM(u>~op)dXD&j1E8h`|hDD8m@e2u3oB z(Trg%;~38bCNhc1Okpb1n9dAlGK<;FVJ`ES&jJ>*h{Y^nDa%;S3Rbd;)vRGH>sZeQ zHnNG$Y+)*>T;VF$ zxXul3a*NyC;V$>M&jTLvh{rtPDbIM$3tsYy*Sz5^?|9D#KJtmreBmqK_|6Z0@{8a6 z;V=ISDgOi@Ab|)>5P}kn;DjI~p$JVF!V-?~L?9xOh)fis5{>A@ASSVhO&sD9kN6}Y zA&E##5|WaPW_xyE&FaFbiy z<_>qc$9*2~kVib`2~T;(b6)V0SG?v8Z+XXiKJbxGeC7*Z`NnsC@RMKs<_~|deDS~k z2tYsr5ttwZB^bd8K}bRonlOYV9N~#TL?RKHC`2V1(TPD!ViB7-#3df_NkBppk(eYT zB^k*{K}u4Qnlz*(9qGwHMlz9^EMz4c*~vjpa*>-nh z$~2}kgPF`?HglNEJm#~2g)Cw*OIXS>ma~GDtYS55Sj#%rvw@9lVl!LV$~LyMgPrVR zH+$I2KK65fgB;>8M>xtcj&p*OoZ>WRILkTCbAgLo;xbpb$~CTYgPYvqHg~woJ?`^> zhdkmjPk72Rp7Vm2yy7))c*{H9^MQ|i;xk|P$~V6AgP;83H-Grczr~*a2tYsr5ttwZ zB^bd8K}bRonlOYV9N~#TL?RKHC`2V1(TPD!ViB7-#3df_NkBppk(eYTB^k*{K}u4Q znlz*(9qGwHMlz9^EMz4c*~vjpa*>-nMQr5Vj>K}%ZEnl`kh9qs8rM>^4&E_9_E z-RVJ3deNIc^ravD8NfgWF_<9?Wf;R5!AM3inlX%J9OIe5L?$trDNJP=)0x3cW-*&N z%w-<)S-?UTv6v++Wf{v^!Ae%Knl-Ft9qZY^MmDjTEo@~Q+u6ZRcCnj1>}4POIlw^< zahM|<fMJ{ofD_rFo*SWz>ZgHDC+~pqkdB8&+@t7w({N>+L-+u%kAb|)>5P}kn;DjI~p$JVF z!V-?~L?9xOh)fis5{>A@ASSVhO&sD9kN6}YA&E##5|WaP>6Q1&n=e*!0uXxQH-tvz3 zeBdLW_{25Ry=YCJbQ-M|dI-kw`=) z3Q>thbYc*bSi~j{afwHK5|EHYBqj+-Nk(!~kdjoSCJkvxM|v`lkxXPJ3t7oVc5;xD zT;wJXdC5n93Q&+j6s8D8DMoQhP?A!VrVM2%M|mnxkxEpi3RS5_b!t$PTGXZvb*V>v z8qknNG^PnnX-0Ee(2`cPrVVXrM|(QZkxq1`3tj0(cY4s1Ui799ed$Mk1~8C83}y&J z8OCr%Fp^P>W(;E)$9N_%kx5Ku3R9WJbY?J-EM^HyS;oK5)s~wp zSjj3@vxc>-V?7(#$R;+kg{^F3J3H9PE_Snrz3gK@2RO(f4s(Q~9OF1AILRqabB42= z<2)C*$R#dwg{xfSIybnZ7q7j`K z#3UB6i9=lC5uXGkBoT>8LQ;~EoD`%a6{$%>TGEl83}hq|naM&{vXPw}F`or2WD$#5!cvy8oE5BO6{}gpTGp|i z4Qyl+o7uuvwy~WZ>|__a*~4D;v7ZAR`P7Goai`c{=F7b#@ z0uqvl#3Ugp$w*ELQj&_)q#-ToNKXbbl8MY@AuHL)P7ZRCi`?WPFZsw%0SZ!x!W5w> z#VAe*N>Yl_l%Xu;C{G0{Qi;k`p(@p=P7P{Oi`vwoF7>ES0~*qZ#x$WR&1g;wTGEQv zw4p8SXio<^(uvM=p)1|!P7iw0i{A91Fa7Ax00uIM!3<$2!x+v8Mly=gjA1O}7|#SI zGKtAdVJg#@&J1QUi`mR!F7uer0v57}#Vlbd%UI3|RNkn3jkd$O3 zCj}`YE-8NHK|2y>QI+@)TaRrX+&e1(3EC0rv)u(MQhs7mUgtK10Cr^ zXS&dpZgi&yJ?TYn`p}nt^k)DA8N^_QFqB~oX9Ob|#c0MbmT`<{0u!0UWTr5cX-sDZ zGnvI~<}jCe%x3`$S;S(Nu#{yiX9X)+#cI~DmUXOW0~^`IX11`EZER-;JK4o<_OO?I z?B@UnImBU(aFk;l=L9D?#c9rPmUEov0vEZ&Wv+0QYh33BH@U@a?r@iT+~)xgdBkI$ z@RVmf=LIi$#cSU1mUq1810VUsXTI>2Z+zzmKl#OP{_vN7C0_p#fPe%dFhK}PFoF|; zkc1*MVF*h&!V`grL?SX#h)Oh~6N8wF-b^DGLn;ml%ygxX-G>t z(vyLVWFj+J$VxV{lY^Y(A~$)+OFr^bfPxgFFhwXzF^W@yl9Zw}WhhHI%2R=gRH8Cf zs7f`eQ-hk+qBeD?OFin-fQB@pF->SnGn&(amb9WZZD>n7+S7rKbfPm|=t?)b(}SM$ zqBni$OF#NEfPoBRFhdy1ForXNk&I$AV;IZ7Pszub;I&HLPVF>)F6YHnEv4Y-JnU*}+bBv70^YWgq)Fz(Edi zm?IqJ7{@umNltN^Go0ld=efW|E^(PFT;&?qxxr0tahp5b4e*_>Pfe1_xf)b42gdilL2u&Em z5{~dhAR>{7OcbILjp)Q6Cb5W39O4p>_#_}9iAYQml9G(%q#z}!NKG2jl8*FbAS0Q` zOct_|jqKzgC%MQ?9`cfp{1l)dg(yrBic*Z?l%OP~C`}p4QjYRepdyv1Ockn9jq22( zCbg(d9qLk#`ZS;+jc800n$nEsw4f!eXiXd1(vJ3Ypd+2=Oc%P+jqdcIC%x!RANtad z{tRFsgBZ*ZhBA!dj9?_A7|j^QGLG>~U?P*4%oL_Fjp@u_CbO8$9Og2Q`7B@|i&)GO zma>fHtY9UpSj`&NvX1p^U?ZE@%oet?jqU7UC%f3q9`>@2{T$#Rhd9g;j&h9SoZuv< zIL#T(a*p#{;3Ai}%oVP3jqBXtCbziF9qw|E`#j(wk9f=zp7M<6yx=9Tc+DH$@{ad> z;3J>-%oo1$jqm*6C%^d3AO7;M!1F%>5RgCwCI~?ZMsPw9l2C*u3}FdJcp?yyNJJ(I zQHe%$Vi1#9#3l}LiAQ`AkdQ@0trU*qTMsZ3|l2VkW3}q=tc`8tmN>ru_RjEdGYEY9})TRz~sYiVp z(2zznrU^}HMsr%wl2){)4Q**hdpgjOPIRUVUFk-5deDAZhTiM2TcCeFO>}C&p*~fkkaF9bB<_JeQ#&J$?l2e@K3}-pVc`k5~ zOI+p(SGmS@Zg7)Z+~y8hfil%qTqs7NI$Q-!KjqdGOHNiAwqhq~0GJ`HF{BO23$rZl5D zEoezATGNKMw4*&8=tw6z(}k{dqdPt5NiTZShraZqKLZ%ZAO&aK$t-3whq=sSJ_}gLA{MiRr7UAPD_F@YR>(8$u4%YhrR4$KLP^DMC?-QJfN# zq!gtoLs`mEo(fc?5|yb!RjN^)8q}l~wW&j0>QSEtG^7!YX+l$)(VP~vq!q1cLtEO> zo(^=R6P@Y8zq*I6W;eRigP!!FH+|?!Kl(F(fed0WLm0|1hBJbZjAArn7|S@uGl7Xr zVlq>h$~2}kgPF`?HglNEJm#~2g)Cw*OIXS>ma~GDtYS55Sj#%rvw@9lVl!LV$~LyM zgPrVRH+$I2KK65fgB;>8M>xtcj&p*OoZ>WRILkTCbAgLo;xbpb$~CTYgPYvqHg~wo zJ?`^>hdkmjPk72Rp7Vm2yy7))c*{H9^MQ|i;xk|P$~V6AgP;83H-GrczvBM?2tYsr z5ttwZB^bd8K}bRonlOYV9N~#TL?RKHC`2V1(TPD!ViB7-#3df_NkBppk(eYTB^k*{ zK}u4Qnlz*(9qGwHMlz9^EMz4c*~vjpa*>-nMQr5Vj>K}%ZEnl`kh9qs8rM>^4& zE_9_E-RVJ3deNIc^ravD8NfgWF_<9?Wf;R5!AM3inlX%J9OIe5L?$trDNJP=)0x3c zW-*&N%w-<)S-?UTv6v++Wf{v^!Ae%Knl-Ft9qZY^MmDjTEo@~Q+u6ZRcCnj1>}4PO zIlw^fMJ{ofD_rFo*SWz>ZgHDC+~pqkdB8&+@t7w( z{N>-#j{gWiKmrk%AOs~C!3jY~ zLJ^uUge4r|i9kdm5t%4NB^uF*K}=#1n>fTJ9`Q*)LK2afBqSvn$w@&^$tANeUjK?+frA{3<<#VJ8aN>Q3Jl%*WysX#?4QJE@K zr5e?#K}~8=n>y5`9`$KJLmJVTCN!lP&1pePTG5&|w51*G=|D$1(U~rEr5oMpK~H+o zn?CfVAN?7?Kn5|GAq-_0!x_OyMlqT(jAb0-nZQIQF_|e$Wg63&!Axc`n>oy79`jki zLKd-@B`jqb%UQunR$y!A)*)n>*a)9`|{`Lmu&%Cp_gD&w0U1Uh$eY zyyYG5`M^g$@tH4t-nMQr5Vj>K}%ZEnl`kh9qs8rM>^4&E_9_E-RVJ3deNIc^ravD8NfgW zF_<9?Wf;R5!AM3inlX%J9OIe5L?$trDNJP=)0x3cW-*&N%w-<)S-?UTv6v++Wf{v^ z!Ae%Knl-Ft9qZY^MmDjTEo@~Q+u6ZRcCnj1>}4POIlw^fMJ{ofD_rFo*SWz>ZgHDC+~pqkdB8&+@t7w({N>-VuKx%?Kmrk%AOs~C!3jY~LJ^uUge4r|i9kdm5t%4NB^uF* zK}=#1n>fTJ9`Q*)LK2afBqSvn$w@&^$t zANeUjK?+frA{3<<#VJ8aN>Q3Jl%*WysX#?4QJE@Kr5e?#K}~8=n}1bIbh2uUbH6Na#aBRmm^NF*W?g{VX$Ix&bzEMgOf zxWpqq2}npH5|f0aBqKQ~NJ%PElZLdUBRv_&NG39qg{)*FJ2}WnE^?EHyyPQ41t>@% z3R8rl6r(sLC`l}a>$Rs8+g{e$qIy0EbEM_x@xy)le3s}e^7PEw-V?7(#$R;+k zg{^F3J3H9PE_Snrz3gK@2RO(f4s(Q~9OF1AILRqabB42=<2)C*$R#dwg{xfSIybn< zEpBs%yWHbG4|vEU9`l5!JmWbpc*!eX^M<#)<2@hv$R|GYg|B?$J3sizFMjifzx+GY z`5yrYNFV|egrEc?I3Wm0C_)p4u!JK#5r{}6A`^wEL?b#eh)FDB6Nk9OBR&a8NFoxG zgrp=RIVngTwNFfSSgrXFqI3*}a zDN0j@vXrAd6{tuhDpQ53RHHgIs7WnqQ-`|LqdpC2NFy54gr+p3IW1^OD_YZrwzQ)? z9q33WI@5)&bfY^x=t(bn(}%wFqdx-}$RGwYgrN*$I3pOzC`L1ev5aFp6PU;(CNqVp zOk+ATn8_?=Gl#j%V?GO5$RZZAgrzKFIV)JnDps?GwX9=38`#JuHnWATY-2k+*vT$- zvxmLxV?PHt$RQ4MgrgkeI43yCDNb{Svz+5R7r4kJE^~#eT;n=7xXCSUbBDX!<30~~ z$Ri%}gr_{?IWKt0D_--4x4h#$ANa^8KJ$gIeB(Pm_{lGR^M}9uJJS0f0SHJS0uzLw z1S2>h2uUbH6Na#aBRmm^NF*W?g{VX$Ix&bzEMgOfxWpqq2}npH5|f0aBqKQ~NJ%PE zlZLdUBRv_&NG39qg{)*FJ2}WnE^?EHyyPQ41t>@%3R8rl6r(sLC`l}a>$Rs8+g{e$qIy0EbEM_x@ zxy)le3s}e^7PEw-V?7(#$R;+kg{^F3J3H9PE_Snrz3gK@2RO(f z4s(Q~9OF1AILRqabB42=<2)C*$R#dwg{xfSIybnTwNFn}Jr4}}eP?Ta6rvxP_MQO@VmU5J*0u`x5WvWn> zYE-8NHK|2y>QI+@)TaRrX+&e1(3EC0rv)u(MQhs7mUgtK10Cr^XS&dpZgi&yJ?TYn z`p}nt^k)DA8N^_QFqB~oX9Ob|#c0MbmT`<{0u!0UWTr5cX-sDZGnvI~<}jCe%x3`$ zS;S(Nu#{yiX9X)+#cI~DmUXOW0~^`IX11`EZER-;JK4o<_OO?I?B@UnImBU(aFk;l z=L9D?#c9rPmUEov0vEZ&Wv+0QYh33BH@U@a?r@iT+~)xgdBkI$@RVmf=LIi$#cSU1 zmUq1810VUsXTI>2Z+zzmKl#OP{_vOo#q$mz009X^V1f{oU<4-wAqhoj!Vs2lgeL+K zi9}?g5S3^|Ck8QzMQq{_mw3b{0SQS&Vv>-QWF#jADM>|Y(vX&Pq$dLz$wX$dkd00k*TVTw?cViczYB`HN|%21Yal&1m}sYGR}P?c&_rv^2tMQ!R( zmwMEv0S#$HW17&EW;CY-Eont-+R&DEw5J0d=|pF`(3Ngq#cl3zmwVjj0S|e^W1jGoXFTTxFL}jl-td-pyypWS`NU_w z@Re_T=LbLe#c%%bm;c3=e*zGYKm;ZTK?z21LJ*QrgeDAO2}gJ$5RphkCJIrBMs#8j zlUT$i4snS`d=ik5L?k8&Nl8X>Qjn5Vq$Uk%Nk@7zkdaJeCJR}~Ms{+LlU(E`4|&N) zehN^KLKLP5MJYycN>Gwgl%@=2DMxuKP?1VhrV3T5Ms;dXlUmfK4t1$VeHze^Ml_}g zO=(7RTF{bKw5APhX-9iH(2-7brVCx^Mt6G9lV0?u4}IxJe+Dp+K@4UHLm9?!Mlh05 zjAjgD8OL}gFp)`2W(rf8#&l*dlUdAW4s)5ud={{fMJ#3sOIgNpR)oEPH>V_oaPK?ImdY}aFI(~<_cH2 z#&vFRlUv;84tKf7eID?TM?B^UPkF|3UhtAvyygvWdB=M`@R3h^<_ll>#&>@3lVAMi z4}bYz0{JHZ0SQE4f)JEo1SbR`2}Nka5SDO+Cjt?PL}a26m1smK1~G|6Y~m1?c*G|G z2}wj^l8}^SBqs$aNkwYXkd}0$Cj%MDL}s#(m26}u2RX?_Zt{?qeB`G91t~;ficpkd z6sH6wDMe|@P?mC(rveqJL}jW_m1+= z(3WeG#AU83dBtnq@RoPH=K~-4#Am+nm2Z6K2S546Z~pL?|0R@v0uYcu z1SSYU2}W>25Ry=YCJbQ-M|dI-kw`=)3Q>thbYc*bSi~j{afwHK5|EHYBqj+-Nk(!~ zkdlxdIhC23G^8aR>B&GwGLe}qWF;Hf$w5wXk()f^B_H`IKtT#om?9LV7{w_;NlH=yOIp#IHngQ3?dd>A zI?r62tnz(58um>~>h7{eLCNJcT5F^pv#;I&HLPVF>)F6YHnEv4Y-JnU*}+bBv70^Y zWgq)Fz(Edim?IqJ7{@umNltN^Go0ld=efW|E^(PFT;&?qxxr0tahp5bKt?i=nJi=_8`;T0PI8f(Jme)G`6)m_3Q?FM6r~u&DM3j}QJON8r5xp{Kt(E1 znJQGJ8r7*mO=?k_I@F~e^=Uvu8qt_0G^H8MX+cX`(V8~2r5)|*Ku0>!nJ#pt8{O$a zPkPatKJ=v@{TaYO1~Hf+3}qO@8NoS|UJKW_S_j$lW9`TqbJmneBdBICw z@tQZhP^DMC?-QJfN#q!gtoLs`mEo(fc?5|yb!RjN^)8q}l~ zwW&j0>QSEtG^7!YX+l$)(VP~vq!q1cLtEO>o(^=R6P@WoSGv)i9`vLaz3D?=`q7^O z3}g_48NyJ8F`N;MWE7(r!&t^Ko(W835|f$2RHiYV8O&rBvzfzO<}sfIEMyUjS;A75 zv78mGWEHDf!&=s{o(*hd6Pww>R<^O79qeQmyV=8D_OYJ>9OMv(Il@tnahwyJ-n zMQr5Vj>K}%ZEnl`kh9qs8rM>^4&E_9_E-RVJ3deNIc^ravD8NfgWF_<9?Wf;R5 z!AM3inlX%J9OIe5L?$trDNJP=)0x3cW-*&N%w-<)S-?UTv6v++Wf{v^!Ae%Knl-Ft z9qZY^MmDjTEo@~Q+u6ZRcCnj1>}4POIlw^fMJ{of zD_rFo*SWz>ZgHDC+~pqkdB8&+@t7w({N;a1<(~iqBoKiKLQsMcoDhU06rl-2Si%vW2!!x+5zRQjn5Vq$Uk%Nk@7zkdaJeCJR}~Ms{+LlU(E`4|&N)ehN^K zLKLP5MJYycN>Gwgl%@=2DMxuKP?1VhrV3T5Ms;dXlUmfK4t1$VeHze^Ml_}gO=(7R zTF{bKw5APhX-9iH(2-7brVCx^Mt6G9lV0?u4}IxJe+Dp+K@4UHLm9?!Mlh05jAjgD z8OL}gFp)`2W(rf8#&l*dlUdAW4s)5ud={{fMJ#3sOIgNpR)oEPH>V_oaPK?ImdY}aFI(~<_cH2#&vFR zlUv;84tKf7eID?TM?B^UPkF|3UhtAvyygvWdB=M`@R3h^<_ll>#&>@3lVAMi4}bYz zGVcHa5RgCwCI~?ZMsPw9l2C*u3}FdJcp?yyNJJ(IQHe%$Vi1#9#3l}LiAQ`AkdQ@0trU*qTMsZ3| zl2VkW3}q=tc`8tmN>ru_RjEdGYEY9})TRz~sYm_)vvf}}pe)TAK=;3G+qP}nwr$(C zZQHhO+qUg}*GX2Z+zzmKl#OP{_vN71V|zO1SAlF2|`eU5u6Z&Bov_u zLs-HQo(M!F5|N2QRH6}`7{nwNv57-m;t`(&BqR}uNkUSRk(?ByBo(PiLt4_2o(yCp z6Pd|ERP^DMC?-QJfN#q!gtoLs`mEo(fc?5|yb!RjN^) z8q}l~wW&j0>QSEtG^7!YX+l$)(VP~vq!q1cLtEO>o(^=R6P@WoSGv)i9`vLaz3D?= z`q7^O3}g_48NyJ8F`N;MWE7(r!&t^Ko(W835|f$2RHiYV8O&rBvzfzO<}sfIEMyUj zS;A75v78mGWEHDf!&=s{o(*hd6Pww>R<^O79qeQmyV=8D_OYJ>9OMv(Il@tnahwyJ z25Ry=YCJbQ-M|dI-kw`=) z3Q>thbYc*bSi~j{afwHK5|EHYBqj+-Nk(!~kdjoSCJkvxM|v`lkxXPJ3t7oVc5;xD zT;wJXdC5n93Q&+j6s8D8DMoQhP?A!VrVM2%M|mnxkxEpi3RS5_b!t$PTGXZvb*V>v z8qknNG^PnnX-0Ee(2`cPrVVXrM|(QZkxq1`3tj0(cY4s1Ui799ed$Mk1~8C83}y&J z8OCr%Fp^P>W(;E)$9N_%kx5Ku3R9WJbY?J-EM^HyS;lf!u##1* zW({ju$9gufkxgu73tQR7c6P9nUF>ELd)dc+4seh|9Oei|ImU5LaFSD;<_u>!$9XPr zkxN|W3Rk(tb#8EzTioUjce%%X9`KMyJmv{cdB$^I@RC=&<_&Lo$9q2TkxzW)3t#!h zcYY9B)PJhK_{|^w@{a(itN{ch5P=CoP=XPh5QHQYp$S7+!V#VbL?jZCi9%GO5uF&s zBo?uWLtNq!p9CZ%5s67cQj(FJ6r>~-sYydx(vhAFWF!-r$wF4Lk)0gmBp12KLtgTc zp8^!55QQm1QHoKV5|pGAr71&M%2A#QRHPD>sX|q%QJospq!zWQLtW}op9VCf5shg= zQ<~A77PO=lt!YDB+R>g4bfgoV=|We!(VZUjq!+#ELtpyQp8*VH5Q7=QP=+y_5sYLM zqZz|k#xb4=Ok@(1nZi`2F`XIAWEQiT!(8Sup9L&r5sO*EQkJot6|7_xt69TZ*0G)q zY-AIg*}_(~v7H_4WEZ>H!(R5Wp937^5QjO!QI2t(6P)A}r#Zt}&T*a#T;vj$xx!Vh zah)67CL?#MRiAHo{5R+KMCJu3lM|={H zkVGUV2}wyta#E0zRHP;iX-P+VGLVr>WF`w)$wqc^kds{GCJ%YZM}7)WkU|uu2t_GI zaY|5Y(34*DrVoATM}Gz|kUW_xyE&FaFbiy<_>qc z$9*2~kVib`2~T;(b6)V0SG?v8Z+XXiKJbxGeC7*Z`NnsC@RMKs<_~}QM}Rc)Pe1|@ zm>>it7{LiaNJ0^sFoY!>;fX**A`zJ=L?s&0i9t+a5t}%~B_8ofKtd9cm?R`68OcdO zN>Y)UG^8aR>B&GwGLe}qWF;Hf$w5wXk()f^B_H`IKtT#om?9LV7{w_;NlH=yOIp#IHngQ3?dd>AI?r62tnz(58um>~>h7{eLCNJcT5F^pv#;I&HLPVF>)F6YHnEv4Y-JnU*}+bBv70^YWgq)F zz(Edim?IqJ7{@umNltN^Go0ld=efW|E^(PFT;&?qxxr0tahp5b3)1u02IYSNIFbfhN( z8OcOuvXGT*WG4qX$whARke7VqrvL>hL}7|hlwuU81SKg&Y06NRa+Ie66{$pJs!)|` zRHp_tsYPw-P?vhtrvVLVL}QxJlx8%i1ubbsYueD3cC@Dh9qB}8y3mzwbf*VB=|yk) z(3gJnX8;2k#9)Rnlwk~K1S1*6XvQ#>ag1jI6Pd(hrZAOhOlJl&nZ<18Fqe7EX8{XY z#A24Plw~Yu1uI#_YSyrpb*yIt8`;EWwy>3LY-a~M*~M=5u$O)8=Ku#e#9@wblw%y{ z1SdJgY0hw#bDZY_7rDe`u5guWT;~Qixy5bnaF=`BCyW?|B^=?2Ktv)DnJ7dh8qtYC zOkxq6IK(9$@%jH2p8)@V%s0UQANL9H|DXH<{QuTpfd7B}5AgrXK!9}aO-}|gl8MY@ zAuHL)P7ZRCi`?WPFZsw%0SZ!x!W5w>#VAe*N>Yl_l%Xu;C{G0{Qi;k`p(@p=P7P{O zi`vwoF7>ES0~*qZ#x$WR&1g;wTGEQvw4p8SXio<^(uvM=p)1|!P7iw0i{A91Fa7Ax z00uIM!3<$2!x+v8Mly=gjA1O}7|#SIGKtAdVJg#@&J1QUi`mR!F7uer0v57}#Vlbd z%UI3|R3)1u02IYSNIFbfhN(8OcOuvXGT*WG4qX$whAR zke7VqrvL>hL}7|hlwuU81SKg&Y06NRa+Ie66{$pJs!)|`RHp_tsYPw-P?vhtrvVLV zL}QxJlx8%i1ubbsYueD3cC@Dh9qB}8y3mzwbf*VB=|yk)(3gJnX8;2k#9)Rnlwk~K z1S1*6XvQ#>ag1jI6Pd(hrZAOhOlJl&nZ<18Fqe7EX8{XY#A24Plw~Yu1uI#_YSyrp zb*yIt8`;EWwy>3LY-a~M*~M=5u$O)8=Ku#e#9@wblw%y{1SdJgY0hw#bDZY_7rDe` zu5guWT;~Qixy5bnaF=`B=K&9S#ABZDlxIBW1uuEUYu@mdcf98VANj;*zVMZAeCG#0 z`NePk@RxrC2q^yqBoKiKLQsMcoDhU06rl-2Si%vW2t*_jk%>Z7q7j`K#3UB6i9=lC z5uXGkBoT>8LQ;~EoD`%a6{$%>TGEl83}hq|naM&{vXPw}F`or2WD$#5!cvy8oE5BO6{}gpTGp|i4Qyl+o7uuv zwy~WZ>|__a*~4D;v7ZAR@0trU*qTMsZ3|l2VkW z3}q=tc`8tmN>ru_RjEdGYEY9})TRz~sYiVp(2zznrU^}HMsr%wl2){)4Q**hdpgjO zPIRUVUFk-5deDAZhTiM2TcCeFO>}C&p z*~fkkaF9bB<_JeQ#&J$?l2e@K3}-pVc`k5~OI+p(SGmS@Zg7)Z+~y8Bomp*LRPYoogCyO7rDtpUhrl%y1;DMMMxQJxA^ zq!N{>LRG3!of_1n7PYBEUFuPv1~jA*jcGztn$esVw4@cSX+vAu(Vh-;q!XR#LRY%c zogVb07rp62U;5FX0SsgigBik5hB2HGjARs}8N*n{F`fxbWD=8^!c?X)of*tz7PFbd zT;?&K1uSF{i&?@_ma&`_tYj6dS;Jb^v7QZVWD}d&!dAAiogM6C7rWWRUiPt{103WK zhdIJgj&Yn5oa7XzIm21bah?lYUG8z82R!5vk9opVp7ER) zyyO+HdBa=Y@tzNSQjn5Vq$Uk%Nk@7zkdaJe zCJR}~Ms{+LlU(E`4|&N)ehN^KLKLP5MJYycN>Gwgl%@=2DMxuKP?1VhrV3T5Ms;dX zlUmfK4t1$VeHze^Ml_}gO=(7RTF{bKw5APhX-9iH(2-7brVCx^Mt6G9lV0?u4}IxJ ze+Dp+K@4UHLm9?!Mlh05jAjgD8OL}gFp)`2W(rf8#&l*dlUdAW4s)5ud={{fMJ#3s zOIgNpR)oEPH>V_ zoaPK?ImdY}aFI(~<_cH2#&vFRlUv;84tKf7eID?TM?B^UPkF|3UhtAvyygvWdB=M` z@R3h^<_ll>#&>@3lVAMi4}bYbfS~eEKmrk%AOs~C!3jY~LJ^uUge4r|i9kdm5t%4N zB^uF*K}=#1n>fTJ9`Q*)LK2afBqSvn$w@&^$tANeUjK?+frA{3<<#VJ8aN>Q3Jl%*WysX#?4QJE@Kr5e?#K}~8=n>y5`9`$KJ zLmJVTCN!lP&1pePTG5&|w51*G=|D$1(U~rEr5oMpK~H+on?CfVAN?7?Kn5|GAq-_0 z!x_OyMlqT(jAb0-nZQIQF_|e$Wg63&!Axc`n>oy79`jkiLKd-@B`jqb%UQunR$y!A)*)n>*a)9`|{`Lmu&%Cp_gD&w0U1Uh$eYyyYG5`M^g$@tH4t-QWF#jADM>|Y(vX&Pq$dLz$wX$dkd00k*T zVTw?cViczYB`HN|%21Yal&1m}sYGR}P?c&_rv^2tMQ!R(mwMEv0S#$HW17&EW;CY- zEont-+R&DEw5J0d=|pF`(3Ng zh{PlzDalAq3R04a)TALT=}1ooGLnhRWFafr$W9J&l8fBrAusvJPXP*2h{6=1D8(pF z2})9m(v+brs7?)PQj6Nup)U2PPXij#h{iObDa~k33tG~O*0iB5 z?PyO2I?{>GbfGKV=uQuM(u>~op)dXD&j1E8h`|hDD8m@e2u3oB(Trg%;~38bCNhc1 zOkpb1n9dAlGK<;FVJ`ES&jJ>*h{Y^nDa%;S3Rbd;)vRGH>sZeQHnNG$Y+)*>T;VF$xXul3a*NyC;V$>M z&jTLvh{rtPDbIM$3tsYy*Sz5^?|9D#KJtmreBmqK_|6Z0@{8a6;V=IP5JLV5NFV|e zgrEc?I3Wm0C_)p4u!JK#5r{}6A`^wEL?b#eh)FDB6Nk9OBR&a8NFoxGgrp=RIVng< zDpHe%w4@_F8OTT`GLwa@WFtE{$Vo18lZU+IBR>TwNFfSSgrXFqI3*}aDN0j@vXrAd z6{tuhDpQ53RHHgIs7WnqQ-`|LqdpC2NFy54gr+p3IW1^OD_YZrwzQ)?9q33WI@5)& zbfY^x=t(bn(}%wFqdx-}$RGwYgrN*$I3pOzC`L1ev5aFp6PU;(CNqVpOk+ATn8_?= zGl#j%V?GO5$RZZAgrzKFIV)JnDps?GwX9=38`#JuHnWATY-2k+*vT$-vxmLxV?PHt z$RQ4MgrgkeI43yCDNb{Svz+5R7r4kJE^~#eT;n=7xXCSUbBDX!<30~~$Ri%}gr_{? zIWKt0D_--4x4h#$ANa^8KJ$gIeB(Pm_{lGR^M}9uBS1*`Cm?|cOb~(+jNpVIB%ugR z7{U^c@I)XYk%&wbq7seh#2_ZIh)o>g5|8*KAR&oJOcIikjO3&sC8HNAm8eV=s#1;W z)SxD{s7)Q}QjhvHpdpQDOcR>YjOMhUC9P;p8`{#2_H>{lo#;##y3&pA^q?ob=uIE` z(vSWOU?77S%n*h$jNy!6B%>J37{)S=@l0SMlbFmDrZSD`%wQ(7n9UsKGLQKzU?GcG z%o3KejODCgC97D?8rHIo^=x1xo7l`2wz7@w>|iIm*v%gHvXA{7;2?)M%n^=qjN_c( zB&Rsd8P0N!^IYH}m$=Lou5yj*+~6j+xXm5za*z8w;31EA%oCpSjOV=IC9inR8{YDc z_k7?ZpZLrdzVeOl{NN|Q_{|^w@{a(aI4f|8V?G-W7DIm%Okid3R9Rj5ies#AlS)S@Q6^rAO?=u1EPGk}2%VlYD( z$}omAf{~13G-DXcIL0%9iA-WLQ<%y$rZa|!^2*vmflbAbOohaFT8ahM|<fMJ{ofD_rFo*SWz>ZgHDC+~pqkdB8&+@t7w({N*13LR$j}NFV|egrEc?I3Wm0C_)p4u!JK#5r{}6A`^wEL?b#e zh)FDB6Nk9OBR&a8NFoxGgrp=RIVngTwNFfSSgrXFqI3*}aDN0j@vXrAd6{tuhDpQ53RHHgIs7WnqQ-`|LqdpC2NFy54 zgr+p3IW1^OD_YZrwzQ)?9q33WI@5)&bfY^x=t(bn(}%wFqdx-}$RGwYgrN*$I3pOz zC`L1ev5aFp6PU;(CNqVpOk+ATn8_?=Gl#j%V?GO5$RZZAgrzKFIV)JnDps?GwX9=3 z8`#JuHnWATY-2k+*vT$-vxmLxV?PHt$RQ4MgrgkeI43yCDNb{Svz+5R7r4kJE^~#e zT;n=7xXCSUbBDX!<30~~$Ri%}gr_{?IWKt0D_--4x4h#$ANa^8KJ$gIeB(Pm_{lGR z^M}9u25Ry=YCJbQ-M|dI-kw`=)3Q>thbYc*bSi~j{afwHK z5|EHYBqj+-Nk(!~kdjoSCJkvxM|v`lkxXPJ3t7oVc5;xDT;wJXdC5n93Q&+j6s8D8 zDMoQhP?A!VrVM2%M|mnxkxEpi3RS5_b!t$PTGXZvb*V>v8qknNG^PnnX-0Ee(2`cP zrVVXrM|(QZkxq1`3tj0(cY4s1Ui799ed$Mk1~8C83}y&J8OCr%Fp^P>W(;E)$9N_% zkx5Ku3R9WJbY?J-EM^HyS;lf!u##1*W({ju$9gufkxgu73tQR7 zc6P9nUF>ELd)dc+4seh|9Oei|ImU5LaFSD;<_u>!$9XPrkxN|W3Rk(tb#8EzTioUj zce%%X9`KMyJmv{cdB$^I@RC=&<_&Lo$9q2TkxzW)3t#!hcYg4bU;O3|fBDCMO@03( zAb|)>5P}kn;DjI~p$JVF!V-?~L?9xOh)fis5{>A@ASSVhO&sD9kN6}YA&E##5|WaP z> z6Q1&n=e*!0uXxQH-tvz3eBdLW_{-nMQr5Vj>K}%ZEnl`kh9qs8rM>^4&E_9_E-RVJ3 zdeNIc^ravD8NfgWF_<9?Wf;R5!AM3inlX%J9OIe5L?$trDNJP=)0x3cW-*&N%w-<) zS-?UTv6v++Wf{x)@3{I3btS7<%^KFSj`eI{Bb(UF7PhjD?d)JDyV%Vh_Og%t9N-{_ zILr}_a*X4g;3TIw%^A*ej`LjLBA2+#6|QoP>)hZbx46w6?sAX&Jm4XZc+3-?@{H%a z;3cnk%^TkGj`w`vBcJ%p7rye1@BH8=zxd4`{_>Ci8v6f7Kmrk%AOs~C!3jY~LJ^uU zge4r|i9kdm5t%4NB^uF*K}=#1n>fTJ9`Q*)LK2afBqSvn$w@&^$tANeUjK?+frA{3<<#VJ8aN>Q3Jl%*WysX#?4QJE@Kr5e?# zK}~8=n>y5`9`$KJLmJVTCN!lP&1pePTG5&|w51*G=|D$1(U~rEr5oMpK~H+on?CfV zAN?7?Kn5|GAq-_0!x_OyMlqT(jAb0-nZQIQF_|e$Wg63&!Axc`n>oy79`jkiLKd-@ zB`jqb%UQunR$y!A)*)n>*a)9`|{`Lmu&%Cp_gD&w0U1Uh$eYyyYG5 z`M^g$@tH4t3)1u02IYSNIFbfhN(8OcOuvXGT*WG4qX z$whARke7VqrvL>hL}7|hlwuU81SKg&Y06NRa+Ie66{$pJs!)|`RHp_tsYPw-P?vht zrvVLVL}QxJlx8%i1ubbsYueD3cC@Dh9qB}8y3mzwbf*VB=|yk)(3gJnX8;2k#9)Rn zlwk~K1S1*6XvQ#>ag1jI6Pd(hrZAOhOlJl&nZ<18Fqe7EX8{XY#A24Plw~Yu1uI#_ zYSyrpb*yIt8`;EWwy>3LY-a~M*~M=5u$O)8=Ku#e#9@wblw%y{1SdJgY0hw#bDZY_ z7rDe`u5guWT;~Qixy5bnaF=`B=K&9S#ABZDlxIBW1uuEUYu@mdcf98VANj;*zVMZA zeCG#0`NePk@Rxu5H^}FI1SAlF2|`eU5u6Z&Bov_uLs-HQo(M!F5|N2QRH6}`7{nwN zv57-m;t`(&BqR}uNkUSRk(?ByBo(PiLt4_2o(yCp6Pd|ERP^DMC?-QJfN#q!gtoLs`mEo(fc?5|yb!RjN^)8q}l~wW&j0>QSEtG^7!YX+l$) z(VP~vq!q1cLtEO>o(^=R6P@WoSGv)i9`vLaz3D?=`q7^O3}g_48NyJ8F`N;MWE7(r z!&t^Ko(W835|f$2RHiYV8O&rBvzfzO<}sfIEMyUjS;A75v78mGWEHDf!&=s{o(*hd z6Pww>R<^O79qeQmyV=8D_OYJ>9OMv(Il@tnahwyJQjn5Vq$Uk%Nk@7zkdaJeCJR}~Ms{+LlU(E`4|&N)ehN^KLKLP5MJYyc zN>Gwgl%@=2DMxuKP?1VhrV3T5Ms;dXlUmfK4t1$VeHze^Ml_}gO=(7RTF{bKw5APh zX-9iH(2-7brVCx^Mt6G9lV0?u4}IxJe+Dp+K@4UHLm9?!Mlh05jAjgD8OML^B;(Zy zOk@(1nZi`2F`XIAWEQiT!(8Sup9L&r5sO*EQkJot6|7_xt69TZ*0G)qY-AIg*}_(~ zv7H_4WEZ>H!(R5Wp937^5QjO!QI2t(6P)A}r#Zt}&T*a#T;vj$xx!Vhah)67@0trU*qTMsZ3|l2VkW z3}q=tc`8tmN>ru_RjEdGYEY9})TRz~sYiVp(2zznrU^}HMsr%wl2){)4Q**hdpgjO zPIRUVUFk-5deDAZhTiM2TcCeFO>}C&p z*~fkkaF9bB<_JeQ#&J$?l2e@K3}-pVc`k5~OI+p(SGmS@Zg7)Z+~y8Kt?i=nJi=_8`;T0PI8f(Jme)G`6)m_3Q?FM6r~u&DM3j}QJON8r5xp{Kt(E1 znJQGJ8r7*mO=?k_I@F~e^=Uvu8qt_0G^H8MX+cX`(V8~2r5)|*Ku0>!nJ#pt8{O$a zPkPatKJ=v@{TaYO1~Hf+3}qO@8NoS|UJKW_S_j$lW9`TqbJmneBdBICw z@tQZh-QWF#jADM>|Y(vX&Pq$dLz$wX$d zkd00k*TVTw?cViczYB`HN|%21Yal&1m}sYGR}P?c&_rv^2t zMQ!R(mwMEv0S#$HW17&EW;CY-Eont-+R&DEw5J0d=|pF`(3Ngq#cl3zmwVjj0S|e^W1jGoXFTTxFL}jl-td-pyypWS z`NU_w@Re_T=LbLe#c%%bmw)^>xch$uBoKiKLQsMcoDhU06rl-2Si%vW2t*_jk%>Z7 zq7j`K#3UB6i9=lC5uXGkBoT>8LQ;~EoD`%a6{$%>TGEl83}hq|naM&{vXPw}_iqVW=EaMo@1ST?x$xLA?)0oZ-W-^P}%waC`n9l+hvWUejVJXX4&I(qt ziq))PE$dj%1~#&Z&1_*S+t|(ycCw4z>|rna*v|nDa)`qm;V8#A&IwL(iqo9oEay1S z1uk-l%Ut0q*SO9NZgPv;+~F?wxX%L~@`%Sg;VI8}&I?}hir2j1E$?{G2R`zN&wSx4 z-}ufCe)5ao{NXSE_-}Ck{|HDR0uzLw1S2>h2uUbH6Na#aBRmm^NF*W?g{VX$Ix&bz zEMgOfxWpqq2}npH5|f0aBqKQ~NJ%PElZLdUBRv_&NG39qg{)*FJ2}WnE^?EHyyPQ4 z1t>@%3R8rl6r(sLC`l}a>$Rs8+g{e$qIy0EbEM_x@xy)le3s}e^7PEw-V?7(# z$R;+kg{^F3J3H9PE_Snrz3gK@2RO(f4s(Q~9OF1AILRqabB42=<2)C*$R#dwg{xfS zIybnlYxw6A~RXYN;a~SgPi0dH+jfQKJrt5f)t`KMJP%! zic^A;l%h0cC`&oYQ-O+9qB2#eN;RregPPQ$Hg%{=J?hhdhBTrvO=wCpn$v=ow4ya_ zXiGcV(}9k3qBC9SN;kUGgP!!FH+|?!Kl(F(fed0WLm0|1hBJbZjAArn7|S@uGl7Xr zVlq>h`hV=*WsDqW!>H-R%owv{W@ct)PGV+eW@bpt%*@Qp%*@Qpc1(%)O1|&>Ip?f& zq}A%xuDZupS7S}h)A!RerLm@%#AK#0m1#_81~Zw(Z00bRdCX@43t7Zsmavp%EN2BP zS;cDBu$FbKX9FAA#Addzm2GTi2RqrtZuYR3eeCA|2RX!Hj&PJ?9OnclImKztaF%nN z=K>eG#AU83dBtnq@RoPH=K~-4lTUo+ z3t#!hU;NE?{yAXJj|3qo!3a(WLK2G5gdr^92u}ne5{bw}Au2x+jp)Q6Cb5W39OCjb z@rX|X5|W6-Bq1ruNKOh;l8V%%AuZ`hPX;oQiOggnE7{0S4sw!<+~grI`N&TJ3Q~x| z6rm`^C{77VQi{@)p)BPnPX#JciON*r7k=e8s#1;W)SxD{s7)Q}QjhvHpdpQDOcR>Y zjOMhUC9P;p8`{#2_H>{lo#;##y3&pA^q?ob=uIE`(vSWOU?77S%n*h$jNy#ncm7}` zqZrK?#xjoaOkg6Dn9LNWGL7lXU?#Je%^c=3kNGTMA&Xed5|*-z<*Z;Ot60q%*0PTE zY+xgs*vuBTvW@NRU?;oS%^vo$kNq6rAcr{25sq?<>6Q1&n=e*!0uXxQH-tvz3eBdL0@`=xU;Va+xi@*8K zKL_jjkst&m7{LiaNJ0^sFoY!>;fX**A`zJ=MCB)<5uF&sBo?uWLtK6)9`Q*)LK2af zBqSvn$w@&^$tANeUjK?+frA{3<<#VJ8a zN>Q3Jl%*WysX#?4QJE_I!ms>BRjN^)8q}l~|NJSY+Lm>wOFin-fQB@pF->SnGn&(a zmb9WZZD>n7+S7rKbfPm|=t?)b(}SM$qBni$OF#NEfPoBRFhdy1ForXN-}!@)jAArn z7|S@uGl7XrVlq>h$~2}kgPF`?HglNEJm#~2g)Cw*OIXS>ma~GDtYS55Sj#%rvw@9l zVl!LV$~LyMgPrVRH+$I2KK65fgB;>8M>xtcj&p*OoZ>WRILkTCbAgLo;xbpb$~CTY zgPYvqHg~woJ?`^>hdkmjPk72Rp7Vm2yy7))c*{H9^MQ~2$tOPZg|B?$FaG8`{~WCE zM}iQPU<4-wAqhoj!Vs2lgeL+Ki9}?g5S5>ZMs#8jlUT$i4srRJc*G|G2}wj^l8}^S zBqs$aNkwYXkd}0$Cj%MDL}s#(m26}u2RX?_Zt{?qeB`G91t~;ficpkd6sH6wDMe|@ zP?mC(rveqJL}jY*3%~LkRjEdGYEY9})TRz~sYiVp(2zznrU^}HMsr%wl2){)4Q**h zdpgjOPIRUVUFk-5deDW_xyE&FaFbiy<_>qc z$9*2~kVib`2~T;(b6)V0SG?v8Z+XXiKJbx0`NU_w@Re`;#ov7Ap96LNNDzV&jNpVI zB%ugR7{U^c@I)XYk%&wbqVf~bh)xV*5{uZxAuc}?kN6}YA&E##5|WaPvz-t?g_{pimC1~Q1j3}Gn47|sZO=MP3QiqVW=EaMo@1ST?x$xLA?)0oZ- zW-^P}%waC`n9l+hvWUejVJXX4&I(qtiq))PE$dj%1~#&Z&1_*S+t|(ycCw4z>|rna z*v|nDa)`qm;V8#A&IwL(iqo9oEay1S1uk-l%Ut0q*SO9NZgPv;+~F?wxX%L~@`%Sg z;VI8}&I?}hir2j1E$?{G2R`yApZLrdzVeN~_?z$ibCBL22|`eU5u6Z&Bov_uLs-HQ zo(M!F5|N2QRDL2F(TPD!ViB7-#N}t=5uXGkBoT>8LQ;~EoD`%a6{$%>TGEl83}hq| znaM&{vXPw}y5`9`$KJLmJVTCN!lP&1pePTG5&|w51*G=|D$1(U~rEr5oMpK~H+o zn?CfVAN?7?Kn5|GAq-_0!x_Qv{J}^@F`6-qWgO#~z(gi7nJG+V8q=AS|UJKW_S_j$lW9`TqbJmneBdBICw z@tQZh76<6rwOi_~%ch7qu)#aY|5+=(3WtyAOs~C!3jY~LJ^uUge4r|i9kdm5t%4NKt?i=nJi=_8`;T0PI8f( zJme)G`6)m_3Q?FM6r~u&DM3j}QJON8r5xp{Kt(E1nJWCkulz<;s!^R9)T9=*sY6}r zQJ)4hq!Ep2LQ|U2oEEgC6|HGQTiVf{4s@gwo#{eXy3w5;^rRQP=|f-o(VqbfWDtWH z!cc}WoDuxaABH!(R5Wp937^5QjO!QI2t(6P)A}r#Zt} z&T*a#T;vj$xx!Vhah)67{7OcbK>6VZrH3}OGbfGKV=uQuM(u>~op)dXD&j1E8h`|hDD8m@e2!7`e zMly=gjA1O}7|#SIGKtAdVJg#@&J1QUi`mR!F7uer0v57}#Vlbd%UI3|R25Ry=YCJbQ-M|dI-kw`=)3Q_rqXhbIlF^NTN;t-dgiAQ`AkdQ@0trU*qTMsZ3| zl2VkW3}q=tc`8tmN>ru_zwj%+QI%>`rv^2tMQ!R(mwMEv0S#$HW17&EW;CY-Eont- z+R&DEw5J0d=|pF`(3NgeG#AU83dBtnq@RoPH=K~-4lTUo+3t#!hU;NE?en@Qo6NI1y zBRC-lNhm@ShOmSqJQ0XUBq9@qsQg4Uq7#Fd#3D9vh|AB!BR&a8NFoxGgrp=RIVng< zDpC{1Ca1AXOFGh%fsAA#Gg-(=HnNk0oa7=mdB{sX@>76<6rwOiC`vJkQ-YF|qBLbF zOF7C@fr?b3GFAA6U-^xyRHHgIs7WnqQ-`|LqdpC2NFy54gr+p3IW1^OD_YZrwzQ)? z9q33WI@5)&bfY^x=t(bn(}%wFqdx-}$RGwYgrN*$I3xI-KN!g&aK$t-3whq=sSJ_}gLA{MiRr7UAPD_F@YR>(8 z$u4%YhrR4$KLg@-y*>PXZE>h{PlzDalAq3R04a)TALT z=}1ooGLnhRWFafr$W9J&l8fBrAusvJPXP*2h{6=1D8(pF2})9m(v+brC9jz zvzW~s<}#1@EMOsvSj-ZZvW(@dU?r)hZbx46w6?sAX&Jm4XZc+3-? z@{H%a;3cnk%^TkGj`w`vBY*OV&wSx4-}sBa`OXhX&3}RrlwbrW1R)7UXu=SdaD*oU z5s5@(q7apzh(>f`5R+KMCJu4=nRvt}0SQS&Vv>-QWF#jADM>|Y(vX&Pq$dLz$wX$d zkd00k*TVTw?cViczYB`HN|%21Yal&1m}sYGR}@C(248&#=B zb!t$PTGXZvb*V>v8qknNG^PnnX-0Ee(2`cPrVVXrM|(QZkxq1`3tj0(cY4s1Ui799 zed$Mk1~8C83}y&J8OCr%@H>Anl2MFi3}YF`cqTBBNla!6Q<=teW-yak%w`UAna6w< zu#iP8W(iAK#&TA$l2xo`4QpA)dN#0;O>AZhTiM2TcCeFO>}C&p*~fkkaF9bB<_JeQ z#&J$?l2e@K3}-pVc`k5~OI+p(SGmS@Zg7)Z+~y8lYxw6A~RXYN;a~SgPi0d zH+jfQKJrt5f)t`KMJP%!ic^A;l%h0cC`&oYQ-O+9qB2$Zgl!Doj(}KC`L1ev5aFp6PU;(CNqVpOk+ATn8_?=Gl#j%V?GO5$RZZAgrzKF zIV)JnDps?GwX9=38`#JuHnWATY-2k+*vT$-vxmLxV?PHt$RQ4MgrgkeI43yCDNb{S zvz+5R7r4kJE^~#eT;n=7xXCSUbBDX!<30~~$Ri%}gr_{?IWKt0D_--4x4h#$ANa_h zeBv`-_{ul_;%~n5Lvr(g@-y*>PXZE>h{PlzDalAq3R04a)TALT=}1ooGLnhRWFafr$W9J&l8fBrAusvJ zPXP*2h{6=1D8(pF2})9m(v+brC9jzvzW~s<}#1@EMOsvSj-ZZvW(@dU?r)hZbx46w6?sAX&Jm4XZc+3-?@{H%a;3cnk%^TkGj`w`vBY*OV&wSx4 z-}sBa`OXh1yay13padg0AqYt*LKB9tgd;o=h)5(N6NRY!L^PrkgP6o3HgSl{&%`4> z2}npH5|f0aBqKQ~NJ%PElZLdUBRv_&NG39qg{)*FJ2}WnE^?EHyyPQ41t>@%3R8rl z6r(sLC`l6D8s#AlS)S@Q6^rAO?=u1EPGk}2%VlYD($}omAg5UXrk&I$A zV;IXg#xsG5Oky%qn94M!GlQATVm5P_%RJ_@fQ2k#F-us=GM2M~m8@blYgo%V*0X_) zY+^H8*vdAxvxA-NVmEu(%RcsVfP)<3Fh@AbF^+SBlbqr-XE@6_&U1l_T;eiUxXLxI zbAy}Q;x>1<%RTP%fQLNdF;95PGoJH;m%QRNZ+Oc)-t&Qv{K+Ri^M$W`<1hZ^J3pi} z{|Q1+f)Sh$gd`N92}4-I5uOM{BodK{LR5Yt8qtYCOkxq6IK<^=;t`(&BqR}uNkUSR zk(?ByBo(PiLt4_2o(yCp6Pd|ERP^DMC?-QJfN#q!gto zLs`mEo(fc?5|ydKFZ{}HRHYi#sX=yOIp#IHngQ3 z?dd>AI?r62tnz(58um>~>h7{eLC@BG0?MlqT(jAb0-nZQIQ zF_|e$Wg63&!Axc`n>oy79`jkiLKd-@B`jqb%UQunR$y!A)*)n>*a) z9`|{`Lmu&%Cp_gD&w0U1Uh$eYyyYG5`M^j1 z5{l4-AuQntPXrDP6~U?P*4%oL_Fjp@u_ zCbO8$9Og2Q`7B@|i&)GOma>fHtY9UpSj`&NvX1p^U?ZE@%oet?jqU7UC%f3q9`>@2 z{T$#Rhd9g;j&h9SoZuv;3I$XiO+;H)xTJN3)1u02IYSNIFbfhN( z8OcOuvXGT*WG4qX$whARke7VqrvL>hL}7|hlwuU81SKg&Y06NRa+Ie66{$pJs_+ZH z@*7pDMs;dXlUmfK4t1$VeHze^Ml_}gO=(7RTF{bKw5APhX-9iH(2-7brVCx^Mt6G9 zlV0?u4}IxJe+Dp+K@4UHLm9?!M({g-Fp^P>W(;E)$9N_%kx5Ku3R9WJbY?J-EM^HyS;lf!u##1*W({ju$9gufkxgu73tQR7c6P9nUF>ELd)dc+4seh| z9Oei|ImU5LaFSD;<_u>!$9XPrkxN|W3Rk(tb#8EzTioUjce%%X9`KMyJmv{cdB$^I z@RC=&<_&Lo$9q2Tkw5vwXTI>2Z~VpIeCLNW=08CQN-%;Gf{=tFG+_u!IKmTwh(sbX zQHaVF-b^DGLn;ml%ygxX-G>t(vyLVWFj+J$VxV{ zlY^Y(A~$)+OFr^bfPxgFFhwXzF^W@yl9Zw}WhhHI%2R=gRH8Cf_=R8jjjB|mIyIv5W$tqT}hPA9?Jsa4_CN{H$t!!gEJJ`uCcC&}Q>|;L%ILILmbA+QD<2WZc z$tg~AhO?aGJQujgB`$M?t6bwcH@L|yZgYpb+~YnEc*r9j^Mt27<2f&Q$tzy-hPS-q zJs;fX**A`zJ=MCB)<5uF&s zBo?uWLtK6)9`Q*)LK2afBqSvn$w@&^$t zANeUjK?+frA{3<<#VJ8aN>Q3Jl%*WysX#?4QJE_I!ms>BRjN^)8q}l~wW&j0>QSEt zG^7!YX+l$)(VP~vq!q1cLtEO>o(^=R6P@WoSGv)i9`vLaz3D?=`q7^O3}g_48NyJ8 zF`NF`or2WD$#5!cvy8oE5BO z6{}gpTGp|i4Qyl+o7uuvwy~WZ>|__a*~4D;v7ZARJlYEp~Z)S)i*s80hL(ul@1p()L1 zP77Mniq^EDE$wJe2RhP;&UB$G-RMpadeV#D^r0{P=+6KKGKj$pVJO2G&Io?z4@NSI z(Trg%;~38bCNhc1Okpb1n9dAlGK<;FVJ`ES&jJ>*h{Y^nDa%;S3Rbd;)vRGH>sZeQ zHnNG$Y+)*>T;VF$ zxXul3a*Nx9H4P*A_~$hFX^4N9L;pQD-+svP@1-Aq2=+rL9~Fv~`S*HM=P~*5-)ovI zTBJ_7@^vayDqpN*nWA+{ma9^1(enRZj}*#W|MyaY|Gxj< z#Se}DYw<(m|K6V6&4T}X%k38bwfvvgSGahUfA9alTi^fKzW=elzAgW2J+oW?KU?4b zx*e7OkGA7SWAN`b{r83i|L^NTf&}^ZmY}}we=hv5U(bKNK0p5V^Zt3={yBy6D*SU( z&>vI0{jXQ9@3w#M`0ukQ9`VoVpT|7i)3DtCyxrvrRr>e-|Mm0zd-K12{B!Ale%}A- zxc^rr|Fy3F-TD7}X;f+X5pH7=geD{QqeLzJ34xJs>a!fd&E% z1R4l55NIIKK%jv@1Aztt4FnnpG!SUuKij}(`{x0HF$gpeXduu)pn*UGfd&E%1R4l5 z5NIIKK%jv@1OM3uzS=(z2#i6Xfj|R+1_BKP8VEEHXduu)pn*UGfd&E%1RD6yHt@y% zc|c$c0u2Nj2s99AAkaXdfj|R+1_BKP8VEEHXduwQf3|^7_Rj+XV-RQ{&_JMpKm&mW z0u2Nj2s99AAkaXdfj|R+2L7`Re6W8W5Ez3%1Aztt4FnnpG!SSY&_JMpKm&mW0u2Nj z2sH4YZQxJ)=K+B+2s99AAkaXdfj|R+1_BKP8VEEHXduu)pn*UG|JepU+CL8nj6tA* zKm&mW0u2Nj2s99AAkaXdfj|R+1_BKP8u-sP@ZSD;Kwu044FnnpG!SSY&_JMpKm&mW z0u2Nj2s99AAke^nwt+YH&jSKu5NIIKK%jv@1Aztt4FnnpG!SSY&_JMpKm&mW{<96d zvwt2C7=u6qfd&E%1R4l55NIIKK%jv@1Aztt4FnnpH1MBo;H~}hfWR088VEEHXduu) zpn*UGfd&E%1R4l55NIIKK%jyDYy&_3@WT&52ud)56M~S0A~azLOE|(4frvyRGEs=i zPeda+F^EYlViSkB{7gLJlYoRIA~8uwN-~m@f|R5pHEBpoI?|JYjASA+S;$H@vXg_H zI4f|8V?G-W7DIm%Okid3R9RrrNp`HiYnqdGOHNiAwq zhq~0GJ`HF{BO23$rZl5DEoezATGNKMw4*&8=tw6z(}k{dqdPt5NiTZShraZqKLZ%Z zAO}a>$Rs8+g{e$qIy0EbEM_x@xy)le3s}e^7PEw< zEMqw-V?7(#$R;+kg{^F3J3H9PE_Snrz3gK@2RO(f4s(Q~9OF1AILRqa zbB42=<2)C*$R#dwg{xfSIybnh2uUbH6Na#aBRmm^NF*W?g{b^QG@=uOn8YGB zafr*$#3MclNJt_QlZ2!sBRMHZNh(s4hP0$3JsHSICNh(StYjlQImk&aa+8O=SnGn&(amb9WZZD>n7+S7rKbfPm|=t?)b(}SM$qBni$OF#NEfPoBRFhdy1ForXN z-}!@)jAArn7|S@uGl7XrVlq>h$~2}kgPF`?HglNEJm#~2g)Cw*OIXS>ma~GDtYS55 zSj#%rvw@9lVl!LV$~LyMgPrVRH+$I2KK65fgB;>8M>xtcj&p*OoZ>WRILkTCbAgLo z;xbpb$~CTYgPYvqHg~woJ?`^>hdkmjPk72Rp7Vm2yy7))c*{H9^MQ~2$tOPZg|B?$ zFaG8`|9s>Bkst&m7{LiaNJ0^sFoY!>;fX**A`zJ=MCB)<5uF&sBo?uWLtK6)9`Q*) zLK2afBqSvn$w@&^$tANeUjK?+frA{3<< z#VJ8aN>Q3Jl%*WysX#?4QJE_I!ms>BRjN^)8q}l~wW&j0>QSEtG^7!YX+l$)(VP~v zq!q1cLtEO>o(^=R6P@WoSGv)i9`vLaz3D?=`q7^O3}g_48NyJ8F`NF`or2WD$#5!cvy8oE5BO6{}gpTGp|i4Qyl+ zo7uuvwy~WZ>|__a*~4D;v7ZAR8LQ;~E zoD`%a6{$%>TGEl83}hq|naM&{vXPw}y5`9`$KJLmJVTCN!lP&1pePTG5&|w51*G z=|D$1(U~rEr5oMpK~H+on?CfVAN?7?Kn5|GAq-_0!x_Qv{J}^@F`6-qWgO#~z(gi7 znJG+V8q=AS|UJKW_S z_j$lW9`TqbJmneBdBICw@tQZhsWAt=EJP6$F0 ziqM21Ea3=G1R@fN$V4G3KM{@S#2_ZIh)o>g@-y*>PXZE>h{PlzDalAq3R04a)TALT z=}1ooGLnhRWFafr$W9J&l8fBrAusvJPXP*2h{6=1D8(pF2})9m(v+brC9jz zvzW~s<}#1@EMOsvSj-ZZvW(@dU?r)hZbx46w6?sAX&Jm4XZc+3-? z@{H%a;3cnk%^TkGj`w`vBY*OV&wSx4-}sBa`OXi)&3}RrlwbrW1R)7UXu=SdaD*oU z5s5@(q7apzh(>f`5R+KMCJu4=nRvt}0SQS&Vv>-QWF#jADM>|Y(vX&Pq$dLz$wX$d zkd00k*TVTw?cViczYB`HN|%21Yal&1m}sYGR}@C(248&#=B zb!t$PTGXZvb*V>v8qknNG^PnnX-0Ee(2`cPrVVXrM|(QZkxq1`3tj0(cY4s1Ui799 zed$Mk1~8C83}y&J8OCr%@H>Anl2MFi3}YF`cqTBBNla!6Q<=teW-yak%w`UAna6w< zu#iP8W(iAK#&TA$l2xo`4QpA)dN#0;O>AZhTiM2TcCeFO>}C&p*~fkkaF9bB<_JeQ z#&J$?l2e@K3}-pVc`k5~OI+p(SGmS@Zg7)Z+~y8lYxw6A~RXYN;a~SgPi0d zH+jfQKJrt5f)t`KMJP%!ic^A;l%h0cC`&oYQ-O+9qB2$Zgl!Doj(}KC`L1ev5aFp6PU;(CNqVpOk+ATn8_?=Gl#j%V?GO5$RZZAgrzKF zIV)JnDps?GwX9=38`#JuHnWATY-2k+*vT$-vxmLxV?PHt$RQ4MgrgkeI43yCDNb{S zvz+5R7r4kJE^~#eT;n=7xXCSUbBDX!<30~~$Ri%}gr_{?IWKt0D_--4x4h#$ANa_h zeBv`-_{ul_;%~n5LrC+VAOs~C!3jY~LJ^uUge4r|i9kdm5t%4NKt?i=nJi=_8`;T0PI8f(Jme)G`6)m_ z3Q?FM6r~u&DM3j}QJON8r5xp{Kt(E1nJWCkulz<;s!^R9)T9=*sY6}rQJ)4hq!Ep2 zLQ|U2oEEgC6|HGQTiVf{4s@gwo#{eXy3w5;^rRQP=|f-o(VqbfWDtWH!cc}WoDuxa zABH!(R5Wp937^5QjO!QI2t(6P)A}r#Zt}&T*a#T;vj$ zxx!Vhah)67hfil%qTqs7NI$Q-xpnmEWjJHL6pCn$)5;b*M`{>eGORG@>z0Xi77h(}I?? zqBU)3OFP=rfsS;dGhOIPH@ee|!^2*vmflbAW>!;xI=z$}x^}f|H!$G-o)=InHx|i(KL|SGdYGu5*K% z+~PKOxXV56^MHpu;xSKn$}^txf|tDFHE(#!JKpnwkNn9eKJ$gIeB&?v<~#rV=bj%4 zLQsMcoDhU06rl-2Si%vW2t*_jk%>Z7ej*yti9t+a5t}%~~-sYydx(vhAFWF!-r$wF4Lk)0gmBp12KLtgTcp8^!55QQm1QHoKV5|pGAr71&M z%2A#QRHPD>slqS(%5PMq8r7*mO=?k_I@F~e^=Uvu8qt_0G^H8MX+cX`(V8~2r5)|* zKu0>!nJ#pt8{O$aPkPatKJ=v@{TaYO1~Hf+3}qO@8Nu)T!AM3inlX%J9OIe5L?$tr zDNJP=)0x3cW-*&N%w-<)S-?UTv6v++Wf{v^!Ae%Knl-Ft9qZY^MmDjTEo@~Q+u6ZR zcCnj1>}4POIlw^fMJ{ofD_rFo*SWz>ZgHDC+~pqk zdB8&+@t7w(TwNFfSSgrXFqI3*}aDN0j@vXrAd6{tuhDpQ53RHHgIs7WnqQ-`|L zqdpC2NFy54gr+p3IW1^OD_YZrwzQ)?9q33WI@5)&bfY^x=t(bn(}%wFqdx-}$RGwY zgrN*$I3pOzC`L1ev5aFp6PU;(CNqVpOk+ATn8_?=Gl#j%V?GO5$RZZAgrzKFIV)Jn zDps?GwX9=38`#JuHnWATY-2k+*vT$-vxmLxV?PHt$RQ4MgrgkeI43yCDNb{Svz+5R z7r4kJE^~#eT;n=7xXCSUbBDX!<30~~$Ri%}gr_{?IWKt0D_--4x4h#$ANa^8KJ$gI zeB(Pm_{lGR^M}9uJL>(900blufeAuTf)Sh$gd`N92}4-I5uOM{BodK{LR6v=ofyO< z7O{y#T;dU*1SBL8iAh3Il98Mgq$CxoNkdxFk)8}>Bomp*LRPYoogCyO7rDtpUhrl%y1;DMMMxQJxA^q!N{>LRG3!of_1n7PYBEUFuPv1~jA*jcGzt zn$esVw4@cSX+vAu(Vh-;q!XR#LRY%cogVb07rp62U;5FX0SsgigBik5hB2HGjARs} z8N*n{F`fxbWD=8^!c?X)of*tz7PFbdT;?&K1uSF{i&?@_ma&`_tYj6dS;Jb^v7QZV zWD}d&!dAAiogM6C7rWWRUiPt{103WKhdIJgj&Yn5oa7XzIm21bah?lYUG8z82R!5vk9opVp7ER)yyO+HdBa=Y@tzNSD zP6JlYEp~Z)S)i*s80hL(ul@1p()L1P77Mniq^ED zE$wJe2RhP;&UB$G-RMpadeV#D^r0{P=+6KKGKj$pVJO2G&Im>_iqVW=EaMo@1ST?x z$xLA?)0oZ-W-^P}%waC`n9l+hvWUejVJXX4&I(qtiq))PE$dj%1~#&Z&1_*S+t|(y zcCw4z>|rna*v|nDa)`qm;V8#A&IwL(iqo9oEay1S1uk-l%Ut0q*SO9NZgPv;+~F?w zxX%L~@`%Sg;VI8}&I?}hir2j1E$?{G2R`zN&wSx4-}ufCe)5ao{NXSEo_YQw009X^ zV1f{oU<4-wAqhoj!Vs2lgeL+Ki9}?g5S3^|Ck8QzMQq{_mw3b{0SQS&Vv>-QWF#jA zDM>|Y(vX&Pq$dLz$wX$dkd00k*TVTw?cViczYB`HN|%21Ya zl&1m}sYGR}P?c&_rv^2tMQ!R(mwMEv0S#$HW17&EW;CY-Eont-+R&DEw5J0d=|pF` z(3Ngq#cl3zmwVjj0S|e^W1jGo zXFTTxFL}jl-td-pyypWS`NU_w@Re_T=LbLe#c%%bmw%6Z{}F(I1R^j&2ud)56M~S0 zA~azLOE|(4frvyRGEs<1G@=uOn8YGBafnMi;*)@cBqA|MNJ=u2lY*3_A~k79OFGh% zfsAA#Gg-(=HnNk0oa7=mdB{sX@>76<6rwOiC`vJkQ-YF|qBLbFOF7C@fr?b3GF7Nb zHL6pCn$)5;b*M`{>eGORG@>z0Xi77h(}I??qBU)3OFP=rfsS;dGhOIPH@ee zEMhTBSjsY%vx1eZVl``6%R1JxfsJfpGh5ioHny{ao$O*ad)Ui9_H%%P9O5uXILa}O zbApqc;xuPC%Q?<-fs0(?GFQ0DHLi1mo800yceu+v?(=|$JmN7=c*--L^MaSW;x%u0 z%RAolfscIRGhg`1H@@?OpZwxCfB4J4C*J=EKtKW!m>>it7{LiaNJ0^sFoY!>;fX** zA`zJ=L?s&0i9t+a5t}%~B_8ofKtd9cm?R`68OcdON>Y)UG^8aR>B&GwGLe}qWF;Hf z$w5wXk()f^B_H`IKtT#om?9LV7{w_;NlH=yOIp#IHngQ3?dd>AI?r62tnz(58u zm>~>h7{eLCNJcT5F^pv#;I&HLPVF>)F6YHnEv4Y-JnU*}+bBv70^YWgq)Fz(Edim?IqJ7{@umNltN^Go0ld z=efW|E^(PFT;&?qxxr0tahp5bPfe1_xf)b42gdilL2u&Em5{~dhAR>{7OcbILjp)Q6 zCb5W39O4p>_#_}9iAYQml9G(%q#z}!NKG2jl8*FbAS0Q`Oct_|jqKzgC%MQ?9`cfp z{1l)dg(yrBic*Z?l%OP~C`}p4QjYRepdyv1Ockn9jq22(Cbg(d9qLk#`ZS;+jc800 zn$nEsw4f!eXiXd1(vJ3Ypd+2=Oc%P+jqdcIC%x!RANtad{tRFsgBZ*ZhBA!dj9?_A z7|j^QGLG>~U?P*4%oL_Fjp@u_CbO8$9Og2Q`7B@|i&)GOma>fHtY9UpSj`&NvX1p^ zU?ZE@%oet?jqU7UC%f3q9`>@2{T$#Rhd9g;j&h9SoZuv;3J>-%oo1$jqm*6C%^d3 zAO7;MyyHIt5RgCwCI~?ZMsPw9l2C*u3}FdJcp?yyNJJ(IQHe%$Vi1#9#3l}LiAQ`A zkdQ@0trU*qT zMsZ3|l2VkW3}q=tc`8tmN>ru_RjEdGYEY9})TRz~sYiVp(2zznrU^}HMsr%wl2){) z4Q**hdpgjOPIRUVUFk-5deDAZhTiM2T zcCeFO>}C&p*~fkkaF9bB<_JeQ#&J$?l2e@K3}-pVc`k5~OI+p(SGmS@Zg7)Z+~y8< zxyOAT@Q_D5<_S-E#&cfql2^Ru4R3kJdp_`yPkiPJU-`y&e(;lD{N@jT`B&WY9{~tR zAOaJFpadg0AqYt*LKB9tgd;o=h)5(N6NRWmBRVmNNi1R$hq%NeJ_$%jA`+8?q$DFb zDM(2wQj>hfi zl%qTqs7NI$Q-!KjqdGOHNiAwqhq~0GJ`HF{BO23$rZl5DEoezATGNKMw4*&8=tw6z z(}k{dqdPt5NiTZShraZqKLZ%ZAO&aK z$t-3whq=sSJ_}gLA{MiRr7UAPD_F@YR>(8$u4%YhrR4$ zKLP^DMC?-QJfN#q!gtoLs`mEo(fc?5|yb! zRjN^)8q}l~wW&j0>QSEtG^7!YX+l$)(VP~vq!q1cLtEO>o(^=R6P@WoSGv)i9`vLa zz3D?=`q7^O3}g_48NyJ8F`N;MWE7(r!&t^Ko(W835|f$2RHiYV8O&rBvzfzO<}sfI zEMyUjS;A75v78mGWEHDf!&=s{o(*hd6Pww>R<^O79qeQmyV=8D_OYJ>9OMv(Il@tn zahwyJh{PlzDalAq3R04a)TALT=}1ooGLnhRWFafr z$W9J&l8fBrAusvJPXP*2h{6=1D8(pF2})9m(v+brs7?)PQj6Nu zp)U2PPXij#h{iObDa~k33tG~O*0iB5?PyO2I?{>GbfGKV=uQuM(u>~op)dXD&j1E8 zh`|hDD8m@e2u3oB(Trg%;~38bCNhc1Okpb1n9dAlGK<;FVJ`ES&jJ>*h{Y^nDa%;S z3Rbd;)vRGH>sZeQHnNG$Y+)*>T;VF$xXul3a*NyC;V$>M&jTLvh{rtPDbIM$3tsYy*Sz5^?|9D#KJtmr zeBmqK_|6Z0@{8a6;V=KnI{za80SQE4f)JEo1SbR`2}Nka5SDO+Cjt?PL}a26m1smK z1~G|6Y~m1?c*G|G2}wj^l8}^SBqs$aNkwYXkd}0$Cj%MDL}s#(m26}u2RX?_Zt{?q zeB`G91t~;ficpkd6sH6wDMe|@P?mC(rveqJL}jW_m1+=(3WeG#AU8< zm1|t*1~<9IZSHWFd)(&%4|&96p74}sJm&>3dBtnq@RoPH=K~-4#Am+nm2Z6K2S546 zZ~pL?e?`6j5rBXMA}~P+N-%;Gf{=tFG+_u!IKmTwh(sbXQHV-3q7#Fd#3D9vh)X=; zlYoRIA~8uwN-~m@f|R5pHEBpoI?|JYjASA+S;$H@vXg_HI4f|8V?G-W7DIm%Okid3R9Rj5ies#AlS)S@Q6^rAO?=u1EPGk}2%VlYD($}omAf{~13G-DXcIL0%9 ziA-WLQ<%y$rZa|!^2*vmflbAW>!;xI=z$}x^}f|H!$G-o)=InHx|i(KL|SGdYGu5*K%+~PKO zxXV56^MHpu;xSKn$}^txf|tDFHE(#!JKpnwk9^`YU--&5zVm~h{Ngu%_{+bN?*9lt zKmrk%AOs~C!3jY~LJ^uUge4r|i9kdm5t%4NB^uF*K}=#1n>fTJ9`Q*)LK2afBqSvn z$w@&^$tANeUjK?+frA{3<<#VJ8aN>Q3J zl%*WysX#?4QJE@Kr5e?#K}~8=n>y5`9`$KJLmJVTCN!lP&1pePTG5&|w51*G=|D$1 z(U~rEr5oMpK~H+on?CfVAN?7?Kn5|GAq-_0!x_OyMlqT(jAb0-nZQIQF_|e$Wg63& z!Axc`n>oy79`jkiLKd-@B`jqb%UQunR$y!A)*)n>*a)9`|{`Lmu&% zCp_gD&w0U1Uh$eYyyYG5`M^g$@tH4teQenwWv)U>QayTG@v1kXiO8D(v0S`pe3znO&i+Mj`nn*Bc13>7rN4o?)0E1 zz35FJ`qGd73}7IG7|alcGK}GjU?ig$%^1cqj`2)jB9oZR6s9tb>C9jzvzW~s<}#1@ zEMOsvSj-ZZvW(@dU?r)hZbx46w6?sAX&Jm4XZc+3-?@{H%a;3cnk z%^TkGj`w`vBcJ%p7rye1@BH8=zxd4`{_<~}<39orkU#_`2tf%(a6%B0P=qE7VF^cg zA`p>CL?#MRiAHo{5R+KMCJu3lM|={HkVGUV2}wyta#E0zRHP;iX-P+VGLVr>WF`w) z$wqc^kds{GCJ%YZM}7)WkU|uu2t_GIaY|5Y(34*DrVoATM}Gz| zkUW_xyE&FaFbiy<_>qc$9*2~kVib`2~T;(b6)V0SG?v8Z+XXiKJbxG zeC7*Z`NnsC@RMKs<_~}QH_Y=N0SHJS0uzLw1S2>h2uUbH6Na#aBRmm^NF*W?g{VX$ zIx&bzEMgOfxWpqq2}npH5|f0aBqKQ~NJ%PElZLdUBRv_&NG39qg{)*FJ2}WnE^?EH zyyPQ41t>@%3R8rl6r(sLC`l}a>$Rs8+g{e$qIy0EbEM_x@xy)le3s}e^7PEw- zV?7(#$R;+kg{^F3J3H9PE_Snrz3gK@2RO(f4s(Q~9OF1AILRqabB42=<2)C*$R#dw zg{xfSIybnZ7q7j`K#3UB6i9=lC z5uXGkBoT>8LQ;~EoD`%a6{$%>TGEl83}hq|naM&{vXPw}F`or2WD$#5!cvy8oE5BO6{}gpTGp|i4Qyl+o7uuv zwy~WZ>|__a*~4D;v7ZAR`P7Goai`c{=F7b#@0uqvl#3Ugp z$w*ELQj&_)q#-ToNKXbbl8MY@AuHL)P7ZRCi`?WPFZsw%0SZ!x!W5w>#VAe*N>Yl_ zl%Xu;C{G0{Qi;k`p(@p=P7P{Oi`vwoF7>ES0~*qZ#x$WR&1g;wTGEQvw4p8SXio<^ z(uvM=p)1|!P7iw0i{A91Fa7Ax00uIM!3<$2!x+v8Mly=gjA1O}7|#SIGKtAdVJg#@ z&J1QUi`mR!F7uer0v57}#Vlbd%UI3|RNkn3jkd$O3Cj}`YE-8NHK|2y>QI+@)TaRrX+&e1(3EC0rv)u(MQhs7mUgtK10Cr^XS&dpZgi&y zJ?TYn`p}nt^k)DA8N^_QFqB~oX9Ob|#c0MbmT`<{0u!0UWTr5cX-sDZGnvI~<}jCe z%x3`$S;S(Nu#{yiX9X)+#cI~DmUXOW0~^`IX11`EZER-;JK4o<_OO?I?B@UnImBU( zaFk;l=L9D?#c9rPmUEov0vEZ&Wv+0QYh33BH@U@a?r@iT+~)xgdBkI$@RVmf=LIi$ z#cSU1mUq1810VUsXTI>2Z+zzmKl#OP{_vN7L%jbHfPe%dFhK}PFoF|;kc1*MVF*h& z!V`grL?SX#h)Oh~6N8wF-b^DGLn;ml%ygxX-G>t(vyLVWFj+J z$VxV{lY^Y(A~$)+OFr^bfPxgFFhwXzF^W@yl9Zw}WhhHI%2R=gRH8Cfs7f`eQ-hk+ zqBeD?OFin-fQB@pF->SnGn&(amb9WZZD>n7+S7rKbfPm|=t?)b(}SM$qBni$OF#NE zfPoBRFhdy1ForXNk&I$AV;IXg#xsG5Oky%qn94M!GlQATVm5P_%RJ_@fQ2k#F-us= zGM2M~m8@blYgo%V*0X_)Y+^H8*vdAxvxA-NVmEu(%RcsVfP)<3Fh@AbF^+SBlbqr- zXE@6_&U1l_T;eiUxXLxIbAy}Q;x>1<%RTP%fQLNdF;95PGoJH;m%QRNZ+Oc)-t&Qv zeBv`-_{ulF^MjxK;x~Wz%fAus{|G=p0uh)X1SJ^32|-9g5t=ZBB^=?2Ktv)DnJ7dh z8qtYCOkxq6IK(9$@ku~J5|NlBBqbTiNkK|dk(xB5B^~L>Kt?i=nJi=_8`;T0PI8f( zJme)G`6)m_3Q?FM6r~u&DM3j}QJON8r5xp{Kt(E1nJQGJ8r7*mO=?k_I@F~e^=Uvu z8qt_0G^H8MX+cX`(V8~2r5)|*Ku0>!nJ#pt8{O$aPkPatKJ=v@{TaYO1~Hf+3}qO@ z8NoS|UJKW_S_j$lW9`TqbJmneBdBICw@tQZhP^ zDMC?-QJfN#q!gtoLs`mEo(fc?5|yb!RjN^)8q}l~wW&j0>QSEtG^7!YX+l$)(VP~v zq!q1cLtEO>o(^=R6P@WoSGv)i9`vLaz3D?=`q7^O3}g_48NyJ8F`N;MWE7(r!&t^K zo(W835|f$2RHiYV8O&rBvzfzO<}sfIEMyUjS;A75v78mGWEHDf!&=s{o(*hd6Pww> zR<^O79qeQmyV=8D_OYJ>9OMv(Il@tnahwyJ-nMQr5Vj>K}%ZEnl`kh9qs8r zM>^4&E_9_E-RVJ3deNIc^ravD8NfgWF_<9?Wf;R5!AM3inlX%J9OIe5L?$trDNJP= z)0x3cW-*&N%w-<)S-?UTv6v++Wf{v^!Ae%Knl-Ft9qZY^MmDjTEo@~Q+u6ZRcCnj1 z>}4POIlw^fMJ{ofD_rFo*SWz>ZgHDC+~pqkdB8&+ z@t7w({N;ZMZ7q7j`K#3UB6i9=lC5uXGkBoT>8LQ;~EoD`%a6{$%> zTGEl83}hq|naM&{vXPw} zF`or2WD$#5!cvy8oE5BO6{}gpTGp|i4Qyl+o7uuvwy~WZ>|__a*~4D;v7ZAR>it7{LiaNJ0^sFoY!> z;fX**A`zJ=L?s&0i9t+a5t}%~B_8ofKtd9cm?R`68OcdON>Y)UG^8aR>B&GwGLe}q zWF;Hf$w5wXk()f^B_H`IKtT#om?9LV7{w_;NlH=yOIp#IHngQ3?dd>AI?r62tn zz(58um>~>h7{eLCNJcT5F^pv#;I&HLPVF>)F6YHnEv4Y-JnU*}+bBv70^YWgq)Fz(Edim?IqJ7{@umNltN^ zGo0ld=efW|E^(PFT;&?qxxr0tahp5b~-sYydx(vhAFWF!-r$wF4Lk)0gmBp12K zLtgTcp8^!55QQm1QHoKV5|pGAr71&M%2A#QRHPD>sX|q%QJospq!zWQLtW}op9VCf z5shg=Q<~A77PO=lt!YDB+R>g4bfgoV=|We!(VZUjq!+#ELtpyQp8*VH5Q7=QP=+y_ z5sYLMqZz|k#xb4=Ok@(1nZi`2F`XIAWEQiT!(8Sup9L&r5sO*EQkJot6|7_xt69TZ z*0G)qY-AIg*}_(~v7H_4WEZ>H!(R5Wp937^5QjO!QI2t(6P)A}r#Zt}&T*a#T;vj$ zxx!Vhah)67Kmrk%AOs~C!3jY~LJ^uUge4r|i9kdm5t%4NB^uF*K}=#1n>fTJ z9`Q*)LK2afBqSvn$w@&^$tANeUjK?+fr zA{3<<#VJ8aN>Q3Jl%*WysX#?4QJE@Kr5e?#K}~8=n>y5`9`$KJLmJVTCN!lP&1peP zTG5&|w51*G=|D$1(U~rEr5oMpK~H+on?CfVAN?7?Kn5|GAq-_0!x_OyMlqT(jAb0- znZQIQF_|e$Wg63&!Axc`n>oy79`jkiLKd-@B`jqb%UQunR$y!A)*) zn>*a)9`|{`Lmu&%Cp_gD&w0U1Uh$eYyyYG5`M^g$@tH4tBomp*LRPYoogCyO7rDtpUhrl%y1; zDMMMxQJxA^q!N{>LRG3!of_1n7PYBEUFuPv1~jA*jcGztn$esVw4@cSX+vAu(Vh-; zq!XR#LRY%cogVb07rp62U;5FX0SsgigBik5hB2HGjARs}8N*n{F`fxbWD=8^!c?X) zof*tz7PFbdT;?&K1uSF{i&?@_ma&`_tYj6dS;Jb^v7QZVWD}d&!dAAiogM6C7rWWR zUiPt{103WKhdIJgj&Yn5oa7XzIm21bah?lYUG8z82R!5v zk9opVp7ER)yyO+HdBa=Y@tzNSKt?i=nJi=_8`;T0PI8f(Jme)G`6)m_3Q?FM6r~u&DM3j}QJON8r5xp{Kt(E1 znJQGJ8r7*mO=?k_I@F~e^=Uvu8qt_0G^H8MX+cX`(V8~2r5)|*Ku0>!nJ#pt8{O$a zPkPatKJ=v@{TaYO1~Hf+3}qO@8NoS|UJKW_S_j$lW9`TqbJmneBdBICw z@tQZhg5^1SAlF2|`eU5u6Z&Bov_uLs-HQ zo(M!F5|N2QRH6}`7{nwNv57-m;t`(&BqR}uNkUSRk(?ByBo(PiLt4_2o(yCp6Pd|E zRP^DMC?-QJfN#q!gtoLs`mEo(fc?5|yb!RjN^)8q}l~ zwW&j0>QSEtG^7!YX+l$)(VP~vq!q1cLtEO>o(^=R6P@WoSGv)i9`vLaz3D?=`q7^O z3}g_48NyJ8F`N;MWE7(r!&t^Ko(W835|f$2RHiYV8O&rBvzfzO<}sfIEMyUjS;A75 zv78mGWEHDf!&=s{o(*hd6Pww>R<^O79qeQmyV=8D_OYJ>9OMv(Il@tnahwyJ-n zMQr5Vj>K}%ZEnl`kh9qs8rM>^4&E_9_E-RVJ3deNIc^ravD8NfgWF_<9?Wf;R5 z!AM3inlX%J9OIe5L?$trDNJP=)0x3cW-*&N%w-<)S-?UTv6v++Wf{v^!Ae%Knl-Ft z9qZY^MmDjTEo@~Q+u6ZRcCnj1>}4POIlw^fMJ{of zD_rFo*SWz>ZgHDC+~pqkdB8&+@t7w({N;cDZ#VAe*N>Yl_l%Xu;C{G0{Qi;k` zp(@p=P7P{Oi`vwoF7>ES0~*qZ#x$WR&1g;wTGEQvw4p8SXio<^(uvM=p)1|!P7iw0 zi{A91Fa7Ax00uIM!3<$2!x+v8Mly=gjA1O}7|#SIGKtAdVJg#@&J1QUi`mR!F7uer z0v57}#Vlbd%UI3|RF-b^DGLn;ml%yhn)TALT=}1ooGLnhRWFafr z$W9J&l8fBrAusvJPXP*2h{6=1D8(pF2})9m(v+brs7?)PQj6Nu zp)U2PPXij#h{iObDa~k33tG~O*0iB5?PyO2I?{>GbfGKV=uQuM(u>~op)dXD&j1E8 zh`|hDD8m@e2u3oB(Trg%;~38bCNhc1Okpb1n9dAlGK<;FVJ`ES&jJ>*h{Y^nDa%;S z3Rbd;)vRGH>sZeQHnNG$Y+)*>T;VF$xXul3a*NyC;V$>M&jTLvh{rtPDbIM$3tsYy*Sz5^?|9D#KJtmr zeBmqK_|6Z0@{8a6;V=LAk3ebsCon+>N-%;Gf{=tFG+_u!IKmTwh(sbXQHV-3q7#Fd z#3D9vh)X=;lYoRIA~8uwN-~m@f|R5pfYhWRE$K*41~QU~%w!=e*~m@~a*~VODP6JlYEp~Z)S)i*s80hL(ul@1 zp()L1P77Mniq^EDE$wJe2RhP;&UB$G-RMpadeV#D^r0{P=+6KKGKj$pVJO2G&Im>_ ziqVW=EaMo@1ST?x$xLA?)0oZ-W-^P}%waC`n9l+hvWUejVJXX4&I(qtiq))PE$dj% z1~#&Z&1_*S+t|(ycCw4z>|rna*v|nDa)`qm;V8#A&IwL(iqo9oEay1S1uk-l%Ut0q z*SO9NZgPv;+~F?wxX%L~@`%Sg;VI8}&I?}hir2j1E$?{G2R`zN&wSx4-}ufCe)5ao z{NXSE_>Vwo{Uvz-t?g_{pimC1~Q1j3}Gn47|sYrGK$fRVJzbq&jcni ziOEc1D$|(G3}!Nm+00=s^O(;97P5%NEMY0jSk4MovWnHLVJ+)e&jvQKiOpHH@! zK?q7Pf)j#}gd#Ly2unD^6M=|CA~I2kN;IMqgP6o3HgSkcJmQmpgd`#{Nk~dEl9Pgz zq#}USq#-ToNKXbbl8MY@AuHL)P7ZRCi`?WPFZsw%0SZ!x!W5w>#VAe*N>Yl_l%Xu; zC{G0{Qi;k`p(@p=P7P{Oi`vwoF7>ES0~*qZ#x$WR&1g;wTGEQvw4p8SXio<^(uvM= zp)1|!P7iw0i{A91Fa7Ax00uIM!3<$2!x+v8Mly=gjA1O}7|#SIGKtAdVJg#@&J1QU zi`mR!F7uer0v57}#Vlbd%UI3|RLys@qcR~r75;+<4+!7CQ~dPc!NY6d>l^MP;4cfm zxg>yZ51l_L%ReX{rr800!LpK5lY8)>3`THkf(`tR=kQL?`N4x{9rs@kd+c+~A3W%M z@?KHyv%As$B6iYL*QJcZ#ctK!+~RLvd|Xo#H#au}YDLX5iPDCs7colASZ_7tu|7wH z|1xy-vDhK@!`yfbU*BG_dt%3?jO;lYZAmz94#o=zz{L<&u`a(T1uO?sq`Y<~^UQj} zn+~ey?V7JP=j~gXTo2}|HromHCI?r$5xj1soo4d#^6h_!p6cX$q*Zj=E2??blxSCv zcVp;vP$g#NG}+}S6aiT0Zt8<8ecg?bYhp6t7T@hvWuf^xPZm3QyneOcvmTva?5F=@w&=QcTA z@9RHm!Jy~6{F|Y{pRy3gi}bB$vLh){%HcFuLm~*`>x(_)C2-xx?F4rG3r3$mSGJ>0 z){dHxOFBhg!>C0*CJ@PBZYu)Vp^qHnS+Q(V*la)EpT?A7=)+8Al1 zGPCdo}x~pt3*CjODrE3MEEO=lmp!N1Dw?n!$%8 zH~2^d6uLK6#Drzn80W!FCT4Em`BY`om-my@gT9JOSjA5;F00!nId(Xv_x z`9A-hiENDMkAD9@!N0Uv$CHIU`Uh9>qH;ba^8NT-&~CWQO`_;;{72dXMJWUEzO)|B zWKEYe>wdZuyeC{;r~>P+t!8&ON#-@VEz}d}4&!{Ko+K(a-SUOp8n}}g8xtW3Z<8cF z(!*P{2Ef^B0>hanYdzzG%{0`Wjog2YA0ru_KN>zha9botnPm>PIx}X|$9xSFb>08s z7$@abE!o|9u^OlTCAHUsUd^nBET4~Hg^P{i&7+BI)nsXxIscO`EfzIyDlIn4C>54n z4qlnzByC=CXm{mKLV9LilGI+0<6ASA*RVdGI3Y8Z*}ZbTv;5rLpyj5z)YSh1zpy;R zgZG3|l4|xB@4d*lmAqjkgIw)cJ^81a6oF?53MPyQGhfE|GlS8atirag73QwLq+|~# zcP5OQJkfou9lf7+xMm@=h&bf-ScbiEU)68AerYh9Mn`oPJxt0Iq;(BCLjS8lT;hE~ zGYM+q4sAatn}l9jkjrDxr|0%ht+;?6?hHQ~L#~+Rl}{oEGA?9l4X;%4*1E4UkMy9eFWz+S{72Mx)g-|p^Zs>5(hwF^ zDx1LJIAQ10=pUpraiKdQ9gi5@D#vpQrBU*zvCa`0OsFD00l`?Hink9o7xS{HIOT4f z}>LWK^oHsFe-JRC7584&fK%rWF1e=ZPdF zUd=I`bbqHoilB;OKSO}HETTc_(p_=tNNKtTw<9~=h7WV$+Y+w(?{rAfwPuXx^WlPZ?%sXd?sI{jd|sUG)NCaw0n^~$848H7$IE%(bK5tr2&cG7ND8r{$Qc7-FTbapKP zlBdPU$WdI=Lq2f-p#TX%D3wsZG~uelKA-O=LSlIxOG-FoQziUxdx`&j>lQx>Dvb&c ze}1>I5q6wLQ-XbVtGG%Zi@yZ(rZhVxWM1KV1Q%Q5^CF5F3e>C6>K>@Y5_@ixwK9nn zNJTDF@3s0l(JRSTLO_@mqx}kOG1zW{|0$;QLvhv&QvhMCjTcR_2>vuVS*YCM7bE60 z_XYP%c;8-6n1Gyxfh3PygHEE9V^!&5XVsTbthb^br!ZiR48T8s5@kL+ zlx#5X-}ha0>@s6jgMZ-%%STe1?wbO?|%6LR>jllEuj>AueP}i{+w-!qdQ=R39+%UO(XmW1H7Oe0^bA% z6-}q-SU!)c37u-HDt^YVT<5N|G=z1~Rn$Zy|LAed(nz|OHuKximPaNHHNU^RtdCeR zjY;@6wNFog-=mty2X60tepE}>^Wx?3E#FxP(YXr<=@8Ibw*CBe_@n62Bi_+oO%Jmk z*aZ02-*if819mxlyQW@T@cxB=B&|}q#QLK@(q|WCguaK)d9VbSjNO^U-$5|(9WW=k zN|evx;7iI&8c_#^>VGf%!+rh2rLNC+&cb@$&ETD=g{zE9rm;7V;4z6m|NPv0{UQN^ zN<(bH-A=ddjy==JcAWE!TObtl22{>BlE@z7ngyo;e39vVzA|&JdLE8Gp7>}F?3CU8 z7no3*^>9*_Axb^e8b#iCWw2HchW9!U7NP_L{q0ew;H$3v)<3DIl{5HvL7jt6%)M3D zjNnNa#T<01vX8kdej=_;h-I!VOPLegzwSpBLB86m-1{o-MGvEAv=4R!gSc#AQdODut>n56#AsY_4R&+Qdp*vECQN#)LJX41RIVb_X7EQM@S)7hH#_%l%#5A zMSg#`vJVMW>yCf9g=&7AODU3@knU)fGm@k!T8%4lvrcCg7M&_#v6p3E+7hlJH1&b` z7yCqZ{TrqAFpzewn0Ek-hR@|%kd|=hMNcnZ+dkn5wEd4X^vo>S?{I7BWzp9v+48g7 zZ~q=XesT*ynAxY|kASBE~Y1{)Iz1-P}9u69z@$5jb6qyJIf6j5su~fLO zrd%lLia^sU6Yfs8^h`^M3*Mj$l$z?RXigPkOB%r9wDYh5Z*UTys8|Qjj#dD?cmH*a z=rcdXISS)vxpE4%4=&8oy^fmPfC}_DsM38E+hb9`CUisHGi2+0NTl{&JQ+2|DlU$9 zk18Nn8>|NES|uoHtEoatrCIxyI{@EG*gdFMG@pq&Za5^k<Q!NPM~AJaVkoBYNQ2p6uawz`3jVa$8)-LXdZe(bB??IjuO|$h_ol;J4TtqJvcvn!D$_k$>PY0s_Xnnr7f;Kv8^H6_L^&E}Yc z8id_^^#SJM3IiRz1Hg5o{6V7iTqHB8z?Hn?Sg8;At2g3mN6wI*YV@Lv(O61wx1gch z+apAMDc0@jzPB4f{phB+!&wI8(fA=T@oS@2#h7!Al;Kv3`jV&hgzgCDFp=zW^TFsz z6jAoy&=GHEhKVFz?lEvYlsH~hgWqexu_uO8_ptRb(YbZ-9W!{=-ib9mrWZ{Iy>(3T z8j*6tE-^WtS*0LMz8n5|XofUvB4G*`N;z;bS%_ftgIw?Q?8j1Ll;0pJ#hgSFxfllftHkNZjrolckn>L8wPap_41ejAh|AqheRko$nbh#dL_fNoD zLX3fjKYBY`G%M4(C~ow>oUi=x(s&cJjrwu5$VuZk8CeTSYLYC=)J~jYP4OO=zB%yf zH3>{{n#<#9x&D2#JT2yYO@vy>H485;SFbX3D;cdoil96v<9tUNTxZJ`xV?^Qjwr2? ze1@)er2NdblAOa6f7C3xI^UL7qk#Fa+ITixppoX=C5~G5Ba%7|;w)*h94$>_lP+Pv z#F2)VXgH26a$3~$x{OF6D{ZESg*Fcb+kWLVk?oFQd(OgM01TYT;c z(H4Qkn`K3P_(Ms^Nf-HHl`iwFB2BOdWW7rv@LBV+?^*umynRFW&A}ZH52o_YgsW`2 zp|scNRKwPmmc8ay`oK33P-Ip7)uA++16TU(Ay6&9<+8^A73d;drVW#cd-QvjJxPwY zGo%l5NI!}en|4Vh2;VUnoh4R%H!5?=vc5TF@_>taj0=oNg=~*V-f-z*Mprtl5l&|* zF&s;t`n2)r!dV$QP;Z;p=VJd8`}zwqc8`Dno|rqNuLA}phb+JGyx46*U+>v{#|krPs*^@82rS|G=AB6U zvZU(jc_5mbNCf4A3m0*SBpr++Zs^m3SwYakCe$CDbd_{`9#5@bB7oV;bD=1gxe!dn$V9MUWQQ%JAPsb zD<=;L5s*`b^WUl_iQAe(+7^*ArCwS6R!Ppqr=a1>9)YrY*;v(P^m z*+b`cc|{J|zkO@eMxj9OzHI_>opY(lzd6jg_+3z? z73;@@c8pa1XSrtJV!xL48&%oWJ1#HFMc!<|sHA?ZqR@9OR^}K#qWKDyD%f0=TT(ZS zdZJLG#q;SlpUVFIyv$xb2m? zobzh&d$yQ!-PRSAbFm|mYWffSOzbpnkyBUd>RjLpTRi{2{6+8igKUo}kFBHXo)l$T zx7*Ag6CuA@*U7`Au2H0_D^btjUl(+j+$ZF5(fh_*xML6;y4Q2vZ{j0XvPG6WYIY(2 zVB+Y^l?eWAIZxijC?GVjxK6PKT9jTDZ=6r;k>O1v>)6#*@P3oo%-4;)l{gA-WeJqUy zs4F= zSqhdg@*I}tk@3<;l+1sm5HX+2yftCES%*=6G5Dj)PjY1rah(4pFl=*dZ#j{pDxJ~& zVik8kAhl)pN@%K81(o}4A&zgYJH>sMUH@l=Ez$@PN+Gp5L#jSoFb7d@IaXakIZi;6 zes$&y#szzR1uqoKcQrY1K9X1X@-xt|e-VO|5fVN50%AW_ z{fig9N}c;Dtv+HLFN@q3g2_r6(#UpOvXzF4Y7lK%Sw_q35-BP3YOC zno!+mHZP%d*+vFwpqIbVuU34; zm57mf|1Wp5D7p2V5&$;rqS5nAUp6}q>PIg@* z{S4C>>vFHxLIA3seFfp6&^HimULR$G0l=zQ27Oxa^K0||a6~}GrQ^-B=jwed>3k8A zFM6tu&MB#49?s$gx$oDS7HL@y{~ges^D+j>fUiFnR<0GltcOmJ=MmCNf1V1?eAic7-^9;-b4>18S`0ZGLU}wy(n&^V?f99 zi}{4dX}u0KPt0cI#$L+l|DSeA?d6=U+d|%l>5^_3oYw`=8G@sP4yultjlkU>*&xSb z%9r_HH_$lrr2=E%wr%gw9}M8EL5XP2qvulV5q_78Ir!qjxy|2eHk9eDj7T_+x}YTl zpS)J;PV;Rpi>r?mh-7vji5{Xz-MCu=mP@xv~ zfIIdz50r1JRT*m5EV|SL2gOmwOLUVHM%ACU=+<|fx1(=pG#1~?Tn&^o{#xI#;Ql$C zU$)>If3%>Y0<*myJYuC#56;HDd~nr84ksc*ujP0l58W1BVkaTT%WVLXMykv71#K<> zB+UZ^zWR;=R*}m8{OW6!bv;Gq@qHTwda^5i z{a)@QcG2E^zBYmD=jtC5zezgp`Z;-|0PVi3E8ci~%@0o!;5vlV!nfNQux8Y1NKywB z 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�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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/adaptation_with_homard_arguments.png b/doc/salome/gui/SMESH/images/adaptation_with_homard_arguments.png new file mode 100644 index 0000000000000000000000000000000000000000..2bdd411cdd2fd4e0153a25df3cd309646162bb20 GIT binary patch literal 73552 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

hv1iaLpJ66sdRaEbGs`uXaxZPU$H0Ac1JKa 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�A$a1fsE|}Jzm(L(oDkS(e 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�)jD) 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 U=)lEm4EVXLq;;o8;X%m%0eiCa7ytkO literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/adaptation_with_homard_boundary_cao.png b/doc/salome/gui/SMESH/images/adaptation_with_homard_boundary_cao.png new file mode 100644 index 0000000000000000000000000000000000000000..8d823b916c91b6fc19750905e6168f794e372091 GIT binary patch literal 29105 zcmZ6y1yEI8xIYX^ONU68G}0Z?(%sS_-Cfe%jnWN*ba!`mOG|@v!+-JKduP7+_6!2! zIfuPhJkPIIsJyHg5&|v)1Ox<%)j580$x`WE{Ol!0 z<`<&8PoS)f+6?cvqtK(SFtea^MBX=KC}BVss=!2XreGM3`;p09#E{%TLYdLI$B$HI zp8#5r_5SJmbzAZSpS_QZO;lPn%E(o}{oDxO&5BjoPp5!x?zgbWybnj!?N7%x4S3b@;s8ygaXQAO2QyO*!95)-^_7yPvBun@(XhQ!LkMWoWzg6PQbl0hc_q z=kwj}#otkj=>nPSHeTL;9dExsT#xF|=xBdZ%eIaYJl%E7#*{;MYTDVp-_xpvJbETRtxsmK&;YCphxE;$| zuctct4omAZP~J$Qvhf|3HJ_MdelK__E-5QUU*&Pwn=(diDx9%M=XPSP`U(Gf;`6d_lJUB#P1#<>=}R43-fKnIuPn=ll5(UlA;yv5D?JuUiT{}b(l z{Wn(Q(%dgE@2gaWUN7npO;5&Bn4!5c@rpzR0>{&R;y29tGA;L)1LIQvJsuJ#H~qQb zqUrmVvVgM^{}VQ$j*>z(t@75m=%|3#D-i{%xACd zg#U(;CZ?E@9?3aUR-jR%1ig4anCqtqq0ZYykN@rHh+PsYai7FKGJ(7XeiEH%1hI2 zliiuGVA>2@p1?ARYX(eb0 zkqBJtzf4{yu*H>0;;A42!km7BV@DPfmwm-nIGq)vA_>dvA5`Up1Vs|d5KVE>?5|@p zlDW9wn)PLrIEPabjXUfMdT*bgEj}3~k(A&e3^(dI3C~Rlht_$bS}auPv%aTO*DErc zF3`_#ejTHqS(1*r5GUP1A?Ty}!mMF9l~$-66wnc&Ms}o2NTfP7rm>Adeggc@w}zLv z!BF%Rzr^^F3bvE(=IT)o#fZL(s34NqSt#W9n`N8)9r?+GrmKm(>rS2<9H^g1KCoq% zo@6XAaT$Tb!i!c<$ryyAGfLVGgMfp8lFZ87PWJ~=+{a8BB zO+WuLQy-!%K8x`PBrLuUs`gzvtno(Y#W?>c6J-*&g&{Ao5B&uFooV)Vg2ZN1TH_j+n_+^@R(oBFav z^kR!HPngYEBJlKDH+Ot!Ci!}hmag#awj8xW{{|uAOqFVK)Ehf`UrvhIv_D;kxK3mV zsz2u^>r6$MR%IA`a^)ArYernq5xIR!h{%yODWDB=orBofq_Bg=Nu_vbK0m8vGG? zz$iK&$&qw#_TLv}>SwrLa#+k+g2!$L^N+}PK0x-FxbBa;#hiJ=QgiRLcPBJ<%k5@( zJf+<8u&&bX{f4`rI_I8TGWkcXO1|M+=j|Au#ABFQA}$ zLh-&lUNj$7g&SspHEP%w!IYP2Jf=AI>>2agqs<{2;E*=SMS}6{EED%K=))>LPKns6 zPwk{!=SFcO5b$4¨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 zπ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≧~k{HYTii4e7SsV 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

eVC#2uV#IMrpjb;B~zw%OJ}fn041=R!ERC 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/create_boundary_1.png b/doc/salome/gui/SMESH/images/create_boundary_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f6e34b625b6fa772f078ecba496764dc1932f418 GIT binary patch literal 4347 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®9Eg1Qf5Xq@KEDdUj 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 Dc}4t; literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/create_boundary_an_4.png b/doc/salome/gui/SMESH/images/create_boundary_an_4.png new file mode 100644 index 0000000000000000000000000000000000000000..abf10421375e1733b99a22f424b27c41576fd117 GIT binary patch literal 15154 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/create_boundary_an_co_2.png b/doc/salome/gui/SMESH/images/create_boundary_an_co_2.png new file mode 100644 index 0000000000000000000000000000000000000000..017b56d943ea8485f5f2b3909202a757af57ab26 GIT binary patch literal 24414 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 LE;e-QfYkp0Ch|Uc literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/create_boundary_an_sp.png b/doc/salome/gui/SMESH/images/create_boundary_an_sp.png new file mode 100644 index 0000000000000000000000000000000000000000..be7b28b7b592b3c0c74f55175471966b2d4cae45 GIT binary patch literal 19424 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 E01>v3egFUf literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/create_boundary_an_to.png b/doc/salome/gui/SMESH/images/create_boundary_an_to.png new file mode 100644 index 0000000000000000000000000000000000000000..38e39409b803f45689211e09967d777adb777272 GIT binary patch literal 23389 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 JC`4Zm{SSHK7oGqB literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/create_boundary_cao_1.png b/doc/salome/gui/SMESH/images/create_boundary_cao_1.png new file mode 100644 index 0000000000000000000000000000000000000000..96c2382e7dad76980cb563c1053f7f85460f3736 GIT binary patch literal 7331 zcmbt(cQjnz*Z!!HAc)B5M2}uVM2p^Q)F`8u5Ja@mMIU8E5<&D9L{IcCdMC>0H9FA- z!(iU)^ZCAiynp@Hcl~DFHTT?m*STk(bM}6oXYUKs)>IvMPE6z|Wt+CJMNw@=!4H&~>%*@V0zs3$k}{b++Ykw|-}9>*DU< z>T!V6Dg^@33aiM==t0x=7rae%H*fA7YDotY4RA8bCuB1*Wm#3%hOFXNxB3MkzFYVu zHBL2vO8q7r7v>fXcB^Ze<%$5K+X*>VTM)Bb_9 zlURvO^q=P!U&F{#jEhL6<$>SOu=)}XBNG#oFNFUHI5B;UYG;SQdEW()ypM{CDpZMj zz^4SRKil{_i4{ak|DNVq;3Q(2r3*J6c>2{O(Yt9v6%ROG2G)m+N;L~??-yNCg2~9p z68egca=XD0D3)vUbF986MY922tgOkk76Sg_-tS#Ed2gH1YN}Q1lg&%;!LX?^JM8u`;o(3P?y*rIrKqxo5(OKf$Vf3AP z<2)0gk?MA0M?IXTEG=uwy}B9?n}t(7BO~vQ?>f!oT}$EuGbRljE&ia$5wjo8kn`V@ zk*EtI>4+rhu+PNknt1IXUwItRb14Ew+z?xXr*<+td-n0xu6CeBvt$se|Aw5S^z zkNpP(AcCEvduLZ@chsd9E{KJ_V0k2nCPqzVvuc0fQ*v~`mjic?1m@FO{VK=FdmwEi zqbM&raXB|}I?!mdJ>T99!anCFR1R&p{nIosPztiW07jHSexG5+^I58#ckhFGdj~ri zBI4TeJKZZPDx?R+-ABdiz!9w?C939$JrENUCGhj%OsQ--dsS7=8ze$tRmwnk1^{_Gf+8 zGIB2S3fb0Gz#te&9^<11t1oQewV z#sEx<=#%eiPW7e}LB75bh5lEawTIn>%BHFkB>Gcyc?-%Bin(Ny34Jy>`$f8J)^j}= z>EGdmTQj+LN=iz;2kiCl?>L&crBP9(Lu zZ!#H5K|!%{5_C;N7a-B|ZW3M93!Kg)F&toE%xyD_f>bY_p^ zcBhsdt^}%fr>TM{MX*Ehk>v;ryKedR@p1C@?CVi)Y0As4p-D+#s~mfW zfyFd_db!B3H9qU^_KrpzHqEb0s@g#OY+bPU(Fd~lAqp~?Po{X98lje-s!IRH-%cfJ z=eO(dl$nawgD*&h82lL1Q0DV3(u9G@&UtUoqcT75WtZimn zVS0L6?+KU{qMCoNrlzK%rY2-?uw=Hlp8WPb`XP+c99(ibIs%`+(?WeG5}?%;6~S?F z!ra{4EHo^);QR#eF^>ps4Plf`oAp7qw^Ar~JJwAQOfT!JYlo%Ys1BuSgb@Xj3K>d7#C*??~B+77n z7u|?SC(FiQhL$>H!8aoWOs zc7H=|QcoG|F&swSGm5~{abKfm{H>8I<;cy=`Ah4Cxg6?);mRfh!FdgRMNQ@V>Nw)r znp0_ej5N_bhLGYHnAp{vRWY=?m%9>bbjh$WvsYXAR16echqB%h=cg^5^UdwydOUsI zwaDoSx&JpbDHN?Ychfs2iu@}Mx_#=sge6K1UMjR^`5sr)^yuwE!b9prXgWrKtXU5I zYk0V&TkP!YJ^_G>n;#!|?u@s$(=Yj-2UtfauoUe~y;sc-QO*DDg0QDEZSCku5# ze4_Emlb;j{M_`wUe^d=6FRwy+pzh#KHH`Mph>K=@Du3}?NN}g5(WB3*#I*SlYkvOZ zm!!|1Z}IbxkSN65g7gu$amdGyAC1xTm**s7PqJwI#qcbKo5FKic6Z7fFqZoBn|m8@ ztruwa5Z|T{k&JzTKS3B0fY(PZ`FOha>Is*}pMV12%b=D!;^hMtno=Sv$rr=43P4aa z$`V<3x7X)TdIF;~=bfddtyR}M_Y0tN9iP|R@IQ+K_~7*H?6&FB@Z$aFBom%f zC%b=Q79Y1yU-T7BesP_y!h2Hmj5O#E<7zx@XZ3F1v{4T^8U@o;7WJiMCtp3B8%oUy zAN_E{DeiTJ+k&=Z2-LWt!nuR&DVcGvwoMgr?Ha0jnx-Blca;zt6{AI3P4~?0L3cb| zXlA)-+hh#vLt|g%)pa63_#^2(33BLcz4>mZj+>|v%!RA-%(jsIsAM5cT6+4fu$?1y zBBFh3EZ6O5RRM)Uwe|GeQBhIJ`JfLjLmR2Hk%VopVjRCj$z503Lcl9)j z<~0xfTCcwAT7rf_o8>|*ZEf+y z#Z9=ApV1ukzzwNdQ&YJ>7RPxo)ZR%@b`|n2Xt^!BBZ~HU6J#y_o30yOp&n=2iy(Rk z#f|U4zyM)^R%V3pHL|{ZK&-caI6{pFhHUSs-1^O`jZPybB5KQ?X0ERBcJop+@bU^E zi7(WQxH8tB`*-7`WgtBRU0rxV=-tdp%abphwy$2z93CSlTxw6wLSz&4oq{NK{rr5Q zcb?_7_8V8f8(XZcsZrF?N$@hs?)?r(2*a|QFoYsp_KtawXk&c`z*;ls2QfQ!wXbuV z54N}8|CL!d?6|om#l-^b>>7O>x+@G3eB)A9roH}W!l-34CIBiaDBF1LYlC~{f3#;! z^32eXgDU`8qF1!Mu``PdWpz}H3*af-pEspK(5d9N!;*5FCH0;+1eJ3r<%fla<_@2- zYkiH9i?nt_!%;s7U0lilc{SlukZ&)|>s?%39(^h#D5P+@yEF3p_k-~8@Y#Lzd7>Bt z4ybqCCFf>bNKj#&oK2&9H-Sv~@`&iif!!+Nvw7B-gS@AWV2XoZ|D3BO8lJA)@Rm%{ zuL+lntJpUV_EodXb9rwsc6r&tMh|tP>gy{eD<`+Ih5Bb32zI6@+}wJ;^XPIWiUzK- zEPfRv9(MT)2&JAsMdJx?uW&!B=GO%5CFJIKMOw!*7MdU;=-G7QVz;ZaL`=O|67ks~ znwoq}m{xG_xB>(M_#$MYz9lh{!fqtC{g|Ry9<9_QLUaP=ZI=wkK7V*`(7cY48A4;= zWKIa?3;$Q504;^iD0_yX$w~9tGPA?>$T@9o?chO^TGEqY+VprVkmCIy4J3;25f51+ z_~FC0sWZH)s>=3sac?pqC$IE?mI+CMM~@yEwOCOwF)L0uNla96mWP@(dS%;>WGHKB zC^$NDLVVUK_U7w#P09wuqF`U)iB3~1qbo)dfmf7(9!sVdCI?j<6ua`jLpf>NE|4uK zD#UgsnFkSqqA~=CixDnu3At{)BO^Uyb zCMlAHCPeBQ|JT3(`IykR?fIn!;bPJtZY-(5_mmAnL{ac}2>_ZKz4m3Tte75< zlPjnsmF>1IwF=d^7{}{7Avy|lK}?G%p^#8>ERcVtH^U-S@`q|_bdW6t>2mxK&6L&l z4~nhn=cETM=TbFqOe2Fqm~WysOk~!+JcY!7pDTPb;0!yCE7?Q8_3)4;bazju22)V1 z?Tox&&hs{(78lhsQ7Sc9n@`c*nqmcg`O;+Nrh9?>8N_rl<;?x+srize&tEsX(G$2+ zu<{;E5vTg{@w};t{u3v?RXk9aLYHXL=P1pVn~I;cp`T91`GhtKKlcs^MEvOl$TeXObGK~BGF&qK-JaYRPL7B6}ZPIvUKLXaLK1G=k_+Ihm&EB_; zr&TDIx?Y~`#%aDpb^vjr@xt+Tn#?S!O@Z}Z#I9QD@9TfsKi*dqY?-a4u^&z&7gknR z4N0k|8XO$@@Yw?^aZW3pK8}@ebFKEX6V!VQTRr7bxD%rM876@gm;sgOm==B<9fnO7 zjqIKl2r90WK@NH^Z?9ma!DG3czW@9ad=>TAX&dLPWhJX2I~tX-m{fGzl)Mb8$0=G37{e2MqW5b=$g z?{<^M98AJA;fP{6j_w_v_uMfNv0C5pye+jb zGh@O&EJHvUfrF?5gp&UD@~IBlY&;DP&Q+!DxG%Sl>+@Okr8TgE(+xg2*f>|Lq7QGq zpo6U;4HvMHOqk)u=5{v|{vR2LvEDof2S+gHCKlk?mH_q6I^!$+KN z|1Xl#@qSMFl7J;7T4V~639|o@LShTIWT0hXp#^{0#Cz0IBxR z;cr%Bc_ahlV*%q^VsAcSvYssLBn)Y*MR5th#;G=|7d^guGe_-WjEuAM>Xer{Mg)juX8Sh{ ztHx5@(e4(#Cy(__ouXv|tUKJ<#!lj3VExCZO=6;=76&Z>fOr4s7gdKzO{wWv%2clv zYWVo*SiUbT%N~yW>{hz%wsV4tpjKk~sF=%}WgPfxO~YTv>t&DQdViu(15)xK7#wq! zw1jYYYE=J@!e9KNU1O2jRr70@Qars3DK3zQF$tgIxzs8Z+7s%p%5O_l~H~G0S}hiQqp@tyxuh4-a@u@CmSioMGipA9*mN z1?C2)qN=L1J@gKiOdE`xo!{ndU0#nBzgy|UjvW`Lsgkbp)|+TT*o)P@ZQZE2IEvbf zgX>>C@gPumJcDF&dHfoGSltxTNKDGG7>UIwB}KnElF=UC$>6ruOuZ%R7qW>aJ{Nx%8Y{i_se9MoRkMzdIeC{AR_^`@A==jp9bnu&ONM)62DdM~gG<>%wGk|Ar!KVrz_NFV3dLwI??P%%*}Tx{5p6OPAiY-BOC zGg*y@JYvszIm~sqM;H9WwKeVxn<3f{X{#DL2{s94&uU|hIs@&o~cv+qlEl~28EomSjBcp6V zQ%#M$x(I5{_DMy|OD^_5%UaJ1(zzNRAAg)Q@b8kMbaLUfr6wZQyI+RHGPB}RfPh0m z4GavDpLyS34Dc>;z=R#G33%>2&CAQns;i@Hy?RHS+Y>waB{H1&SHtP9fJGY!sM=!T z;9D$Qo)Qq!uv}D9s+w~3)HImb$m4Ddrbhy`+LgZxe#w&dWrZ4DXiZH`AovolD2bkw z2}>FTWE3Z^nF!ptZwz-7_9}zm0HeZm8-3E_`!xB9qco^{|l9)Pb#(g6v2-89uCWt&(0uzFHWT&&C^6Gw7{4SCFLXd{Jg2N z-xEq>Qzu_qv&`Z|^w!)nAc>aKF*c4)V2-f1Q~%7;WAy-lPG(kJE{a*!OP%V)Xnwfjvoi{FCXXRhK+PLXG&doae6NK@xXI^}VBqz}o|!Q4n0w)EE}P5TA12s4 zXrp*>9lc>;XBQ!uO$3L-FX>f7-5|SKNj~Wm zMyRvl@b#V}tzdnKPnP!f1qbaG)X}P5k>RSq#T5fg34NiT%4J2BT#-%Pb zSk&Z7N=kskW~bLCwM72rNJCtXc`i~RE-g({mE?wXuZk6OzKs`l0<^8pK+bpD=0e=+ zuY|wl@rQqD1C;$eo7ro7z=R!gRp{f68Q;-oFzy9<3D%r5yk+~ zZ)0bNx!xB7KD*K14FP4B5QT>;KwlbvKUg76!3Bih>K?BCFwVn=kA9`SpplnH&X51E qFrPZtj#3ZVs-?dDqEmQr^+LBAI@OuVp#pqm1gR)!%9qJng!~U(d=ZBL literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/create_boundary_cao_2.png b/doc/salome/gui/SMESH/images/create_boundary_cao_2.png new file mode 100644 index 0000000000000000000000000000000000000000..94da749c3947df86776d4e4a9bb58fddfcd4bc0c GIT binary patch literal 9974 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/create_boundary_di_2.png b/doc/salome/gui/SMESH/images/create_boundary_di_2.png new file mode 100644 index 0000000000000000000000000000000000000000..33ed85f340c3dab2fca4772954d445f5fdb1b479 GIT binary patch literal 14094 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 I;rG7(3mvV5VgLXD literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/create_boundary_di_3.png b/doc/salome/gui/SMESH/images/create_boundary_di_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e682a39742251c2639f51dca6a49fb774eeb4abb GIT binary patch literal 11395 zcmbt)Wk4Oxw&h6(grLD40wlp50zrd21b2tv?he5nLI@s$ySrP0y9al74{%_L@4GYa z&b&K!-pufWQ>XiMb$8XSwbx#&LO#lfA|v1!L))NUO~i# z_!V7J4i;QB6(=9~j&WY`JrNY<#}mdAdk2e&si620tG43hlR{a~c^2mn^YOgj^3@J= zl+)~bThwZj)JlR^;Y3O-sKOBZXjc(>-nH`G*=%$SFtTu3oVoE5pV@4F-}vsnnbJAu zel&o)zSXn-ij0hG3?|TV0RkEsvmI?g!NI}jBF!isv_-ES7oLHmW z$LhL_Ut%Bf`)elg;Z%i$gl_m9x+wTW1Mdj&&`ULaWLsMjxE47x+w}@A`FjC4 z+HH+TQbGdyU&;<_ZJDrX)e&-s4sCY#BVoh7t=ig_N0)3DiEmh9E2CR1l_MU0*DkAx z>F}PR5fc-`919DRe92_}WS>ZDdEz$_0lPKYq~n1bLRWY)yt^olLzVN-IfHKUqah+W zs78%vB)t~TXn{1BgWWEf1OpY7uU{pNot-^aP5G+D^g`p6;$h)6PkZ=#FFCY=K%$77%eIoW zZ0ziwL0-Rpy{hv-98@>Ml1Hh7CZw3xG}s~WIjaz7G)I~M@gFy zWw9BJgZYQLmeO2FK~X^5Gvmxmf2X%^->wYSb|XMX#v4gmepkbwq-sBd7;dfWjzq82 zVd4~?Mm$F8f`Us_)cz-G?15xIVaY{|F+(-AXbH=J>B~!}p089W5?}M--5_lf6PUun z!X0~3iACzrIH>0enKmL)Aed7S&)X(P!E?2h!mbt;vxvjlH8tCZE54qs2SJ+jq7LU& zNF?tRi=CzvYwWlV_Omj)>RivT-L5VIva6BRYb{Yh(DwB7D4Mr|u+P#!U~o)KNYI^6 zs6A1cU+Q=lQq49tHWn~VMU`(t;p+A+&vZP8l9m=z+t@hF?@LluteDV6Zca|f7=@G@ zj&(Q+zvh72`lkf}3A?9#eSJc%NJvORrMa@npDoiKaLTuaI}1fo6A}_A=bb0**y4)k zhpMU^)ANi_$>V(Jtkm%HY6hx43CO6Htkt~9~4FG*KA-M4v!na4|B(A*0X>7 zab|Y5V=kA^Seo~L$p%|h_&tU+*n*zCuSs zlUrai+2@mQ@a(3~TB`GXpw+t5?4xc7Nd~xvANUsFrB;LY18#wY^&8f%piAVVf*8VC`p(ZOQS-rLN56bcGrupHH&D@&*VC zbGXyPX*JXdjJ1%f*Va6PtZ#0twnN=HyjEYkUF^TWh|L+!E>Ehcs^PbqD(3uM%Y0ET zt*GTmGAA^T`(wed;S-)9~|nh zU;XhXb=$TP7i#Kry2oWIm{t@8(!=f+Fl{lJ-OF4yjI)kqf>GL@#|O?!D*fXCi`?9< z6jbj=R>-&axF83dGwG#A5JFzN^Tf!Qa|Hvn+V^SOY9>V2DLgoSExauzi%kJz+;r+y zLTN2692f+d%BcXU+lE^Y$7{rehJT$A Dl8O#na4urvX^M$A!cYc59+!;3(cGcG( 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 + +.. literalinclude:: ../../../examples/test_homard_adapt.py + :language: python + +:download:`Download this script <../../../examples/test_homard_adapt.py>` + .. _tui_mg_adapt: MG_Adapt diff --git a/idl/CMakeLists.txt b/idl/CMakeLists.txt index bd2569e2a..bc5326b53 100644 --- a/idl/CMakeLists.txt +++ b/idl/CMakeLists.txt @@ -40,6 +40,7 @@ SET(SalomeIDLSMESH_IDLSOURCES SMESH_Measurements.idl ${CMAKE_CURRENT_BINARY_DIR}/SMESH_smIdType.idl MG_ADAPT.idl + SMESH_Homard.idl ) SET(_idl_include_dirs diff --git a/idl/SMESH_Gen.idl b/idl/SMESH_Gen.idl index cfdca30f1..532c86122 100644 --- a/idl/SMESH_Gen.idl +++ b/idl/SMESH_Gen.idl @@ -35,6 +35,11 @@ #include "SMESH_Hypothesis.idl" #include "SMESH_smIdType.idl" +module SMESHHOMARD +{ + interface HOMARD_Gen; +}; + module SMESH { typedef sequence sobject_list; @@ -581,7 +586,9 @@ module SMESH in double theTolerance ); MG_ADAPT CreateMG_ADAPT(); - MG_ADAPT_OBJECT Adaptation(in string adaptType); + SMESHHOMARD::HOMARD_Gen CreateHOMARD_ADAPT() raises ( SALOME::SALOME_Exception ); + //MG_ADAPT_OBJECT Adaptation(in string adaptType); + SALOME::GenericObj Adaptation(in string adaptType) raises ( SALOME::SALOME_Exception ); MG_ADAPT CreateAdaptationHypothesis(); }; diff --git a/idl/SMESH_Homard.idl b/idl/SMESH_Homard.idl new file mode 100644 index 000000000..ff25358ec --- /dev/null +++ b/idl/SMESH_Homard.idl @@ -0,0 +1,183 @@ +// Copyright (C) 2011-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _SMESH_HOMARD_IDL +#define _SMESH_HOMARD_IDL + +#include "SMESH_Mesh.idl" + +#include "SALOME_Exception.idl" +#include "SALOMEDS.idl" + +module SMESHHOMARD +{ + typedef sequence double_array; + typedef sequence extrema; + typedef sequence ListGroupType; + typedef sequence ListBoundaryGroupType; + typedef sequence listeBoundarys; + + interface HOMARD_Boundary : SALOME::GenericObj + { + // Generalites + void SetName(in string Name) raises (SALOME::SALOME_Exception); + string GetName() raises (SALOME::SALOME_Exception); + + // Caracteristiques + void SetType (in long Type) raises (SALOME::SALOME_Exception); + long GetType() raises (SALOME::SALOME_Exception); + + void SetDataFile(in string DataFile) raises (SALOME::SALOME_Exception); + string GetDataFile() raises (SALOME::SALOME_Exception); + + void SetMeshName(in string MeshName) raises (SALOME::SALOME_Exception); + string GetMeshName() raises (SALOME::SALOME_Exception); + + void SetCylinder (in double Xcentre, in double Ycentre, in double Zcentre, + in double Xaxe, in double Yaxe, in double Zaxe, in double rayon) + raises (SALOME::SALOME_Exception); + + void SetSphere (in double Xcentre, in double Ycentre, in double Zcentre, in double rayon) + raises (SALOME::SALOME_Exception); + + void SetConeR (in double Xcentre1, in double Ycentre1, in double Zcentre1, + in double Rayon1, + in double Xcentre2, in double Ycentre2, in double Zcentre2, + in double Rayon2) raises (SALOME::SALOME_Exception); + + void SetConeA(in double Xaxe, in double Yaxe, in double Zaxe, in double Angle, + in double Xcentre, in double Ycentre, in double ZCentre) + raises (SALOME::SALOME_Exception); + + void SetTorus (in double Xcentre, in double Ycentre, in double Zcentre, + in double Xaxe, in double Yaxe, in double Zaxe, + in double rayonRev, in double rayonPri) + raises (SALOME::SALOME_Exception); + + SMESHHOMARD::double_array GetCoords() raises (SALOME::SALOME_Exception); + + void SetLimit (in double Xincr, in double Yincr, in double Zincr) + raises (SALOME::SALOME_Exception); + SMESHHOMARD::double_array GetLimit() raises (SALOME::SALOME_Exception); + + void AddGroup(in string LeGroupe) raises (SALOME::SALOME_Exception); + void SetGroups(in ListGroupType ListGroup) raises (SALOME::SALOME_Exception); + ListGroupType GetGroups() raises (SALOME::SALOME_Exception); + + string GetDumpPython() raises (SALOME::SALOME_Exception); + }; + + interface HOMARD_Cas : SALOME::GenericObj + { + void SetDirName(in string NomDir) raises (SALOME::SALOME_Exception); + string GetDirName() raises (SALOME::SALOME_Exception); + + void SetBoundingBox(in extrema LesExtremes) raises (SALOME::SALOME_Exception); + extrema GetBoundingBox() raises (SALOME::SALOME_Exception); + + void AddGroup(in string Group) raises (SALOME::SALOME_Exception); + void SetGroups(in ListGroupType ListGroup) raises (SALOME::SALOME_Exception); + ListGroupType GetGroups() raises (SALOME::SALOME_Exception); + + void AddBoundary(in string BoundaryName) raises (SALOME::SALOME_Exception); + void AddBoundaryGroup(in string BoundaryName, + in string Group) raises (SALOME::SALOME_Exception); + ListBoundaryGroupType GetBoundaryGroup() raises (SALOME::SALOME_Exception); + void SupprBoundaryGroup() raises (SALOME::SALOME_Exception); + + string GetDumpPython() raises (SALOME::SALOME_Exception); + }; + + interface HOMARD_Gen : SALOME::GenericObj + { + // Create boundaries + HOMARD_Boundary CreateBoundaryCAO (in string BoundaryName, in string FileName) + raises(SALOME::SALOME_Exception); + HOMARD_Boundary CreateBoundaryDi (in string BoundaryName, in string MeshName, + in string FileName) + raises(SALOME::SALOME_Exception); + HOMARD_Boundary CreateBoundaryCylinder (in string BoundaryName, + in double Xcentre, in double Ycentre, in double Zcentre, + in double Xaxis, in double Yaxis, in double Zaxis, + in double Radius) + raises (SALOME::SALOME_Exception); + HOMARD_Boundary CreateBoundarySphere (in string BoundaryName, + in double Xcentre, in double Ycentre, in double Zcentre, + in double Radius) + raises(SALOME::SALOME_Exception); + HOMARD_Boundary CreateBoundaryConeR (in string BoundaryName, + in double Xcentre1, in double Ycentre1, in double Zcentre1, + in double Radius1, + in double Xcentre2, in double Ycentre2, in double Zcentre2, + in double Radius2) + raises(SALOME::SALOME_Exception); + HOMARD_Boundary CreateBoundaryConeA (in string BoundaryName, + in double Xaxis, in double Yaxis, in double Zaxis, + in double Angle, + in double Xcentre, in double Ycentre, in double Zcentre) + raises(SALOME::SALOME_Exception); + HOMARD_Boundary CreateBoundaryTorus (in string BoundaryName, + in double Xcentre, in double Ycentre, in double Zcentre, + in double Xaxis, in double Yaxis, in double Zaxis, + in double RadiusRev, in double RadiusPri) + raises (SALOME::SALOME_Exception); + + // Set mesh (SMESH_Mesh object or MED file) and working directory + HOMARD_Cas CreateCaseOnMesh(in string MeshName, + in SMESH::SMESH_Mesh smeshMesh, + in string theWorkingDir) raises(SALOME::SALOME_Exception); + HOMARD_Cas CreateCase(in string MeshName, + in string FileName, + in string theWorkingDir) raises(SALOME::SALOME_Exception); + + // Associate boundaries to groups + void AddBoundary(in string BoundaryName) raises (SALOME::SALOME_Exception); + void AddBoundaryGroup(in string BoundaryName, + in string Group) raises (SALOME::SALOME_Exception); + + // Information + HOMARD_Boundary GetBoundary(in string BoundaryName) raises (SALOME::SALOME_Exception); + HOMARD_Cas GetCase() raises (SALOME::SALOME_Exception); + listeBoundarys GetAllBoundarysName() raises (SALOME::SALOME_Exception); + + // Preferences + void SetConfType(in long ConfType) raises (SALOME::SALOME_Exception); + void SetKeepMedOUT (in boolean theKeepMedOUT); + void SetPublishMeshOUT (in boolean thePublishMeshOUT); + void SetMeshNameOUT (in string theMeshName) raises (SALOME::SALOME_Exception); + void SetMeshFileOUT (in string theFileName) raises (SALOME::SALOME_Exception); + + void SetVerboseLevel (in long theLevel); + void SetKeepWorkingFiles (in boolean theKeepWorkingFiles); + void SetLogInFile (in boolean theLogInFile); + void SetLogFile (in string theFileName) raises (SALOME::SALOME_Exception); + void SetRemoveLogOnSuccess (in boolean theRemoveLogOnSuccess); + + // Computation + long Compute() raises (SALOME::SALOME_Exception); + + // Clean data + void InvalideBoundary (in string BoundaryName) raises (SALOME::SALOME_Exception); + long DeleteBoundary (in string BoundaryName) raises (SALOME::SALOME_Exception); + void DeleteCase() raises (SALOME::SALOME_Exception); + }; + +}; // module SMESHHOMARD + +#endif diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt index 7e0d62012..d1436578a 100644 --- a/resources/CMakeLists.txt +++ b/resources/CMakeLists.txt @@ -23,6 +23,7 @@ SET(SMESH_RESOURCES_FILES ModuleMesh.png adapt_mg_adapt.png + adapt_homard.png advanced_mesh_info.png bare_border_face.png bare_border_volume.png diff --git a/resources/adapt_homard.png b/resources/adapt_homard.png new file mode 100644 index 0000000000000000000000000000000000000000..95b4c139b29b0f90b35f88778d246e2f35caa28c GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^#y~91!3-pyHMlziDTx4|5ZC`ez`*c>gX71KA0J+P z01Dr@aN)s&2YdH#Iu7J8mIV0)GdMiEkp|?f@N{tuvFM#UrI+up0!NGEwReB-S4d~h zmC=Y0nyhy3_<2{a5T0u*R^{6+zfq7WkjGuyF2Q_dQBY!C?bc}#@C0ag+c6 literal 0 HcmV?d00001 diff --git a/src/SMESH/CMakeLists.txt b/src/SMESH/CMakeLists.txt index ad34d18d8..9dd4e5fb2 100644 --- a/src/SMESH/CMakeLists.txt +++ b/src/SMESH/CMakeLists.txt @@ -89,6 +89,7 @@ SET(SMESHimpl_HEADERS SMESH_ProxyMesh.hxx SMESH_SMESH.hxx MG_ADAPT.hxx + SMESH_Homard.hxx ) # --- sources --- @@ -108,6 +109,7 @@ SET(SMESHimpl_SOURCES SMESH_ProxyMesh.cxx SMESH_MesherHelper.cxx MG_ADAPT.cxx + SMESH_Homard.cxx ) # --- rules --- diff --git a/src/SMESH/SMESH_Homard.cxx b/src/SMESH/SMESH_Homard.cxx new file mode 100644 index 000000000..3bc4bd651 --- /dev/null +++ b/src/SMESH/SMESH_Homard.cxx @@ -0,0 +1,1184 @@ +// SMESH HOMARD : implementation of SMESHHOMARD idl descriptions +// +// Copyright (C) 2011-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SMESH_Homard.hxx" + +#include +#include + +#include +#include +#include +#include + +#ifndef WIN32 +#include +#else +#include +#endif + +// La gestion des repertoires +#ifndef CHDIR + #ifdef WIN32 + #define CHDIR _chdir + #else + #define CHDIR chdir + #endif +#endif + +namespace SMESHHOMARDImpl +{ + +//============================================================================= +/*! + * default constructor: + */ +//============================================================================= +HOMARD_Boundary::HOMARD_Boundary(): + _Name( "" ),_Type( 1 ), + _Xmin( 0 ), _Xmax( 0 ), _Ymin( 0 ), _Ymax( 0 ), _Zmin( 0 ), _Zmax( 0 ), + _Xaxe( 0 ), _Yaxe( 0 ), _Zaxe( 0 ), + _Xcentre( 0 ), _Ycentre( 0 ), _Zcentre( 0 ), _rayon( 0 ), + _Xincr( 0 ), _Yincr( 0 ), _Zincr( 0 ) +{ + MESSAGE("HOMARD_Boundary"); +} + +//============================================================================= +HOMARD_Boundary::~HOMARD_Boundary() +{ + MESSAGE("~HOMARD_Boundary"); +} +//============================================================================= +//============================================================================= +// Generalites +//============================================================================= +//============================================================================= +void HOMARD_Boundary::SetName( const char* Name ) +{ + _Name = std::string( Name ); +} +//============================================================================= +std::string HOMARD_Boundary::GetName() const +{ + return _Name; +} +//============================================================================= +std::string HOMARD_Boundary::GetDumpPython() const +{ + std::ostringstream aScript; + switch (_Type) { + case -1: + { + aScript << _Name << " = smeshhomard.CreateBoundaryCAO(\"" << _Name << "\", "; + aScript << "\"" << _DataFile << "\")\n"; + break ; + } + case 0: + { + aScript << _Name << " = smeshhomard.CreateBoundaryDi(\"" << _Name << "\", "; + aScript << "\"" << _MeshName << "\", "; + aScript << "\"" << _DataFile << "\")\n"; + break ; + } + case 1: + { + aScript << _Name << " = smeshhomard.CreateBoundaryCylinder(\"" << _Name << "\", "; + aScript << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _rayon << ")\n"; + break ; + } + case 2: + { + aScript << _Name << " = smeshhomard.CreateBoundarySphere(\"" << _Name << "\", "; + aScript << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _rayon << ")\n"; + break ; + } + case 3: + { + aScript << _Name << " = smeshhomard.CreateBoundaryConeA(\"" << _Name << "\", "; + aScript << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _Angle << ", " << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ")\n"; + break ; + } + case 4: + { + aScript << _Name << " = smeshhomard.CreateBoundaryConeR(\"" << _Name << "\", "; + aScript << _Xcentre1 << ", " << _Ycentre1 << ", " << _Zcentre1 << ", " << _Rayon1 << ", " << _Xcentre2 << ", " << _Ycentre2 << ", " << _Zcentre2 << ", " << _Rayon2 << ")\n"; + break ; + } + case 5: + { + aScript << _Name << " = smeshhomard.CreateBoundaryTorus(\"" << _Name << "\", "; + aScript << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _Rayon1 << ", " << _Rayon2 << ")\n"; + break ; + } + } + + return aScript.str(); +} +//============================================================================= +//============================================================================= +// Caracteristiques +//============================================================================= +//============================================================================= +void HOMARD_Boundary::SetType( int Type ) +{ + _Type = Type; +} +//============================================================================= +int HOMARD_Boundary::GetType() const +{ + return _Type; +} +//============================================================================= +void HOMARD_Boundary::SetMeshName( const char* MeshName ) +{ + _MeshName = std::string( MeshName ); +} +//============================================================================= +std::string HOMARD_Boundary::GetMeshName() const +{ + return _MeshName; +} +//============================================================================= +void HOMARD_Boundary::SetDataFile( const char* DataFile ) +{ + _DataFile = std::string( DataFile ); +} +//============================================================================= +std::string HOMARD_Boundary::GetDataFile() const +{ + return _DataFile; +} +//======================================================================================= +void HOMARD_Boundary::SetCylinder( double X0, double X1, double X2, + double X3, double X4, double X5, double X6 ) +{ + _Xcentre = X0; _Ycentre = X1; _Zcentre = X2; + _Xaxe = X3; _Yaxe = X4; _Zaxe = X5; + _rayon = X6; +} +//====================================================================== +void HOMARD_Boundary::SetSphere( double X0, double X1, double X2, double X3 ) +{ + _Xcentre = X0; _Ycentre = X1; _Zcentre = X2; + _rayon = X3; +} +//====================================================================== +void HOMARD_Boundary::SetConeR( double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1, + double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2) +{ + _Xcentre1 = Xcentre1; _Ycentre1 = Ycentre1; _Zcentre1 = Zcentre1; + _Rayon1 = Rayon1; + _Xcentre2 = Xcentre2; _Ycentre2 = Ycentre2; _Zcentre2 = Zcentre2; + _Rayon2 = Rayon2; +} +//====================================================================== +void HOMARD_Boundary::SetConeA( double Xaxe, double Yaxe, double Zaxe, double Angle, + double Xcentre, double Ycentre, double Zcentre) +{ + _Xaxe = Xaxe; _Yaxe = Yaxe; _Zaxe = Zaxe; + _Angle = Angle; + _Xcentre = Xcentre; _Ycentre = Ycentre; _Zcentre = Zcentre; +} +//======================================================================================= +void HOMARD_Boundary::SetTorus( double X0, double X1, double X2, + double X3, double X4, double X5, double X6, double X7 ) +{ + _Xcentre = X0; _Ycentre = X1; _Zcentre = X2; + _Xaxe = X3; _Yaxe = X4; _Zaxe = X5; + _Rayon1 = X6; + _Rayon2 = X7; +} +//======================================================================================= +std::vector HOMARD_Boundary::GetCoords() const +{ + std::vector mesCoor; + switch (_Type) + { + // Cylindre + case 1: + { + mesCoor.push_back( _Xcentre ); + mesCoor.push_back( _Ycentre ); + mesCoor.push_back( _Zcentre ); + mesCoor.push_back( _Xaxe ); + mesCoor.push_back( _Yaxe ); + mesCoor.push_back( _Zaxe ); + mesCoor.push_back( _rayon ); + break ; + } + // Sphere + case 2: + { + mesCoor.push_back( _Xcentre ); + mesCoor.push_back( _Ycentre ); + mesCoor.push_back( _Zcentre ); + mesCoor.push_back( _rayon ); + break ; + } + // Cone defini par un axe et un angle + case 3: + { + mesCoor.push_back( _Xaxe ); + mesCoor.push_back( _Yaxe ); + mesCoor.push_back( _Zaxe ); + mesCoor.push_back( _Angle ); + mesCoor.push_back( _Xcentre ); + mesCoor.push_back( _Ycentre ); + mesCoor.push_back( _Zcentre ); + break ; + } + // Cone defini par les 2 rayons + case 4: + { + mesCoor.push_back( _Xcentre1 ); + mesCoor.push_back( _Ycentre1 ); + mesCoor.push_back( _Zcentre1 ); + mesCoor.push_back( _Rayon1 ); + mesCoor.push_back( _Xcentre2 ); + mesCoor.push_back( _Ycentre2 ); + mesCoor.push_back( _Zcentre2 ); + mesCoor.push_back( _Rayon2 ); + break ; + } + // Tore + case 5: + { + mesCoor.push_back( _Xcentre ); + mesCoor.push_back( _Ycentre ); + mesCoor.push_back( _Zcentre ); + mesCoor.push_back( _Xaxe ); + mesCoor.push_back( _Yaxe ); + mesCoor.push_back( _Zaxe ); + mesCoor.push_back( _Rayon1 ); + mesCoor.push_back( _Rayon2 ); + break ; + } + default: + break ; + } + return mesCoor; +} +//====================================================================== +void HOMARD_Boundary::SetLimit( double X0, double X1, double X2 ) +{ + _Xincr = X0; _Yincr = X1; _Zincr = X2; +} +//======================================================================================= +std::vector HOMARD_Boundary::GetLimit() const +{ + std::vector mesLimit; + mesLimit.push_back( _Xincr ); + mesLimit.push_back( _Yincr ); + mesLimit.push_back( _Zincr ); + return mesLimit; +} +//============================================================================= +void HOMARD_Boundary::AddGroup( const char* Group) +{ + _ListGroupSelected.push_back(Group); +} +//============================================================================= +void HOMARD_Boundary::SetGroups( const std::list& ListGroup ) +{ + _ListGroupSelected.clear(); + std::list::const_iterator it = ListGroup.begin(); + while(it != ListGroup.end()) + _ListGroupSelected.push_back((*it++)); +} +//============================================================================= +const std::list& HOMARD_Boundary::GetGroups() const +{ + return _ListGroupSelected; +} +//============================================================================= + +//============================================================================= +/*! + * default constructor: + * Par defaut, l'adaptation est conforme, sans suivi de frontiere + */ +//============================================================================= +HOMARD_Cas::HOMARD_Cas(): + _NomDir("/tmp") +{ + MESSAGE("HOMARD_Cas"); +} +//============================================================================= +HOMARD_Cas::~HOMARD_Cas() +//============================================================================= +{ + MESSAGE("~HOMARD_Cas"); +} +//============================================================================= +//============================================================================= +// Generalites +//============================================================================= +//============================================================================= +std::string HOMARD_Cas::GetDumpPython() const +{ + std::ostringstream aScript; + // Suivi de frontieres + std::list::const_iterator it = _ListBoundaryGroup.begin(); + while (it != _ListBoundaryGroup.end()) { + aScript << "smeshhomard.AddBoundaryGroup(\"" << *it << "\", \""; + it++; + aScript << *it << "\")\n"; + it++; + } + + return aScript.str(); +} +//============================================================================= +//============================================================================= +// Caracteristiques +//============================================================================= +//============================================================================= +int HOMARD_Cas::SetDirName( const char* NomDir ) +{ + int erreur = 0 ; + // On vérifie qu'aucun calcul n'a eu lieu pour ce cas + if ( _ListIter.size() > 1 ) { erreur = 1 ; } + // Creation + if ( CHDIR(NomDir) == 0 ) { + _NomDir = std::string( NomDir ); + } + else { +#ifndef WIN32 + if ( mkdir(NomDir, S_IRWXU|S_IRGRP|S_IXGRP) == 0 ) +#else + if ( _mkdir(NomDir) == 0 ) +#endif + { + if ( CHDIR(NomDir) == 0 ) { _NomDir = std::string( NomDir ); } + else { erreur = 2 ; } + } + else { erreur = 2 ; } + } + return erreur; +} +//============================================================================= +std::string HOMARD_Cas::GetDirName() const +{ + return _NomDir; +} +// +// La boite englobante +// +//============================================================================= +void HOMARD_Cas::SetBoundingBox( const std::vector& extremas ) +{ + _Boite.clear(); + _Boite.resize( extremas.size() ); + for ( unsigned int i = 0; i < extremas.size(); i++ ) + _Boite[i] = extremas[i]; +} +//============================================================================= +const std::vector& HOMARD_Cas::GetBoundingBox() const +{ + return _Boite; +} +// +// Les groupes +// +//============================================================================= +void HOMARD_Cas::AddGroup( const char* Group ) +{ + _ListGroup.push_back(Group); +} +//============================================================================= +void HOMARD_Cas::SetGroups( const std::list& ListGroup ) +{ + _ListGroup.clear(); + std::list::const_iterator it = ListGroup.begin(); + while(it != ListGroup.end()) + { + _ListGroup.push_back((*it++)); + } +} +//============================================================================= +const std::list& HOMARD_Cas::GetGroups() const +{ + return _ListGroup; +} +//============================================================================= +void HOMARD_Cas::SupprGroups() +{ + _ListGroup.clear(); +} +// +// Les frontieres +// +//============================================================================= +void HOMARD_Cas::AddBoundary( const char* Boundary ) +{ +// MESSAGE ( ". HOMARD_Cas::AddBoundary : Boundary = " << Boundary ); + const char* Group = ""; + AddBoundaryGroup( Boundary, Group ); +} +//============================================================================= +void HOMARD_Cas::AddBoundaryGroup( const char* Boundary, const char* Group ) +{ +// MESSAGE ( ". HOMARD_Cas::AddBoundaryGroup : Boundary = " << Boundary ); +// MESSAGE ( ". HOMARD_Cas::AddBoundaryGroup : Group = " << Group ); + _ListBoundaryGroup.push_back( Boundary ); + _ListBoundaryGroup.push_back( Group ); +} +//============================================================================= +const std::list& HOMARD_Cas::GetBoundaryGroup() const +{ + return _ListBoundaryGroup; +} +//============================================================================= +void HOMARD_Cas::SupprBoundaryGroup() +{ + _ListBoundaryGroup.clear(); +} +//============================================================================= +//============================================================================= +// Liens avec les autres structures +//============================================================================= +//============================================================================= +void HOMARD_Cas::AddIteration( const char* NomIteration ) +{ + _ListIter.push_back( std::string( NomIteration ) ); +} + +//============================================================================= +//============================================================================= +HomardDriver::HomardDriver(const std::string siter, const std::string siterp1): + _HOMARD_Exec( "" ), _NomDir( "" ), _NomFichierConfBase( "HOMARD.Configuration" ), + _NomFichierConf( "" ), _NomFichierDonn( "" ), _siter( "" ), _siterp1( "" ), + _Texte( "" ), _bLu( false ) +{ + MESSAGE("siter = "< _HOMARD_Exec ="<<_HOMARD_Exec) ; + // + _siter = siter ; + _siterp1 = siterp1 ; +} +//============================================================================= +//============================================================================= +HomardDriver::~HomardDriver() +{ +} +//=============================================================================== +// A. Generalites +//=============================================================================== +void HomardDriver::TexteInit( const std::string DirCompute, const std::string LogFile, const std::string Langue ) +{ + MESSAGE("TexteInit, DirCompute ="< 0 ) + { + _Texte += "# Diametre minimal\n" ; + { std::stringstream saux1 ; + saux1 << DiamMin ; + _Texte += "DiametMi " + saux1.str() + "\n" ; + } + } + if ( AdapInit != 0 ) + { + if ( AdapInit > 0 ) + { _Texte += "# Raffinement" ; } + else + { _Texte += "# Deraffinement" ; } + _Texte += " des regions sans indicateur\n" ; + { std::stringstream saux1 ; + saux1 << AdapInit ; + _Texte += "AdapInit " + saux1.str() + "\n" ; + } + } + if ( ExtraOutput % 2 == 0 ) + { + _Texte += "# Sortie des niveaux de raffinement\n" ; + _Texte += "NCNiveau NIVEAU\n" ; + } + if ( ExtraOutput % 3 == 0 ) + { + _Texte += "# Sortie des qualités des mailles\n" ; + _Texte += "NCQualit QUAL\n" ; + } + if ( ExtraOutput % 5 == 0 ) + { + _Texte += "# Sortie des diamètres des mailles\n" ; + _Texte += "NCDiamet DIAM\n" ; + } + if ( ExtraOutput % 7 == 0 ) + { + _Texte += "# Sortie des parents des mailles\n" ; + _Texte += "NCParent PARENT\n" ; + } + if ( ExtraOutput % 11 == 0 ) + { + _Texte += "# Volumes voisins par recollement\n" ; + _Texte += "NCVoisRc Voisin-Recollement\n" ; + } +} +//=============================================================================== +// G. Les messages +//=============================================================================== +void HomardDriver::TexteInfoCompute( int MessInfo ) +{ + MESSAGE("TexteAdvanced, MessInfo ="< +#include +#include + +#include +#include + +#if defined WIN32 +#pragma warning ( disable: 4251 ) +#endif + +namespace SMESHHOMARDImpl +{ + +class SMESH_EXPORT HOMARD_Boundary +{ +public: + HOMARD_Boundary(); + ~HOMARD_Boundary(); + + // Generalites + void SetName( const char* Name ); + std::string GetName() const; + + std::string GetDumpPython() const; + + // Caracteristiques + void SetType( int Type ); + int GetType() const; + + void SetMeshName( const char* MeshName ); + std::string GetMeshName() const; + + void SetDataFile( const char* DataFile ); + std::string GetDataFile() const; + + void SetCylinder( double X0, double X1, double X2, double X3, + double X4, double X5, double X6 ); + void SetSphere( double X0, double X1, double X2, double X3 ); + void SetConeR( double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1, + double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2); + void SetConeA( double Xaxe, double Yaxe, double Zaxe, double Angle, + double Xcentre, double Ycentre, double ZCentre); + void SetTorus( double X0, double X1, double X2, double X3, + double X4, double X5, double X6, double X7 ); + + std::vector GetCoords() const; + + void SetLimit( double X0, double X1, double X2 ); + std::vector GetLimit() const; + + void AddGroup( const char* LeGroupe); + void SetGroups(const std::list& ListGroup ); + const std::list& GetGroups() const; + +private: + std::string _Name; + std::string _DataFile; + std::string _MeshName; + int _Type; + double _Xmin, _Xmax, _Ymin, _Ymax, _Zmin, _Zmax; + double _Xaxe, _Yaxe, _Zaxe; + double _Xcentre, _Ycentre, _Zcentre, _rayon; + double _Xincr, _Yincr, _Zincr; + double _Xcentre1, _Ycentre1, _Zcentre1, _Rayon1; + double _Xcentre2, _Ycentre2, _Zcentre2, _Rayon2; + double _Angle; + + std::list _ListGroupSelected; +}; + +class SMESH_EXPORT HOMARD_Cas +{ +public: + HOMARD_Cas(); + ~HOMARD_Cas(); + + // Generalites + std::string GetDumpPython() const; + + // Caracteristiques + int SetDirName( const char* NomDir ); + std::string GetDirName() const; + + void SetBoundingBox( const std::vector& extremas ); + const std::vector& GetBoundingBox() const; + + void AddGroup( const char* Group); + void SetGroups( const std::list& ListGroup ); + const std::list& GetGroups() const; + void SupprGroups(); + + void AddBoundary( const char* Boundary ); + void AddBoundaryGroup( const char* Boundary, const char* Group ); + const std::list& GetBoundaryGroup() const; + void SupprBoundaryGroup(); + + void AddIteration( const char* NomIteration ); + +private: + std::string _NomDir; + int _Etat; + + std::vector _Boite; // cf HomardQTCommun pour structure du vecteur + std::list _ListGroup; + std::list _ListBoundaryGroup; + + typedef std::string IterName; + typedef std::list IterNames; + IterNames _ListIter; +}; + +class SMESH_EXPORT HomardDriver +{ +public: + HomardDriver(const std::string siter, const std::string siterp1); + ~HomardDriver(); + // + void TexteInit( const std::string DirCompute, const std::string LogFile, const std::string Langue ); + void TexteInfo( int TypeBila, int NumeIter ); + void TexteMajCoords( int NumeIter ); + void CreeFichierDonn(); + void TexteAdap(); + void CreeFichier(); + void TexteMaillage( const std::string NomMesh, const std::string MeshFile, int apres ); + void TexteMaillageHOMARD( const std::string Dir, const std::string liter, int apres ); + void TexteConfRaffDera( int ConfType ); + + void TexteBoundaryOption( int BoundaryOption ); + void TexteBoundaryCAOGr( const std::string GroupName ); + void TexteBoundaryDi( const std::string MeshName, const std::string MeshFile ); + void TexteBoundaryDiGr( const std::string GroupName ); + void TexteBoundaryAn( const std::string NameBoundary, int NumeBoundary, int BoundaryType, double x0, double x1, double x2, double x3, double x4, double x5, double x6, double x7 ); + void TexteBoundaryAnGr( const std::string NameBoundary, int NumeBoundary, const std::string GroupName ); + + void TexteAdvanced( int NivMax, double DiamMin, int AdapInit, int LevelOutput ); + void TexteInfoCompute( int MessInfo ); + // + int ExecuteHomard(); + +public: + int _modeHOMARD; + std::string _HOMARD_Exec; + std::string _NomDir; + std::string _NomFichierConfBase; + std::string _NomFichierConf; + std::string _NomFichierDonn; + std::string _siter; + std::string _siterp1; + std::string _Texte; + bool _bLu; +}; + +class HOMARD_Iteration; + +class SMESH_EXPORT HOMARD_Gen +{ +public : + HOMARD_Gen(); + ~HOMARD_Gen(); +}; + +class SMESH_EXPORT HOMARD_Iteration +{ +public: + HOMARD_Iteration(); + ~HOMARD_Iteration(); + + // Generalites + void SetName( const char* Name ); + std::string GetName() const; + + // Caracteristiques + void SetDirNameLoc( const char* NomDir ); + std::string GetDirNameLoc() const; + + void SetNumber( int NumIter ); + int GetNumber() const; + + void SetState( int etat ); + int GetState() const; + + void SetMeshName( const char* NomMesh ); + std::string GetMeshName() const; + + void SetMeshFile( const char* MeshFile ); + std::string GetMeshFile() const; + + void SetLogFile( const char* LogFile ); + std::string GetLogFile() const; + + void SetFileInfo( const char* FileInfo ); + std::string GetFileInfo() const; + + // Divers + void SetInfoCompute( int MessInfo ); + int GetInfoCompute() const; + +private: + std::string _Name; + int _Etat; + int _NumIter; + std::string _NomMesh; + std::string _MeshFile; + std::string _LogFile; + std::string _NomDir; + std::string _FileInfo; + int _MessInfo; +}; + +}; // namespace SMESHHOMARDImpl + +#endif diff --git a/src/SMESHGUI/CMakeLists.txt b/src/SMESHGUI/CMakeLists.txt index 587ee89bd..30179b73a 100644 --- a/src/SMESHGUI/CMakeLists.txt +++ b/src/SMESHGUI/CMakeLists.txt @@ -150,6 +150,9 @@ SET(_moc_HEADERS SMESHGUI_PreVisualObj.h SMESHGUI_MG_ADAPTDRIVER.h SMESHGUI_MgAdaptDlg.h + SMESHGUI_HomardAdaptDlg.h + SMESHGUI_HomardBoundaryDlg.h + SMESHGUI_HomardListGroup.h ) # header files / no moc processing @@ -172,6 +175,7 @@ SET(_other_HEADERS SMESHGUI_FileValidator.h SMESHGUI_SelectionProxy.h SMESH_SMESHGUI.hxx + SMESHGUI_HomardUtils.h ) # header files / to install @@ -267,6 +271,10 @@ SET(_other_SOURCES SMESHGUI_IdPreview.cxx SMESHGUI_MG_ADAPTDRIVER.cxx SMESHGUI_MgAdaptDlg.cxx + SMESHGUI_HomardUtils.cxx + SMESHGUI_HomardAdaptDlg.cxx + SMESHGUI_HomardBoundaryDlg.cxx + SMESHGUI_HomardListGroup.cxx ) # sources / to compile @@ -280,6 +288,9 @@ SET(_ts_RESOURCES SMESH_msg_en.ts SMESH_msg_fr.ts SMESH_msg_ja.ts + SMESHGUI_Homard_msg_en.ts + SMESHGUI_Homard_msg_fr.ts + SMESHGUI_Homard_msg_ja.ts ) # --- rules --- diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index d7b4ed744..3bcce1287 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -61,6 +61,7 @@ #include "SMESHGUI_Hypotheses.h" #include "SMESHGUI_HypothesesUtils.h" #include "SMESHGUI_MG_ADAPTDRIVER.h" +#include "SMESHGUI_HomardAdaptDlg.h" #include "SMESHGUI_Make2DFrom3DOp.h" #include "SMESHGUI_MakeNodeAtPointDlg.h" #include "SMESHGUI_Measurements.h" @@ -145,6 +146,7 @@ #include CORBA_CLIENT_HEADER(SMESH_MeshEditor) #include CORBA_CLIENT_HEADER(SMESH_Measurements) #include CORBA_CLIENT_HEADER(SMESH_Mesh) +#include CORBA_CLIENT_HEADER(SMESH_Homard) // Qt includes // #define INCLUDE_MENUITEM_DEF // VSR commented ???????? @@ -3028,6 +3030,27 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } #endif + case SMESHOp::OpHomardAdapt: + { + if ( isStudyLocked() ) + break; + EmitSignalDeactivateDialog(); + + SALOME::GenericObj_wrap< SMESHHOMARD::HOMARD_Gen > homardGen; + try { + homardGen = GetSMESHGen()->CreateHOMARD_ADAPT(); + } + catch ( const SALOME::SALOME_Exception& S_ex ) { + SUIT_MessageBox::critical(SMESHGUI::desktop(), + QObject::tr("SMESH_ERROR"), + QObject::tr(S_ex.details.text.in())); + } + if (!homardGen->_is_nil()) { + SMESHGUI_HomardAdaptDlg *aDlg = new SMESHGUI_HomardAdaptDlg(homardGen); + aDlg->show(); + } + break; + } // Adaptation - end case SMESHOp::OpSplitBiQuadratic: case SMESHOp::OpConvertMeshToQuadratic: @@ -4266,6 +4289,7 @@ void SMESHGUI::initialize( CAM_Application* app ) #ifndef DISABLE_MG_ADAPT createSMESHAction( SMESHOp::OpMGAdapt, "MG_ADAPT", "ICON_MG_ADAPT" ); #endif + createSMESHAction( SMESHOp::OpHomardAdapt, "HOMARD_ADAPT", "ICON_HOMARD_ADAPT" ); // Adaptation - end createSMESHAction( SMESHOp::OpMinimumDistance, "MEASURE_MIN_DIST", "ICON_MEASURE_MIN_DIST" ); @@ -4486,6 +4510,7 @@ void SMESHGUI::initialize( CAM_Application* app ) #ifndef DISABLE_MG_ADAPT createMenu( SMESHOp::OpMGAdapt, adaptId, -1 ); #endif + createMenu( SMESHOp::OpHomardAdapt, adaptId, -1 ); // Adaptation - end createMenu( SMESHOp::OpMinimumDistance, measureId, -1 ); @@ -4636,6 +4661,7 @@ void SMESHGUI::initialize( CAM_Application* app ) int adaptTb = createTool( tr( "TB_ADAPTATION" ), QString( "SMESHAdaptationToolbar" ) ) ; createTool( SMESHOp::OpMGAdapt, adaptTb ); #endif + createTool( SMESHOp::OpHomardAdapt, adaptTb ); // Adaptation - end int measuremTb = createTool( tr( "TB_MEASUREM" ), QString( "SMESHMeasurementsToolbar" ) ) ; @@ -4719,11 +4745,12 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( SMESHOp::OpCreateBoundaryElements, OB, mesh_group, "&& selcount=1 && dim>=2"); // Adaptation - begin -#ifndef DISABLE_MG_ADAPT popupMgr()->insert( separator(), -1, 0 ); +#ifndef DISABLE_MG_ADAPT createPopupItem( SMESHOp::OpMGAdapt, OB, mesh ); - popupMgr()->insert( separator(), -1, 0 ); #endif + createPopupItem( SMESHOp::OpHomardAdapt, OB, mesh ); + popupMgr()->insert( separator(), -1, 0 ); // Adaptation - end QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( dc ); diff --git a/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx b/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx new file mode 100644 index 000000000..4e25a0ac1 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx @@ -0,0 +1,1213 @@ +// Copyright (C) 2011-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SMESHGUI_HomardAdaptDlg.h" + +#include "SMESHGUI.h" +#include "SMESHGUI_HomardBoundaryDlg.h" +#include "SMESHGUI_HomardUtils.h" +#include "SMESHGUI_Utils.h" +#include "SMESHGUI_VTKUtils.h" +#include "SMESHGUI_MeshUtils.h" +#include "SMESH_TryCatch.hxx" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#ifdef WIN32 +#include +#endif + +using namespace std; + +// La gestion des repertoires +#ifndef CHDIR + #ifdef WIN32 + #define CHDIR _chdir + #else + #define CHDIR chdir + #endif +#endif + +const int SPACING = 6; // layout spacing +const int MARGIN = 9; // layout margin + +//================================================================================ +/*! + * \brief Constructor + */ +//================================================================================ +SMESHGUI_HomardAdaptDlg::SMESHGUI_HomardAdaptDlg(SMESHHOMARD::HOMARD_Gen_ptr myHomardGen0) + : QDialog(SMESHGUI::desktop()) +{ + MESSAGE("Debut du constructeur de SMESHGUI_HomardAdaptDlg"); + myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0); + //myHomardGen = SMESHGUI::GetSMESHGen()->CreateHOMARD_ADAPT(); + myHomardGen->Register(); + + setModal(false); + setAttribute( Qt::WA_DeleteOnClose, true ); + setWindowTitle( tr( "ADAPT_WITH_HOMARD" ) ); + setSizeGripEnabled( true ); + + QTabWidget* myTabWidget = new QTabWidget( this ); + + // Arguments + myArgs = new SMESHGUI_HomardAdaptArguments(myTabWidget); + + // Advanced options + myAdvOpt = new SMESHGUI_HomardAdaptAdvanced(myTabWidget); + + myTabWidget->addTab( myArgs, tr( "Args" ) ); + myTabWidget->addTab( myAdvOpt, tr( "ADVOP" ) ); + + myAdvOpt->logGroupBox ->setTitle(tr( "LOG_GROUP_TITLE" )); + myAdvOpt->workingDirectoryLabel ->setText (tr( "WORKING_DIR" )); + myAdvOpt->workingDirectoryPushButton->setText (tr( "SELECT_DIR" )); + myAdvOpt->verboseLevelLabel ->setText (tr( "VERBOSE_LEVEL" )); + myAdvOpt->logInFileCheck ->setText (tr( "LOG_IN_FILE" )); + myAdvOpt->removeLogOnSuccessCheck ->setText (tr( "REMOVE_LOG_ON_SUCCESS" )); + myAdvOpt->keepWorkingFilesCheck ->setText (tr( "KEEP_WORKING_FILES" )); + + //myAdvOpt->logInFileCheck->setChecked(true); + //myAdvOpt->removeLogOnSuccessCheck->setChecked(false); + + // Working directory + QString aWorkingDir = QDir::tempPath(); + char *aTmp_dir = getenv("SALOME_TMP_DIR"); + if (aTmp_dir != NULL) { + QDir aTmpDir (aTmp_dir); + if (aTmpDir.exists()) { + aWorkingDir = aTmpDir.absolutePath(); + } + } + myAdvOpt->workingDirectoryLineEdit->setText(aWorkingDir); + + // Out med file and/or mesh publication + myArgs->myOutMedFileChk->setChecked(true); + myArgs->myOutPublishChk->setChecked(true); + + // buttons + QHBoxLayout* btnLayout = new QHBoxLayout; + btnLayout->setSpacing( 6 ); + btnLayout->setMargin( 0 ); + + buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), this); + buttonOk->setAutoDefault(false); + btnLayout->addWidget(buttonOk); + btnLayout->addStretch( 10 ); + + buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), this); + buttonApply->setAutoDefault(false); + btnLayout->addWidget(buttonApply); + btnLayout->addStretch( 10 ); + + buttonCancel = new QPushButton(tr( "SMESH_BUT_CANCEL" ), this); + buttonCancel->setAutoDefault(false); + btnLayout->addWidget(buttonCancel); + btnLayout->addStretch( 10 ); + + buttonHelp = new QPushButton(tr( "SMESH_BUT_HELP" ), this); + buttonHelp->setAutoDefault(false); + btnLayout->addWidget(buttonHelp); + + // dialog layout + QVBoxLayout* l = new QVBoxLayout ( this ); + l->setMargin( 9 ); + l->setSpacing( 6 ); + l->addWidget( myTabWidget ); + l->addStretch(); + l->addLayout( btnLayout ); + + // dialog name and size + resize(600, 1000); + QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(this->sizePolicy().hasHeightForWidth()); + setSizePolicy(sizePolicy); + setMinimumSize(QSize(500, 320)); + setSizeIncrement(QSize(1, 1)); + setBaseSize(QSize(600, 600)); + setAutoFillBackground(true); + + SetBoundaryNo(); + InitConnect(); + + myArgs->GBBoundaryC->setVisible(0); + myArgs->GBBoundaryN->setVisible(0); + myArgs->GBBoundaryA->setVisible(0); + myArgs->GBBoundaryD->setVisible(0); + + adjustSize(); + + //MESSAGE("Fin du constructeur de SMESHGUI_HomardAdaptDlg"); +} + +//================================================================================= +// function : ~SMESHGUI_HomardAdaptDlg() +// purpose : Destroys the object and frees any allocated resources +//================================================================================= +SMESHGUI_HomardAdaptDlg::~SMESHGUI_HomardAdaptDlg() +{ + // no need to delete child widgets, Qt does it all for us + myHomardGen->DeleteCase(); +} + +//================================================================================= +// function : InitConnect +// purpose : +//================================================================================= +void SMESHGUI_HomardAdaptDlg::InitConnect() +{ + connect( myArgs->mySelectInMedFileButton, SIGNAL(pressed()), this, SLOT(SetFileName())); + + connect( myArgs->RBBoundaryNo, SIGNAL(clicked()), this, SLOT(SetBoundaryNo())); + connect( myArgs->RBBoundaryCAO, SIGNAL(clicked()), this, SLOT(SetBoundaryCAO())); + connect( myArgs->RBBoundaryNonCAO, SIGNAL(clicked()), this, SLOT(SetBoundaryNonCAO())); + + connect( myArgs->PBBoundaryCAONew, SIGNAL(pressed()), this, SLOT(PushBoundaryCAONew())); + connect( myArgs->PBBoundaryCAOEdit, SIGNAL(pressed()), this, SLOT(PushBoundaryCAOEdit()) ); + connect( myArgs->PBBoundaryCAOHelp, SIGNAL(pressed()), this, SLOT(PushBoundaryCAOHelp()) ); + connect( myArgs->CBBoundaryD, SIGNAL(stateChanged(int)), this, SLOT(SetBoundaryD())); + connect( myArgs->PBBoundaryDiNew, SIGNAL(pressed()), this, SLOT(PushBoundaryDiNew())); + connect( myArgs->PBBoundaryDiEdit, SIGNAL(pressed()), this, SLOT(PushBoundaryDiEdit()) ); + connect( myArgs->PBBoundaryDiHelp, SIGNAL(pressed()), this, SLOT(PushBoundaryDiHelp()) ); + connect( myArgs->CBBoundaryA, SIGNAL(stateChanged(int)), this, SLOT(SetBoundaryA())); + connect( myArgs->PBBoundaryAnNew, SIGNAL(pressed()), this, SLOT(PushBoundaryAnNew())); + connect( myArgs->PBBoundaryAnEdit, SIGNAL(pressed()), this, SLOT(PushBoundaryAnEdit()) ); + connect( myArgs->PBBoundaryAnHelp, SIGNAL(pressed()), this, SLOT(PushBoundaryAnHelp()) ); + + connect( buttonOk, SIGNAL(pressed()), this, SLOT(PushOnOK())); + connect( buttonApply, SIGNAL(pressed()), this, SLOT(PushOnApply())); + connect( buttonCancel, SIGNAL(pressed()), this, SLOT(close())); + connect( buttonHelp, SIGNAL(pressed()), this, SLOT(PushOnHelp())); + + connect(myArgs, SIGNAL(updateSelection()), this, SLOT(updateSelection())); +} + +//================================================================================= +// function : InitBoundarys +// purpose : Initialisation des menus avec les frontieres deja enregistrees +//================================================================================= +void SMESHGUI_HomardAdaptDlg::InitBoundarys() +{ + MESSAGE("InitBoundarys"); + //myArgs->TWBoundary->clearContents(); + //myArgs->TWBoundary->clear(); + // Pour les frontieres analytiques : la colonne des groupes + SMESHHOMARD::ListGroupType_var _listeGroupesCas = myCase->GetGroups(); + QTableWidgetItem *__colItem = new QTableWidgetItem(); + __colItem->setText(tr("")); + myArgs->TWBoundary->setHorizontalHeaderItem(0, __colItem); + for ( int i = 0; i < (int)_listeGroupesCas->length(); i++ ) { + myArgs->TWBoundary->insertRow(i); + myArgs->TWBoundary->setItem( i, 0, new QTableWidgetItem(QString((_listeGroupesCas)[i]).trimmed())); + myArgs->TWBoundary->item( i, 0 )->setFlags(Qt::ItemIsEnabled |Qt::ItemIsSelectable ); + } + // Pour les frontieres CAO : la liste a saisir + // Pour les frontieres discretes : la liste a saisir + // Pour les frontieres analytiques : les colonnes de chaque frontiere + SMESHHOMARD::HOMARD_Boundary_var myBoundary ; + SMESHHOMARD::listeBoundarys_var mesBoundarys = myHomardGen->GetAllBoundarysName(); + //MESSAGE("Nombre de frontieres enregistrees : "<length()); + for (int i=0; i < (int)mesBoundarys->length(); i++) { + myBoundary = myHomardGen->GetBoundary(mesBoundarys[i]); + int type_obj = myBoundary->GetType() ; + if ( type_obj==-1 ) { myArgs->CBBoundaryCAO->addItem(QString(mesBoundarys[i])); } + else if ( type_obj==0 ) { myArgs->CBBoundaryDi->addItem(QString(mesBoundarys[i])); } + else { AddBoundaryAn(QString(mesBoundarys[i])); } + } + // Ajustement + myArgs->TWBoundary->resizeColumnsToContents(); + myArgs->TWBoundary->resizeRowsToContents(); + myArgs->TWBoundary->clearSelection(); +} + +//================================================================================= +// function : CheckCase +// purpose : +//================================================================================= +bool SMESHGUI_HomardAdaptDlg::CheckCase(bool fixCase) +{ + MESSAGE("CheckCase"); + + QString aWorkingDir = myAdvOpt->workingDirectoryLineEdit->text().trimmed(); + if (aWorkingDir == QString("")) { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_CASE_DIRECTORY_1") ); + return false; + } + + if (CHDIR(aWorkingDir.toStdString().c_str()) != 0) { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_CASE_DIRECTORY_3") ); + return false; + } + + QString aMeshName, aFileName; + if (myArgs->myInMedFileRadio->isChecked()) { + aFileName = myArgs->mySelectInMedFileLineEdit->text().trimmed(); + if (aFileName == QString("")) { + QMessageBox::critical(0, QObject::tr("HOM_ERROR"), QObject::tr("HOM_CASE_MESH")); + return false; + } + + // In mesh name + aMeshName = SMESH_HOMARD_QT_COMMUN::LireNomMaillage(aFileName); + if (aMeshName == "") { + QMessageBox::critical(0, QObject::tr("HOM_ERROR"), QObject::tr("HOM_MED_FILE_2")); + return false; + } + } + else { + aMeshName = myArgs->myInBrowserObject->text(); + if (aMeshName == "" || myMesh->_is_nil()) { + QMessageBox::critical(0, QObject::tr("HOM_ERROR"), + QObject::tr("Mesh object is not selected")); + return false; + } + } + + // On verifie qu'un groupe n'est pas associe a deux frontieres differentes + if (myArgs->CBBoundaryA->isChecked()) { + QStringList ListeGroup; + QString NomGroup; + int nbcol = myArgs->TWBoundary->columnCount(); + int nbrow = myArgs->TWBoundary->rowCount(); + for ( int col=1; col< nbcol; col++) { + for ( int row=0; row< nbrow; row++) { + if ( myArgs->TWBoundary->item( row, col )->checkState() == Qt::Checked ) { + // Group name + NomGroup = QString(myArgs->TWBoundary->item(row, 0)->text()) ; + for ( int nugr = 0 ; nugr < ListeGroup.size(); nugr++) { + if ( NomGroup == ListeGroup[nugr] ) { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_CASE_GROUP").arg(NomGroup) ); + return false; + } + } + ListeGroup.insert(0, NomGroup ); + } + } + } + } + + if (!fixCase) return true; + + // Creation du cas + if (myCase->_is_nil()) { + try { + if (myArgs->myInMedFileRadio->isChecked()) { + // create case from MED file + myCase = myHomardGen->CreateCase + (CORBA::string_dup(aMeshName.toStdString().c_str()), + CORBA::string_dup(aFileName.toStdString().c_str()), + aWorkingDir.toStdString().c_str()); + } + else { + // create case from SMESH_Mesh + myCase = myHomardGen->CreateCaseOnMesh + (CORBA::string_dup(aMeshName.toStdString().c_str()), + myMesh, + aWorkingDir.toStdString().c_str()); + } + } + catch( SALOME::SALOME_Exception& S_ex ) { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr(CORBA::string_dup(S_ex.details.text)) ); + return false; + } + // Prevent changing case data + myArgs->myInMedFileRadio->setEnabled(false); + myArgs->myInBrowserRadio->setEnabled(false); + myArgs->mySelectInMedFileLineEdit->setReadOnly(true); + myArgs->mySelectInMedFileButton->setEnabled(false); + myArgs->myInBrowserObject->setReadOnly(true); + myAdvOpt->workingDirectoryLineEdit->setReadOnly(true); + myAdvOpt->workingDirectoryPushButton->setEnabled(false); + InitBoundarys(); + } + + // Menage des eventuelles frontieres deja enregistrees + myCase->SupprBoundaryGroup(); + + return true; +} + +//================================================================================= +// function : PushOnApply +// purpose : +//================================================================================= +bool SMESHGUI_HomardAdaptDlg::PushOnApply() +{ + MESSAGE("PushOnApply"); + + // Check data, create Case if not yet + if (!CheckCase(true)) + return false; + + // Create boundaries + if (myArgs->RBBoundaryCAO->isChecked()) { + QString monBoundaryCAOName = myArgs->CBBoundaryCAO->currentText(); + if (monBoundaryCAOName != "" ) { + myCase->AddBoundary(monBoundaryCAOName.toStdString().c_str()); + } + } + if (myArgs->CBBoundaryD->isChecked()) { + QString monBoundaryDiName = myArgs->CBBoundaryDi->currentText(); + if (monBoundaryDiName != "" ) { + myCase->AddBoundary(monBoundaryDiName.toStdString().c_str()); + } + } + if (myArgs->CBBoundaryA->isChecked()) { + QString NomGroup; + int nbcol = myArgs->TWBoundary->columnCount(); + int nbrow = myArgs->TWBoundary->rowCount(); + for ( int col = 1; col < nbcol; col++) { + for ( int row = 0; row < nbrow; row++) { + if ( myArgs->TWBoundary->item( row, col )->checkState() == Qt::Checked ) { + // Nom du groupe + NomGroup = QString(myArgs->TWBoundary->item(row, 0)->text()) ; + // Nom de la frontiere + QTableWidgetItem *__colItem = myArgs->TWBoundary->horizontalHeaderItem(col); + myCase->AddBoundaryGroup(QString(__colItem->text()).toStdString().c_str(), + NomGroup.toStdString().c_str()); + } + } + } + } + + // Output MED and MESH parameters + myHomardGen->SetKeepMedOUT(myArgs->myOutMedFileChk->isChecked()); + myHomardGen->SetPublishMeshOUT(myArgs->myOutPublishChk->isChecked()); + QString anOutMeshName = myArgs->myOutMeshNameLineEdit->text(); + if (anOutMeshName.isEmpty()) anOutMeshName = "DEFAULT_MESH_NAME"; + myHomardGen->SetMeshNameOUT(anOutMeshName.toStdString().c_str()); + + std::string aMeshFileOUT; + if (myArgs->myOutMedFileChk->isChecked()) { + QString anOutMed = myArgs->mySelectOutMedFileLineEdit->text(); + if (anOutMed.isEmpty()) { + // store in working directory and with default name + QString aWorkingDir = myAdvOpt->workingDirectoryLineEdit->text().trimmed(); + QFileInfo aFileInfo (QDir(aWorkingDir), "Uniform_R.med"); + anOutMed = aFileInfo.absoluteFilePath(); + // show it + myArgs->mySelectOutMedFileLineEdit->setText(anOutMed); + } + else { + QFileInfo aFileInfo (anOutMed); + anOutMed = aFileInfo.absoluteFilePath(); + } + aMeshFileOUT = anOutMed.toStdString(); + } + else { + // Set file name without path for it to be created in current directory + // (it will be iteration's dir, and it will be destroyed after) + aMeshFileOUT = "Uniform_R.med"; + } + myHomardGen->SetMeshFileOUT(aMeshFileOUT.c_str()); + + // Conformity type + myHomardGen->SetConfType(myArgs->RBConforme->isChecked() ? 0 : 1); + + // Advanced options + myHomardGen->SetVerboseLevel(myAdvOpt->verboseLevelSpin->value()); + myHomardGen->SetKeepWorkingFiles(myAdvOpt->keepWorkingFilesCheck->isChecked()); + myHomardGen->SetLogInFile(myAdvOpt->logInFileCheck->isChecked()); + myHomardGen->SetRemoveLogOnSuccess(myAdvOpt->removeLogOnSuccessCheck->isChecked()); + + // Log file + if (myAdvOpt->logInFileCheck->isChecked()) { + // Write log file in the working dir + QString aLogBaseName; + if (myArgs->myInMedFileRadio->isChecked()) { + // Name of log file will be "_Uniform_R.log" + QString aMedFileIn = myArgs->mySelectInMedFileLineEdit->text().trimmed(); + QFileInfo aFileInfoIn (aMedFileIn); + aLogBaseName = aFileInfoIn.fileName(); + } + else { + // Name of log file will be "SMESH_Mesh__Uniform_R.log" + aLogBaseName = "SMESH_Mesh_"; + aLogBaseName += myArgs->myInBrowserObject->text(); + } + QString aWorkingDir = myAdvOpt->workingDirectoryLineEdit->text().trimmed(); + QFileInfo aFileInfo (QDir(aWorkingDir), aLogBaseName + "_Uniform_R.log"); + QString anOutLog = aFileInfo.absoluteFilePath(); + MESSAGE("myHomardGen->SetLogFile(" << anOutLog.toStdString().c_str() << ")"); + myHomardGen->SetLogFile(anOutLog.toStdString().c_str()); + } + + // Compute and publish + bool isSuccess = true; + try { + SUIT_OverrideCursor aWaitCursor; + isSuccess = myHomardGen->Compute() == 0; + } + catch( SALOME::SALOME_Exception& S_ex ) { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr(CORBA::string_dup(S_ex.details.text)) ); + isSuccess = false; + } + + // Update Object Browser + if (isSuccess) { + SMESHGUI::GetSMESHGUI()->updateObjBrowser(); + + // Clean case, as it is deleted after successful Compute + myCase = SMESHHOMARD::HOMARD_Cas::_nil(); + } + + // Enable new case data selection + myArgs->myInMedFileRadio->setEnabled(true); + myArgs->myInBrowserRadio->setEnabled(true); + myArgs->mySelectInMedFileLineEdit->setReadOnly(false); + myArgs->mySelectInMedFileButton->setEnabled(true); + myArgs->myInBrowserObject->setReadOnly(false); + myAdvOpt->workingDirectoryLineEdit->setReadOnly(false); + myAdvOpt->workingDirectoryPushButton->setEnabled(true); + + return isSuccess; +} + +//================================================================================= +// function : PushOnOK +// purpose : +//================================================================================= +void SMESHGUI_HomardAdaptDlg::PushOnOK() +{ + bool bOK = PushOnApply(); + if ( bOK ) this->close(); +} + +void SMESHGUI_HomardAdaptDlg::PushOnHelp() +{ + SMESH::ShowHelpFile("adaptation.html#_homard_adapt_anchor"); +} + +void SMESHGUI_HomardAdaptDlg::updateSelection() +{ + LightApp_SelectionMgr *selMgr = SMESHGUI::selectionMgr(); + disconnect(selMgr, 0, this, 0); + selMgr->clearFilters(); + + if (!myArgs->myInBrowserRadio->isChecked()) + return; + + SMESH::SetPointRepresentation(false); + if (SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow()) + aViewWindow->SetSelectionMode(ActorSelection); + if (myArgs->myInBrowserRadio->isChecked()) { + connect(selMgr, SIGNAL(currentSelectionChanged()), this, SLOT(selectionChanged())); + selectionChanged(); + } +} + +void SMESHGUI_HomardAdaptDlg::selectionChanged() +{ + if (!myArgs->myInBrowserRadio->isChecked()) + return; + + //SUIT_OverrideCursor aWaitCursor; + LightApp_SelectionMgr *selMgr = SMESHGUI::selectionMgr(); + + // get selected mesh + SALOME_ListIO aList; + selMgr->selectedObjects(aList); + QString aMeshName = ""; + + if (aList.Extent() == 1) { + Handle(SALOME_InteractiveObject) IO = aList.First(); + myMesh = SMESH::GetMeshByIO(IO); + SMESH::GetNameOfSelectedIObjects(selMgr, aMeshName); + if (aMeshName.isEmpty()) aMeshName = " "; + else aMeshName = aMeshName.trimmed(); + } + else { + myMesh = SMESH::SMESH_Mesh::_nil(); + } + + myArgs->myInBrowserObject->setText(aMeshName); + + // Out mesh name default value + myArgs->myOutMeshNameLineEdit->setText(aMeshName + "_Uniform_R"); + + // Output med file default value + // Construct it from Input mesh name and working directory + //if (myArgs->myOutMedFileChk->isChecked()) { + if (aMeshName.isEmpty()) { + myArgs->mySelectOutMedFileLineEdit->setText(""); + } + else { + QString aWorkingDir = myAdvOpt->workingDirectoryLineEdit->text().trimmed(); + QFileInfo aFileInfo (QDir(aWorkingDir), aMeshName + QString("_Uniform_R.med")); + for (int ii = 1; aFileInfo.exists(); ii++) { + QString anUniqueName = QString("%1_Uniform_R_%2.med").arg(aMeshName).arg(ii); + aFileInfo.setFile(QDir(aWorkingDir), anUniqueName); + } + myArgs->mySelectOutMedFileLineEdit->setText(aFileInfo.absoluteFilePath()); + } + //} + + // Check data + if (!aMeshName.isEmpty()) + CheckCase(false); +} + +void SMESHGUI_HomardAdaptDlg::SetFileName() +{ + // Input med file + QString fileName0 = myArgs->mySelectInMedFileLineEdit->text().trimmed(); + QString fileName = SMESH_HOMARD_QT_COMMUN::PushNomFichier(false, QString("med")); + //SUIT_OverrideCursor aWaitCursor; + if (fileName.isEmpty()) { + fileName = fileName0; + if (fileName.isEmpty()) return; + } + QFileInfo aFileInInfo (fileName); + fileName = aFileInInfo.absoluteFilePath(); + myArgs->mySelectInMedFileLineEdit->setText(fileName); + + // Out mesh name default value + QString aMeshName = SMESH_HOMARD_QT_COMMUN::LireNomMaillage(fileName); + myArgs->myOutMeshNameLineEdit->setText(aMeshName + "_Uniform_R"); + + // Output med file default value + // Construct it from Input med file name and path + //if (myArgs->myOutMedFileChk->isChecked()) { + std::string fname = fileName.toStdString(); + size_t lastdot = fname.find_last_of("."); + if (lastdot != std::string::npos) + fname = fname.substr(0, lastdot); + QString fileNameOut = fname.c_str(); + QFileInfo aFileInfo (fileNameOut + QString("_Uniform_R.med")); + for (int ii = 1; aFileInfo.exists(); ii++) { + QString anUniqueName = QString("%1_Uniform_R_%2.med").arg(fileNameOut).arg(ii); + aFileInfo.setFile(anUniqueName); + } + myArgs->mySelectOutMedFileLineEdit->setText(aFileInfo.absoluteFilePath()); + //} + + // Check data + CheckCase(false); +} + +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::SetBoundaryNo() +{ + myArgs->GBBoundaryC->setVisible(0); + myArgs->GBBoundaryN->setVisible(0); + adjustSize(); +} + +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::SetBoundaryCAO() +{ + if (CheckCase(true)) { + myArgs->GBBoundaryC->setVisible(1); + myArgs->GBBoundaryN->setVisible(0); + resize(600, 550); + //adjustSize(); + } + else { + myArgs->RBBoundaryNo->click(); + } +} +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::SetBoundaryNonCAO() +{ + myArgs->GBBoundaryC->setVisible(0); + myArgs->GBBoundaryN->setVisible(1); + int aH = 550; + if (myArgs->GBBoundaryD->isVisible()) aH += 50; + if (myArgs->GBBoundaryA->isVisible()) aH += 150; + resize(600, aH); + //adjustSize(); +} +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::AddBoundaryCAO(QString newBoundary) +// ------------------------------------------------------------------------ +{ + myArgs->CBBoundaryCAO->insertItem(0,newBoundary); + myArgs->CBBoundaryCAO->setCurrentIndex(0); +} +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::PushBoundaryCAONew() +// ------------------------------------------------------------------------ +{ + SMESH_CreateBoundaryCAO *BoundaryDlg = new SMESH_CreateBoundaryCAO + (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), "Case_1", ""); + BoundaryDlg->show(); +} +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::PushBoundaryCAOEdit() +// ------------------------------------------------------------------------ +{ + if (myArgs->CBBoundaryCAO->currentText() == QString("")) return; + SMESH_EditBoundaryCAO *BoundaryDlg = new SMESH_EditBoundaryCAO + (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), + "Case_1", myArgs->CBBoundaryCAO->currentText()); + BoundaryDlg->show(); +} + +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::PushBoundaryCAOHelp() +{ + SMESH::ShowHelpFile(QString("homard_create_boundary.html#cao-boundary")); +} + +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::SetBoundaryD() +{ + MESSAGE("Debut de SetBoundaryD "); + if (myArgs->CBBoundaryD->isChecked()) { + bool bOK = CheckCase(true); + if (bOK) { + myArgs->GBBoundaryD->setVisible(1); + } + else { + myArgs->GBBoundaryD->setVisible(0); + myArgs->CBBoundaryD->setChecked(0); + myArgs->CBBoundaryD->setCheckState(Qt::Unchecked); + } + } + else { + myArgs->GBBoundaryD->setVisible(0); + } + + //myArgs->mySelectInMedFileLineEdit->setReadOnly(true); + //myArgs->mySelectInMedFileButton->hide(); + + int aH = 550; + if (myArgs->GBBoundaryD->isVisible()) aH += 50; + if (myArgs->GBBoundaryA->isVisible()) aH += 150; + resize(600, aH); + //adjustSize(); +} +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::AddBoundaryDi(QString newBoundary) +// ------------------------------------------------------------------------ +{ + myArgs->CBBoundaryDi->insertItem(0,newBoundary); + myArgs->CBBoundaryDi->setCurrentIndex(0); +} +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::PushBoundaryDiNew() +// ------------------------------------------------------------------------ +{ + SMESH_CreateBoundaryDi *BoundaryDlg = new SMESH_CreateBoundaryDi(this, true, + SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), "Case_1", ""); + BoundaryDlg->show(); +} +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::PushBoundaryDiEdit() +// ------------------------------------------------------------------------ +{ + if (myArgs->CBBoundaryDi->currentText() == QString("")) return; + SMESH_EditBoundaryDi *BoundaryDlg = new SMESH_EditBoundaryDi + (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), + "Case_1", myArgs->CBBoundaryDi->currentText()); + BoundaryDlg->show(); +} + +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::PushBoundaryDiHelp() +{ + SMESH::ShowHelpFile(QString("homard_create_boundary.html#discrete-boundary")); +} + +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::SetBoundaryA() +{ + MESSAGE("Debut de SetBoundaryA "); + if (myArgs->CBBoundaryA->isChecked()) { + bool bOK = CheckCase(true); + if (bOK) { + myArgs->GBBoundaryA->setVisible(1); + } + else { + myArgs->GBBoundaryA->setVisible(0); + myArgs->CBBoundaryA->setChecked(0); + myArgs->CBBoundaryA->setCheckState(Qt::Unchecked); + } + } + else { + myArgs->GBBoundaryA->setVisible(0); + } + + //myArgs->mySelectInMedFileLineEdit->setReadOnly(true); + //myArgs->mySelectInMedFileButton->hide(); + + int aH = 550; + if (myArgs->GBBoundaryD->isVisible()) aH += 50; + if (myArgs->GBBoundaryA->isVisible()) aH += 150; + resize(600, aH); + //adjustSize(); +} +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::AddBoundaryAn(QString newBoundary) +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de AddBoundaryAn "); +// Ajout d'une nouvelle colonne + int nbcol = myArgs->TWBoundary->columnCount(); +// MESSAGE("nbcol " << nbcol); + nbcol += 1 ; + myArgs->TWBoundary->setColumnCount ( nbcol ) ; + QTableWidgetItem *__colItem = new QTableWidgetItem(); + __colItem->setText(tr(newBoundary.toStdString().c_str())); + myArgs->TWBoundary->setHorizontalHeaderItem(nbcol-1, __colItem); +/* TWBoundary->horizontalHeaderItem(nbcol-1)->setFlags( Qt::ItemIsSelectable|Qt::ItemIsEnabled );*/ +// Chaque case est a cocher + int nbrow = myArgs->TWBoundary->rowCount(); +// MESSAGE("nbrow " << nbrow); + for ( int i = 0; i < nbrow; i++ ) + { + myArgs->TWBoundary->setItem( i, nbcol-1, new QTableWidgetItem( QString ("") ) ); + myArgs->TWBoundary->item( i, nbcol-1 )->setFlags( 0 ); + myArgs->TWBoundary->item( i, nbcol-1 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled ); + myArgs->TWBoundary->item( i, nbcol-1 )->setCheckState( Qt::Unchecked ); + } + myArgs->TWBoundary->resizeColumnToContents(nbcol-1); +// TWBoundary->resizeRowsToContents(); +// MESSAGE("Fin de AddBoundaryAn "); +} +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::PushBoundaryAnNew() +// ------------------------------------------------------------------------ +{ + SMESH_CreateBoundaryAn *BoundaryDlg = new SMESH_CreateBoundaryAn + (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), "Case_1"); + BoundaryDlg->show(); +} +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::PushBoundaryAnEdit() +// ------------------------------------------------------------------------ +{ + QString nom=""; + int nbcol = myArgs->TWBoundary->columnCount(); + for ( int i = 1; i < nbcol; i++ ) { + QTableWidgetItem *__colItem = new QTableWidgetItem(); + __colItem = myArgs->TWBoundary->horizontalHeaderItem(i); + nom = QString(__colItem->text()) ; + MESSAGE("nom "<show(); + } + } +} +// ------------------------------------------------------------------------ +void SMESHGUI_HomardAdaptDlg::PushBoundaryAnHelp() +// ------------------------------------------------------------------------ +{ + SMESH::ShowHelpFile(QString("homard_create_boundary.html#analytical-boundary")); +} + +//================================================================================= +// function : SMESHGUI_HomardAdaptArguments() +// purpose : +//================================================================================= +SMESHGUI_HomardAdaptArguments::SMESHGUI_HomardAdaptArguments(QWidget* parent) + : QWidget(parent) +{ + setupUi(); +} + +SMESHGUI_HomardAdaptArguments::~SMESHGUI_HomardAdaptArguments() +{ +} + +void SMESHGUI_HomardAdaptArguments::setupUi() +{ + // Mesh in + QGroupBox* aMeshIn = new QGroupBox( tr( "MeshIn" ), this ); + myInMedFileRadio = new QRadioButton( tr( "MEDFile" ), aMeshIn ); + myInBrowserRadio = new QRadioButton( tr( "Browser" ), aMeshIn ); + myInBrowserObject = new QLineEdit( aMeshIn ); + mySelectInMedFileButton = new QPushButton("...", aMeshIn); + mySelectInMedFileLineEdit = new QLineEdit( aMeshIn ); + + QGridLayout* meshIn = new QGridLayout( aMeshIn ); + + meshIn->setMargin( 9 ); + meshIn->setSpacing( 6 ); + meshIn->addWidget( myInMedFileRadio, 0, 0, 1, 1 ); + meshIn->addWidget( myInBrowserRadio, 0, 1, 1, 1 ); + meshIn->addWidget( mySelectInMedFileButton, 1, 0, 1, 1 ); + meshIn->addWidget( mySelectInMedFileLineEdit, 1, 1, 1, 2 ); + meshIn->addWidget( myInBrowserObject, 0, 2, 1, 1 ); + + myInMeshGroup = new QButtonGroup( this ); + myInMeshGroup->addButton( myInMedFileRadio, 0 ); + myInMeshGroup->addButton( myInBrowserRadio, 1 ); + + // Mesh out + QGroupBox* aMeshOut = new QGroupBox( tr( "MeshOut" ), this ); + QLabel* meshName = new QLabel(tr("MeshName"), aMeshOut); + QSpacerItem* secondHspacer = new QSpacerItem(100, 30); + myOutMeshNameLineEdit = new QLineEdit(aMeshOut); + myOutMedFileChk = new QCheckBox(tr("MEDFile"), aMeshOut); + mySelectOutMedFileButton = new QPushButton("...", aMeshOut); + mySelectOutMedFileLineEdit = new QLineEdit(aMeshOut); + myOutPublishChk = new QCheckBox(tr("Publish_MG_ADAPT"), aMeshOut); + + QGridLayout* meshOut = new QGridLayout( aMeshOut ); + + meshOut->setMargin( 9 ); + meshOut->setSpacing( 6 ); + meshOut->addWidget( meshName, 0, 0, 1,1 ); + meshOut->addItem( secondHspacer, 0, 1, 1, 1 ); + meshOut->addWidget( myOutMeshNameLineEdit, 0, 2,1,1); + meshOut->addWidget( myOutMedFileChk, 1, 0,1,1 ); + meshOut->addWidget( mySelectOutMedFileButton, 1, 1,1,1 ); + meshOut->addWidget( mySelectOutMedFileLineEdit, 1, 2,1,1); + meshOut->addWidget( myOutPublishChk, 2, 0,1,1 ); + + // Conformity type + QGroupBox *GBTypeConf = new QGroupBox(tr("Conformity type"), this); + RBConforme = new QRadioButton(tr("Conformal"), GBTypeConf); + RBNonConforme = new QRadioButton(tr("Non conformal"), GBTypeConf); + RBConforme->setChecked(true); + + QHBoxLayout *hboxLayout2 = new QHBoxLayout(GBTypeConf); + hboxLayout2->setSpacing(6); + hboxLayout2->setContentsMargins(9, 9, 9, 9); + hboxLayout2->addWidget(RBConforme); + hboxLayout2->addWidget(RBNonConforme); + + // Boundary type + GBTypeBoun = new QGroupBox(tr("Boundary type"), this); + + RBBoundaryNo = new QRadioButton(tr("No boundary"), GBTypeBoun); + RBBoundaryCAO = new QRadioButton(tr("CAO"), GBTypeBoun); + RBBoundaryNonCAO = new QRadioButton(tr("Non CAO"), GBTypeBoun); + RBBoundaryNo->setChecked(true); + + // CAO + GBBoundaryC = new QGroupBox(tr("CAO"), GBTypeBoun); + /* + QSizePolicy sizePolicy1(QSizePolicy::Fixed, QSizePolicy::Fixed); + sizePolicy1.setHorizontalStretch(0); + sizePolicy1.setVerticalStretch(0); + sizePolicy1.setHeightForWidth(GBBoundaryC->sizePolicy().hasHeightForWidth()); + GBBoundaryC->setSizePolicy(sizePolicy1); + */ + GBBoundaryC->setMinimumSize(QSize(450, 50)); + + CBBoundaryCAO = new QComboBox(GBBoundaryC); + CBBoundaryCAO->setSizeAdjustPolicy(QComboBox::AdjustToContents); + + PBBoundaryCAONew = new QPushButton(tr("New"), GBBoundaryC); + PBBoundaryCAOEdit = new QPushButton(tr("Edit"), GBBoundaryC); + PBBoundaryCAOHelp = new QPushButton(tr("Help"), GBBoundaryC); + + PBBoundaryCAONew->setAutoDefault(false); + PBBoundaryCAOEdit->setAutoDefault(false); + PBBoundaryCAOHelp->setAutoDefault(false); + + QGridLayout* gridLayout2 = new QGridLayout(GBBoundaryC); + gridLayout2->setSpacing(6); + gridLayout2->setContentsMargins(9, 9, 9, 9); + gridLayout2->addWidget(CBBoundaryCAO, 0, 0, 1, 1); + QSpacerItem* spacerItem3 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum); + gridLayout2->addItem(spacerItem3, 0, 1, 1, 1); + gridLayout2->addWidget(PBBoundaryCAONew, 0, 2, 1, 1); + gridLayout2->addWidget(PBBoundaryCAOEdit, 0, 3, 1, 1); + gridLayout2->addWidget(PBBoundaryCAOHelp, 0, 4, 1, 1); + gridLayout2->setRowMinimumHeight(0, 80); + + // Non CAO (discrete / analytical) + GBBoundaryN = new QGroupBox(tr("Non CAO"), GBTypeBoun); + GBBoundaryN->setMinimumSize(QSize(450, 80)); + + CBBoundaryD = new QCheckBox(tr("Discrete boundary"), GBBoundaryN); + CBBoundaryA = new QCheckBox(tr("Analytical boundary"), GBBoundaryN); + + // discrete + GBBoundaryD = new QGroupBox(tr("Discrete boundary"), GBBoundaryN); + //sizePolicy1.setHeightForWidth(GBBoundaryD->sizePolicy().hasHeightForWidth()); + //GBBoundaryD->setSizePolicy(sizePolicy1); + QGridLayout* gridLayoutD = new QGridLayout(GBBoundaryD); + gridLayoutD->setSpacing(6); + gridLayoutD->setContentsMargins(9, 9, 9, 9); + CBBoundaryDi = new QComboBox(GBBoundaryD); + CBBoundaryDi->setSizeAdjustPolicy(QComboBox::AdjustToContents); + + gridLayoutD->addWidget(CBBoundaryDi, 0, 0, 1, 1); + + QSpacerItem* spacerItem5 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum); + gridLayoutD->addItem(spacerItem5, 0, 1, 1, 1); + + PBBoundaryDiNew = new QPushButton(tr("New"), GBBoundaryD); + PBBoundaryDiEdit = new QPushButton(tr("Edit"), GBBoundaryD); + PBBoundaryDiHelp = new QPushButton(tr("Help"), GBBoundaryD); + + PBBoundaryDiNew->setAutoDefault(false); + PBBoundaryDiEdit->setAutoDefault(false); + PBBoundaryDiHelp->setAutoDefault(false); + + gridLayoutD->addWidget(PBBoundaryDiNew, 0, 2, 1, 1); + gridLayoutD->addWidget(PBBoundaryDiEdit, 0, 3, 1, 1); + gridLayoutD->addWidget(PBBoundaryDiHelp, 0, 4, 1, 1); + + // analytical + GBBoundaryA = new QGroupBox(tr("Analytical boundary"), GBBoundaryN); + GBBoundaryA->setMinimumSize(QSize(548, 200)); + formLayout = new QFormLayout(GBBoundaryA); + TWBoundary = new QTableWidget(GBBoundaryA); + if (TWBoundary->columnCount() < 1) + TWBoundary->setColumnCount(1); + QTableWidgetItem *__qtablewidgetitem = new QTableWidgetItem(); + TWBoundary->setHorizontalHeaderItem(0, __qtablewidgetitem); + TWBoundary->setEditTriggers(QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked); + TWBoundary->setShowGrid(true); + TWBoundary->setRowCount(0); + TWBoundary->setColumnCount(1); + + formLayout->setWidget(0, QFormLayout::LabelRole, TWBoundary); + + QGridLayout* gridLayout1 = new QGridLayout(); + gridLayout1->setSpacing(6); + gridLayout1->setContentsMargins(0, 0, 0, 0); + + PBBoundaryAnNew = new QPushButton(tr("New"), GBBoundaryA); + PBBoundaryAnEdit = new QPushButton(tr("Edit"), GBBoundaryA); + PBBoundaryAnHelp = new QPushButton(tr("Help"), GBBoundaryA); + + PBBoundaryAnNew->setAutoDefault(false); + PBBoundaryAnEdit->setAutoDefault(false); + PBBoundaryAnHelp->setAutoDefault(false); + + gridLayout1->addWidget(PBBoundaryAnNew, 0, 0, 1, 1); + gridLayout1->addWidget(PBBoundaryAnEdit, 1, 0, 1, 1); + gridLayout1->addWidget(PBBoundaryAnHelp, 2, 0, 1, 1); + + formLayout->setLayout(0, QFormLayout::FieldRole, gridLayout1); + + // Boundary No Layout + QGridLayout* aBoundaryNoLayout = new QGridLayout(GBBoundaryN); + //aBoundaryNoLayout->addLayout(hboxLayout3, 0, 0); + aBoundaryNoLayout->addWidget(CBBoundaryD, 0, 0); + aBoundaryNoLayout->addWidget(CBBoundaryA, 0, 1); + aBoundaryNoLayout->addWidget(GBBoundaryD, 1, 0, 1, 2); + aBoundaryNoLayout->addWidget(GBBoundaryA, 2, 0, 1, 2); + + // Boundary type Layout + QGridLayout* aBoundTypeLayout = new QGridLayout(GBTypeBoun); + aBoundTypeLayout->addWidget(RBBoundaryNo, 0, 0); + aBoundTypeLayout->addWidget(RBBoundaryCAO, 0, 1); + aBoundTypeLayout->addWidget(RBBoundaryNonCAO, 0, 2); + + aBoundTypeLayout->addWidget(GBBoundaryC, 1, 0, 1, 3); + aBoundTypeLayout->addWidget(GBBoundaryN, 2, 0, 1, 3); + + // Arguments layout + QGridLayout *argumentsLayout = new QGridLayout(this); + argumentsLayout->addWidget(aMeshIn, 0, 0, 1, 3); + argumentsLayout->addWidget(aMeshOut, 1, 0, 1, 3); + argumentsLayout->addWidget(GBTypeConf, 2, 0, 1, 3); + argumentsLayout->addWidget(GBTypeBoun, 3, 0, 1, 3); + argumentsLayout->setColumnStretch( 1, 5 ); + argumentsLayout->setRowStretch( 4, 5 ); + + QTableWidgetItem *___qtablewidgetitem = TWBoundary->horizontalHeaderItem(0); + ___qtablewidgetitem->setText(tr("a_virer")); + + // Initial state + myInMedFileRadio->setChecked( true ); + modeInChanged( MedFile ); + RBBoundaryNo->setChecked( true ); + //SetBoundaryNo(); + + myOutMedFileChk->setChecked(true); + CBBoundaryCAO->setCurrentIndex(-1); + CBBoundaryDi->setCurrentIndex(-1); + + // Connections + connect(myInMeshGroup, SIGNAL(buttonClicked(int)), this, SLOT(modeInChanged(int))); + connect(myOutMedFileChk, SIGNAL(stateChanged(int)), this, SLOT(onOutMedFileChk(int))); + connect(myOutPublishChk, SIGNAL(stateChanged(int)), this, SLOT(onOutPublishChk(int))); + connect(mySelectOutMedFileButton, SIGNAL(pressed()), this, SLOT(onSelectOutMedFileButton())); + emit updateSelection(); +} + +void SMESHGUI_HomardAdaptArguments::modeInChanged( int theMode ) +{ + clear(); + if (theMode == MedFile) { + mySelectInMedFileLineEdit->show(); + mySelectInMedFileButton->show(); + myInBrowserObject->hide(); + } + else { + mySelectInMedFileLineEdit->hide(); + mySelectInMedFileButton->hide(); + myInBrowserObject->show(); + emit updateSelection(); + } +} + +void SMESHGUI_HomardAdaptArguments::onSelectOutMedFileButton() +{ + // Current value + QString fileName0 = mySelectOutMedFileLineEdit->text().trimmed(); + + // Ask user for the new value + QString filtre = QString("Med"); + filtre += QString(" files (*.") + QString("med") + QString(");;"); + QString fileName = QFileDialog::getSaveFileName(this, tr("SAVE_MED"), QString(""), filtre); + + // Check the new value + if (fileName.isEmpty()) fileName = fileName0; + + QFileInfo aFileInfo (fileName); + mySelectOutMedFileLineEdit->setText(aFileInfo.absoluteFilePath()); +} + +void SMESHGUI_HomardAdaptArguments::clear() +{ + mySelectInMedFileLineEdit->clear(); + myInBrowserObject->clear(); + + myOutMeshNameLineEdit->clear(); + mySelectOutMedFileLineEdit->clear(); +} + +void SMESHGUI_HomardAdaptArguments::onOutMedFileChk(int state) +{ + if (state == Qt::Checked) { + mySelectOutMedFileButton->show(); + mySelectOutMedFileLineEdit->show(); + mySelectOutMedFileButton->setEnabled(true); + mySelectOutMedFileLineEdit->setEnabled(true); + } + else { + mySelectOutMedFileButton->setEnabled(false); + mySelectOutMedFileLineEdit->setEnabled(false); + myOutPublishChk->setChecked(true); + } +} + +void SMESHGUI_HomardAdaptArguments::onOutPublishChk(int state) +{ + if (state == Qt::Unchecked) { + myOutMedFileChk->setChecked(true); + } +} + +////////////////////////////////////////// +// SMESHGUI_HomardAdaptAdvanced +////////////////////////////////////////// + +SMESHGUI_HomardAdaptAdvanced::SMESHGUI_HomardAdaptAdvanced(QWidget* parent) + : QWidget(parent) +{ + setupWidget(); + connect(workingDirectoryPushButton, SIGNAL(pressed()), + this, SLOT(onWorkingDirectoryPushButton())); +} + +SMESHGUI_HomardAdaptAdvanced::~SMESHGUI_HomardAdaptAdvanced() +{ +} + +void SMESHGUI_HomardAdaptAdvanced::setupWidget() +{ + //this->resize(337, 369); + + // Logs and debug + logGroupBox = new QGroupBox(this); + QGridLayout* logGroupBoxLayout = new QGridLayout(this); + logGroupBoxLayout->setMargin( 9 ); + logGroupBoxLayout->setSpacing( 6 ); + logGroupBoxLayout->addWidget(logGroupBox, 0, 0, 1, 1); + + QGridLayout* logsLayout = new QGridLayout(logGroupBox); + logsLayout->setMargin( 9 ); + logsLayout->setSpacing( 6 ); + + // Working directory + Verbose level layout + QGridLayout* gridLayout = new QGridLayout(); + + // Working directory + workingDirectoryLabel = new QLabel(logGroupBox); + workingDirectoryLineEdit = new QLineEdit(logGroupBox); + workingDirectoryPushButton = new QPushButton(logGroupBox); + + gridLayout->addWidget(workingDirectoryLabel, 0, 0, 1, 1); + gridLayout->addWidget(workingDirectoryLineEdit, 0, 1, 1, 1); + gridLayout->addWidget(workingDirectoryPushButton, 0, 2, 1, 1); + + // Verbose level + verboseLevelLabel = new QLabel(logGroupBox); + verboseLevelSpin = new QSpinBox(logGroupBox); + + gridLayout->addWidget(verboseLevelLabel, 1, 0, 1, 1); + gridLayout->addWidget(verboseLevelSpin, 1, 1, 1, 1); + + logsLayout->addLayout(gridLayout, 0, 0, 1, 1); + + // logInFileCheck + removeLogOnSuccessCheck + QHBoxLayout* horizontalLayout = new QHBoxLayout(); + + logInFileCheck = new QCheckBox(logGroupBox); + removeLogOnSuccessCheck = new QCheckBox(logGroupBox); + + logInFileCheck->setChecked(true); + removeLogOnSuccessCheck->setChecked(true); + + horizontalLayout->addWidget(logInFileCheck); + horizontalLayout->addWidget(removeLogOnSuccessCheck); + + logsLayout->addLayout(horizontalLayout, 1, 0, 1, 1); + + // Keep Working Files Check + keepWorkingFilesCheck = new QCheckBox(logGroupBox); + keepWorkingFilesCheck->setAutoExclusive(false); + keepWorkingFilesCheck->setChecked(false); + + logsLayout->addWidget(keepWorkingFilesCheck, 2, 0, 1, 1); + + //logsLayout->setColumnStretch( 1, 5 ); + logsLayout->setRowStretch( 3, 5 ); +} + +void SMESHGUI_HomardAdaptAdvanced::onWorkingDirectoryPushButton() +{ + QString aWorkingDir = QFileDialog::getExistingDirectory(); + if (!(aWorkingDir.isEmpty())) workingDirectoryLineEdit->setText(aWorkingDir); +} diff --git a/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.h b/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.h new file mode 100644 index 000000000..63046ed36 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.h @@ -0,0 +1,233 @@ +// Copyright (C) 2011-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef SMESHGUI_HOMARDADAPTDLG_HXX +#define SMESHGUI_HOMARDADAPTDLG_HXX + +#include "SMESH_SMESHGUI.hxx" + +#include +#include CORBA_CLIENT_HEADER(SMESH_Homard) +#include CORBA_SERVER_HEADER(SMESH_Mesh) +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SMESHGUI_HomardAdaptArguments; +class SMESHGUI_HomardAdaptAdvanced; + +//================================================================================= +// class : SMESHGUI_HomardAdaptDlg +// purpose : +//================================================================================= +class SMESHGUI_EXPORT SMESHGUI_HomardAdaptDlg : public QDialog +{ + Q_OBJECT + + public: + SMESHGUI_HomardAdaptDlg(SMESHHOMARD::HOMARD_Gen_ptr theHomardGen); + ~SMESHGUI_HomardAdaptDlg(); + + void AddBoundaryCAO(QString newBoundary); + void AddBoundaryAn(QString newBoundary); + void AddBoundaryDi(QString newBoundary); + + protected: + QString myWorkingDir; + + SMESHHOMARD::HOMARD_Cas_var myCase; + SALOME::GenericObj_wrap< SMESHHOMARD::HOMARD_Gen > myHomardGen; + + virtual void InitConnect(); + virtual void InitBoundarys(); + + public slots: + virtual void SetFileName(); + + virtual void SetBoundaryNo(); + virtual void SetBoundaryCAO(); + virtual void SetBoundaryNonCAO(); + + virtual void PushBoundaryCAONew(); + virtual void PushBoundaryCAOEdit(); + virtual void PushBoundaryCAOHelp(); + + virtual void SetBoundaryD(); + virtual void PushBoundaryDiNew(); + virtual void PushBoundaryDiEdit(); + virtual void PushBoundaryDiHelp(); + + virtual void SetBoundaryA(); + virtual void PushBoundaryAnNew(); + virtual void PushBoundaryAnEdit(); + virtual void PushBoundaryAnHelp(); + + bool CheckCase(bool fixCase); + + virtual void PushOnOK(); + virtual bool PushOnApply(); + virtual void PushOnHelp(); + + void selectionChanged(); + void updateSelection(); + + private: + SMESHGUI_HomardAdaptArguments* myArgs; + SMESHGUI_HomardAdaptAdvanced* myAdvOpt; + + SMESH::SMESH_Mesh_var myMesh; + + QPushButton *buttonHelp; + QPushButton *buttonApply; + QPushButton *buttonOk; + QPushButton *buttonCancel; +}; + +//================================================================================= +// class : SMESHGUI_HomardAdaptArguments +// purpose : +//================================================================================= +class SMESHGUI_HomardAdaptArguments : public QWidget +{ + Q_OBJECT + +public: + enum ModeIn { MedFile, Browser }; + + SMESHGUI_HomardAdaptArguments (QWidget* parent); + ~SMESHGUI_HomardAdaptArguments(); + + void setupUi(); + +public: + // Mesh In + QButtonGroup* myInMeshGroup; + QRadioButton* myInMedFileRadio; + QRadioButton* myInBrowserRadio; + + QPushButton* mySelectInMedFileButton; + QLineEdit* mySelectInMedFileLineEdit; // LEFileName + + QLineEdit* myInBrowserObject; + + // Mesh Out + QLineEdit* myOutMeshNameLineEdit; + QCheckBox* myOutMedFileChk; + + QPushButton* mySelectOutMedFileButton; + QLineEdit* mySelectOutMedFileLineEdit; + + QCheckBox* myOutPublishChk; + + // Conformity type + QRadioButton *RBConforme; + QRadioButton *RBNonConforme; + + // Boundary type + QGroupBox *GBTypeBoun; + QRadioButton *RBBoundaryNo; + QRadioButton *RBBoundaryCAO; + QRadioButton *RBBoundaryNonCAO; + QHBoxLayout *hboxLayout3; + QCheckBox *CBBoundaryD; + QCheckBox *CBBoundaryA; + + QGroupBox *GBBoundaryC; // CAO boundary + QPushButton *PBBoundaryCAOEdit; + QPushButton *PBBoundaryCAOHelp; + QComboBox *CBBoundaryCAO; + QPushButton *PBBoundaryCAONew; + QGroupBox *GBBoundaryN; // Non CAO boundary + QGroupBox *GBBoundaryD; + QComboBox *CBBoundaryDi; + QPushButton *PBBoundaryDiEdit; + QPushButton *PBBoundaryDiHelp; + QPushButton *PBBoundaryDiNew; + QGroupBox *GBBoundaryA; + QFormLayout *formLayout; + QTableWidget *TWBoundary; + QPushButton *PBBoundaryAnEdit; + QPushButton *PBBoundaryAnNew; + QPushButton *PBBoundaryAnHelp; + +signals: + void updateSelection(); + +private slots: + void modeInChanged(int); + void clear(); + void onOutMedFileChk(int); + void onOutPublishChk(int); + void onSelectOutMedFileButton(); +}; + +//================================================================================= +// class : SMESHGUI_HomardAdaptAdvanced +// purpose : +//================================================================================= +class SMESHGUI_HomardAdaptAdvanced : public QWidget +{ + Q_OBJECT + +public: + SMESHGUI_HomardAdaptAdvanced(QWidget* = 0); + ~SMESHGUI_HomardAdaptAdvanced(); + + void setupWidget(); + +public: + QGroupBox *logGroupBox; + + QLabel *workingDirectoryLabel; + QLineEdit *workingDirectoryLineEdit; + QPushButton *workingDirectoryPushButton; + + QLabel *verboseLevelLabel; + QSpinBox *verboseLevelSpin; + + QCheckBox *logInFileCheck; + QCheckBox *removeLogOnSuccessCheck; + + QCheckBox *keepWorkingFilesCheck; + +private slots: + void onWorkingDirectoryPushButton(); +}; + +#endif // SMESHGUI_HOMARDADAPTDLG_HXX diff --git a/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx b/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx new file mode 100644 index 000000000..029a86350 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx @@ -0,0 +1,1641 @@ +// Copyright (C) 2011-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SMESHGUI_HomardBoundaryDlg.h" + +#include "SMESHGUI_HomardAdaptDlg.h" +#include "SMESHGUI_HomardListGroup.h" + +#include "SMESHGUI_Utils.h" + +#include +#include + +#include "SalomeApp_Tools.h" +#include "SMESHGUI_HomardUtils.h" +#include + +#include +#include +#include +#include +#include + +#include "math.h" +#define PI 3.141592653589793 + +using namespace std; + +// ---------------------------------------------------------------------------------- +SMESH_CreateBoundaryAn::SMESH_CreateBoundaryAn(SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName) : +/* Constructs a SMESH_CreateBoundaryAn + appele pour une vraie creation + initialise un cylindre et non une sphere +*/ + QDialog(0), SMESH_Ui_CreateBoundaryAn(), + _parent(parent), + _Name (""), + _Type(1), + _BoundaryAnXcentre(0), _BoundaryAnYcentre(0), _BoundaryAnZcentre(0), _BoundaryAnRayon(0), + _BoundaryAnXaxis(0), _BoundaryAnYaxis(0), _BoundaryAnZaxis(0), + _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0), + _Xmin(0), _Xmax(0), _Xincr(0), _Ymin(0), _Ymax(0), _Yincr(0), _Zmin(0), _Zmax(0), _Zincr(0), _DMax(0), + _BoundaryAnXcone1(0), _BoundaryAnYcone1(0), _BoundaryAnZcone1(0), _BoundaryAnRayon1(0), + _BoundaryAnXcone2(0), _BoundaryAnYcone2(0), _BoundaryAnZcone2(0), _BoundaryAnRayon2(0), + _BoundaryAnXaxisCone(0), _BoundaryAnYaxisCone(0), _BoundaryAnZaxisCone(0), + _BoundaryAnXorigCone(0), _BoundaryAnYorigCone(0), _BoundaryAnZorigCone(0), + _BoundaryAngle(0), + _BoundaryAnToreXcentre(0), _BoundaryAnToreYcentre(0), _BoundaryAnToreZcentre(0), + _BoundaryAnToreXaxe(0), _BoundaryAnToreYaxe(0), _BoundaryAnToreZaxe(0), + _BoundaryAnToreRRev(0), _BoundaryAnToreRPri(0), + Chgt (false) + { + MESSAGE("Constructeur") ; + myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0); + setupUi(this); + setModal(modal); + + // Gestion des icones + QPixmap pix ; + QIcon IS ; + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" ); + IS=QIcon(pix); + RBSphere->setIcon(IS); + pix = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" ); + IS=QIcon(pix); + RBCylindre->setIcon(IS); + pix = resMgr->loadPixmap( "HOMARD", "cone.png" ); + IS=QIcon(pix); + RBCone->setIcon(IS); + pix = resMgr->loadPixmap( "HOMARD", "conepointvector.png" ); + IS=QIcon(pix); + RB_Def_angle->setIcon(IS); + pix = resMgr->loadPixmap( "HOMARD", "conedxyz.png" ); + IS=QIcon(pix); + RB_Def_radius->setIcon(IS); + pix = resMgr->loadPixmap( "HOMARD", "toruspointvector.png" ); + IS=QIcon(pix); + RBTore->setIcon(IS); + + InitConnect( ); + + SetNewName() ; + InitValBoundaryAn(); // Cherche les valeurs de la boite englobante le maillage + InitMinMax(); // Initialise les bornes des boutons + SetCylinder(); // Propose un cylindre en premier choix + } + +// ------------------------------------------------------------------------------- +SMESH_CreateBoundaryAn::SMESH_CreateBoundaryAn(SMESHGUI_HomardAdaptDlg* parent, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName): + QDialog(0), SMESH_Ui_CreateBoundaryAn(), + _parent(parent), + _Name (""), + _Type(1), + _BoundaryAnXcentre(0), _BoundaryAnYcentre(0), _BoundaryAnZcentre(0), _BoundaryAnRayon(0), + _BoundaryAnXaxis(0), _BoundaryAnYaxis(0), _BoundaryAnZaxis(0), + // Pour affichage lors de l edition d une BoundaryAn sans nom de Cas + _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0), + _Xmin(1), _Xmax(1), _Xincr(1), _Ymin(1), _Ymax(1), _Yincr(1), _Zmin(1), _Zmax(1), _Zincr(1), _DMax(1), + Chgt (false) + { + // MESSAGE("Debut de SMESH_CreateBoundaryAn") + myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0); + setupUi(this); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + QPixmap pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" ); + QIcon IS=QIcon(pix); + RBSphere->setIcon(IS); + QPixmap pix2 = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" ); + QIcon IS2=QIcon(pix2); + RBCylindre->setIcon(IS2); + QPixmap pix3 = resMgr->loadPixmap( "HOMARD", "cone.png" ); + QIcon IS3=QIcon(pix3); + RBCone->setIcon(IS3); + QPixmap pix4 = resMgr->loadPixmap( "HOMARD", "conepointvector.png" ); + QIcon IS4=QIcon(pix4); + RB_Def_angle->setIcon(IS4); + QPixmap pix5 = resMgr->loadPixmap( "HOMARD", "conedxyz.png" ); + QIcon IS5=QIcon(pix5); + RB_Def_radius->setIcon(IS5); + setModal(true); + InitConnect(); + } + +// ------------------------------------------------------------------------ +SMESH_CreateBoundaryAn::~SMESH_CreateBoundaryAn() +// ------------------------------------------------------------------------ +{ + // no need to delete child widgets, Qt does it all for us +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryAn::InitConnect() +// ------------------------------------------------------------------------ +{ + connect( RBCylindre, SIGNAL(clicked()) , this, SLOT(SetCylinder()) ) ; + connect( RBSphere, SIGNAL(clicked()) , this, SLOT(SetSphere()) ) ; + connect( RBCone, SIGNAL(clicked()) , this, SLOT(SetCone()) ) ; + connect( RB_Def_radius, SIGNAL(clicked()) , this, SLOT(SetConeR()) ); + connect( RB_Def_angle, SIGNAL(clicked()) , this, SLOT(SetConeA()) ); + connect( RBTore, SIGNAL(clicked()) , this, SLOT(SetTore()) ) ; + connect( buttonOk, SIGNAL( pressed() ), this, SLOT( PushOnOK() ) ); + connect( buttonApply, SIGNAL( pressed() ), this, SLOT( PushOnApply() ) ); + connect( buttonCancel, SIGNAL( pressed() ), this, SLOT( close() ) ); + connect( buttonHelp, SIGNAL( pressed() ), this, SLOT( PushOnHelp() ) ); +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryAn::InitValBoundaryAn() +// ------------------------------------------------------------------------ +{ + // + // 1. Les coordonnees extremes du maillage + // + SMESHHOMARD::HOMARD_Cas_var aCas = myHomardGen->GetCase(); + SMESHHOMARD::extrema_var MesExtremes = aCas->GetBoundingBox(); + int num = MesExtremes->length() ; + ASSERT(num == 10); + _Xmin=MesExtremes[0]; _Xmax=MesExtremes[1]; _Xincr=MesExtremes[2]; + _Ymin=MesExtremes[3]; _Ymax=MesExtremes[4]; _Yincr=MesExtremes[5]; + _Zmin=MesExtremes[6]; _Zmax=MesExtremes[7]; _Zincr=MesExtremes[8]; + _DMax=MesExtremes[9]; + MESSAGE ("_Xmin : " << _Xmin << " _Xmax : " << _Xmax << " _Xincr : " << _Xincr ) ; + MESSAGE ("_Ymin : " << _Ymin << " _Ymax : " << _Ymax << " _Yincr : " << _Yincr ) ; + MESSAGE ("_Zmin : " << _Zmin << " _Zmax : " << _Zmax << " _Zincr : " << _Zincr) ; + MESSAGE ("_DMax : " << _DMax); + +// 2. Caracteristiques des frontieres +// en X + _Xcentre=(_Xmin + _Xmax)/2.; +// en Y + _Ycentre=(_Ymin + _Ymax)/2.; +// en Z + _Zcentre=(_Zmin + _Zmax)/2.; +// Rayon + _Rayon= _DMax/4.; +} + +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryAn::InitMinMax() +// ------------------------------------------------------------------------ +{ + // Cylindre + // . X du centre + SpinBox_Xcent->setValue(_Xcentre); + SpinBox_Xcent->setSingleStep(_Xincr); + // . Y du centre + SpinBox_Ycent->setValue(_Ycentre); + SpinBox_Ycent->setSingleStep(_Yincr); + // . Z du centre + SpinBox_Zcent->setValue(_Zcentre); + SpinBox_Zcent->setSingleStep(_Zincr); + // . X de l'axe + SpinBox_Xaxis->setValue(0.); + SpinBox_Xaxis->setSingleStep(0.1); + // . Y de l'axe + SpinBox_Yaxis->setValue(0.); + SpinBox_Yaxis->setSingleStep(0.1); + // . Z de l'axe + SpinBox_Zaxis->setValue(1.); + SpinBox_Zaxis->setSingleStep(0.1); + // . Rayon + SpinBox_Radius->setValue(_Rayon); + SpinBox_Radius->setSingleStep(_Rayon/10.); + + // Sphere + // . X du centre + SpinBox_Xcentre->setValue(_Xcentre); + SpinBox_Xcentre->setSingleStep(_Xincr); + // . Y du centre + SpinBox_Ycentre->setValue(_Ycentre); + SpinBox_Ycentre->setSingleStep(_Yincr); + // . Z du centre + SpinBox_Zcentre->setValue(_Zcentre); + SpinBox_Zcentre->setSingleStep(_Zincr); + // . Rayon + SpinBox_Rayon->setValue(_Rayon); + SpinBox_Rayon->setSingleStep(_Rayon/10.); + + // Cone en rayons + // . X des centres + _BoundaryAnXcone1 = _Xcentre ; + SpinBox_Cone_X1->setSingleStep(_Xincr); + _BoundaryAnXcone2 = _Xcentre ; + SpinBox_Cone_X2->setSingleStep(_Xincr); + // . Y des centres + _BoundaryAnYcone1 = _Ycentre ; + SpinBox_Cone_Y1->setSingleStep(_Yincr); + _BoundaryAnYcone2 = _Ycentre ; + SpinBox_Cone_Y2->setSingleStep(_Yincr); + // . Z des centres + _BoundaryAnZcone1 = _Zmin ; + SpinBox_Cone_Z1->setSingleStep(_Zincr); + _BoundaryAnZcone2 = _Zmax ; + SpinBox_Cone_Z2->setSingleStep(_Zincr); + // . Rayons/Angles + _BoundaryAnRayon1 = 0. ; + _BoundaryAnRayon2 = _Rayon ; + SpinBox_Cone_V2->setSingleStep(_Rayon/10.); + + // Cone en angle + convertRayonAngle(1) ; + SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone); + SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone); + SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone); + SpinBox_Cone_V1->setValue(_BoundaryAngle); + SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone); + SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone); + SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone); + + // Tore + // . X du centre + SpinBoxToreXcent->setValue(_Xcentre); + SpinBoxToreXcent->setSingleStep(_Xincr); + // . Y du centre + SpinBoxToreYcent->setValue(_Ycentre); + SpinBoxToreYcent->setSingleStep(_Yincr); + // . Z du centre + SpinBoxToreZcent->setValue(_Zcentre); + SpinBoxToreZcent->setSingleStep(_Zincr); + // . X de l'axe + SpinBoxToreXaxe->setValue(0.); + SpinBoxToreXaxe->setSingleStep(0.1); + // . Y de l'axe + SpinBoxToreYaxe->setValue(0.); + SpinBoxToreYaxe->setSingleStep(0.1); + // . Z de l'axe + SpinBoxToreZaxe->setValue(1.); + SpinBoxToreZaxe->setSingleStep(0.1); + // . Rayon de revolution + SpinBoxToreRRev->setValue(_Rayon); + SpinBoxToreRRev->setSingleStep(_Rayon/10.); + // . Rayon primaire + SpinBoxToreRPri->setValue(_Rayon/3.); + SpinBoxToreRPri->setSingleStep(_Rayon/20.); +} +// ------------------------------------------------------------------------ +bool SMESH_CreateBoundaryAn::PushOnApply() +// ------------------------------------------------------------------------ +// Appele lorsque l'un des boutons Ok ou Apply est presse +// +{ + if (LEName->text().trimmed()=="") + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_BOUN_NAME") ); + return false; + } + + switch (_Type) + { + case 1 : // il s agit d un cylindre + { + if ((_BoundaryAnXcentre != SpinBox_Xcent->value()) || + (_BoundaryAnYcentre != SpinBox_Ycent->value()) || + (_BoundaryAnZcentre != SpinBox_Zcent->value()) || + (_BoundaryAnRayon != SpinBox_Radius->value()) || + (_BoundaryAnXaxis != SpinBox_Xaxis->value()) || + (_BoundaryAnYaxis != SpinBox_Yaxis->value()) || + (_BoundaryAnZaxis != SpinBox_Zaxis->value()) ) + { + Chgt = true; + _BoundaryAnXaxis= SpinBox_Xaxis->value(); + _BoundaryAnYaxis= SpinBox_Yaxis->value(); + _BoundaryAnZaxis= SpinBox_Zaxis->value(); + _BoundaryAnXcentre=SpinBox_Xcent->value(); + _BoundaryAnYcentre=SpinBox_Ycent->value(); + _BoundaryAnZcentre=SpinBox_Zcent->value(); + _BoundaryAnRayon=SpinBox_Radius->value(); + } + break; + } + + case 2 : // il s agit d une sphere + { + if ((_BoundaryAnXcentre != SpinBox_Xcentre->value()) || + (_BoundaryAnYcentre != SpinBox_Ycentre->value()) || + (_BoundaryAnZcentre != SpinBox_Zcentre->value()) || + (_BoundaryAnRayon != SpinBox_Rayon->value()) ) + { + Chgt = true; + _BoundaryAnXcentre=SpinBox_Xcentre->value(); + _BoundaryAnYcentre=SpinBox_Ycentre->value(); + _BoundaryAnZcentre=SpinBox_Zcentre->value(); + _BoundaryAnRayon=SpinBox_Rayon->value(); + } + break; + } + + case 3 : // il s agit d un cone defini par un axe et un angle + { + if ((_BoundaryAnXaxisCone != SpinBox_Cone_X1->value()) || + (_BoundaryAnYaxisCone != SpinBox_Cone_Y1->value()) || + (_BoundaryAnZaxisCone != SpinBox_Cone_Z1->value()) || + (_BoundaryAnXorigCone != SpinBox_Cone_X2->value()) || + (_BoundaryAnYorigCone != SpinBox_Cone_Y2->value()) || + (_BoundaryAnZorigCone != SpinBox_Cone_Z2->value()) || + (_BoundaryAngle != SpinBox_Cone_V1->value()) ) + { + Chgt = true; + _BoundaryAnXaxisCone = SpinBox_Cone_X1->value() ; + _BoundaryAnYaxisCone = SpinBox_Cone_Y1->value() ; + _BoundaryAnZaxisCone = SpinBox_Cone_Z1->value() ; + _BoundaryAnXorigCone = SpinBox_Cone_X2->value() ; + _BoundaryAnYorigCone = SpinBox_Cone_Y2->value() ; + _BoundaryAnZorigCone = SpinBox_Cone_Z2->value() ; + _BoundaryAngle = SpinBox_Cone_V1->value() ; + } + break; + } + + case 4 : // il s agit d un cone defini par les 2 rayons + { + if ((_BoundaryAnXcone1 != SpinBox_Cone_X1->value()) || + (_BoundaryAnYcone1 != SpinBox_Cone_Y1->value()) || + (_BoundaryAnZcone1 != SpinBox_Cone_Z1->value()) || + (_BoundaryAnRayon1 != SpinBox_Cone_V1->value()) || + (_BoundaryAnXcone2 != SpinBox_Cone_X2->value()) || + (_BoundaryAnYcone2 != SpinBox_Cone_Y2->value()) || + (_BoundaryAnZcone2 != SpinBox_Cone_Z2->value()) || + (_BoundaryAnRayon2 != SpinBox_Cone_V2->value()) ) + { + Chgt = true; + _BoundaryAnXcone1 = SpinBox_Cone_X1->value() ; + _BoundaryAnYcone1 = SpinBox_Cone_Y1->value() ; + _BoundaryAnZcone1 = SpinBox_Cone_Z1->value() ; + _BoundaryAnRayon1 = SpinBox_Cone_V1->value() ; + _BoundaryAnXcone2 = SpinBox_Cone_X2->value() ; + _BoundaryAnYcone2 = SpinBox_Cone_Y2->value() ; + _BoundaryAnZcone2 = SpinBox_Cone_Z2->value() ; + _BoundaryAnRayon2 = SpinBox_Cone_V2->value() ; + } + break; + } + case 5 : // il s agit d un tore + { + if ((_BoundaryAnToreXcentre != SpinBoxToreXcent->value()) || + (_BoundaryAnToreYcentre != SpinBoxToreYcent->value()) || + (_BoundaryAnToreZcentre != SpinBoxToreZcent->value()) || + (_BoundaryAnToreRRev != SpinBoxToreRRev->value()) || + (_BoundaryAnToreRPri != SpinBoxToreRPri->value()) || + (_BoundaryAnToreXaxe != SpinBoxToreXaxe->value()) || + (_BoundaryAnToreYaxe != SpinBoxToreYaxe->value()) || + (_BoundaryAnToreZaxe != SpinBoxToreZaxe->value()) ) + { + Chgt = true; + _BoundaryAnToreXcentre= SpinBoxToreXcent->value(); + _BoundaryAnToreYcentre= SpinBoxToreYcent->value(); + _BoundaryAnToreZcentre= SpinBoxToreZcent->value(); + _BoundaryAnToreRRev=SpinBoxToreRRev->value(); + _BoundaryAnToreRPri=SpinBoxToreRPri->value(); + _BoundaryAnToreXaxe=SpinBoxToreXaxe->value(); + _BoundaryAnToreYaxe=SpinBoxToreYaxe->value(); + _BoundaryAnToreZaxe=SpinBoxToreZaxe->value(); + } + break; + } + + } + +// Controles +// L'axe pour un cylindre + if ( _Type == 5 ) + { + double daux = _BoundaryAnXaxis*_BoundaryAnXaxis + _BoundaryAnYaxis*_BoundaryAnYaxis + _BoundaryAnZaxis*_BoundaryAnZaxis ; + if ( daux < 0.0000001 ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_AXE") ); + return false; + } + } + + // + // Création ou mise à jour de la frontière + // + bool bOK = CreateOrUpdateBoundaryAn(); + + //if ( bOK ) { HOMARD_UTILS::updateObjBrowser() ; } + + return bOK; + +} +// --------------------------------------------------- +bool SMESH_CreateBoundaryAn::CreateOrUpdateBoundaryAn() +//---------------------------------------------------- +// Creation de l'objet boundary +{ + MESSAGE("Debut de CreateOrUpdateBoundaryAn avec _Type ="<<_Type<<", _Name ="<<_Name.toStdString().c_str()<<" et LEName ="<text().trimmed().toStdString().c_str()); +// + if (_Name != LEName->text().trimmed()) + { + _Name = LEName->text().trimmed() ; + try + { + switch (_Type) + { + case 1 : // il s agit d un cylindre + { aBoundaryAn = myHomardGen->CreateBoundaryCylinder(CORBA::string_dup(_Name.toStdString().c_str()), \ + _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon ); + break; + } + case 2 : // il s agit d une sphere + { aBoundaryAn = myHomardGen->CreateBoundarySphere(CORBA::string_dup(_Name.toStdString().c_str()), \ + _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon); + break; + } + case 3 : // il s agit d un cone defini par un axe et un angle + { aBoundaryAn = myHomardGen->CreateBoundaryConeA(CORBA::string_dup(_Name.toStdString().c_str()), \ + _BoundaryAnXaxisCone, _BoundaryAnYaxisCone, _BoundaryAnZaxisCone, _BoundaryAngle, \ + _BoundaryAnXorigCone, _BoundaryAnYorigCone, _BoundaryAnYorigCone); + break; + } + case 4 : // il s agit d un cone defini par les 2 rayons + { aBoundaryAn = myHomardGen->CreateBoundaryConeR(CORBA::string_dup(_Name.toStdString().c_str()), \ + _BoundaryAnXcone1, _BoundaryAnYcone1, _BoundaryAnZcone1, _BoundaryAnRayon1, \ + _BoundaryAnXcone2, _BoundaryAnYcone2, _BoundaryAnZcone2, _BoundaryAnRayon2); + break; + } + case 5 : // il s agit d un tore + { aBoundaryAn = myHomardGen->CreateBoundaryTorus(CORBA::string_dup(_Name.toStdString().c_str()), \ + _BoundaryAnToreXcentre, _BoundaryAnToreYcentre, _BoundaryAnToreZcentre, _BoundaryAnToreXaxe, _BoundaryAnToreYaxe, _BoundaryAnToreZaxe, _BoundaryAnToreRRev, _BoundaryAnToreRPri ); + break; + } + } + } + catch( SALOME::SALOME_Exception& S_ex ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr(CORBA::string_dup(S_ex.details.text)) ); + return false ; + } + _parent->AddBoundaryAn(_Name); + + return true; + } + else { + QMessageBox::warning( 0, QObject::tr("HOM_WARNING"), + QObject::tr("HOM_SELECT_OBJECT_4") ); + return false ; + } + MESSAGE("Fin de CreateOrUpdateBoundaryAn"); +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryAn::PushOnOK() +// ------------------------------------------------------------------------ +{ + if (PushOnApply()) this->close(); +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryAn::PushOnHelp() +// ------------------------------------------------------------------------ +{ + SMESH::ShowHelpFile(QString("homard_create_boundary.html#analytical-boundary")); +} + +// ----------------------------------- +void SMESH_CreateBoundaryAn::SetNewName() +// ----------------------------------- +{ +// Recherche d'un nom par defaut qui n'existe pas encore + + SMESHHOMARD::listeBoundarys_var MyObjects = myHomardGen->GetAllBoundarysName(); + int num = 0; QString aName=""; + while (aName=="" ) + { + aName.setNum(num+1) ; + aName.insert(0, QString("Boun_")) ; + for ( int i=0; ilength(); i++) + { + if ( aName == QString(MyObjects[i])) + { + num ++ ; + aName = "" ; + break ; + } + } + } + LEName->setText(aName); +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryAn::SetCylinder() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetCylinder") + gBCylindre->setVisible(1); + gBSphere->setVisible(0); + gBCone->setVisible(0); + gBTore->setVisible(0); +// + _Type=1; +// + adjustSize(); +// MESSAGE("Fin de SetCylinder") +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryAn::SetSphere() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetSphere") + gBCylindre->setVisible(0); + gBSphere->setVisible(1); + gBCone->setVisible(0); + gBTore->setVisible(0); +// + _Type=2; +// + adjustSize(); +// MESSAGE("Fin de SetSphere") +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryAn::SetConeR() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetConeR") +// +// Stockage et conversion des valeurs si elles ont change + if ((_BoundaryAnXaxisCone != SpinBox_Cone_X1->value()) || + (_BoundaryAnYaxisCone != SpinBox_Cone_Y1->value()) || + (_BoundaryAnZaxisCone != SpinBox_Cone_Z1->value()) || + (_BoundaryAnXorigCone != SpinBox_Cone_X2->value()) || + (_BoundaryAnYorigCone != SpinBox_Cone_Y2->value()) || + (_BoundaryAnZorigCone != SpinBox_Cone_Z2->value()) || + (_BoundaryAngle != SpinBox_Cone_V1->value()) ) + { + MESSAGE("Stockage et conversion") + _BoundaryAnXaxisCone = SpinBox_Cone_X1->value() ; + _BoundaryAnYaxisCone = SpinBox_Cone_Y1->value() ; + _BoundaryAnZaxisCone = SpinBox_Cone_Z1->value() ; + _BoundaryAnXorigCone = SpinBox_Cone_X2->value() ; + _BoundaryAnYorigCone = SpinBox_Cone_Y2->value() ; + _BoundaryAnZorigCone = SpinBox_Cone_Z2->value() ; + _BoundaryAngle = SpinBox_Cone_V1->value() ; + convertRayonAngle(-1) ; + } +// + _Type=4; +// + TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X centre 1", 0)); + SpinBox_Cone_X1->setValue(_BoundaryAnXcone1); + TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y centre 1", 0)); + SpinBox_Cone_Y1->setValue(_BoundaryAnYcone1); + TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z centre 1", 0)); + SpinBox_Cone_Z1->setValue(_BoundaryAnZcone1); +// + TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Radius 1", 0)); + SpinBox_Cone_V1->setSingleStep(_Rayon/10.); + SpinBox_Cone_V1->setMaximum(100000.*_DMax); + SpinBox_Cone_V1->setValue(_BoundaryAnRayon1); +// + TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre 2", 0)); + SpinBox_Cone_X2->setValue(_BoundaryAnXcone2); + TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre 2", 0)); + SpinBox_Cone_Y2->setValue(_BoundaryAnYcone2); + TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre 2", 0)); + SpinBox_Cone_Z2->setValue(_BoundaryAnZcone2); +// + TLCone_V2->setVisible(1); + SpinBox_Cone_V2->setVisible(1); + TLCone_V2->setText(QApplication::translate("CreateBoundaryAn", "Radius 2", 0)); + SpinBox_Cone_V2->setValue(_BoundaryAnRayon2); +// +// MESSAGE("Fin de SetConeR") +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryAn::SetConeA() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetConeA") +// Stockage et conversion des valeurs si elles ont change + if ((_BoundaryAnXcone1 != SpinBox_Cone_X1->value()) || + (_BoundaryAnYcone1 != SpinBox_Cone_Y1->value()) || + (_BoundaryAnZcone1 != SpinBox_Cone_Z1->value()) || + (_BoundaryAnRayon1 != SpinBox_Cone_V1->value()) || + (_BoundaryAnXcone2 != SpinBox_Cone_X2->value()) || + (_BoundaryAnYcone2 != SpinBox_Cone_Y2->value()) || + (_BoundaryAnZcone2 != SpinBox_Cone_Z2->value()) || + (_BoundaryAnRayon2 != SpinBox_Cone_V2->value()) ) + { + MESSAGE("Stockage et conversion") + _BoundaryAnXcone1 = SpinBox_Cone_X1->value() ; + _BoundaryAnYcone1 = SpinBox_Cone_Y1->value() ; + _BoundaryAnZcone1 = SpinBox_Cone_Z1->value() ; + _BoundaryAnRayon1 = SpinBox_Cone_V1->value() ; + _BoundaryAnXcone2 = SpinBox_Cone_X2->value() ; + _BoundaryAnYcone2 = SpinBox_Cone_Y2->value() ; + _BoundaryAnZcone2 = SpinBox_Cone_Z2->value() ; + _BoundaryAnRayon2 = SpinBox_Cone_V2->value() ; + convertRayonAngle(1) ; + } +// + _Type=3; +// + TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X axis", 0)); + SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone); + TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y axis", 0)); + SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone); + TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z axis", 0)); + SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone); +// + TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0)); + SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone); + TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0)); + SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone); + TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0)); + SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone); +// + TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Angle", 0)); + SpinBox_Cone_V1->setValue(_BoundaryAngle); + SpinBox_Cone_V1->setSingleStep(1.); + SpinBox_Cone_V1->setMaximum(90.); +// + TLCone_V2->setVisible(0); + SpinBox_Cone_V2->setVisible(0); +// MESSAGE("Fin de SetConeA") +} + + +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryAn::SetCone() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetCone") + gBCylindre->setVisible(0); + gBSphere->setVisible(0); + gBCone->setVisible(1); + gBTore->setVisible(0); +// + if ( RB_Def_radius->isChecked() ) + { + SetConeR(); + } + else + { + SetConeA(); + } +// + adjustSize(); +// MESSAGE("Fin de SetCone") +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryAn::SetTore() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SetTore") + gBCylindre->setVisible(0); + gBSphere->setVisible(0); + gBCone->setVisible(0); + gBTore->setVisible(1); +// + _Type=5; +// + adjustSize(); +// MESSAGE("Fin de SetTore") +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryAn::convertRayonAngle(int option) +// ------------------------------------------------------------------------ +// Conversion entre les deux formulations du cone : +// par deux rayons ou avec un axe et un angle. +// Voir sfcoi1 de HOMARD +{ + MESSAGE("Debut de convertRayonAngle, option = "< BO = AB*RB/(RA-RB) +// Angle : tg(alpha) = RA/AO +// + double daux ; +// De rayon vers angle : + if ( option == 1 ) + { + double xa, ya, za, ra ; + double xb, yb, zb, rb ; +// Positionnement de A vers B, avec RA>RB + if ( _BoundaryAnRayon1 > _BoundaryAnRayon2 ) + { + xa = _BoundaryAnXcone1 ; + ya = _BoundaryAnYcone1 ; + za = _BoundaryAnZcone1 ; + ra = _BoundaryAnRayon1 ; + xb = _BoundaryAnXcone2 ; + yb = _BoundaryAnYcone2 ; + zb = _BoundaryAnZcone2 ; + rb = _BoundaryAnRayon2 ; + } + else + { + xa = _BoundaryAnXcone2 ; + ya = _BoundaryAnYcone2 ; + za = _BoundaryAnZcone2 ; + ra = _BoundaryAnRayon2 ; + xb = _BoundaryAnXcone1 ; + yb = _BoundaryAnYcone1 ; + zb = _BoundaryAnZcone1 ; + rb = _BoundaryAnRayon1 ; + } +// Axe : relie les deux centres, de A vers B. L'axe est normalise + _BoundaryAnXaxisCone = xb - xa ; + _BoundaryAnYaxisCone = yb - ya ; + _BoundaryAnZaxisCone = zb - za ; + daux = sqrt ( _BoundaryAnXaxisCone*_BoundaryAnXaxisCone + _BoundaryAnYaxisCone*_BoundaryAnYaxisCone + _BoundaryAnZaxisCone*_BoundaryAnZaxisCone ) ; + _BoundaryAnXaxisCone = _BoundaryAnXaxisCone/daux ; + _BoundaryAnYaxisCone = _BoundaryAnYaxisCone/daux ; + _BoundaryAnZaxisCone = _BoundaryAnZaxisCone/daux ; +// Origine + daux = daux * rb / (ra-rb) ; + _BoundaryAnXorigCone = xb + daux*_BoundaryAnXaxisCone ; + _BoundaryAnYorigCone = yb + daux*_BoundaryAnYaxisCone ; + _BoundaryAnZorigCone = zb + daux*_BoundaryAnZaxisCone ; +// Angle en degre + daux = ra / sqrt((_BoundaryAnXorigCone-xa)*(_BoundaryAnXorigCone-xa) + (_BoundaryAnYorigCone-ya)*(_BoundaryAnYorigCone-ya) + (_BoundaryAnZorigCone-za)*(_BoundaryAnZorigCone-za) ) ; + _BoundaryAngle = atan(daux)*180./PI ; + } +// D'angle vers rayon : + else + { + double xax, yax, zax ; +// L'axe est normalise + daux = sqrt ( _BoundaryAnXaxisCone*_BoundaryAnXaxisCone + _BoundaryAnYaxisCone*_BoundaryAnYaxisCone + _BoundaryAnZaxisCone*_BoundaryAnZaxisCone ) ; + xax = _BoundaryAnXaxisCone/daux ; + yax = _BoundaryAnYaxisCone/daux ; + zax = _BoundaryAnZaxisCone/daux ; +// Centre 1 : l'origine + _BoundaryAnXcone1 = _BoundaryAnXorigCone ; + _BoundaryAnYcone1 = _BoundaryAnYorigCone ; + _BoundaryAnZcone1 = _BoundaryAnZorigCone ; +// Rayon 1 : nul + _BoundaryAnRayon1 = 0. ; +// Centre 2 : l'origine decalee d'une longueur arbitraire le long de l'axe + _BoundaryAnXcone2 = _BoundaryAnXorigCone + _DMax*xax ; + _BoundaryAnYcone2 = _BoundaryAnYorigCone + _DMax*yax ; + _BoundaryAnZcone2 = _BoundaryAnZorigCone + _DMax*zax ; +// Rayon 2 : a calculer + _BoundaryAnRayon2 = _DMax*tan(_BoundaryAngle*PI/180.) ; + } +// MESSAGE("Fin de convertRayonAngle") +} + +// ------------------------------------------------------------------------------- +SMESH_CreateBoundaryCAO::SMESH_CreateBoundaryCAO(SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName, QString aName) +// --------------------------------------------------------------------------------- +/* Constructs a SMESH_CreateBoundaryCAO */ + : + QDialog(0), SMESH_Ui_CreateBoundaryCAO(), + _parent(parent), _aName(aName), + myHomardGen(SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0)) + { + MESSAGE("Constructeur") ; + setupUi(this); + setModal(modal); + InitConnect(); + + if ( _aName == QString("") ) {SetNewName();}; + } + +// ------------------------------------------------------------------------ +SMESH_CreateBoundaryCAO::~SMESH_CreateBoundaryCAO() +// ------------------------------------------------------------------------ +{ + // no need to delete child widgets, Qt does it all for us +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryCAO::InitConnect() +// ------------------------------------------------------------------------ +{ + connect( PushFichier, SIGNAL(pressed()), this, SLOT(SetCAOFile())); + connect( buttonOk, SIGNAL(pressed()), this, SLOT( PushOnOK())); + connect( buttonApply, SIGNAL(pressed()), this, SLOT( PushOnApply())); + connect( buttonCancel, SIGNAL(pressed()), this, SLOT(close())); + connect( buttonHelp, SIGNAL(pressed()), this, SLOT( PushOnHelp())); + connect( CBGroupe, SIGNAL(stateChanged(int)), this, SLOT( SetFiltrage())); +} + +// ------------------------------------------------------------------------ +bool SMESH_CreateBoundaryCAO::PushOnApply() +// ------------------------------------------------------------------------ +// Appele lorsque l'un des boutons Ok ou Apply est presse +// +{ +// Verifications + + QString aName=LEName->text().trimmed(); + if (aName=="") { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_BOUN_NAME") ); + return false; + } + +// La CAO + QString aCAOFile=LEFileName->text().trimmed(); + if (aCAOFile ==QString("")) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_BOUN_CAO") ); + return false; + } + +// Creation de l'objet CORBA si ce n'est pas deja fait sous le meme nom + if ( _aName != aName ) + { + try + { + _aName=aName; + aBoundary=myHomardGen->CreateBoundaryCAO(CORBA::string_dup(_aName.toStdString().c_str()), aCAOFile.toStdString().c_str()); + _parent->AddBoundaryCAO(_aName); + } + catch( SALOME::SALOME_Exception& S_ex ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr(CORBA::string_dup(S_ex.details.text)) ); + return false; + } + } + +// Les groupes + AssocieLesGroupes(); + + //HOMARD_UTILS::updateObjBrowser(); + return true; +} + + +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryCAO::PushOnOK() +// ------------------------------------------------------------------------ +{ + if (PushOnApply()) this->close(); + if ( _parent ) { _parent->raise(); _parent->activateWindow(); }; +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryCAO::PushOnHelp() +// ------------------------------------------------------------------------ +{ + SMESH::ShowHelpFile(QString("homard_create_boundary.html#cao-boundary")); +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryCAO::AssocieLesGroupes() +// ------------------------------------------------------------------------ +{ + SMESHHOMARD::ListGroupType_var aSeqGroupe = new SMESHHOMARD::ListGroupType; + aSeqGroupe->length(_listeGroupesBoundary.size()); + QStringList::const_iterator it; + int i=0; + for (it = _listeGroupesBoundary.constBegin(); it != _listeGroupesBoundary.constEnd(); it++) + aSeqGroupe[i++]=(*it).toStdString().c_str(); + aBoundary->SetGroups(aSeqGroupe); + +} + +// ------------------------------------------------- +void SMESH_CreateBoundaryCAO::SetNewName() +// -------------------------------------------------- +{ + + SMESHHOMARD::listeBoundarys_var MyObjects = myHomardGen->GetAllBoundarysName(); + int num = 0; QString aName=""; + while (aName == QString("") ) + { + aName.setNum(num+1) ; + aName.insert(0, QString("Boun_")) ; + for ( int i=0; ilength(); i++) + { + if ( aName == QString(MyObjects[i])) + { + num ++ ; + aName = "" ; + break ; + } + } + } + LEName->setText(aName); +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryCAO::SetCAOFile() +// ------------------------------------------------------------------------ +{ + QString aCAOFile = SMESH_HOMARD_QT_COMMUN::PushNomFichier( false, QString("xao") ); + if (!(aCAOFile.isEmpty())) LEFileName->setText(aCAOFile); +} + +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryCAO::setGroups (QStringList listGroup) +// ------------------------------------------------------------------------ +{ + _listeGroupesBoundary = listGroup; +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryCAO::SetFiltrage() +// ------------------------------------------------------------------------ +{ + if (!CBGroupe->isChecked()) return; + + SMESH_CreateListGroupCAO *aDlg = new SMESH_CreateListGroupCAO + (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), + "Case_1", _listeGroupesBoundary); + aDlg->show(); +} + +// ------------------------------------------------------------------------------- +SMESH_CreateBoundaryDi::SMESH_CreateBoundaryDi(SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName, QString aName) +// --------------------------------------------------------------------------------- +/* Constructs a SMESH_CreateBoundaryDi */ + : + QDialog(0), SMESH_Ui_CreateBoundaryDi(), + _parent(parent), _aName(aName), + myHomardGen(SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0)) + { + MESSAGE("Constructeur") ; + setupUi(this); + setModal(modal); + InitConnect(); + + if ( _aName == QString("") ) {SetNewName();}; + } + +// ------------------------------------------------------------------------ +SMESH_CreateBoundaryDi::~SMESH_CreateBoundaryDi() +// ------------------------------------------------------------------------ +{ + // no need to delete child widgets, Qt does it all for us +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryDi::InitConnect() +// ------------------------------------------------------------------------ +{ + connect( PushFichier, SIGNAL(pressed()), this, SLOT(SetMeshFile())); + connect( buttonOk, SIGNAL(pressed()), this, SLOT( PushOnOK())); + connect( buttonApply, SIGNAL(pressed()), this, SLOT( PushOnApply())); + connect( buttonCancel, SIGNAL(pressed()), this, SLOT(close())); + connect( buttonHelp, SIGNAL(pressed()), this, SLOT( PushOnHelp())); + connect( CBGroupe, SIGNAL(stateChanged(int)), this, SLOT( SetFiltrage())); +} + +// ------------------------------------------------------------------------ +bool SMESH_CreateBoundaryDi::PushOnApply() +// ------------------------------------------------------------------------ +// Appele lorsque l'un des boutons Ok ou Apply est presse +// +{ +// Verifications + + QString aName=LEName->text().trimmed(); + if (aName=="") { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_BOUN_NAME") ); + return false; + } + +// Le maillage de la frontiere discrete + QString aMeshFile=LEFileName->text().trimmed(); + if (aMeshFile ==QString("")) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_BOUN_MESH") ); + return false; + } + + // Le nom du maillage de la frontiere discrete + QString aMeshName = SMESH_HOMARD_QT_COMMUN::LireNomMaillage(aMeshFile); + if (aMeshName == "" ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_MED_FILE_2") ); + return false; + } + +// Creation de l'objet CORBA si ce n'est pas deja fait sous le meme nom + if ( _aName != aName ) + { + try + { + _aName=aName; + aBoundary=myHomardGen->CreateBoundaryDi(CORBA::string_dup(_aName.toStdString().c_str()), aMeshName.toStdString().c_str(), aMeshFile.toStdString().c_str()); + _parent->AddBoundaryDi(_aName); + } + catch( SALOME::SALOME_Exception& S_ex ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr(CORBA::string_dup(S_ex.details.text)) ); + return false; + } + } + +// Les groupes + AssocieLesGroupes(); + + //HOMARD_UTILS::updateObjBrowser(); + return true; +} + + +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryDi::PushOnOK() +// ------------------------------------------------------------------------ +{ + if (PushOnApply()) this->close(); + if ( _parent ) { _parent->raise(); _parent->activateWindow(); }; +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryDi::PushOnHelp() +// ------------------------------------------------------------------------ +{ + SMESH::ShowHelpFile(QString("homard_create_boundary.html#discrete-boundary")); +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryDi::AssocieLesGroupes() +// ------------------------------------------------------------------------ +{ + SMESHHOMARD::ListGroupType_var aSeqGroupe = new SMESHHOMARD::ListGroupType; + aSeqGroupe->length(_listeGroupesBoundary.size()); + QStringList::const_iterator it; + int i=0; + for (it = _listeGroupesBoundary.constBegin(); it != _listeGroupesBoundary.constEnd(); it++) + aSeqGroupe[i++]=(*it).toStdString().c_str(); + aBoundary->SetGroups(aSeqGroupe); + +} + +// ------------------------------------------------- +void SMESH_CreateBoundaryDi::SetNewName() +// -------------------------------------------------- +{ + + SMESHHOMARD::listeBoundarys_var MyObjects = myHomardGen->GetAllBoundarysName(); + int num = 0; QString aName=""; + while (aName == QString("") ) + { + aName.setNum(num+1) ; + aName.insert(0, QString("Boun_")) ; + for ( int i=0; ilength(); i++) + { + if ( aName == QString(MyObjects[i])) + { + num ++ ; + aName = "" ; + break ; + } + } + } + LEName->setText(aName); +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryDi::SetMeshFile() +// ------------------------------------------------------------------------ +{ + QString aMeshFile = SMESH_HOMARD_QT_COMMUN::PushNomFichier( false, QString("med") ); + if (!(aMeshFile.isEmpty())) LEFileName->setText(aMeshFile); +} + +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryDi::setGroups (QStringList listGroup) +// ------------------------------------------------------------------------ +{ + _listeGroupesBoundary = listGroup; +} +// ------------------------------------------------------------------------ +void SMESH_CreateBoundaryDi::SetFiltrage() +// // ------------------------------------------------------------------------ +{ + if (!CBGroupe->isChecked()) return; + + SMESH_CreateListGroup *aDlg = new SMESH_CreateListGroup + (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), + "Case_1", _listeGroupesBoundary); + aDlg->show(); +} + +// ------------------------------------------------------------------------ +SMESH_EditBoundaryAn::SMESH_EditBoundaryAn( SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName, QString Name ): +// ------------------------------------------------------------------------ +/* Constructs a SMESH_EditBoundaryAn + herite de SMESH_CreateBoundaryAn +*/ + SMESH_CreateBoundaryAn(parent, myHomardGen0, caseName) +{ + MESSAGE("Debut de SMESH_EditBoundaryAn pour " << Name.toStdString().c_str()); + setWindowTitle(QObject::tr("HOM_BOUN_A_EDIT_WINDOW_TITLE")); + _Name=Name; + aBoundaryAn = myHomardGen->GetBoundary(_Name.toStdString().c_str()); + InitValEdit(); +} +// ------------------------------------------------------------------------ +SMESH_EditBoundaryAn::~SMESH_EditBoundaryAn() +// ------------------------------------------------------------------------ +{ + // no need to delete child widgets, Qt does it all for us +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryAn::InitValEdit() +// ------------------------------------------------------------------------ +{ + LEName->setText(_Name); + LEName->setReadOnly(true); + _Type = aBoundaryAn->GetType(); + MESSAGE("_Type : "<<_Type); + InitValBoundaryAnLimit(); + InitValBoundaryAn(); + switch (_Type) + { + case 1 : // il s agit d un cylindre + { + InitValBoundaryAnCylindre(); + SetCylinder(); + break; + } + case 2: // il s agit d une sphere + { + InitValBoundaryAnSphere(); + SetSphere(); + break; + } + case 3: // il s agit d un cone defini par un axe et un angle + { + InitValBoundaryAnConeA(); + SetConeA(); + break; + } + case 4: // il s agit d un cone defini par les 2 rayons + { + InitValBoundaryAnConeR(); + SetConeR(); + break; + } + case 5: // il s agit d un tore + { + InitValBoundaryAnTore(); + SetTore(); + break; + } + }; +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryAn::InitValBoundaryAnLimit() +// ------------------------------------------------------------------------ +{ + SMESHHOMARD::double_array_var mesCoordLimits = aBoundaryAn->GetLimit(); + ASSERT(mesCoordLimits->length() == 3 ); + _Xincr=mesCoordLimits[0]; + _Yincr=mesCoordLimits[1]; + _Zincr=mesCoordLimits[2]; +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryAn::InitValBoundaryAnCylindre() +// ------------------------------------------------------------------------ +{ + SMESHHOMARD::double_array_var mesCoordBoundary = aBoundaryAn->GetCoords(); + ASSERT(mesCoordBoundary->length() == 7 ); + _BoundaryAnXcentre=mesCoordBoundary[0]; + _BoundaryAnYcentre=mesCoordBoundary[1]; + _BoundaryAnZcentre=mesCoordBoundary[2]; + _BoundaryAnXaxis=mesCoordBoundary[3]; + _BoundaryAnYaxis=mesCoordBoundary[4]; + _BoundaryAnZaxis=mesCoordBoundary[5]; + _BoundaryAnRayon=mesCoordBoundary[6]; +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryAn::InitValBoundaryAnSphere() +// ------------------------------------------------------------------------ +{ + SMESHHOMARD::double_array_var mesCoordBoundary = aBoundaryAn->GetCoords(); + ASSERT(mesCoordBoundary->length() == 4 ); + _BoundaryAnXcentre=mesCoordBoundary[0]; + _BoundaryAnYcentre=mesCoordBoundary[1]; + _BoundaryAnZcentre=mesCoordBoundary[2]; + _BoundaryAnRayon=mesCoordBoundary[3]; +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryAn::InitValBoundaryAnConeA() +// ------------------------------------------------------------------------ +{ + SMESHHOMARD::double_array_var mesCoordBoundary = aBoundaryAn->GetCoords(); + ASSERT(mesCoordBoundary->length() == 7 ); + _BoundaryAnXaxisCone=mesCoordBoundary[0]; + _BoundaryAnYaxisCone=mesCoordBoundary[1]; + _BoundaryAnZaxisCone=mesCoordBoundary[2]; + _BoundaryAngle=mesCoordBoundary[3]; + _BoundaryAnXorigCone=mesCoordBoundary[4]; + _BoundaryAnYorigCone=mesCoordBoundary[5]; + _BoundaryAnZorigCone=mesCoordBoundary[6]; + convertRayonAngle(-1) ; +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryAn::InitValBoundaryAnConeR() +// ------------------------------------------------------------------------ +{ + SMESHHOMARD::double_array_var mesCoordBoundary = aBoundaryAn->GetCoords(); + ASSERT(mesCoordBoundary->length() == 8 ); + _BoundaryAnXcone1=mesCoordBoundary[0]; + _BoundaryAnYcone1=mesCoordBoundary[1]; + _BoundaryAnZcone1=mesCoordBoundary[2]; + _BoundaryAnRayon1=mesCoordBoundary[3]; + _BoundaryAnXcone2=mesCoordBoundary[4]; + _BoundaryAnYcone2=mesCoordBoundary[5]; + _BoundaryAnZcone2=mesCoordBoundary[6]; + _BoundaryAnRayon2=mesCoordBoundary[7]; + convertRayonAngle(1) ; +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryAn::InitValBoundaryAnTore() +// ------------------------------------------------------------------------ +{ + SMESHHOMARD::double_array_var mesCoordBoundary = aBoundaryAn->GetCoords(); + ASSERT(mesCoordBoundary->length() == 8 ); + _BoundaryAnXcentre=mesCoordBoundary[0]; + _BoundaryAnYcentre=mesCoordBoundary[1]; + _BoundaryAnZcentre=mesCoordBoundary[2]; + _BoundaryAnXaxis=mesCoordBoundary[3]; + _BoundaryAnYaxis=mesCoordBoundary[4]; + _BoundaryAnZaxis=mesCoordBoundary[5]; + _BoundaryAnRayon1=mesCoordBoundary[6]; + _BoundaryAnRayon2=mesCoordBoundary[7]; +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryAn::SetCylinder() +// ------------------------------------------------------------------------ +{ + gBCylindre->setVisible(1); + gBSphere->setVisible(0); + gBCone->setVisible(0); + gBTore->setVisible(0); + RBCylindre->setChecked(1); + _Type=1; + RBSphere->setDisabled(true); + RBCone->setDisabled(true); + RBTore->setDisabled(true); + + SpinBox_Xcent->setValue(_BoundaryAnXcentre); + SpinBox_Ycent->setValue(_BoundaryAnYcentre); + SpinBox_Zcent->setValue(_BoundaryAnZcentre); + + SpinBox_Xaxis->setValue(_BoundaryAnXaxis); + SpinBox_Yaxis->setValue(_BoundaryAnYaxis); + SpinBox_Zaxis->setValue(_BoundaryAnZaxis); + + + SpinBox_Xaxis->setSingleStep(0.1); + SpinBox_Xcentre->setSingleStep(_Xincr); + SpinBox_Yaxis->setSingleStep(0.1); + SpinBox_Ycentre->setSingleStep(_Yincr); + SpinBox_Zaxis->setSingleStep(0.1); + SpinBox_Zcentre->setSingleStep(_Zincr); +// Rayon + SpinBox_Radius->setValue(_BoundaryAnRayon); + SpinBox_Radius->setSingleStep(_BoundaryAnRayon/10.); +// + adjustSize(); +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryAn::SetSphere() +// ------------------------------------------------------------------------ +{ + gBCylindre->setVisible(0); + gBSphere->setVisible(1); + RBSphere->setChecked(1); + gBCone->setVisible(0); + gBTore->setVisible(0); + RBCylindre->setDisabled(true); + RBCone->setDisabled(true); + RBTore->setDisabled(true); + _Type=2 ; + + SpinBox_Xcentre->setValue(_BoundaryAnXcentre); + if ( _Xincr > 0) { SpinBox_Xcentre->setSingleStep(_Xincr); } + else { SpinBox_Xcentre->setSingleStep(1) ; } + + SpinBox_Ycentre->setValue(_BoundaryAnYcentre); + if ( _Yincr > 0) { SpinBox_Ycentre->setSingleStep(_Yincr); } + else { SpinBox_Ycentre->setSingleStep(1) ; } + + SpinBox_Zcentre->setValue(_BoundaryAnZcentre); + if ( _Zincr > 0) { SpinBox_Zcentre->setSingleStep(_Zincr); } + else { SpinBox_Zcentre->setSingleStep(1);} + + SpinBox_Rayon->setValue(_BoundaryAnRayon); +// + adjustSize(); +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryAn::SetConeA() +// ------------------------------------------------------------------------ +{ + gBCylindre->setVisible(0); + gBSphere->setVisible(0); + gBCone->setVisible(1); + RBCone->setChecked(1); + gBTore->setVisible(0); + RB_Def_angle->setChecked(1); + RBCylindre->setDisabled(true); + RBSphere->setDisabled(true); + RBTore->setDisabled(true); + _Type=3; +// + TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X axis", 0)); + SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone); + TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y axis", 0)); + SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone); + TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z axis", 0)); + SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone); +// + TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0)); + SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone); + TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0)); + SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone); + TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0)); + SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone); +// + TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Angle", 0)); + SpinBox_Cone_V1->setValue(_BoundaryAngle); + SpinBox_Cone_V1->setSingleStep(1.); + SpinBox_Cone_V1->setMaximum(90.); +// + TLCone_V2->setVisible(0); + SpinBox_Cone_V2->setVisible(0); +// + adjustSize(); +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryAn::SetConeR() +// ------------------------------------------------------------------------ +{ + gBCylindre->setVisible(0); + gBSphere->setVisible(0); + gBCone->setVisible(1); + gBTore->setVisible(0); + RBCone->setChecked(1); + RB_Def_radius->setChecked(1); + RBCylindre->setDisabled(true); + RBSphere->setDisabled(true); + RBTore->setDisabled(true); + _Type=4; +// + TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X centre 1", 0)); + SpinBox_Cone_X1->setValue(_BoundaryAnXcone1); + TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y centre 1", 0)); + SpinBox_Cone_Y1->setValue(_BoundaryAnYcone1); + TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z centre 1", 0)); + SpinBox_Cone_Z1->setValue(_BoundaryAnZcone1); +// + TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Radius 1", 0)); + SpinBox_Cone_V1->setSingleStep(_Rayon/10.); + SpinBox_Cone_V1->setMaximum(100000.*_DMax); + SpinBox_Cone_V1->setValue(_BoundaryAnRayon1); +// + TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre 2", 0)); + SpinBox_Cone_X2->setValue(_BoundaryAnXcone2); + TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre 2", 0)); + SpinBox_Cone_Y2->setValue(_BoundaryAnYcone2); + TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre 2", 0)); + SpinBox_Cone_Z2->setValue(_BoundaryAnZcone2); +// + TLCone_V2->setVisible(1); + SpinBox_Cone_V2->setVisible(1); + TLCone_V2->setText(QApplication::translate("CreateBoundaryAn", "Radius 2", 0)); + SpinBox_Cone_V2->setValue(_BoundaryAnRayon2); +// + adjustSize(); +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryAn::SetTore() +// ------------------------------------------------------------------------ +{ + gBCylindre->setVisible(0); + gBSphere->setVisible(0); + gBCone->setVisible(0); + gBTore->setVisible(1); + RBTore->setChecked(1); + _Type=5; + RBCylindre->setDisabled(true); + RBSphere->setDisabled(true); + RBCone->setDisabled(true); + + SpinBoxToreXcent->setValue(_BoundaryAnXcentre); + SpinBoxToreYcent->setValue(_BoundaryAnYcentre); + SpinBoxToreZcent->setValue(_BoundaryAnZcentre); + + SpinBoxToreXaxe->setValue(_BoundaryAnXaxis); + SpinBoxToreYaxe->setValue(_BoundaryAnYaxis); + SpinBoxToreZaxe->setValue(_BoundaryAnZaxis); + + + SpinBoxToreXaxe->setSingleStep(0.1); + SpinBoxToreXcent->setSingleStep(_Xincr); + SpinBoxToreYaxe->setSingleStep(0.1); + SpinBoxToreYcent->setSingleStep(_Yincr); + SpinBoxToreZaxe->setSingleStep(0.1); + SpinBoxToreZcent->setSingleStep(_Zincr); +// Rayon de revolution + SpinBoxToreRRev->setValue(_BoundaryAnRayon1); + SpinBoxToreRRev->setSingleStep(_BoundaryAnRayon1/10.); +// Rayon primaire + SpinBoxToreRPri->setValue(_BoundaryAnRayon2); + SpinBoxToreRPri->setSingleStep(_BoundaryAnRayon2/10.); +// + adjustSize(); +} +// --------------------------------------------------- +bool SMESH_EditBoundaryAn::CreateOrUpdateBoundaryAn() +//---------------------------------------------------- +// Mise a jour des attributs de la BoundaryAn +{ + switch (_Type) + { + case 1 : // il s agit d un cylindre + { + aBoundaryAn->SetCylinder(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon ); + break; + } + case 2 : // il s agit d une sphere + { + aBoundaryAn->SetSphere(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon); + break; + } + case 3 : // il s agit d un cone defini par un axe et un angle + { + aBoundaryAn = myHomardGen->CreateBoundaryConeA(CORBA::string_dup(_Name.toStdString().c_str()), \ + _BoundaryAnXaxisCone, _BoundaryAnYaxisCone, _BoundaryAnZaxisCone, _BoundaryAngle, \ + _BoundaryAnXorigCone, _BoundaryAnYorigCone, _BoundaryAnYorigCone); + break; + } + case 4 : // il s agit d un cone defini par les 2 rayons + { + aBoundaryAn = myHomardGen->CreateBoundaryConeR(CORBA::string_dup(_Name.toStdString().c_str()), \ + _BoundaryAnXcone1, _BoundaryAnYcone1, _BoundaryAnZcone1, _BoundaryAnRayon1, \ + _BoundaryAnXcone2, _BoundaryAnYcone2, _BoundaryAnZcone2, _BoundaryAnRayon2); + break; + } + case 5 : // il s agit d un tore + { + aBoundaryAn->SetTorus(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon1, _BoundaryAnRayon2 ); + break; + } + } + if (Chgt) myHomardGen->InvalideBoundary(_Name.toStdString().c_str()); + //HOMARD_UTILS::updateObjBrowser(); + return true; +} + +// -------------------------------------------------------------------------------------- +/* Constructs a SMESH_EditBoundaryCAO + herite de SMESH_CreateBoundaryCAO +*/ +// -------------------------------------------------------------------------------------- +SMESH_EditBoundaryCAO::SMESH_EditBoundaryCAO( SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName, QString Name): + SMESH_CreateBoundaryCAO(parent, modal, myHomardGen0, caseName, Name) +{ + MESSAGE("Debut de Boundary pour " << Name.toStdString().c_str()); + setWindowTitle(QObject::tr("HOM_BOUN_C_EDIT_WINDOW_TITLE")); + try { + aBoundary = myHomardGen->GetBoundary(CORBA::string_dup(_aName.toStdString().c_str())); + InitValEdit(); + } + catch( SALOME::SALOME_Exception& S_ex ) { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr(CORBA::string_dup(S_ex.details.text)) ); + return; + } + + SMESHHOMARD::ListGroupType_var maListe = aBoundary->GetGroups(); + for ( int i = 0; i < maListe->length(); i++ ) + _listeGroupesBoundary << QString(maListe[i]); + +} +// ------------------------------ +SMESH_EditBoundaryCAO::~SMESH_EditBoundaryCAO() +// ------------------------------ +{ +} +// ------------------------------ +void SMESH_EditBoundaryCAO::InitValEdit() +// ------------------------------ +{ + LEName->setText(_aName); + LEName->setReadOnly(true); + + QString aDataFile = aBoundary->GetDataFile(); + LEFileName->setText(aDataFile); + LEFileName->setReadOnly(1); + PushFichier->setVisible(0); +// + adjustSize(); +} +// ------------------------------ +bool SMESH_EditBoundaryCAO::PushOnApply() +// ------------------------------ +{ + return true; +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryCAO::SetFiltrage() +// ------------------------------------------------------------------------ +{ + if (!CBGroupe->isChecked()) return; + //SMESHHOMARD::HOMARD_Cas_var monCas = myHomardGen->GetCase(); + //SMESHHOMARD::ListGroupType_var _listeGroupesCas = monCas->GetGroups(); + + SMESH_EditListGroupCAO *aDlg = new SMESH_EditListGroupCAO + (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), + "Case_1", _listeGroupesBoundary) ; + aDlg->show(); +} + +// ------------------------------------------------------------------------------------ +/* Constructs a SMESH_EditBoundaryDi + herite de SMESH_CreateBoundaryDi +*/ +// ------------------------------------------------------------------------------------ +SMESH_EditBoundaryDi::SMESH_EditBoundaryDi( SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName, QString Name): + SMESH_CreateBoundaryDi(parent, modal, myHomardGen0, caseName, Name) +{ + MESSAGE("Debut de Boundary pour " << Name.toStdString().c_str()); + setWindowTitle(QObject::tr("HOM_BOUN_D_EDIT_WINDOW_TITLE")); + try { + aBoundary = myHomardGen->GetBoundary(CORBA::string_dup(_aName.toStdString().c_str())); + InitValEdit(); + } + catch( SALOME::SALOME_Exception& S_ex ) { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr(CORBA::string_dup(S_ex.details.text)) ); + return; + } + + SMESHHOMARD::ListGroupType_var maListe = aBoundary->GetGroups(); + for ( int i = 0; i < maListe->length(); i++ ) + _listeGroupesBoundary << QString(maListe[i]); + +} +// ------------------------------ +SMESH_EditBoundaryDi::~SMESH_EditBoundaryDi() +// ------------------------------ +{ +} +// ------------------------------ +void SMESH_EditBoundaryDi::InitValEdit() +// ------------------------------ +{ + LEName->setText(_aName); + LEName->setReadOnly(true); + + QString aDataFile = aBoundary->GetDataFile(); + LEFileName->setText(aDataFile); + LEFileName->setReadOnly(1); + PushFichier->setVisible(0); +// + adjustSize(); +} +// ------------------------------ +bool SMESH_EditBoundaryDi::PushOnApply() +// ------------------------------ +{ + return true; +} +// ------------------------------------------------------------------------ +void SMESH_EditBoundaryDi::SetFiltrage() +// // ------------------------------------------------------------------------ +{ + if (!CBGroupe->isChecked()) return; + SMESHHOMARD::HOMARD_Cas_var monCas = myHomardGen->GetCase(); + SMESHHOMARD::ListGroupType_var _listeGroupesCas = monCas->GetGroups(); + + SMESH_EditListGroup *aDlg = new SMESH_EditListGroup + (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), + "Case_1", _listeGroupesBoundary); + aDlg->show(); +} diff --git a/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.h b/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.h new file mode 100644 index 000000000..b327ec646 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.h @@ -0,0 +1,1244 @@ +// Copyright (C) 2011-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef MON_CREATEBOUNDARY_H +#define MON_CREATEBOUNDARY_H + +#include "SMESH_SMESHGUI.hxx" + +#include +#include + +#include CORBA_CLIENT_HEADER(SMESH_Homard) + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SMESHGUI_HomardAdaptDlg; + +class SMESH_Ui_CreateBoundaryAn +{ +public: + QGridLayout *gridLayout_5; + QLabel *Name; + QLineEdit *LEName; + QGroupBox *TypeBoundary; + QGridLayout *gridLayout; + QRadioButton *RBCylindre; + QRadioButton *RBSphere; + QRadioButton *RBCone; + QRadioButton *RBTore; + QGroupBox *gBCylindre; + QGridLayout *gridLayout1; + QDoubleSpinBox *SpinBox_Xcent; + QLabel *TLXcent; + QDoubleSpinBox *SpinBox_Radius; + QDoubleSpinBox *SpinBox_Zcent; + QLabel *TLradius; + QLabel *TLZcent; + QLabel *TLYcent; + QDoubleSpinBox *SpinBox_Ycent; + QLabel *TLXaxis; + QLabel *TLYaxis; + QLabel *TLZaxis; + QDoubleSpinBox *SpinBox_Zaxis; + QDoubleSpinBox *SpinBox_Yaxis; + QDoubleSpinBox *SpinBox_Xaxis; + QGroupBox *gBSphere; + QGridLayout *gridLayout2; + QDoubleSpinBox *SpinBox_Rayon; + QDoubleSpinBox *SpinBox_Zcentre; + QLabel *TLRayon; + QLabel *TLZcentre; + QLabel *TLYcentre; + QDoubleSpinBox *SpinBox_Ycentre; + QDoubleSpinBox *SpinBox_Xcentre; + QLabel *TLXcentre; + QGroupBox *gBCone; + QGridLayout *gridLayout_3; + QGroupBox *groupBox; + QGridLayout *gridLayout_2; + QRadioButton *RB_Def_radius; + QRadioButton *RB_Def_angle; + QLabel *TLCone_X1; + QDoubleSpinBox *SpinBox_Cone_X1; + QLabel *TLCone_X2; + QDoubleSpinBox *SpinBox_Cone_X2; + QLabel *TLCone_Y1; + QDoubleSpinBox *SpinBox_Cone_Y1; + QLabel *TLCone_Y2; + QDoubleSpinBox *SpinBox_Cone_Y2; + QLabel *TLCone_Z1; + QDoubleSpinBox *SpinBox_Cone_Z1; + QLabel *TLCone_Z2; + QDoubleSpinBox *SpinBox_Cone_Z2; + QLabel *TLCone_V1; + QDoubleSpinBox *SpinBox_Cone_V1; + QLabel *TLCone_V2; + QDoubleSpinBox *SpinBox_Cone_V2; + QGroupBox *gBTore; + QGridLayout *gridLayout_4; + QLabel *TLToreXcent; + QDoubleSpinBox *SpinBoxToreXcent; + QLabel *TLToreXaxe; + QDoubleSpinBox *SpinBoxToreXaxe; + QLabel *TLToreYcent; + QDoubleSpinBox *SpinBoxToreYcent; + QLabel *TLToreYaxe; + QDoubleSpinBox *SpinBoxToreYaxe; + QLabel *TLToreZcent; + QDoubleSpinBox *SpinBoxToreZcent; + QLabel *TLToreZaxe; + QDoubleSpinBox *SpinBoxToreZaxe; + QLabel *TLToreRayRev; + QDoubleSpinBox *SpinBoxToreRRev; + QLabel *TLToreRayPri; + QDoubleSpinBox *SpinBoxToreRPri; + QGroupBox *GBButtons; + QGridLayout *gridLayout3; + QPushButton *buttonHelp; + QPushButton *buttonCancel; + QPushButton *buttonApply; + QPushButton *buttonOk; + + void setupUi(QDialog *CreateBoundaryAn) + { + if (CreateBoundaryAn->objectName().isEmpty()) + CreateBoundaryAn->setObjectName(QString::fromUtf8("CreateBoundaryAn")); + CreateBoundaryAn->resize(522, 835); + CreateBoundaryAn->setAutoFillBackground(true); + CreateBoundaryAn->setSizeGripEnabled(true); + gridLayout_5 = new QGridLayout(CreateBoundaryAn); + gridLayout_5->setObjectName(QString::fromUtf8("gridLayout_5")); + Name = new QLabel(CreateBoundaryAn); + Name->setObjectName(QString::fromUtf8("Name")); + + gridLayout_5->addWidget(Name, 0, 0, 1, 1); + + LEName = new QLineEdit(CreateBoundaryAn); + LEName->setObjectName(QString::fromUtf8("LEName")); + LEName->setMaxLength(32); + + gridLayout_5->addWidget(LEName, 0, 1, 1, 1); + + TypeBoundary = new QGroupBox(CreateBoundaryAn); + TypeBoundary->setObjectName(QString::fromUtf8("TypeBoundary")); + QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(TypeBoundary->sizePolicy().hasHeightForWidth()); + TypeBoundary->setSizePolicy(sizePolicy); + TypeBoundary->setMinimumSize(QSize(340, 0)); + gridLayout = new QGridLayout(TypeBoundary); + gridLayout->setObjectName(QString::fromUtf8("gridLayout")); + RBCylindre = new QRadioButton(TypeBoundary); + RBCylindre->setObjectName(QString::fromUtf8("RBCylindre")); + QIcon icon; + icon.addFile(QString::fromUtf8("../../resources/cylinderpointvector.png"), QSize(), QIcon::Normal, QIcon::Off); + RBCylindre->setIcon(icon); + RBCylindre->setCheckable(true); + RBCylindre->setChecked(true); + + gridLayout->addWidget(RBCylindre, 0, 0, 1, 1); + + RBSphere = new QRadioButton(TypeBoundary); + RBSphere->setObjectName(QString::fromUtf8("RBSphere")); + QIcon icon1; + icon1.addFile(QString::fromUtf8("../../resources/zone_spherepoint.png"), QSize(), QIcon::Normal, QIcon::Off); + RBSphere->setIcon(icon1); + + gridLayout->addWidget(RBSphere, 0, 1, 1, 1); + + RBCone = new QRadioButton(TypeBoundary); + RBCone->setObjectName(QString::fromUtf8("RBCone")); + QIcon icon2; + icon2.addFile(QString::fromUtf8("../../resources/cone.png"), QSize(), QIcon::Normal, QIcon::Off); + RBCone->setIcon(icon2); + + gridLayout->addWidget(RBCone, 0, 2, 1, 1); + + RBTore = new QRadioButton(TypeBoundary); + RBTore->setObjectName(QString::fromUtf8("RBTore")); + QIcon icon3; + icon3.addFile(QString::fromUtf8("../../resources/toruspointvector.png"), QSize(), QIcon::Normal, QIcon::Off); + RBTore->setIcon(icon3); + RBTore->setCheckable(true); + RBTore->setChecked(false); + + gridLayout->addWidget(RBTore, 0, 3, 1, 1); + + + gridLayout_5->addWidget(TypeBoundary, 1, 0, 1, 2); + + gBCylindre = new QGroupBox(CreateBoundaryAn); + gBCylindre->setObjectName(QString::fromUtf8("gBCylindre")); + sizePolicy.setHeightForWidth(gBCylindre->sizePolicy().hasHeightForWidth()); + gBCylindre->setSizePolicy(sizePolicy); + gridLayout1 = new QGridLayout(gBCylindre); +#ifndef Q_OS_MAC + gridLayout1->setSpacing(6); +#endif +#ifndef Q_OS_MAC + gridLayout1->setContentsMargins(9, 9, 9, 9); +#endif + gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); + SpinBox_Xcent = new QDoubleSpinBox(gBCylindre); + SpinBox_Xcent->setObjectName(QString::fromUtf8("SpinBox_Xcent")); + SpinBox_Xcent->setDecimals(5); + SpinBox_Xcent->setMinimum(-999999999.000000000000000); + SpinBox_Xcent->setMaximum(999999999.000000000000000); + SpinBox_Xcent->setValue(0.000000000000000); + + gridLayout1->addWidget(SpinBox_Xcent, 0, 1, 1, 1); + + TLXcent = new QLabel(gBCylindre); + TLXcent->setObjectName(QString::fromUtf8("TLXcent")); + sizePolicy.setHeightForWidth(TLXcent->sizePolicy().hasHeightForWidth()); + TLXcent->setSizePolicy(sizePolicy); + TLXcent->setWordWrap(false); + + gridLayout1->addWidget(TLXcent, 0, 0, 1, 1); + + SpinBox_Radius = new QDoubleSpinBox(gBCylindre); + SpinBox_Radius->setObjectName(QString::fromUtf8("SpinBox_Radius")); + SpinBox_Radius->setDecimals(5); + SpinBox_Radius->setMaximum(1000000000.000000000000000); + + gridLayout1->addWidget(SpinBox_Radius, 3, 1, 1, 2); + + SpinBox_Zcent = new QDoubleSpinBox(gBCylindre); + SpinBox_Zcent->setObjectName(QString::fromUtf8("SpinBox_Zcent")); + SpinBox_Zcent->setDecimals(5); + SpinBox_Zcent->setMinimum(-999999999.000000000000000); + SpinBox_Zcent->setMaximum(999999999.000000000000000); + SpinBox_Zcent->setValue(0.000000000000000); + + gridLayout1->addWidget(SpinBox_Zcent, 2, 1, 1, 1); + + TLradius = new QLabel(gBCylindre); + TLradius->setObjectName(QString::fromUtf8("TLradius")); + sizePolicy.setHeightForWidth(TLradius->sizePolicy().hasHeightForWidth()); + TLradius->setSizePolicy(sizePolicy); + TLradius->setWordWrap(false); + + gridLayout1->addWidget(TLradius, 3, 0, 1, 1); + + TLZcent = new QLabel(gBCylindre); + TLZcent->setObjectName(QString::fromUtf8("TLZcent")); + sizePolicy.setHeightForWidth(TLZcent->sizePolicy().hasHeightForWidth()); + TLZcent->setSizePolicy(sizePolicy); + TLZcent->setWordWrap(false); + + gridLayout1->addWidget(TLZcent, 2, 0, 1, 1); + + TLYcent = new QLabel(gBCylindre); + TLYcent->setObjectName(QString::fromUtf8("TLYcent")); + sizePolicy.setHeightForWidth(TLYcent->sizePolicy().hasHeightForWidth()); + TLYcent->setSizePolicy(sizePolicy); + TLYcent->setWordWrap(false); + + gridLayout1->addWidget(TLYcent, 1, 0, 1, 1); + + SpinBox_Ycent = new QDoubleSpinBox(gBCylindre); + SpinBox_Ycent->setObjectName(QString::fromUtf8("SpinBox_Ycent")); + SpinBox_Ycent->setDecimals(5); + SpinBox_Ycent->setMinimum(-999999999.000000000000000); + SpinBox_Ycent->setMaximum(999999999.000000000000000); + SpinBox_Ycent->setValue(0.000000000000000); + + gridLayout1->addWidget(SpinBox_Ycent, 1, 1, 1, 1); + + TLXaxis = new QLabel(gBCylindre); + TLXaxis->setObjectName(QString::fromUtf8("TLXaxis")); + sizePolicy.setHeightForWidth(TLXaxis->sizePolicy().hasHeightForWidth()); + TLXaxis->setSizePolicy(sizePolicy); + TLXaxis->setWordWrap(false); + + gridLayout1->addWidget(TLXaxis, 0, 2, 1, 1); + + TLYaxis = new QLabel(gBCylindre); + TLYaxis->setObjectName(QString::fromUtf8("TLYaxis")); + sizePolicy.setHeightForWidth(TLYaxis->sizePolicy().hasHeightForWidth()); + TLYaxis->setSizePolicy(sizePolicy); + TLYaxis->setWordWrap(false); + + gridLayout1->addWidget(TLYaxis, 1, 2, 1, 1); + + TLZaxis = new QLabel(gBCylindre); + TLZaxis->setObjectName(QString::fromUtf8("TLZaxis")); + sizePolicy.setHeightForWidth(TLZaxis->sizePolicy().hasHeightForWidth()); + TLZaxis->setSizePolicy(sizePolicy); + TLZaxis->setWordWrap(false); + + gridLayout1->addWidget(TLZaxis, 2, 2, 1, 1); + + SpinBox_Zaxis = new QDoubleSpinBox(gBCylindre); + SpinBox_Zaxis->setObjectName(QString::fromUtf8("SpinBox_Zaxis")); + SpinBox_Zaxis->setDecimals(5); + SpinBox_Zaxis->setMinimum(-999999999.000000000000000); + SpinBox_Zaxis->setMaximum(999999999.000000000000000); + SpinBox_Zaxis->setValue(0.000000000000000); + + gridLayout1->addWidget(SpinBox_Zaxis, 2, 3, 1, 1); + + SpinBox_Yaxis = new QDoubleSpinBox(gBCylindre); + SpinBox_Yaxis->setObjectName(QString::fromUtf8("SpinBox_Yaxis")); + SpinBox_Yaxis->setDecimals(5); + SpinBox_Yaxis->setMinimum(-999999999.000000000000000); + SpinBox_Yaxis->setMaximum(999999999.000000000000000); + SpinBox_Yaxis->setValue(0.000000000000000); + + gridLayout1->addWidget(SpinBox_Yaxis, 1, 3, 1, 1); + + SpinBox_Xaxis = new QDoubleSpinBox(gBCylindre); + SpinBox_Xaxis->setObjectName(QString::fromUtf8("SpinBox_Xaxis")); + SpinBox_Xaxis->setDecimals(5); + SpinBox_Xaxis->setMinimum(-999999999.000000000000000); + SpinBox_Xaxis->setMaximum(999999999.000000000000000); + SpinBox_Xaxis->setValue(0.000000000000000); + + gridLayout1->addWidget(SpinBox_Xaxis, 0, 3, 1, 1); + + + gridLayout_5->addWidget(gBCylindre, 2, 0, 1, 2); + + gBSphere = new QGroupBox(CreateBoundaryAn); + gBSphere->setObjectName(QString::fromUtf8("gBSphere")); + sizePolicy.setHeightForWidth(gBSphere->sizePolicy().hasHeightForWidth()); + gBSphere->setSizePolicy(sizePolicy); + gridLayout2 = new QGridLayout(gBSphere); +#ifndef Q_OS_MAC + gridLayout2->setSpacing(6); +#endif +#ifndef Q_OS_MAC + gridLayout2->setContentsMargins(9, 9, 9, 9); +#endif + gridLayout2->setObjectName(QString::fromUtf8("gridLayout2")); + SpinBox_Rayon = new QDoubleSpinBox(gBSphere); + SpinBox_Rayon->setObjectName(QString::fromUtf8("SpinBox_Rayon")); + SpinBox_Rayon->setDecimals(5); + SpinBox_Rayon->setMinimum(0.000000000000000); + SpinBox_Rayon->setMaximum(999999999.000000000000000); + SpinBox_Rayon->setValue(0.000000000000000); + + gridLayout2->addWidget(SpinBox_Rayon, 1, 3, 1, 1); + + SpinBox_Zcentre = new QDoubleSpinBox(gBSphere); + SpinBox_Zcentre->setObjectName(QString::fromUtf8("SpinBox_Zcentre")); + SpinBox_Zcentre->setDecimals(5); + SpinBox_Zcentre->setMinimum(-999999999.000000000000000); + SpinBox_Zcentre->setMaximum(999999999.000000000000000); + SpinBox_Zcentre->setValue(0.000000000000000); + + gridLayout2->addWidget(SpinBox_Zcentre, 2, 1, 1, 1); + + TLRayon = new QLabel(gBSphere); + TLRayon->setObjectName(QString::fromUtf8("TLRayon")); + sizePolicy.setHeightForWidth(TLRayon->sizePolicy().hasHeightForWidth()); + TLRayon->setSizePolicy(sizePolicy); + TLRayon->setWordWrap(false); + + gridLayout2->addWidget(TLRayon, 1, 2, 1, 1); + + TLZcentre = new QLabel(gBSphere); + TLZcentre->setObjectName(QString::fromUtf8("TLZcentre")); + sizePolicy.setHeightForWidth(TLZcentre->sizePolicy().hasHeightForWidth()); + TLZcentre->setSizePolicy(sizePolicy); + TLZcentre->setWordWrap(false); + + gridLayout2->addWidget(TLZcentre, 2, 0, 1, 1); + + TLYcentre = new QLabel(gBSphere); + TLYcentre->setObjectName(QString::fromUtf8("TLYcentre")); + sizePolicy.setHeightForWidth(TLYcentre->sizePolicy().hasHeightForWidth()); + TLYcentre->setSizePolicy(sizePolicy); + TLYcentre->setWordWrap(false); + + gridLayout2->addWidget(TLYcentre, 1, 0, 1, 1); + + SpinBox_Ycentre = new QDoubleSpinBox(gBSphere); + SpinBox_Ycentre->setObjectName(QString::fromUtf8("SpinBox_Ycentre")); + SpinBox_Ycentre->setDecimals(5); + SpinBox_Ycentre->setMinimum(-999999999.000000000000000); + SpinBox_Ycentre->setMaximum(999999999.000000000000000); + SpinBox_Ycentre->setValue(0.000000000000000); + + gridLayout2->addWidget(SpinBox_Ycentre, 1, 1, 1, 1); + + SpinBox_Xcentre = new QDoubleSpinBox(gBSphere); + SpinBox_Xcentre->setObjectName(QString::fromUtf8("SpinBox_Xcentre")); + SpinBox_Xcentre->setDecimals(5); + SpinBox_Xcentre->setMinimum(-999999999.000000000000000); + SpinBox_Xcentre->setMaximum(999999999.000000000000000); + SpinBox_Xcentre->setValue(0.000000000000000); + + gridLayout2->addWidget(SpinBox_Xcentre, 0, 1, 1, 1); + + TLXcentre = new QLabel(gBSphere); + TLXcentre->setObjectName(QString::fromUtf8("TLXcentre")); + sizePolicy.setHeightForWidth(TLXcentre->sizePolicy().hasHeightForWidth()); + TLXcentre->setSizePolicy(sizePolicy); + TLXcentre->setWordWrap(false); + + gridLayout2->addWidget(TLXcentre, 0, 0, 1, 1); + + + gridLayout_5->addWidget(gBSphere, 3, 0, 1, 2); + + gBCone = new QGroupBox(CreateBoundaryAn); + gBCone->setObjectName(QString::fromUtf8("gBCone")); + sizePolicy.setHeightForWidth(gBCone->sizePolicy().hasHeightForWidth()); + gBCone->setSizePolicy(sizePolicy); + gridLayout_3 = new QGridLayout(gBCone); + gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3")); + groupBox = new QGroupBox(gBCone); + groupBox->setObjectName(QString::fromUtf8("groupBox")); + gridLayout_2 = new QGridLayout(groupBox); + gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2")); + RB_Def_radius = new QRadioButton(groupBox); + RB_Def_radius->setObjectName(QString::fromUtf8("RB_Def_radius")); + QIcon icon4; + icon4.addFile(QString::fromUtf8("../../resources/conedxyz.png"), QSize(), QIcon::Normal, QIcon::Off); + RB_Def_radius->setIcon(icon4); + RB_Def_radius->setChecked(true); + + gridLayout_2->addWidget(RB_Def_radius, 0, 0, 1, 1); + + RB_Def_angle = new QRadioButton(groupBox); + RB_Def_angle->setObjectName(QString::fromUtf8("RB_Def_angle")); + QIcon icon5; + icon5.addFile(QString::fromUtf8("../../resources/conepointvector.png"), QSize(), QIcon::Normal, QIcon::Off); + RB_Def_angle->setIcon(icon5); + + gridLayout_2->addWidget(RB_Def_angle, 0, 1, 1, 1); + + + gridLayout_3->addWidget(groupBox, 0, 0, 1, 2); + + TLCone_X1 = new QLabel(gBCone); + TLCone_X1->setObjectName(QString::fromUtf8("TLCone_X1")); + sizePolicy.setHeightForWidth(TLCone_X1->sizePolicy().hasHeightForWidth()); + TLCone_X1->setSizePolicy(sizePolicy); + TLCone_X1->setWordWrap(false); + + gridLayout_3->addWidget(TLCone_X1, 1, 0, 1, 1); + + SpinBox_Cone_X1 = new QDoubleSpinBox(gBCone); + SpinBox_Cone_X1->setObjectName(QString::fromUtf8("SpinBox_Cone_X1")); + SpinBox_Cone_X1->setDecimals(5); + SpinBox_Cone_X1->setMinimum(-999999999.000000000000000); + SpinBox_Cone_X1->setMaximum(999999999.000000000000000); + SpinBox_Cone_X1->setValue(0.000000000000000); + + gridLayout_3->addWidget(SpinBox_Cone_X1, 1, 1, 1, 1); + + TLCone_X2 = new QLabel(gBCone); + TLCone_X2->setObjectName(QString::fromUtf8("TLCone_X2")); + sizePolicy.setHeightForWidth(TLCone_X2->sizePolicy().hasHeightForWidth()); + TLCone_X2->setSizePolicy(sizePolicy); + TLCone_X2->setWordWrap(false); + + gridLayout_3->addWidget(TLCone_X2, 1, 2, 1, 1); + + SpinBox_Cone_X2 = new QDoubleSpinBox(gBCone); + SpinBox_Cone_X2->setObjectName(QString::fromUtf8("SpinBox_Cone_X2")); + SpinBox_Cone_X2->setDecimals(5); + SpinBox_Cone_X2->setMinimum(-999999999.000000000000000); + SpinBox_Cone_X2->setMaximum(999999999.000000000000000); + SpinBox_Cone_X2->setValue(0.000000000000000); + + gridLayout_3->addWidget(SpinBox_Cone_X2, 1, 3, 1, 1); + + TLCone_Y1 = new QLabel(gBCone); + TLCone_Y1->setObjectName(QString::fromUtf8("TLCone_Y1")); + sizePolicy.setHeightForWidth(TLCone_Y1->sizePolicy().hasHeightForWidth()); + TLCone_Y1->setSizePolicy(sizePolicy); + TLCone_Y1->setWordWrap(false); + + gridLayout_3->addWidget(TLCone_Y1, 2, 0, 1, 1); + + SpinBox_Cone_Y1 = new QDoubleSpinBox(gBCone); + SpinBox_Cone_Y1->setObjectName(QString::fromUtf8("SpinBox_Cone_Y1")); + SpinBox_Cone_Y1->setDecimals(5); + SpinBox_Cone_Y1->setMinimum(-999999999.000000000000000); + SpinBox_Cone_Y1->setMaximum(999999999.000000000000000); + SpinBox_Cone_Y1->setValue(0.000000000000000); + + gridLayout_3->addWidget(SpinBox_Cone_Y1, 2, 1, 1, 1); + + TLCone_Y2 = new QLabel(gBCone); + TLCone_Y2->setObjectName(QString::fromUtf8("TLCone_Y2")); + sizePolicy.setHeightForWidth(TLCone_Y2->sizePolicy().hasHeightForWidth()); + TLCone_Y2->setSizePolicy(sizePolicy); + TLCone_Y2->setWordWrap(false); + + gridLayout_3->addWidget(TLCone_Y2, 2, 2, 1, 1); + + SpinBox_Cone_Y2 = new QDoubleSpinBox(gBCone); + SpinBox_Cone_Y2->setObjectName(QString::fromUtf8("SpinBox_Cone_Y2")); + SpinBox_Cone_Y2->setDecimals(5); + SpinBox_Cone_Y2->setMinimum(-999999999.000000000000000); + SpinBox_Cone_Y2->setMaximum(999999999.000000000000000); + SpinBox_Cone_Y2->setValue(0.000000000000000); + + gridLayout_3->addWidget(SpinBox_Cone_Y2, 2, 3, 1, 1); + + TLCone_Z1 = new QLabel(gBCone); + TLCone_Z1->setObjectName(QString::fromUtf8("TLCone_Z1")); + sizePolicy.setHeightForWidth(TLCone_Z1->sizePolicy().hasHeightForWidth()); + TLCone_Z1->setSizePolicy(sizePolicy); + TLCone_Z1->setWordWrap(false); + + gridLayout_3->addWidget(TLCone_Z1, 3, 0, 1, 1); + + SpinBox_Cone_Z1 = new QDoubleSpinBox(gBCone); + SpinBox_Cone_Z1->setObjectName(QString::fromUtf8("SpinBox_Cone_Z1")); + SpinBox_Cone_Z1->setDecimals(5); + SpinBox_Cone_Z1->setMinimum(-999999999.000000000000000); + SpinBox_Cone_Z1->setMaximum(999999999.000000000000000); + SpinBox_Cone_Z1->setValue(0.000000000000000); + + gridLayout_3->addWidget(SpinBox_Cone_Z1, 3, 1, 1, 1); + + TLCone_Z2 = new QLabel(gBCone); + TLCone_Z2->setObjectName(QString::fromUtf8("TLCone_Z2")); + sizePolicy.setHeightForWidth(TLCone_Z2->sizePolicy().hasHeightForWidth()); + TLCone_Z2->setSizePolicy(sizePolicy); + TLCone_Z2->setWordWrap(false); + + gridLayout_3->addWidget(TLCone_Z2, 3, 2, 1, 1); + + SpinBox_Cone_Z2 = new QDoubleSpinBox(gBCone); + SpinBox_Cone_Z2->setObjectName(QString::fromUtf8("SpinBox_Cone_Z2")); + SpinBox_Cone_Z2->setDecimals(5); + SpinBox_Cone_Z2->setMinimum(-999999999.000000000000000); + SpinBox_Cone_Z2->setMaximum(999999999.000000000000000); + SpinBox_Cone_Z2->setValue(0.000000000000000); + + gridLayout_3->addWidget(SpinBox_Cone_Z2, 3, 3, 1, 1); + + TLCone_V1 = new QLabel(gBCone); + TLCone_V1->setObjectName(QString::fromUtf8("TLCone_V1")); + sizePolicy.setHeightForWidth(TLCone_V1->sizePolicy().hasHeightForWidth()); + TLCone_V1->setSizePolicy(sizePolicy); + TLCone_V1->setWordWrap(false); + + gridLayout_3->addWidget(TLCone_V1, 4, 0, 1, 1); + + SpinBox_Cone_V1 = new QDoubleSpinBox(gBCone); + SpinBox_Cone_V1->setObjectName(QString::fromUtf8("SpinBox_Cone_V1")); + SpinBox_Cone_V1->setDecimals(5); + SpinBox_Cone_V1->setMaximum(1000000000.000000000000000); + + gridLayout_3->addWidget(SpinBox_Cone_V1, 4, 1, 1, 1); + + TLCone_V2 = new QLabel(gBCone); + TLCone_V2->setObjectName(QString::fromUtf8("TLCone_V2")); + sizePolicy.setHeightForWidth(TLCone_V2->sizePolicy().hasHeightForWidth()); + TLCone_V2->setSizePolicy(sizePolicy); + TLCone_V2->setWordWrap(false); + + gridLayout_3->addWidget(TLCone_V2, 4, 2, 1, 1); + + SpinBox_Cone_V2 = new QDoubleSpinBox(gBCone); + SpinBox_Cone_V2->setObjectName(QString::fromUtf8("SpinBox_Cone_V2")); + SpinBox_Cone_V2->setDecimals(5); + SpinBox_Cone_V2->setMaximum(1000000000.000000000000000); + + gridLayout_3->addWidget(SpinBox_Cone_V2, 4, 3, 1, 1); + + + gridLayout_5->addWidget(gBCone, 4, 0, 1, 2); + + gBTore = new QGroupBox(CreateBoundaryAn); + gBTore->setObjectName(QString::fromUtf8("gBTore")); + sizePolicy.setHeightForWidth(gBTore->sizePolicy().hasHeightForWidth()); + gBTore->setSizePolicy(sizePolicy); + gridLayout_4 = new QGridLayout(gBTore); + gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4")); + TLToreXcent = new QLabel(gBTore); + TLToreXcent->setObjectName(QString::fromUtf8("TLToreXcent")); + sizePolicy.setHeightForWidth(TLToreXcent->sizePolicy().hasHeightForWidth()); + TLToreXcent->setSizePolicy(sizePolicy); + TLToreXcent->setWordWrap(false); + + gridLayout_4->addWidget(TLToreXcent, 0, 0, 1, 1); + + SpinBoxToreXcent = new QDoubleSpinBox(gBTore); + SpinBoxToreXcent->setObjectName(QString::fromUtf8("SpinBoxToreXcent")); + SpinBoxToreXcent->setDecimals(5); + SpinBoxToreXcent->setMinimum(-999999999.000000000000000); + SpinBoxToreXcent->setMaximum(999999999.000000000000000); + SpinBoxToreXcent->setValue(0.000000000000000); + + gridLayout_4->addWidget(SpinBoxToreXcent, 0, 1, 1, 1); + + TLToreXaxe = new QLabel(gBTore); + TLToreXaxe->setObjectName(QString::fromUtf8("TLToreXaxe")); + sizePolicy.setHeightForWidth(TLToreXaxe->sizePolicy().hasHeightForWidth()); + TLToreXaxe->setSizePolicy(sizePolicy); + TLToreXaxe->setWordWrap(false); + + gridLayout_4->addWidget(TLToreXaxe, 0, 2, 1, 1); + + SpinBoxToreXaxe = new QDoubleSpinBox(gBTore); + SpinBoxToreXaxe->setObjectName(QString::fromUtf8("SpinBoxToreXaxe")); + SpinBoxToreXaxe->setDecimals(5); + SpinBoxToreXaxe->setMinimum(-999999999.000000000000000); + SpinBoxToreXaxe->setMaximum(999999999.000000000000000); + SpinBoxToreXaxe->setValue(0.000000000000000); + + gridLayout_4->addWidget(SpinBoxToreXaxe, 0, 3, 1, 1); + + TLToreYcent = new QLabel(gBTore); + TLToreYcent->setObjectName(QString::fromUtf8("TLToreYcent")); + sizePolicy.setHeightForWidth(TLToreYcent->sizePolicy().hasHeightForWidth()); + TLToreYcent->setSizePolicy(sizePolicy); + TLToreYcent->setWordWrap(false); + + gridLayout_4->addWidget(TLToreYcent, 1, 0, 1, 1); + + SpinBoxToreYcent = new QDoubleSpinBox(gBTore); + SpinBoxToreYcent->setObjectName(QString::fromUtf8("SpinBoxToreYcent")); + SpinBoxToreYcent->setDecimals(5); + SpinBoxToreYcent->setMinimum(-999999999.000000000000000); + SpinBoxToreYcent->setMaximum(999999999.000000000000000); + SpinBoxToreYcent->setValue(0.000000000000000); + + gridLayout_4->addWidget(SpinBoxToreYcent, 1, 1, 1, 1); + + TLToreYaxe = new QLabel(gBTore); + TLToreYaxe->setObjectName(QString::fromUtf8("TLToreYaxe")); + sizePolicy.setHeightForWidth(TLToreYaxe->sizePolicy().hasHeightForWidth()); + TLToreYaxe->setSizePolicy(sizePolicy); + TLToreYaxe->setWordWrap(false); + + gridLayout_4->addWidget(TLToreYaxe, 1, 2, 1, 1); + + SpinBoxToreYaxe = new QDoubleSpinBox(gBTore); + SpinBoxToreYaxe->setObjectName(QString::fromUtf8("SpinBoxToreYaxe")); + SpinBoxToreYaxe->setDecimals(5); + SpinBoxToreYaxe->setMinimum(-999999999.000000000000000); + SpinBoxToreYaxe->setMaximum(999999999.000000000000000); + SpinBoxToreYaxe->setValue(0.000000000000000); + + gridLayout_4->addWidget(SpinBoxToreYaxe, 1, 3, 1, 1); + + TLToreZcent = new QLabel(gBTore); + TLToreZcent->setObjectName(QString::fromUtf8("TLToreZcent")); + sizePolicy.setHeightForWidth(TLToreZcent->sizePolicy().hasHeightForWidth()); + TLToreZcent->setSizePolicy(sizePolicy); + TLToreZcent->setWordWrap(false); + + gridLayout_4->addWidget(TLToreZcent, 2, 0, 1, 1); + + SpinBoxToreZcent = new QDoubleSpinBox(gBTore); + SpinBoxToreZcent->setObjectName(QString::fromUtf8("SpinBoxToreZcent")); + SpinBoxToreZcent->setDecimals(5); + SpinBoxToreZcent->setMinimum(-999999999.000000000000000); + SpinBoxToreZcent->setMaximum(999999999.000000000000000); + SpinBoxToreZcent->setValue(0.000000000000000); + + gridLayout_4->addWidget(SpinBoxToreZcent, 2, 1, 1, 1); + + TLToreZaxe = new QLabel(gBTore); + TLToreZaxe->setObjectName(QString::fromUtf8("TLToreZaxe")); + sizePolicy.setHeightForWidth(TLToreZaxe->sizePolicy().hasHeightForWidth()); + TLToreZaxe->setSizePolicy(sizePolicy); + TLToreZaxe->setWordWrap(false); + + gridLayout_4->addWidget(TLToreZaxe, 2, 2, 1, 1); + + SpinBoxToreZaxe = new QDoubleSpinBox(gBTore); + SpinBoxToreZaxe->setObjectName(QString::fromUtf8("SpinBoxToreZaxe")); + SpinBoxToreZaxe->setDecimals(5); + SpinBoxToreZaxe->setMinimum(-999999999.000000000000000); + SpinBoxToreZaxe->setMaximum(999999999.000000000000000); + SpinBoxToreZaxe->setValue(0.000000000000000); + + gridLayout_4->addWidget(SpinBoxToreZaxe, 2, 3, 1, 1); + + TLToreRayRev = new QLabel(gBTore); + TLToreRayRev->setObjectName(QString::fromUtf8("TLToreRayRev")); + sizePolicy.setHeightForWidth(TLToreRayRev->sizePolicy().hasHeightForWidth()); + TLToreRayRev->setSizePolicy(sizePolicy); + TLToreRayRev->setWordWrap(false); + + gridLayout_4->addWidget(TLToreRayRev, 3, 0, 1, 1); + + SpinBoxToreRRev = new QDoubleSpinBox(gBTore); + SpinBoxToreRRev->setObjectName(QString::fromUtf8("SpinBoxToreRRev")); + SpinBoxToreRRev->setDecimals(5); + SpinBoxToreRRev->setMaximum(1000000000.000000000000000); + + gridLayout_4->addWidget(SpinBoxToreRRev, 3, 1, 1, 1); + + TLToreRayPri = new QLabel(gBTore); + TLToreRayPri->setObjectName(QString::fromUtf8("TLToreRayPri")); + sizePolicy.setHeightForWidth(TLToreRayPri->sizePolicy().hasHeightForWidth()); + TLToreRayPri->setSizePolicy(sizePolicy); + TLToreRayPri->setWordWrap(false); + + gridLayout_4->addWidget(TLToreRayPri, 3, 2, 1, 1); + + SpinBoxToreRPri = new QDoubleSpinBox(gBTore); + SpinBoxToreRPri->setObjectName(QString::fromUtf8("SpinBoxToreRPri")); + SpinBoxToreRPri->setDecimals(5); + SpinBoxToreRPri->setMaximum(1000000000.000000000000000); + + gridLayout_4->addWidget(SpinBoxToreRPri, 3, 3, 1, 1); + + + gridLayout_5->addWidget(gBTore, 5, 0, 1, 2); + + GBButtons = new QGroupBox(CreateBoundaryAn); + GBButtons->setObjectName(QString::fromUtf8("GBButtons")); + sizePolicy.setHeightForWidth(GBButtons->sizePolicy().hasHeightForWidth()); + GBButtons->setSizePolicy(sizePolicy); + gridLayout3 = new QGridLayout(GBButtons); +#ifndef Q_OS_MAC + gridLayout3->setSpacing(6); +#endif +#ifndef Q_OS_MAC + gridLayout3->setContentsMargins(9, 9, 9, 9); +#endif + gridLayout3->setObjectName(QString::fromUtf8("gridLayout3")); + buttonHelp = new QPushButton(GBButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + + gridLayout3->addWidget(buttonHelp, 0, 3, 1, 1); + + buttonCancel = new QPushButton(GBButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); + + gridLayout3->addWidget(buttonCancel, 0, 2, 1, 1); + + buttonApply = new QPushButton(GBButtons); + buttonApply->setObjectName(QString::fromUtf8("buttonApply")); + + gridLayout3->addWidget(buttonApply, 0, 1, 1, 1); + + buttonOk = new QPushButton(GBButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + + gridLayout3->addWidget(buttonOk, 0, 0, 1, 1); + + + gridLayout_5->addWidget(GBButtons, 6, 0, 1, 2); + + + retranslateUi(CreateBoundaryAn); + + QMetaObject::connectSlotsByName(CreateBoundaryAn); + } // setupUi + + void retranslateUi(QDialog *CreateBoundaryAn) + { + CreateBoundaryAn->setWindowTitle(QApplication::translate("CreateBoundaryAn", "Create an analytical boundary", nullptr)); + Name->setText(QApplication::translate("CreateBoundaryAn", "Name", nullptr)); + TypeBoundary->setTitle(QApplication::translate("CreateBoundaryAn", "Type of boundary", nullptr)); + RBCylindre->setText(QApplication::translate("CreateBoundaryAn", "Cylinder", nullptr)); + RBSphere->setText(QApplication::translate("CreateBoundaryAn", "Sphere", nullptr)); + RBCone->setText(QApplication::translate("CreateBoundaryAn", "Cone", nullptr)); + RBTore->setText(QApplication::translate("CreateBoundaryAn", "Torus", nullptr)); + gBCylindre->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates", nullptr)); + TLXcent->setText(QApplication::translate("CreateBoundaryAn", "X centre", nullptr)); + TLradius->setText(QApplication::translate("CreateBoundaryAn", "Radius", nullptr)); + TLZcent->setText(QApplication::translate("CreateBoundaryAn", "Z centre", nullptr)); + TLYcent->setText(QApplication::translate("CreateBoundaryAn", "Y centre", nullptr)); + TLXaxis->setText(QApplication::translate("CreateBoundaryAn", "X axis", nullptr)); + TLYaxis->setText(QApplication::translate("CreateBoundaryAn", "Y axis", nullptr)); + TLZaxis->setText(QApplication::translate("CreateBoundaryAn", "Z axis", nullptr)); + gBSphere->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates", nullptr)); + TLRayon->setText(QApplication::translate("CreateBoundaryAn", "Radius", nullptr)); + TLZcentre->setText(QApplication::translate("CreateBoundaryAn", "Z centre", nullptr)); + TLYcentre->setText(QApplication::translate("CreateBoundaryAn", "Y centre", nullptr)); + TLXcentre->setText(QApplication::translate("CreateBoundaryAn", "X centre", nullptr)); + gBCone->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates", nullptr)); + groupBox->setTitle(QApplication::translate("CreateBoundaryAn", "Definition", nullptr)); + RB_Def_radius->setText(QApplication::translate("CreateBoundaryAn", "Radius", nullptr)); + RB_Def_angle->setText(QApplication::translate("CreateBoundaryAn", "Angle", nullptr)); + TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X 1", nullptr)); + TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X 2", nullptr)); + TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y 1", nullptr)); + TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y 2", nullptr)); + TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z 1", nullptr)); + TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z 2", nullptr)); + TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "V 1", nullptr)); + TLCone_V2->setText(QApplication::translate("CreateBoundaryAn", "V 2", nullptr)); + gBTore->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates", nullptr)); + TLToreXcent->setText(QApplication::translate("CreateBoundaryAn", "X centre", nullptr)); + TLToreXaxe->setText(QApplication::translate("CreateBoundaryAn", "X axis", nullptr)); + TLToreYcent->setText(QApplication::translate("CreateBoundaryAn", "Y centre", nullptr)); + TLToreYaxe->setText(QApplication::translate("CreateBoundaryAn", "Y axis", nullptr)); + TLToreZcent->setText(QApplication::translate("CreateBoundaryAn", "Z centre", nullptr)); + TLToreZaxe->setText(QApplication::translate("CreateBoundaryAn", "Z axis", nullptr)); + TLToreRayRev->setText(QApplication::translate("CreateBoundaryAn", "R revolution", nullptr)); + TLToreRayPri->setText(QApplication::translate("CreateBoundaryAn", "Primary R", nullptr)); + GBButtons->setTitle(QString()); + buttonHelp->setText(QApplication::translate("CreateBoundaryAn", "Help", nullptr)); + buttonCancel->setText(QApplication::translate("CreateBoundaryAn", "Cancel", nullptr)); + buttonApply->setText(QApplication::translate("CreateBoundaryAn", "Apply", nullptr)); + buttonOk->setText(QApplication::translate("CreateBoundaryAn", "OK", nullptr)); + } // retranslateUi +}; + +class SMESH_Ui_CreateBoundaryCAO +{ +public: + QGridLayout *gridLayout; + QGroupBox *GBButtons; + QGridLayout *gridLayout1; + QPushButton *buttonHelp; + QPushButton *buttonCancel; + QPushButton *buttonApply; + QPushButton *buttonOk; + QCheckBox *CBGroupe; + QLineEdit *LEFileName; + QPushButton *PushFichier; + QLabel *XAO; + QLineEdit *LEName; + QLabel *Name; + + void setupUi(QDialog *CreateBoundaryCAO) + { + if (CreateBoundaryCAO->objectName().isEmpty()) + CreateBoundaryCAO->setObjectName(QString::fromUtf8("CreateBoundaryCAO")); + CreateBoundaryCAO->resize(566, 195); + QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(CreateBoundaryCAO->sizePolicy().hasHeightForWidth()); + CreateBoundaryCAO->setSizePolicy(sizePolicy); + CreateBoundaryCAO->setAutoFillBackground(true); + CreateBoundaryCAO->setSizeGripEnabled(true); + gridLayout = new QGridLayout(CreateBoundaryCAO); +#ifndef Q_OS_MAC + gridLayout->setSpacing(6); +#endif +#ifndef Q_OS_MAC + gridLayout->setContentsMargins(9, 9, 9, 9); +#endif + gridLayout->setObjectName(QString::fromUtf8("gridLayout")); + GBButtons = new QGroupBox(CreateBoundaryCAO); + GBButtons->setObjectName(QString::fromUtf8("GBButtons")); + gridLayout1 = new QGridLayout(GBButtons); +#ifndef Q_OS_MAC + gridLayout1->setSpacing(6); +#endif +#ifndef Q_OS_MAC + gridLayout1->setContentsMargins(9, 9, 9, 9); +#endif + gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); + buttonHelp = new QPushButton(GBButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + + gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1); + + buttonCancel = new QPushButton(GBButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); + + gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1); + + buttonApply = new QPushButton(GBButtons); + buttonApply->setObjectName(QString::fromUtf8("buttonApply")); + + gridLayout1->addWidget(buttonApply, 0, 1, 1, 1); + + buttonOk = new QPushButton(GBButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + + gridLayout1->addWidget(buttonOk, 0, 0, 1, 1); + + + gridLayout->addWidget(GBButtons, 3, 0, 1, 3); + + CBGroupe = new QCheckBox(CreateBoundaryCAO); + CBGroupe->setObjectName(QString::fromUtf8("CBGroupe")); + + gridLayout->addWidget(CBGroupe, 2, 0, 1, 3); + + LEFileName = new QLineEdit(CreateBoundaryCAO); + LEFileName->setObjectName(QString::fromUtf8("LEFileName")); + LEFileName->setMinimumSize(QSize(370, 21)); + + gridLayout->addWidget(LEFileName, 1, 2, 1, 1); + + PushFichier = new QPushButton(CreateBoundaryCAO); + PushFichier->setObjectName(QString::fromUtf8("PushFichier")); + + gridLayout->addWidget(PushFichier, 1, 1, 1, 1); + + XAO = new QLabel(CreateBoundaryCAO); + XAO->setObjectName(QString::fromUtf8("XAO")); + + gridLayout->addWidget(XAO, 1, 0, 1, 1); + + LEName = new QLineEdit(CreateBoundaryCAO); + LEName->setObjectName(QString::fromUtf8("LEName")); + LEName->setMinimumSize(QSize(382, 21)); + LEName->setMaxLength(32); + + gridLayout->addWidget(LEName, 0, 1, 1, 2); + + Name = new QLabel(CreateBoundaryCAO); + Name->setObjectName(QString::fromUtf8("Name")); + + gridLayout->addWidget(Name, 0, 0, 1, 1); + + + retranslateUi(CreateBoundaryCAO); + + QMetaObject::connectSlotsByName(CreateBoundaryCAO); + } // setupUi + + void retranslateUi(QDialog *CreateBoundaryCAO) + { + CreateBoundaryCAO->setWindowTitle(QApplication::translate("CreateBoundaryCAO", "Get CAO", nullptr)); + GBButtons->setTitle(QString()); + buttonHelp->setText(QApplication::translate("CreateBoundaryCAO", "Help", nullptr)); + buttonCancel->setText(QApplication::translate("CreateBoundaryCAO", "Cancel", nullptr)); + buttonApply->setText(QApplication::translate("CreateBoundaryCAO", "Apply", nullptr)); + buttonOk->setText(QApplication::translate("CreateBoundaryCAO", "OK", nullptr)); + CBGroupe->setText(QApplication::translate("CreateBoundaryCAO", "Filtering with groups", nullptr)); + PushFichier->setText(QString()); + XAO->setText(QApplication::translate("CreateBoundaryCAO", "XAO", nullptr)); + Name->setText(QApplication::translate("CreateBoundaryCAO", "Name", nullptr)); + } // retranslateUi +}; + +class SMESH_Ui_CreateBoundaryDi +{ +public: + QGridLayout *gridLayout; + QGroupBox *GBButtons; + QGridLayout *gridLayout1; + QPushButton *buttonHelp; + QPushButton *buttonCancel; + QPushButton *buttonApply; + QPushButton *buttonOk; + QCheckBox *CBGroupe; + QLineEdit *LEFileName; + QPushButton *PushFichier; + QLabel *Mesh; + QLineEdit *LEName; + QLabel *Name; + + void setupUi(QDialog *CreateBoundaryDi) + { + if (CreateBoundaryDi->objectName().isEmpty()) + CreateBoundaryDi->setObjectName(QString::fromUtf8("CreateBoundaryDi")); + CreateBoundaryDi->resize(566, 169); + QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(CreateBoundaryDi->sizePolicy().hasHeightForWidth()); + CreateBoundaryDi->setSizePolicy(sizePolicy); + CreateBoundaryDi->setAutoFillBackground(true); + CreateBoundaryDi->setSizeGripEnabled(true); + gridLayout = new QGridLayout(CreateBoundaryDi); +#ifndef Q_OS_MAC + gridLayout->setSpacing(6); +#endif +#ifndef Q_OS_MAC + gridLayout->setContentsMargins(9, 9, 9, 9); +#endif + gridLayout->setObjectName(QString::fromUtf8("gridLayout")); + GBButtons = new QGroupBox(CreateBoundaryDi); + GBButtons->setObjectName(QString::fromUtf8("GBButtons")); + gridLayout1 = new QGridLayout(GBButtons); +#ifndef Q_OS_MAC + gridLayout1->setSpacing(6); +#endif +#ifndef Q_OS_MAC + gridLayout1->setContentsMargins(9, 9, 9, 9); +#endif + gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); + buttonHelp = new QPushButton(GBButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + + gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1); + + buttonCancel = new QPushButton(GBButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); + + gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1); + + buttonApply = new QPushButton(GBButtons); + buttonApply->setObjectName(QString::fromUtf8("buttonApply")); + + gridLayout1->addWidget(buttonApply, 0, 1, 1, 1); + + buttonOk = new QPushButton(GBButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + + gridLayout1->addWidget(buttonOk, 0, 0, 1, 1); + + + gridLayout->addWidget(GBButtons, 3, 0, 1, 3); + + CBGroupe = new QCheckBox(CreateBoundaryDi); + CBGroupe->setObjectName(QString::fromUtf8("CBGroupe")); + + gridLayout->addWidget(CBGroupe, 2, 0, 1, 3); + + LEFileName = new QLineEdit(CreateBoundaryDi); + LEFileName->setObjectName(QString::fromUtf8("LEFileName")); + LEFileName->setMinimumSize(QSize(370, 21)); + + gridLayout->addWidget(LEFileName, 1, 2, 1, 1); + + PushFichier = new QPushButton(CreateBoundaryDi); + PushFichier->setObjectName(QString::fromUtf8("PushFichier")); + + gridLayout->addWidget(PushFichier, 1, 1, 1, 1); + + Mesh = new QLabel(CreateBoundaryDi); + Mesh->setObjectName(QString::fromUtf8("Mesh")); + + gridLayout->addWidget(Mesh, 1, 0, 1, 1); + + LEName = new QLineEdit(CreateBoundaryDi); + LEName->setObjectName(QString::fromUtf8("LEName")); + LEName->setMinimumSize(QSize(382, 21)); + LEName->setMaxLength(32); + + gridLayout->addWidget(LEName, 0, 1, 1, 2); + + Name = new QLabel(CreateBoundaryDi); + Name->setObjectName(QString::fromUtf8("Name")); + + gridLayout->addWidget(Name, 0, 0, 1, 1); + + + retranslateUi(CreateBoundaryDi); + + QMetaObject::connectSlotsByName(CreateBoundaryDi); + } // setupUi + + void retranslateUi(QDialog *CreateBoundaryDi) + { + CreateBoundaryDi->setWindowTitle(QApplication::translate("CreateBoundaryDi", "Create a discrete boundary", nullptr)); + GBButtons->setTitle(QString()); + buttonHelp->setText(QApplication::translate("CreateBoundaryDi", "Help", nullptr)); + buttonCancel->setText(QApplication::translate("CreateBoundaryDi", "Cancel", nullptr)); + buttonApply->setText(QApplication::translate("CreateBoundaryDi", "Apply", nullptr)); + buttonOk->setText(QApplication::translate("CreateBoundaryDi", "OK", nullptr)); + CBGroupe->setText(QApplication::translate("CreateBoundaryDi", "Filtering with groups", nullptr)); + PushFichier->setText(QString()); + Mesh->setText(QApplication::translate("CreateBoundaryDi", "Mesh", nullptr)); + Name->setText(QApplication::translate("CreateBoundaryDi", "Name", nullptr)); + } // retranslateUi +}; + +class SMESHGUI_EXPORT SMESH_CreateBoundaryAn : public QDialog, public SMESH_Ui_CreateBoundaryAn +{ + Q_OBJECT + +public: + SMESH_CreateBoundaryAn (SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName); + virtual ~SMESH_CreateBoundaryAn(); + +protected : + SMESH_CreateBoundaryAn (SMESHGUI_HomardAdaptDlg* parent, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName); + + SMESHGUI_HomardAdaptDlg * _parent; + + QString _Name; + + int _Type; + double _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon; + double _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis; + double _Xcentre, _Ycentre, _Zcentre, _Rayon ; + double _Xmin, _Xmax, _Xincr, _Ymin, _Ymax, _Yincr, _Zmin, _Zmax, _Zincr, _DMax ; + double _BoundaryAnXcone1, _BoundaryAnYcone1, _BoundaryAnZcone1, _BoundaryAnRayon1; + double _BoundaryAnXcone2, _BoundaryAnYcone2, _BoundaryAnZcone2, _BoundaryAnRayon2; + double _BoundaryAnXaxisCone, _BoundaryAnYaxisCone, _BoundaryAnZaxisCone; + double _BoundaryAnXorigCone, _BoundaryAnYorigCone, _BoundaryAnZorigCone; + double _BoundaryAngle; + double _BoundaryAnToreXcentre, _BoundaryAnToreYcentre, _BoundaryAnToreZcentre; + double _BoundaryAnToreXaxe, _BoundaryAnToreYaxe, _BoundaryAnToreZaxe; + double _BoundaryAnToreRRev, _BoundaryAnToreRPri; + + bool Chgt; + + SMESHHOMARD::HOMARD_Boundary_var aBoundaryAn; + SMESHHOMARD::HOMARD_Gen_var myHomardGen; + + virtual void InitConnect(); + virtual void InitValBoundaryAn(); + virtual void InitMinMax(); + virtual void SetNewName(); + virtual bool CreateOrUpdateBoundaryAn(); + virtual void convertRayonAngle(int option); + +public slots: + virtual void SetCylinder(); + virtual void SetSphere(); + virtual void SetCone(); + virtual void SetConeR(); + virtual void SetConeA(); + virtual void SetTore(); + virtual void PushOnOK(); + virtual bool PushOnApply(); + virtual void PushOnHelp(); +}; + +class SMESHGUI_EXPORT SMESH_EditBoundaryAn : public SMESH_CreateBoundaryAn +{ + Q_OBJECT +public: + SMESH_EditBoundaryAn( SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName, QString Name); + virtual ~SMESH_EditBoundaryAn(); + +protected : + bool CreateOrUpdateBoundaryAn(); + void InitValEdit(); + void InitValBoundaryAnLimit(); + void SetCylinder(); + void SetSphere(); + void SetConeR(); + void SetConeA(); + void SetTore(); + void InitValBoundaryAnCylindre(); + void InitValBoundaryAnSphere(); + void InitValBoundaryAnConeR(); + void InitValBoundaryAnConeA(); + void InitValBoundaryAnTore(); +}; + +class SMESHGUI_EXPORT SMESH_CreateBoundaryCAO : public QDialog, public SMESH_Ui_CreateBoundaryCAO +{ + Q_OBJECT + +public: + SMESH_CreateBoundaryCAO( SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName, QString BoundaryName ); + ~SMESH_CreateBoundaryCAO(); + virtual void setGroups (QStringList listGroup); + +protected : + + SMESHGUI_HomardAdaptDlg *_parent; + + QString _aName; + + SMESHHOMARD::HOMARD_Boundary_var aBoundary; + SMESHHOMARD::HOMARD_Gen_var myHomardGen; + + QStringList _listeGroupesBoundary; + + virtual void AssocieLesGroupes(); + virtual void InitConnect(); + virtual void SetNewName(); + +public slots: + + virtual void SetCAOFile(); + virtual void SetFiltrage(); + virtual void PushOnOK(); + virtual bool PushOnApply(); + virtual void PushOnHelp(); +}; + +class SMESHGUI_EXPORT SMESH_EditBoundaryCAO : public SMESH_CreateBoundaryCAO +{ + Q_OBJECT +public: + SMESH_EditBoundaryCAO( SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName, QString Name ); + virtual ~SMESH_EditBoundaryCAO(); + +protected : + virtual void InitValEdit(); + virtual bool PushOnApply(); + virtual void SetFiltrage(); +}; + +class SMESHGUI_EXPORT SMESH_CreateBoundaryDi : public QDialog, public SMESH_Ui_CreateBoundaryDi +{ + Q_OBJECT + +public: + SMESH_CreateBoundaryDi( SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName, QString BoundaryName ); + ~SMESH_CreateBoundaryDi(); + virtual void setGroups (QStringList listGroup); + +protected : + + SMESHGUI_HomardAdaptDlg *_parent; + + QString _aName; + + SMESHHOMARD::HOMARD_Boundary_var aBoundary; + SMESHHOMARD::HOMARD_Gen_var myHomardGen; + + QStringList _listeGroupesBoundary; + + virtual void AssocieLesGroupes(); + virtual void InitConnect(); + virtual void SetNewName(); + +public slots: + + virtual void SetMeshFile(); + virtual void SetFiltrage(); + virtual void PushOnOK(); + virtual bool PushOnApply(); + virtual void PushOnHelp(); +}; + +class SMESHGUI_EXPORT SMESH_EditBoundaryDi : public SMESH_CreateBoundaryDi +{ + Q_OBJECT +public: + SMESH_EditBoundaryDi( SMESHGUI_HomardAdaptDlg* parent, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString caseName, QString Name ); + virtual ~SMESH_EditBoundaryDi(); + +protected : + virtual void InitValEdit(); + virtual bool PushOnApply(); + virtual void SetFiltrage(); +}; + +#endif // MON_CREATEBOUNDARY_H diff --git a/src/SMESHGUI/SMESHGUI_HomardListGroup.cxx b/src/SMESHGUI/SMESHGUI_HomardListGroup.cxx new file mode 100644 index 000000000..9e632d9c3 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_HomardListGroup.cxx @@ -0,0 +1,326 @@ +// Copyright (C) 2011-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SMESHGUI_HomardListGroup.h" + +#include "SMESHGUI_HomardBoundaryDlg.h" +#include "SMESHGUI_HomardUtils.h" +#include "SMESHGUI_Utils.h" + +#include "SalomeApp_Tools.h" + +#include +#include +#include +#include +#include + +#include + +#include + +using namespace std; + +// ------------------------------------------------------------------------------------ +SMESH_CreateListGroupCAO::SMESH_CreateListGroupCAO(SMESH_CreateBoundaryCAO* parentBound, + bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString aCaseName, + QStringList listeGroupesHypo) + : QDialog(0), SMESH_Ui_CreateListGroup(), + _aCaseName (aCaseName), + _listeGroupesHypo (listeGroupesHypo), + _parentBound(parentBound) +{ + MESSAGE("Debut de SMESH_CreateListGroupCAO"); + myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0); + setupUi(this); + setModal(modal); + InitConnect(); + InitGroupes(); +} +// ------------------------------------------------------------------------------------ +SMESH_CreateListGroupCAO::SMESH_CreateListGroupCAO(SMESH_CreateBoundaryCAO* parentBound, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString aCaseName, + QStringList listeGroupesHypo) + : QDialog(0), SMESH_Ui_CreateListGroup(), + _aCaseName (aCaseName), + _listeGroupesHypo (listeGroupesHypo), + _parentBound(parentBound) +{ + myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0); + setupUi(this); + InitConnect(); +} + +// ------------------------------------------------------------------------ +SMESH_CreateListGroupCAO::~SMESH_CreateListGroupCAO() +// ------------------------------------------------------------------------ +{ + // no need to delete child widgets, Qt does it all for us +} +// ------------------------------------------------------------------------ +void SMESH_CreateListGroupCAO::InitConnect() +// ------------------------------------------------------------------------ +{ + connect( buttonOk, SIGNAL( pressed() ), this, SLOT( PushOnOK() ) ); + connect( buttonApply, SIGNAL( pressed() ), this, SLOT( PushOnApply() ) ); + connect( buttonCancel, SIGNAL( pressed() ), this, SLOT( close() ) ); + connect( buttonHelp, SIGNAL( pressed() ), this, SLOT( PushOnHelp() ) ); +} +// ------------------------------------------------------------------------ +bool SMESH_CreateListGroupCAO::PushOnApply() +// ------------------------------------------------------------------------ +// Appele lorsque l'un des boutons Ok ou Apply est presse +// +{ + QStringList ListeGroup ; + for ( int row=0; row< TWGroupe->rowCount(); row++) + { + if ( TWGroupe->item( row, 0 )->checkState() == Qt::Checked ) + ListeGroup.insert(0, QString(TWGroupe->item(row, 1)->text()) ); + } + if ( _parentBound ) { _parentBound->setGroups(ListeGroup);}; + return true; +} + + +// ------------------------------------------------------------------------ +void SMESH_CreateListGroupCAO::PushOnOK() +// ------------------------------------------------------------------------ +{ + if (PushOnApply()) this->close(); + if ( _parentBound ) { _parentBound->raise(); _parentBound->activateWindow(); }; +} +// ------------------------------------------------------------------------ +void SMESH_CreateListGroupCAO::PushOnHelp() +// ------------------------------------------------------------------------ +{ + SMESH::ShowHelpFile(QString("homard_create_boundary.html#filtering-by-the-groups")); +} +// ------------------------------------------------------------------------ +void SMESH_CreateListGroupCAO::InitGroupes() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SMESH_CreateListGroupCAO::InitGroupes "); + for ( int row=0; row< TWGroupe->rowCount(); row++) + TWGroupe->removeRow(row); + TWGroupe->setRowCount(0); + if (_aCaseName == QString("")) { return; }; + SMESHHOMARD::HOMARD_Cas_var monCas = myHomardGen->GetCase(); + SMESHHOMARD::ListGroupType_var _listeGroupesCas = monCas->GetGroups(); + for ( int i = 0; i < _listeGroupesCas->length(); i++ ) { + TWGroupe->insertRow(i); + TWGroupe->setItem( i, 0, new QTableWidgetItem( QString ("") ) ); + TWGroupe->item( i, 0 )->setFlags( 0 ); + TWGroupe->item( i, 0 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled ); + if (_listeGroupesHypo.contains (QString((_listeGroupesCas)[i]))) + {TWGroupe->item( i, 0 )->setCheckState( Qt::Checked );} + else + {TWGroupe->item( i, 0 )->setCheckState( Qt::Unchecked );} + TWGroupe->setItem( i, 1, new QTableWidgetItem(QString((_listeGroupesCas)[i]).trimmed())); + TWGroupe->item( i, 1 )->setFlags(Qt::ItemIsEnabled |Qt::ItemIsSelectable ); + } + TWGroupe->resizeColumnsToContents(); + TWGroupe->resizeRowsToContents(); + TWGroupe->clearSelection(); +// MESSAGE("Fin de SMESH_CreateListGroupCAO::InitGroupes "); +} + + +// ------------------------------------------------------------------------ +SMESH_CreateListGroup::SMESH_CreateListGroup(SMESH_CreateBoundaryDi* parentBound, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString aCaseName, QStringList listeGroupesHypo) + : QDialog(0), SMESH_Ui_CreateListGroup(), + _aCaseName (aCaseName), + _listeGroupesHypo (listeGroupesHypo), + _parentBound(parentBound) +{ + MESSAGE("Debut de SMESH_CreateListGroup"); + myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0); + setupUi(this); + setModal(modal); + InitConnect(); + InitGroupes(); +} + +// ------------------------------------------------------------------------ +SMESH_CreateListGroup::SMESH_CreateListGroup(SMESH_CreateBoundaryDi* parentBound, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString aCaseName, QStringList listeGroupesHypo) + : QDialog(0), SMESH_Ui_CreateListGroup(), + _aCaseName (aCaseName), + _listeGroupesHypo (listeGroupesHypo), + _parentBound(parentBound) +{ + myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0); + setupUi(this); + InitConnect(); +} + +// ------------------------------------------------------------------------ +SMESH_CreateListGroup::~SMESH_CreateListGroup() +{ + // no need to delete child widgets, Qt does it all for us +} +// ------------------------------------------------------------------------ +void SMESH_CreateListGroup::InitConnect() +// ------------------------------------------------------------------------ +{ + connect( buttonOk, SIGNAL( pressed() ), this, SLOT( PushOnOK() ) ); + connect( buttonApply, SIGNAL( pressed() ), this, SLOT( PushOnApply() ) ); + connect( buttonCancel, SIGNAL( pressed() ), this, SLOT( close() ) ); + connect( buttonHelp, SIGNAL( pressed() ), this, SLOT( PushOnHelp() ) ); +} +// ------------------------------------------------------------------------ +bool SMESH_CreateListGroup::PushOnApply() +// ------------------------------------------------------------------------ +// Appele lorsque l'un des boutons Ok ou Apply est presse +// +{ + QStringList ListeGroup ; + for ( int row=0; row< TWGroupe->rowCount(); row++) + { + if ( TWGroupe->item( row, 0 )->checkState() == Qt::Checked ) + ListeGroup.insert(0, QString(TWGroupe->item(row, 1)->text()) ); + } + if ( _parentBound ) { _parentBound->setGroups(ListeGroup);}; + return true; +} + + +// ------------------------------------------------------------------------ +void SMESH_CreateListGroup::PushOnOK() +// ------------------------------------------------------------------------ +{ + if (PushOnApply()) + { + this->close(); + if ( _parentBound ) { _parentBound->raise(); _parentBound->activateWindow(); }; + } +} +// ------------------------------------------------------------------------ +void SMESH_CreateListGroup::PushOnHelp() +// ------------------------------------------------------------------------ +{ + SMESH::ShowHelpFile(QString("homard_create_boundary.html#filtering-by-the-groups")); +} +// ------------------------------------------------------------------------ +void SMESH_CreateListGroup::InitGroupes() +// ------------------------------------------------------------------------ +{ + MESSAGE("Debut de SMESH_CreateListGroup::InitGroupes "); + for ( int row=0; row< TWGroupe->rowCount(); row++) + TWGroupe->removeRow(row); + TWGroupe->setRowCount(0); + if (_aCaseName == QString("")) { return; }; + SMESHHOMARD::HOMARD_Cas_var monCas = myHomardGen->GetCase(); + SMESHHOMARD::ListGroupType_var _listeGroupesCas = monCas->GetGroups(); + for ( int i = 0; i < _listeGroupesCas->length(); i++ ) + { + TWGroupe->insertRow(i); + TWGroupe->setItem( i, 0, new QTableWidgetItem( QString ("") ) ); + TWGroupe->item( i, 0 )->setFlags( 0 ); + TWGroupe->item( i, 0 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled ); + if (_listeGroupesHypo.contains (QString((_listeGroupesCas)[i]))) + {TWGroupe->item( i, 0 )->setCheckState( Qt::Checked );} + else + {TWGroupe->item( i, 0 )->setCheckState( Qt::Unchecked );} + TWGroupe->setItem( i, 1, new QTableWidgetItem(QString((_listeGroupesCas)[i]).trimmed())); + TWGroupe->item( i, 1 )->setFlags(Qt::ItemIsEnabled |Qt::ItemIsSelectable ); + } + TWGroupe->resizeColumnsToContents(); + TWGroupe->resizeRowsToContents(); + TWGroupe->clearSelection(); +// MESSAGE("Fin de SMESH_CreateListGroup::InitGroupes "); +} + +//--------------------------------------------------------------------- +SMESH_EditListGroupCAO::SMESH_EditListGroupCAO( SMESH_CreateBoundaryCAO* parentBound, + bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString aCaseName, + QStringList listeGroupesHypo): +//--------------------------------------------------------------------- +SMESH_CreateListGroupCAO(parentBound,myHomardGen0,aCaseName,listeGroupesHypo) +{ + MESSAGE("Debut de SMESH_EditListGroupCAO"); + setWindowTitle(QObject::tr("HOM_GROU_EDIT_WINDOW_TITLE")); + setModal(true); + InitGroupes(); +} + +//------------------------------------ +SMESH_EditListGroupCAO:: ~SMESH_EditListGroupCAO() +//------------------------------------ +{ +} +// ------------------------------------- +void SMESH_EditListGroupCAO:: InitGroupes() +// ------------------------------------- +{ + for (int i = 0; i < _listeGroupesHypo.size(); i++ ) + { + std::cerr << _listeGroupesHypo[i].toStdString().c_str() << std::endl; + TWGroupe->insertRow(i); + TWGroupe->setItem( i, 0, new QTableWidgetItem( QString ("") ) ); + TWGroupe->item( i, 0 )->setFlags( 0 ); + TWGroupe->item( i, 0 )->setCheckState( Qt::Checked ); + TWGroupe->setItem( i, 1, new QTableWidgetItem(_listeGroupesHypo[i])); + } + TWGroupe->resizeRowsToContents(); +} + +//--------------------------------------------------------------------- +SMESH_EditListGroup::SMESH_EditListGroup( SMESH_CreateBoundaryDi* parentBound, + bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen0, + QString aCaseName, + QStringList listeGroupesHypo): +//--------------------------------------------------------------------- +SMESH_CreateListGroup(parentBound,myHomardGen0,aCaseName,listeGroupesHypo) +{ + MESSAGE("Debut de SMESH_EditListGroup"); + setWindowTitle(QObject::tr("HOM_GROU_EDIT_WINDOW_TITLE")); + setModal(true); + InitGroupes(); +} + +//------------------------------------ +SMESH_EditListGroup::~SMESH_EditListGroup() +//------------------------------------ +{ +} +// ------------------------------------- +void SMESH_EditListGroup::InitGroupes() +// ------------------------------------- +{ + for (int i = 0; i < _listeGroupesHypo.size(); i++ ) + { + std::cerr << _listeGroupesHypo[i].toStdString().c_str() << std::endl; + TWGroupe->insertRow(i); + TWGroupe->setItem( i, 0, new QTableWidgetItem( QString ("") ) ); + TWGroupe->item( i, 0 )->setFlags( 0 ); + TWGroupe->item( i, 0 )->setCheckState( Qt::Checked ); + TWGroupe->setItem( i, 1, new QTableWidgetItem(_listeGroupesHypo[i])); + } + TWGroupe->resizeRowsToContents(); +} diff --git a/src/SMESHGUI/SMESHGUI_HomardListGroup.h b/src/SMESHGUI/SMESHGUI_HomardListGroup.h new file mode 100644 index 000000000..67e46b94d --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_HomardListGroup.h @@ -0,0 +1,254 @@ +// Copyright (C) 2011-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef MON_CREATELISTGROUPCAO_H +#define MON_CREATELISTGROUPCAO_H + +#include "SMESH_SMESHGUI.hxx" + +#include +#include + +//#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) +#include CORBA_CLIENT_HEADER(SMESH_Homard) + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SMESH_CreateBoundaryCAO; +class SMESH_CreateBoundaryDi; + + +QT_BEGIN_NAMESPACE + +class SMESH_Ui_CreateListGroup +{ +public: + QGridLayout *gridLayout; + QGroupBox *GBButtons; + QGridLayout *gridLayout1; + QPushButton *buttonHelp; + QPushButton *buttonCancel; + QPushButton *buttonApply; + QPushButton *buttonOk; + QGroupBox *GBOptions; + QGridLayout *gridLayout2; + QTableWidget *TWGroupe; + + void setupUi(QDialog *CreateListGroup) + { + if (CreateListGroup->objectName().isEmpty()) + CreateListGroup->setObjectName(QString::fromUtf8("CreateListGroup")); + CreateListGroup->resize(717, 600); + QSizePolicy sizePolicy(static_cast(0), static_cast(0)); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(CreateListGroup->sizePolicy().hasHeightForWidth()); + CreateListGroup->setSizePolicy(sizePolicy); + CreateListGroup->setAutoFillBackground(true); + CreateListGroup->setSizeGripEnabled(true); + gridLayout = new QGridLayout(CreateListGroup); +#ifndef Q_OS_MAC + gridLayout->setSpacing(6); +#endif +#ifndef Q_OS_MAC + gridLayout->setContentsMargins(9, 9, 9, 9); +#endif + gridLayout->setObjectName(QString::fromUtf8("gridLayout")); + GBButtons = new QGroupBox(CreateListGroup); + GBButtons->setObjectName(QString::fromUtf8("GBButtons")); + gridLayout1 = new QGridLayout(GBButtons); +#ifndef Q_OS_MAC + gridLayout1->setSpacing(6); +#endif +#ifndef Q_OS_MAC + gridLayout1->setContentsMargins(9, 9, 9, 9); +#endif + gridLayout1->setObjectName(QString::fromUtf8("gridLayout1")); + buttonHelp = new QPushButton(GBButtons); + buttonHelp->setObjectName(QString::fromUtf8("buttonHelp")); + + gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1); + + buttonCancel = new QPushButton(GBButtons); + buttonCancel->setObjectName(QString::fromUtf8("buttonCancel")); + + gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1); + + buttonApply = new QPushButton(GBButtons); + buttonApply->setObjectName(QString::fromUtf8("buttonApply")); + + gridLayout1->addWidget(buttonApply, 0, 1, 1, 1); + + buttonOk = new QPushButton(GBButtons); + buttonOk->setObjectName(QString::fromUtf8("buttonOk")); + + gridLayout1->addWidget(buttonOk, 0, 0, 1, 1); + + + gridLayout->addWidget(GBButtons, 1, 0, 1, 1); + + GBOptions = new QGroupBox(CreateListGroup); + GBOptions->setObjectName(QString::fromUtf8("GBOptions")); + gridLayout2 = new QGridLayout(GBOptions); +#ifndef Q_OS_MAC + gridLayout2->setSpacing(6); +#endif +#ifndef Q_OS_MAC + gridLayout2->setContentsMargins(9, 9, 9, 9); +#endif + gridLayout2->setObjectName(QString::fromUtf8("gridLayout2")); + TWGroupe = new QTableWidget(GBOptions); + if (TWGroupe->columnCount() < 2) + TWGroupe->setColumnCount(2); + QTableWidgetItem *__qtablewidgetitem = new QTableWidgetItem(); + TWGroupe->setHorizontalHeaderItem(0, __qtablewidgetitem); + QTableWidgetItem *__qtablewidgetitem1 = new QTableWidgetItem(); + TWGroupe->setHorizontalHeaderItem(1, __qtablewidgetitem1); + TWGroupe->setObjectName(QString::fromUtf8("TWGroupe")); + TWGroupe->setShowGrid(true); + TWGroupe->setRowCount(0); + TWGroupe->setColumnCount(2); + + gridLayout2->addWidget(TWGroupe, 0, 0, 1, 1); + + + gridLayout->addWidget(GBOptions, 0, 0, 1, 1); + + + retranslateUi(CreateListGroup); + + QMetaObject::connectSlotsByName(CreateListGroup); + } // setupUi + + void retranslateUi(QDialog *CreateListGroup) + { + CreateListGroup->setWindowTitle(QApplication::translate("CreateListGroup", "Selection of groups", nullptr)); + GBButtons->setTitle(QString()); + buttonHelp->setText(QApplication::translate("CreateListGroup", "Help", nullptr)); + buttonCancel->setText(QApplication::translate("CreateListGroup", "Cancel", nullptr)); + buttonApply->setText(QApplication::translate("CreateListGroup", "Apply", nullptr)); + buttonOk->setText(QApplication::translate("CreateListGroup", "OK", nullptr)); + GBOptions->setTitle(QApplication::translate("CreateListGroup", "Selected groups", nullptr)); + QTableWidgetItem *___qtablewidgetitem = TWGroupe->horizontalHeaderItem(0); + ___qtablewidgetitem->setText(QApplication::translate("CreateListGroup", "Selection", nullptr)); + QTableWidgetItem *___qtablewidgetitem1 = TWGroupe->horizontalHeaderItem(1); + ___qtablewidgetitem1->setText(QApplication::translate("CreateListGroup", "Group", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class CreateListGroup: public SMESH_Ui_CreateListGroup {}; +} // namespace Ui + +QT_END_NAMESPACE + +class SMESHGUI_EXPORT SMESH_CreateListGroupCAO : public QDialog, public SMESH_Ui_CreateListGroup +{ + Q_OBJECT + +public: + SMESH_CreateListGroupCAO( SMESH_CreateBoundaryCAO* parentBound, bool modal, SMESHHOMARD::HOMARD_Gen_var myHomardGen, QString aCaseName, QStringList listeGroupesHypo); + SMESH_CreateListGroupCAO( SMESH_CreateBoundaryCAO* parentBound, SMESHHOMARD::HOMARD_Gen_var myHomardGen, QString aCaseName, QStringList listeGroupesHypo); + virtual ~SMESH_CreateListGroupCAO(); + +protected : + + SMESHHOMARD::HOMARD_Gen_var myHomardGen; + + SMESH_CreateBoundaryCAO * _parentBound; + QString _aCaseName; + QStringList _listeGroupesHypo; + + virtual void InitConnect(); + virtual void InitGroupes(); + +public slots: + virtual void PushOnOK(); + virtual bool PushOnApply(); + virtual void PushOnHelp(); + +}; + +class SMESHGUI_EXPORT SMESH_CreateListGroup : public QDialog, public SMESH_Ui_CreateListGroup +{ + Q_OBJECT + +public: + SMESH_CreateListGroup( SMESH_CreateBoundaryDi* parentBound, bool modal, SMESHHOMARD::HOMARD_Gen_var myHomardGen, QString aCaseName, QStringList listeGroupesHypo); + SMESH_CreateListGroup( SMESH_CreateBoundaryDi* parentBound, SMESHHOMARD::HOMARD_Gen_var myHomardGen, QString aCaseName, QStringList listeGroupesHypo); + virtual ~SMESH_CreateListGroup(); + +protected : + + SMESHHOMARD::HOMARD_Gen_var myHomardGen; + + SMESH_CreateBoundaryDi * _parentBound; + QString _aCaseName; + QStringList _listeGroupesHypo; + + virtual void InitConnect(); + virtual void InitGroupes(); + +public slots: + virtual void PushOnOK(); + virtual bool PushOnApply(); + virtual void PushOnHelp(); + +}; + +class SMESHGUI_EXPORT SMESH_EditListGroupCAO : public SMESH_CreateListGroupCAO +{ + Q_OBJECT + +public: + SMESH_EditListGroupCAO( SMESH_CreateBoundaryCAO* parentBound, bool modal, SMESHHOMARD::HOMARD_Gen_var myHomardGen, QString aCaseName, QStringList listeGroupesHypo); + virtual ~SMESH_EditListGroupCAO(); + +protected : + + virtual void InitGroupes(); + +}; + +class SMESHGUI_EXPORT SMESH_EditListGroup : public SMESH_CreateListGroup +{ + Q_OBJECT + +public: + SMESH_EditListGroup( SMESH_CreateBoundaryDi* parentBound, bool modal, + SMESHHOMARD::HOMARD_Gen_var myHomardGen, + QString aCaseName, QStringList listeGroupesHypo); + virtual ~SMESH_EditListGroup(); + +protected : + + virtual void InitGroupes(); + +}; + +#endif // MON_CREATELISTGROUPCAO_H diff --git a/src/SMESHGUI/SMESHGUI_HomardUtils.cxx b/src/SMESHGUI/SMESHGUI_HomardUtils.cxx new file mode 100644 index 000000000..30361c9ce --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_HomardUtils.cxx @@ -0,0 +1,659 @@ +// Copyright (C) 2011-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + + +#include "SMESHGUI_HomardUtils.h" + +#include + +#include "OB_Browser.h" + +#include "SUIT_Desktop.h" +#include "SUIT_Application.h" +#include "SUIT_Session.h" + +#include "LightApp_SelectionMgr.h" +#include "SalomeApp_Application.h" +#include "SalomeApp_Module.h" +#include "SalomeApp_Study.h" + +#include "SALOME_ListIO.hxx" + +#include "SALOMEconfig.h" +#include + +#include +#include +#include +#include +#include +#include + +#include +#ifndef WIN32 +#include +#include +#endif + +#include "SalomeApp_Tools.h" + +#include + +SALOME_ListIO SMESH_HOMARD_UTILS::mySelected; + +//================================================================ +// Function : GetActiveStudy +// Returne un pointeur sur l'etude active +//================================================================ +SUIT_Study* SMESH_HOMARD_UTILS::GetActiveStudy() +{ + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if (app) + return app->activeStudy(); + else + return NULL; +} + +//================================================================ +// Function : getStudy +// Returne un pointeur sur l'etude active +//================================================================ +_PTR(Study) SMESH_HOMARD_UTILS::getStudy() +{ + static _PTR(Study) _study; + if(!_study) + _study = SalomeApp_Application::getStudy(); + return _study; +} + +//================================================================ +// Function : updateObjBrowser +// Purpose : met a jour l arbre d 'etude pour Homard +//================================================================ +void SMESH_HOMARD_UTILS::updateObjBrowser() +{ + SalomeApp_Application* app = dynamic_cast(SUIT_Session::session()->activeApplication()); + if (app) { + // Le nom identifiant doit etre la valeur du parametre + // name de la section HOMARD du fichier SalomeApp.xml + CAM_Module* module = app->module("Homard" ); + SalomeApp_Module* appMod = dynamic_cast( module ); + if ( appMod ) { + app->updateObjectBrowser(); + appMod->updateObjBrowser( true ); + } + else + MESSAGE( "--- SMESHHOMARD::updateObjBrowser: appMod = NULL"); + } +} + +//================================================================ +// Function : selectedIO +// Return the list of selected SALOME_InteractiveObject's +//================================================================ +const SALOME_ListIO& SMESH_HOMARD_UTILS::selectedIO() +{ + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* > ( SUIT_Session::session()->activeApplication() ); + LightApp_SelectionMgr* aSelectionMgr = app->selectionMgr(); + if( aSelectionMgr ) + { + aSelectionMgr->selectedObjects( mySelected ); + for (SALOME_ListIteratorOfListIO it (mySelected); it.More(); it.Next()) + SCRUTE(it.Value()->getEntry()); + }; + return mySelected; +} + +//================================================================ +// Function : IObjectCount +// Return the number of selected objects +//================================================================ +int SMESH_HOMARD_UTILS::IObjectCount() +{ + SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); + LightApp_SelectionMgr* aSelectionMgr = app->selectionMgr(); + if( aSelectionMgr ) + { + aSelectionMgr->selectedObjects( mySelected ); + SCRUTE(mySelected.Extent()); + return mySelected.Extent(); + } + return 0; +} + +//================================================================ +// Function : firstIObject +// Purpose : Return the first selected object in the selected object list +//================================================================ +Handle(SALOME_InteractiveObject) SMESH_HOMARD_UTILS::firstIObject() +{ + const SALOME_ListIO& aList = selectedIO(); + return aList.Extent() > 0 ? aList.First() : Handle(SALOME_InteractiveObject)(); +} + +//================================================================ +// Function : lastIObject +// Return the last selected object in the selected object list +//================================================================ +Handle(SALOME_InteractiveObject) SMESH_HOMARD_UTILS::lastIObject() +{ + const SALOME_ListIO& aList = selectedIO(); + return aList.Extent() > 0 ? aList.Last() : Handle(SALOME_InteractiveObject)(); +} + +//================================================================ +// Retourne vrai si l'objet est du type voulu +// . Dans le cas d'un cas, d'une hypothese, d'une zone, on se contente +// d'une comparaison simple entre le type stocke et TypeObject. +// . Pour l'iteration, le type stocke en attribut est sous la forme +// "IterationHomard" + le nom de l'iteration precedente. +// Il faut donc regarder si la chaine commence par TypeObject. +// . Idem pour le fichier de messages : "Mess " + numero d'iteration +// +// On filtre ce genre de situation avec option : +// -1 : comparaison totale +// 0 : comparaison sur le debut de la chaine +//================================================================ +bool SMESH_HOMARD_UTILS::isObject(_PTR(SObject) MonObj, QString TypeObject, int option) +{ +// MESSAGE("isObject, TypeObject = "<Value().c_str()); +// MESSAGE("Type = "< 1 ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_SELECT_OBJECT_2") ); + return QString(""); + } +// + Handle(SALOME_InteractiveObject) aIO = SMESH_HOMARD_UTILS::firstIObject(); + if ( aIO->hasEntry() ) + { +// MESSAGE("aIO->getEntry() = " << aIO->getEntry()); + _PTR(Study) aStudy = SMESH_HOMARD_UTILS::getStudy(); + _PTR(SObject) aSO ( aStudy->FindObjectID( aIO->getEntry() ) ); + _PTR(GenericAttribute) anAttr; + if (aSO->FindAttribute(anAttr, "AttributeComment") ) + { + if ( commentaire != "" ) + { + _PTR(AttributeComment) attributComment = anAttr; + QString aComment= QString(attributComment->Value().data()); +// MESSAGE("... aComment = " << aComment.toStdString().c_str()); + int iaux = aComment.lastIndexOf(commentaire); +// MESSAGE("... iaux = " << iaux); + if ( iaux !=0 ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_SELECT_OBJECT_3").arg(commentaire) ); + return QString(""); + } + } + if (aSO->FindAttribute(anAttr, "AttributeName") ) + { + _PTR(AttributeName) attributName = anAttr; + QString aName= QString(attributName->Value().data()); + return aName; + } + } + } +// + return QString(""); +} + +// ======================================================================= +QString SMESH_HOMARD_QT_COMMUN::SelectionCasEtude() +// ======================================================================= +{ + QString aName = QString(""); + int nbSel = SMESH_HOMARD_UTILS::IObjectCount() ; + if ( nbSel == 0 ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_SELECT_OBJECT_1") ); + return QString(""); + } + if ( nbSel > 1 ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_SELECT_OBJECT_2") ); + return QString(""); + } + Handle(SALOME_InteractiveObject) aIO = SMESH_HOMARD_UTILS::firstIObject(); + if ( aIO->hasEntry() ) + { + _PTR(Study) aStudy = SMESH_HOMARD_UTILS::getStudy(); + _PTR(SObject) aSO ( aStudy->FindObjectID( aIO->getEntry() ) ); + _PTR(SObject) aSObjCas = aSO->GetFather(); + _PTR(GenericAttribute) anAttr; + if (aSObjCas->FindAttribute(anAttr, "AttributeName") ) + { + _PTR(AttributeName) attributName = anAttr; + aName= QString(attributName->Value().data()); + } + return aName; + } + return QString(""); +} + +// ======================================================================= +QString SMESH_HOMARD_QT_COMMUN::PushNomFichier(bool avertir, QString TypeFichier) +// ======================================================================= +// Gestion les boutons qui permettent de +// 1) retourne le nom d'un fichier par une fenetre de dialogue si aucun +// objet est selectionne dans l arbre d etude +// 2) retourne le nom du fichier asocie a l objet +// selectionne dans l arbre d etude +{ +// MESSAGE("PushNomFichier avec avertir "<hasEntry() ) + { + _PTR(Study) aStudy = SMESH_HOMARD_UTILS::getStudy(); + _PTR(SObject) aSO ( aStudy->FindObjectID( aIO->getEntry() ) ); + _PTR(GenericAttribute) anAttr; + _PTR(AttributeFileType) aFileType; + _PTR(AttributeExternalFileDef) aFileName; + if (aSO) { + if (aSO->FindAttribute(anAttr, "AttributeFileType") ) { + aFileType=anAttr; + QString fileType=QString(aFileType->Value().data()); + if ( fileType==QString("FICHIERMED")) { + if (aSO->FindAttribute(anAttr,"AttributeExternalFileDef")) { + aFileName=anAttr; + aFile= QString(aFileName->Value().data()); } + } + } + } + } + + if ( aFile==QString::null ) + { + if ( avertir ) { + QMessageBox::warning( 0, QObject::tr("HOM_WARNING"), + QObject::tr("HOM_SELECT_STUDY") ); + } + aFile = QFileDialog::getOpenFileName(0, QObject::tr("HOM_SELECT_FILE_0"), QString(""), filtre ); + } + } + // B.3. Bizarre + else + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_SELECT_FILE_2") ); + } + + return aFile; +} +// ======================================================================= +med_idt SMESH_HOMARD_QT_COMMUN::OuvrirFichier(QString aFile) +// ======================================================================= +// renvoie le medId associe au fichier Med apres ouverture +{ + med_idt medIdt = MEDfileOpen(aFile.toStdString().c_str(),MED_ACC_RDONLY); + if (medIdt <0) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_MED_FILE_1") ); + } + return medIdt; +} + +// ====================================================== +QString SMESH_HOMARD_QT_COMMUN::LireNomMaillage(QString aFile) +// ======================================================== +{ + QString nomMaillage = "" ; + int erreur = 0 ; + med_idt medIdt ; + while ( erreur == 0 ) + { + // Ouverture du fichier + medIdt = SMESH_HOMARD_QT_COMMUN::OuvrirFichier(aFile); + if ( medIdt < 0 ) + { + erreur = 1 ; + break ; + } + med_int numberOfMeshes = MEDnMesh(medIdt) ; + if (numberOfMeshes == 0 ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_MED_FILE_2") ); + erreur = 2 ; + break ; + } + if (numberOfMeshes > 1 ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_MED_FILE_3") ); + erreur = 3 ; + break ; + } + + nomMaillage = SMESH_HOMARD_QT_COMMUN::LireNomMaillage2(medIdt,1); + break ; + } + // Fermeture du fichier + if ( medIdt > 0 ) MEDfileClose(medIdt); + + return nomMaillage; +} +// ======================================================================= +QString SMESH_HOMARD_QT_COMMUN::LireNomMaillage2(med_idt medIdt ,int meshId) +// ======================================================================= +{ + QString NomMaillage=QString::null; + char meshname[MED_NAME_SIZE+1]; + med_int spacedim,meshdim; + med_mesh_type meshtype; + char descriptionription[MED_COMMENT_SIZE+1]; + char dtunit[MED_SNAME_SIZE+1]; + med_sorting_type sortingtype; + med_int nstep; + med_axis_type axistype; + int naxis = MEDmeshnAxis(medIdt,1); + char *axisname=new char[naxis*MED_SNAME_SIZE+1]; + char *axisunit=new char[naxis*MED_SNAME_SIZE+1]; + med_err aRet = MEDmeshInfo(medIdt, + meshId, + meshname, + &spacedim, + &meshdim, + &meshtype, + descriptionription, + dtunit, + &sortingtype, + &nstep, + &axistype, + axisname, + axisunit); + + if ( aRet < 0 ) { QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), \ + QObject::tr("HOM_MED_FILE_4") ); } + else { NomMaillage=QString(meshname); } + + delete[] axisname ; + delete[] axisunit ; + + return NomMaillage; +} + + +// ======================================================================= +std::list SMESH_HOMARD_QT_COMMUN::GetListeChamps(QString aFile) +// ======================================================================= +{ +// Il faut voir si plusieurs maillages + + MESSAGE("GetListeChamps"); + std::list ListeChamp ; + + med_err erreur = 0 ; + med_idt medIdt ; + + while ( erreur == 0 ) + { + // Ouverture du fichier + SCRUTE(aFile.toStdString()); + medIdt = SMESH_HOMARD_QT_COMMUN::OuvrirFichier(aFile); + if ( medIdt < 0 ) + { + erreur = 1 ; + break ; + } + // Lecture du nombre de champs + med_int ncha = MEDnField(medIdt) ; + if (ncha < 1 ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_MED_FILE_5") ); + erreur = 2 ; + break ; + } + // Lecture des caracteristiques des champs + for (int i=0; i< ncha; i++) + { +// Lecture du nombre de composantes + med_int ncomp = MEDfieldnComponent(medIdt,i+1); +// Lecture du type du champ, des noms des composantes et du nom de l'unite + char nomcha [MED_NAME_SIZE+1]; + char meshname[MED_NAME_SIZE+1]; + char * comp = (char*) malloc(ncomp*MED_SNAME_SIZE+1); + char * unit = (char*) malloc(ncomp*MED_SNAME_SIZE+1); + char dtunit[MED_SNAME_SIZE+1]; + med_bool local; + med_field_type typcha; + med_int nbofcstp; + erreur = MEDfieldInfo(medIdt,i+1,nomcha,meshname,&local,&typcha,comp,unit,dtunit,&nbofcstp) ; + free(comp); + free(unit); + if ( erreur < 0 ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_MED_FILE_6") ); + break ; + } + ListeChamp.push_back(QString(nomcha)); + } + break ; + } + // Fermeture du fichier + if ( medIdt > 0 ) MEDfileClose(medIdt); + + return ListeChamp; +} + +// ====================================================================================== +std::list SMESH_HOMARD_QT_COMMUN::GetListeComposants(QString aFile, QString aChamp) +// ====================================================================================== +{ + MESSAGE ( "GetListeComposants pour le fichier " << aFile.toStdString().c_str()); + MESSAGE ( "GetListeComposants pour le champ " << aChamp.toStdString().c_str()); + + std::list ListeComposants; + + med_err erreur = 0 ; + med_idt medIdt ; + + while ( erreur == 0 ) + { + // Ouverture du fichier + SCRUTE(aFile.toStdString()); + medIdt = SMESH_HOMARD_QT_COMMUN::OuvrirFichier(aFile); + if ( medIdt < 0 ) + { + erreur = 1 ; + break ; + } + // Lecture du nombre de champs + med_int ncha = MEDnField(medIdt) ; + if (ncha < 1 ) + { + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_MED_FILE_5") ); + erreur = 2 ; + break ; + } + // Lecture des caracteristiques des champs + for (int i=0; i< ncha; i++) + { +// Lecture du nombre de composantes + med_int ncomp = MEDfieldnComponent(medIdt,i+1); +// Lecture du type du champ, des noms des composantes et du nom de l'unite + char nomcha [MED_NAME_SIZE+1]; + char meshname[MED_NAME_SIZE+1]; + char * comp = (char*) malloc(ncomp*MED_SNAME_SIZE+1); + char * unit = (char*) malloc(ncomp*MED_SNAME_SIZE+1); + char dtunit[MED_SNAME_SIZE+1]; + med_bool local; + med_field_type typcha; + med_int nbofcstp; + erreur = MEDfieldInfo(medIdt,i+1,nomcha,meshname,&local,&typcha,comp,unit,dtunit,&nbofcstp) ; + free(unit); + if ( erreur < 0 ) + { + free(comp); + QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), + QObject::tr("HOM_MED_FILE_6") ); + break ; + } + // Lecture des composantes si c'est le bon champ + if ( QString(nomcha) == aChamp ) + { + for (int j = 0; j 0 ) MEDfileClose(medIdt); + + return ListeComposants; +} diff --git a/src/SMESHGUI/SMESHGUI_HomardUtils.h b/src/SMESHGUI/SMESHGUI_HomardUtils.h new file mode 100644 index 000000000..14b13343c --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_HomardUtils.h @@ -0,0 +1,112 @@ +// Copyright (C) 2011-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef SMESH_HOMARD_H_UTILS +#define SMESH_HOMARD_H_UTILS + +#include "SMESH_SMESHGUI.hxx" + +#include + +#include +//#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) +#include CORBA_CLIENT_HEADER(SMESH_Homard) + +#include +#include +#include +#include +#include +//#include +#include + +#include + +#include +#include +#include + +class QString; +class QStringList; +class QComboBox; + +class SUIT_ViewWindow; +class SUIT_Desktop; +class SUIT_Study; +class SUIT_ResourceMgr; + +class CAM_Module; + +class SALOMEDSClient_Study; +class SALOMEDSClient_SObject; + +class SalomeApp_Study; +class SalomeApp_Module; +class LightApp_SelectionMgr; + +namespace SMESH_HOMARD_UTILS { + + SMESHGUI_EXPORT SUIT_Study* GetActiveStudy(); + SMESHGUI_EXPORT _PTR(Study) getStudy(); + + SMESHGUI_EXPORT void updateObjBrowser(); + + // Function returns a list of SALOME_InteractiveObject's from + // selection manager in GUI + SMESHGUI_EXPORT const SALOME_ListIO& selectedIO(); + + // Function returns the number of selected objects + SMESHGUI_EXPORT int IObjectCount(); + + // Function returns the first selected object in the list + // of selected objects + SMESHGUI_EXPORT Handle(SALOME_InteractiveObject) firstIObject() ; + + // Function returns the last selected object in the list + // of selected objects + SMESHGUI_EXPORT Handle(SALOME_InteractiveObject) lastIObject() ; + + SMESHGUI_EXPORT bool isBoundaryCAO(_PTR(SObject) MonObj); + SMESHGUI_EXPORT bool isBoundaryAn(_PTR(SObject) MonObj); + SMESHGUI_EXPORT bool isBoundaryDi(_PTR(SObject) MonObj); + SMESHGUI_EXPORT bool isCase(_PTR(SObject) MonObj); + SMESHGUI_EXPORT bool isHypo(_PTR(SObject) MonObj); + SMESHGUI_EXPORT bool isIter(_PTR(SObject) MonObj); + SMESHGUI_EXPORT bool isFileType(_PTR(SObject) MonObj, QString TypeFile); + SMESHGUI_EXPORT bool isObject(_PTR(SObject) MonObj, QString TypeObject, int option ); + + extern SALOME_ListIO mySelected; +} + +namespace SMESH_HOMARD_QT_COMMUN +{ + SMESHGUI_EXPORT QString PushNomFichier(bool avertir, QString TypeFichier=""); + SMESHGUI_EXPORT QString LireNomMaillage(QString aFile); + SMESHGUI_EXPORT QString LireNomMaillage2(med_idt Medidt,int MeshId); + + SMESHGUI_EXPORT med_idt OuvrirFichier(QString aFile); + + SMESHGUI_EXPORT std::list GetListeChamps(QString aFile); + SMESHGUI_EXPORT std::list GetListeComposants(QString aFile, QString aChamp); + + SMESHGUI_EXPORT QString SelectionArbreEtude(QString commentaire, int grave ); + SMESHGUI_EXPORT QString SelectionCasEtude(); +}; + +#endif // ifndef SMESH_HOMARD_H_UTILS diff --git a/src/SMESHGUI/SMESHGUI_Homard_msg_en.ts b/src/SMESHGUI/SMESHGUI_Homard_msg_en.ts new file mode 100644 index 000000000..e1ebe2ec9 --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_Homard_msg_en.ts @@ -0,0 +1,255 @@ + + + + + @default + + ADAPT_WITH_HOMARD + Adaptation with HOMARD + + + HOM_WARNING + Warning + + + HOM_ERROR + Error + + + HOM_INACTIVE_BUTTON + Inactive button + + + HOM_SELECT_OBJECT_1 + Select an object. + + + HOM_SELECT_OBJECT_2 + Select only one object. + + + HOM_SELECT_OBJECT_3 + Select an object with type %1. + + + HOM_SELECT_OBJECT_4 + The name of the object is already selected. Modify it or cancel. + + + HOM_SELECT_FILE_0 + File selection + + + HOM_SELECT_FILE_1 + Select a file. + + + HOM_SELECT_FILE_2 + Select only one file. + + + HOM_SELECT_FILE_3 + This file cannot be opened. + + + HOM_SCRIPT_FILE + A script file must be given. + + + HOM_MED_FILE_1 + This MED file cannot be read. + + + HOM_MED_FILE_2 + No mesh in this MED file. + + + HOM_MED_FILE_3 + More than one mesh in this MED file. + + + HOM_MED_FILE_4 + The mesh in this MED file cannot be read. + + + HOM_SELECT_STUDY + Select a study object with associated MED file \n or select a MED file. + + + HOM_CASE_NAME + The case must be named. + + + HOM_CASE_DIRECTORY_1 + A directory for the case must be selected. + + + HOM_CASE_DIRECTORY_2 + This directory is already used by the case + + + HOM_CASE_DIRECTORY_3 + A valid directory for the case must be selected. + + + HOM_CASE_DIRECTORY_4 + A directory for the computation must be selected. + + + HOM_START_DIRECTORY_1 + A starting directory for the pursuit must be selected. + + + HOM_START_DIRECTORY_3 + A valid directory for the pursuit must be selected. + + + HOM_CASE_MESH + The file of the initial mesh must be selected. + + + HOM_CASE_GROUP + The group "%1" cannot be given for more than 1 boundary. + + + HOM_CASE_EDIT_WINDOW_TITLE + Edition of a case + + + HOM_CASE_EDIT_STATE_0 + Initial mesh. + + + HOM_CASE_EDIT_STATE + Pursuit of an iteration. + + + HOM_CASE_PURSUE_WINDOW_TITLE + Case: pursuit of a stored iteration + + + HOM_ITER_NAME + The iteration must be named. + + + HOM_ITER_STARTING_POINT + The previous iteration must be given. + + + HOM_ITER_MESH + Give a name for the final mesh. + + + HOM_ITER_HYPO + A hypothesis must be selected. + + + HOM_ITER_STARTING_POINT_0 + Mesh + + + HOM_ITER_STARTING_POINT_1 + First iteration of the case. + + + HOM_ITER_STARTING_POINT_2 + First iteration of the case for the pursuit. + + + HOM_ITER_EDIT_WINDOW_TITLE + Edition of an iteration + + + HOM_HYPO_NAME + The hypothesis must be named. + + + HOM_HYPO_NORM_L2 + L2 norm + + + HOM_HYPO_NORM_INF + Infinite norm + + + HOM_HYPO_NORM_ABS + Absolute + + + HOM_HYPO_NORM_REL + Relative + + + HOM_HYPO_COMP + At least, one component must be selected. + + + HOM_HYPO_EDIT_WINDOW_TITLE + Edition of a hypothesis + + + HOM_BOUN_NAME + The boundary must be named. + + + HOM_BOUN_MESH + The file for the mesh of the boundary must be selected. + + + HOM_BOUN_CAO + The file for the CAO must be selected. + + + HOM_BOUN_CASE + The meshfile of the case is unknown. + + + HOM_AXE + The axis must be a non 0 vector. + + + HOM_BOUN_C_EDIT_WINDOW_TITLE + Edition of a CAO based boundary + + + HOM_BOUN_A_EDIT_WINDOW_TITLE + Edition of an analytical boundary + + + HOM_BOUN_D_EDIT_WINDOW_TITLE + Edition of a discrete boundary + + + HOM_GROU_EDIT_WINDOW_TITLE + Selected groups + + + HOM_MESH_INFO_0 + Mesh analysis + + + HOM_MESH_INFO_1 + Select at least one option. + + + HOM_MESH_INFO_2 + Analysis in the object browser, file + + + PREF_TAB_GENERAL + General + + + PREF_PUBLICATION + Publication + + + PREF_PUBLICATION_MAILLAGE_IN + IN meshes + + + PREF_PUBLICATION_MAILLAGE_OUT + OUT meshes + + + diff --git a/src/SMESHGUI/SMESHGUI_Homard_msg_fr.ts b/src/SMESHGUI/SMESHGUI_Homard_msg_fr.ts new file mode 100644 index 000000000..77cd8ed7c --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_Homard_msg_fr.ts @@ -0,0 +1,871 @@ + + + + + @default + + HOM_WARNING + Avertissement + + + HOM_ERROR + Erreur + + + HOM_INACTIVE_BUTTON + Bouton inactif + + + OK + Appliquer et fermer + + + Apply + Appliquer + + + Cancel + Annuler + + + Help + Aide + + + New + Nouveau + + + Edit + Editer + + + Quit + Quitter + + + Name + Nom + + + Directory + Répertoire + + + Mesh + Maillage + + + Selection + Sélection + + + None + Aucun + + + All + Tout + + + HOM_SELECT_OBJECT_1 + Sélectionner un objet. + + + HOM_SELECT_OBJECT_2 + Sélectionner un seul objet. + + + HOM_SELECT_OBJECT_3 + Sélectionner un objet de type %1. + + + HOM_SELECT_OBJECT_4 + Le nom est déjà choisi. Modifiez le ou annulez la saisie. + + + HOM_SELECT_FILE_0 + Choix de fichier + + + HOM_SELECT_FILE_1 + Sélectionner un fichier. + + + HOM_SELECT_FILE_2 + Sélectionner un seul fichier. + + + HOM_SELECT_FILE_3 + Impossible d'ouvrir ce fichier. + + + HOM_SCRIPT_FILE + Il faut donner un fichier pour le script python. + + + HOM_MED_FILE_1 + Ce fichier MED est illisible. + + + HOM_MED_FILE_2 + Ce fichier MED ne contient aucun maillage. + + + HOM_MED_FILE_3 + Ce fichier MED contient plus d'un maillage. + + + HOM_MED_FILE_4 + Impossible de lire le maillage de ce fichier MED. + + + HOM_SELECT_STUDY + Sélectionner une étude avec un fichier MED associé\n ou sélectionner un fichier MED. + + + HOM_CASE_DIRECTORY_3 + Un répertoire valide doit être choisi. + + + HOM_CASE_DIRECTORY_4 + Il faut choisir un répertoire de travail pour le calcul. + + + HOM_START_DIRECTORY_1 + Il faut choisir un répertoire contenant l'itération à poursuivre. + + + HOM_START_DIRECTORY_3 + Un répertoire valide contenant l'itération à poursuivre doit être choisi. + + + HOM_CASE_MESH + Il faut choisir le maillage initial. + + + HOM_CASE_GROUP + Le groupe "%1" ne peut pas être attribué à plus d'une frontière. + + + HOM_CASE_EDIT_WINDOW_TITLE + Edition d'un cas + + + HOM_CASE_EDIT_STATE_0 + Maillage initial. + + + HOM_CASE_EDIT_STATE + Poursuite d'une itération. + + + HOM_CASE_PURSUE_WINDOW_TITLE + Cas de poursuite d'une itération + + + The configuration file cannot be found. + Le fichier de configuration de HOMARD est introuvable. + + + The configuration file cannot be read. + Le fichier de configuration de HOMARD est illisible. + + + The HOMARD mesh file cannot be found. + Le fichier de maillage de HOMARD est introuvable. + + + HOM_ITER_NAME + Il faut donner un nom à l'itération. + + + HOM_ITER_STARTING_POINT + Il faut désigner l'itération précédente. + + + HOM_ITER_MESH + Donner le nom du maillage final. + + + HOM_ITER_HYPO + Choisir une hypothèse. + + + HOM_ITER_STARTING_POINT_0 + Maillage + + + HOM_ITER_STARTING_POINT_1 + Itération initiale du cas. + + + HOM_ITER_STARTING_POINT_2 + Itération initiale du cas pour la poursuite. + + + HOM_ITER_EDIT_WINDOW_TITLE + Edition d'une itération + + + Boundary type + Type de frontière + + + No boundary + Pas de frontière + + + Non CAO + Autre que CAO + + + Discrete boundary + Frontière discrète + + + Analytical boundary + Frontière analytique + + + Conformity type + Type de conformité + + + Conformal + Conforme + + + Non conformal + Non conforme + + + Non conformal option + Option de non conformité + + + Conformity + + Conformité + + + + Free + Libre + + + 1 hanging node per mesh + 1 noeud pendant par maille + + + 1 node per edge + 1 noeud pendant par arête + + + Advanced options + Options avancées + + + Authorized pyramids + Pyramides autorisées + + + Minimal diameter + Diamètre minimal + + + Initialization of adaptation + Initialisation de l'adaptation + + + Maximal level + Niveau maximal + + + Output of the level of refinement + Sortie du niveau de raffinement + + + Output of the qualities + Sortie des qualités + + + Output of the diameters + Sortie des diamètres + + + Output of the parents + Sortie des parents + + + Output of the neighbours + Sortie des voisins + + + Create an iteration + Création d'une itération + + + Iteration Name + Nom de l'itération + + + Previous iteration + Itération précédente + + + Invalid boundary + Frontière non valable + + + Invalid case + Cas non valable + + + Invalid case context + Cas contextuel non valable + + + Invalid hypothesis + Hypothèse non valable + + + Invalid iteration + Itération non valable + + + This boundary has already been defined. + Cette frontière est déjà définie. + + + This case has already been defined. + Ce cas est déjà défini. + + + This hypothesis has already been defined. + Cette hypothèse est déjà définie. + + + This iteration has already been defined. + Cette itération est déjà définie. + + + The parent iteration is not defined. + L'itération parent n'est pas définie. + + + Unable to create the iteration. + Impossible de créer l'itération. + + + The directory for the computation cannot be created. + Impossible de créer le répertoire pour le calcul de l'itération. + + + This iteration is the first of the case and cannot be computed. + Cette itération définit le point de départ du cas. Elle ne peut pas être calculée. + + + This iteration does not have any associated hypothesis. + Cette itération n'est associée à aucune hypothèse. + + + The mesh file does not exist. + Le fichier du maillage n'existe pas. + + + The mesh file cannot be deleted. + Impossible de supprimer le fichier du maillage. + + + Mesh n + Maillage n + + + Mesh n+1 + Maillage n+1 + + + Rank + Numéro d'ordre + + + Hypothesis + Hypothèse + + + Create a hypothesis + Création d'une hypothèse + + + HOM_HYPO_NAME + Il faut donner un nom à l'hypothèse. + + + HOM_HYPO_NORM_L2 + Norme L2 + + + HOM_HYPO_NORM_INF + Norme infinie + + + HOM_HYPO_NORM_ABS + Absolu + + + HOM_HYPO_NORM_REL + Relatif + + + HOM_HYPO_COMP + Il faut choisir au moins une composante. + + + HOM_HYPO_EDIT_WINDOW_TITLE + Edition d'une hypothèse + + + Type of adaptation + Type d'adaptation + + + Uniform + Uniforme + + + Uniform adaptation + Adaptation uniforme + + + Coarsening + Déraffinement + + + Refinement + Raffinement + + + Nothing + Rien + + + Jump between elements + Saut entre éléments + + + Component + Composante + + + Refinement threshold + Seuil de raffinement + + + Coarsening threshold + Seuil de déraffinement + + + Percentage of meshes + Pourcentage de mailles + + + Mean + n*(std deviation) + Moyenne + n*(ecart-type) + + + No refinement + Sans raffinement + + + Mean - n*(std deviation) + Moyenne - n*(ecart-type) + + + No coarsening + Sans déraffinement + + + Chosen + Choisi + + + Box + Boîte + + + Sphere + Sphère + + + Cylinder + Cylindre + + + Disk + Disque + + + Disk with hole + Disque avec trou + + + Pipe + Tuyau + + + Coordinates + Coordonnées + + + Get CAO + Acquisition de la CAO + + + Create an analytical boundary + Création d'une frontière analytique + + + Create a discrete boundary + Création d'une frontière discrète + + + Type of boundary + Type de la frontière + + + Torus + Tore + + + Radius + Rayon + + + Radius 1 + Rayon 1 + + + Radius 2 + Rayon 2 + + + External radius + Rayon externe + + + Internal radius + Rayon interne + + + Height + Hauteur + + + X axis + X axe + + + Y axis + Y axe + + + Z axis + Z axe + + + R revolution + R révolution + + + Primary R + R primaire + + + HOM_BOUN_NAME + Il faut donner un nom à la frontière. + + + HOM_BOUN_MESH + Il faut choisir le fichier qui contient le maillage de la frontière discrète. + + + HOM_BOUN_CAO + Il faut choisir le fichier qui contient la CAO. + + + HOM_BOUN_CASE + Le fichier du maillage du cas est inconnu. + + + HOM_AXE + L'axe doit être un vecteur non nul. + + + HOM_BOUN_C_EDIT_WINDOW_TITLE + Edition d'une frontière basée sur une CAO + + + HOM_BOUN_A_EDIT_WINDOW_TITLE + Edition d'une frontière analytique + + + HOM_BOUN_D_EDIT_WINDOW_TITLE + Edition d'une frontière discrète + + + HOM_GROU_EDIT_WINDOW_TITLE + Groupes choisis + + + The height must be positive. + La hauteur doit être positive. + + + The radius must be positive. + Un rayon doit être positif. + + + The axis must be a non 0 vector. + L'axe doit être un vecteur non nul. + + + The angle must be included higher than 0 degree and lower than 90 degrees. + L'angle doit être compris entre 0 et 90 degrés. + + + The radius must be different. + Les rayons doivent être différents. + + + The centers must be different. + Les centres doivent être différents. + + + The external radius must be higher than the internal radius. + Le rayon externe doit être supérieur au rayon interne. + + + The X coordinates are not coherent. + Les coordonnées en X ne sont pas cohérentes. + + + The Y coordinates are not coherent. + Les coordonnées en Y ne sont pas cohérentes. + + + The Z coordinates are not coherent. + Les coordonnées en Z ne sont pas cohérentes. + + + The first coordinates are not coherent. + Les premières coordonnées ne sont pas cohérentes. + + + The second coordinates are not coherent. + Les secondes coordonnées ne sont pas cohérentes. + + + The orientation must be 1, 2 or 3. + L'orientation vaut 1, 2 ou 3. + + + HOM_MESH_INFO_0 + Analyse de maillage + + + HOM_MESH_INFO_1 + Choisir au moins une option. + + + HOM_MESH_INFO_2 + Bilan de l'analyse dans l'arbre d'études, fichier + + + Filtering with groups + Filtrage par les groupes + + + Selection of groups + Choix des groupes + + + Selected groups + Groupes choisis + + + Group + Groupe + + + Information on a mesh + Analyse d'un maillage + + + Group size + Taille des domaines + + + Quality + Qualité + + + Connection + Connexité + + + Diametre + Diamètre + + + Entanglement + Interpénétration + + + No change is allowed in a boundary. Ask for evolution. + Impossible de changer une donnée dans une frontière. Demander une évolution. + + + This boundary is used in a case and cannot be deleted. + Cette frontière est utilisée dans un cas ; elle ne peut pas être détruite. + + + This hypothesis is used and cannot be deleted. + Cette hypothèse est utilisée dans une itération ; elle ne peut pas être détruite. + + + This iteration cannot be deleted. + Cette itération ne peut pas être détruite. + + + The directory for the calculation cannot be cleared. + Menage du repertoire de calcul impossible + + + Starting point + Point de départ + + + From an iteration + A partir d'une itération + + + From a case + A partir d'un cas + + + Iteration into the case + Choix d'une itération dans le cas + + + Last iteration + A partir de la dernière itération + + + Iteration number + A partir d'une itération numérotée + + + The directory of the case does not exist. + Le répertoire du cas n'existe pas. + + + The directory for the case cannot be modified because some iterations are already defined. + Impossible de changer le répertoire du cas car des itérations ont déjà été définies. + + + The directory for the case cannot be reached. + Impossible d'atteindre ce répertoire pour le cas. + + + The starting point for the case cannot be copied into the working directory. + Impossible de copier le point de départ du cas dans le répertoire de travail. + + + The starting point for the case cannot be moved into the new directory. + Impossible de déplacer le point de départ du cas dans le nouveau répertoire. + + + The directory of the case for the pursuit does not exist. + Le répertoire du cas de reprise n'existe pas. + + + The directory of the iteration does not exist. + Le répertoire de l'itération de reprise n'existe pas. + + + The number of iteration must be positive. + Le numéro de l'itération doit etre positif. + + + Number of iteration + Numéro de l'itération + + + Case + Cas + + + Mesh file + Maillage initial + + + Constant + Constant + + + Variable + Variable + + + Type of schema + Type de schema + + + Maximum of ... + Maximum de ... + + + Iterations + Itérations + + + Nodes + Noeuds + + + Elements + Eléments + + + Test of convergence + Test de convergence + + + Edit a file + Affichage d'un fichier + + + Print + Imprimer + + + Invalid study context + Etude contextuelle non valable + + + PREF_TAB_GENERAL + Général + + + PREF_PUBLICATION + Publication + + + PREF_PUBLICATION_MAILLAGE_IN + Les maillages d'entrée + + + PREF_PUBLICATION_MAILLAGE_OUT + Les maillages de sortie + + + diff --git a/src/SMESHGUI/SMESHGUI_Homard_msg_ja.ts b/src/SMESHGUI/SMESHGUI_Homard_msg_ja.ts new file mode 100644 index 000000000..94cd0943c --- /dev/null +++ b/src/SMESHGUI/SMESHGUI_Homard_msg_ja.ts @@ -0,0 +1,868 @@ + + + + + @default + + HOM_WARNING + 警告 + + + HOM_ERROR + エラー + + + HOM_INACTIVE_BUTTON + アクティブでないボタン + + + OK + Ok + + + Apply + 適用 + + + Cancel + キャンセル + + + Help + ヘルプ + + + New + 新規 + + + Edit + 編集 + + + Quit + 終了 + + + Name + 名前 + + + Directory + ディレクトリ + + + Mesh + メッシュ + + + Selection + 選択 + + + None + なし + + + All + 全て + + + HOM_SELECT_OBJECT_1 + オブジェクトを選択します。 + + + HOM_SELECT_OBJECT_2 + 1 つのオブジェクトを選択します。 + + + HOM_SELECT_OBJECT_3 + 型 %1 のオブジェクトを選択します。 + + + HOM_SELECT_OBJECT_4 + The name of the object is already selected. Modify it or cancel. + + + HOM_SELECT_FILE_0 + ファイル選択 + + + HOM_SELECT_FILE_1 + ファイルを選択します。 + + + HOM_SELECT_FILE_2 + 1 つのファイルを選択します。 + + + HOM_SELECT_FILE_3 + このファイルを開くことができません。 + + + HOM_SCRIPT_FILE + 我々 は python スクリプトにファイルを与える必要があります。 + + + HOM_MED_FILE_1 + この医学ファイルは読み取り不可能です。 + + + HOM_MED_FILE_2 + この医学のファイルには、メッシュが含まれていません。 + + + HOM_MED_FILE_3 + この医学のファイルにはよりも 1 つのメッシュが含まれています。 + + + HOM_MED_FILE_4 + 音楽配信マック & ファイルのメッシュを読み取れませんでした。 + + + HOM_MED_FILE_5 + この医学のファイルには、フィールドが含まれていません。 + + + HOM_MED_FILE_6 + 医学ファイル (秒) (秒) フィールドを読み取ることができません。 + + + HOM_SELECT_STUDY + 研究医 associe + のファイルを選択または医学ファイルを選択します。 + + + Create a case + ケースの作成 + + + HOM_CASE_NAME + 場合に名前を付ける必要があります。 + + + HOM_CASE_DIRECTORY_1 + 1 つの場合を動作するようにディレクトリを選択する必要があります。 + + + HOM_CASE_DIRECTORY_2 + このディレクトリは、既に使用中です。 + + + HOM_CASE_DIRECTORY_3 + 有効なディレクトリを選択する必要があります。 + + + HOM_CASE_DIRECTORY_4 + 計算のための作業ディレクトリを選択する必要があります。 + + + HOM_START_DIRECTORY_1 + 追跡のため開始点を選択する必要があります。 + + + HOM_START_DIRECTORY_3 + 追跡のため有効な方向を選択する必要があります。 + + + HOM_CASE_MESH + 1 つは、初期のメッシュを選択する必要があります。 + + + HOM_CASE_GROUP + グループ"%1"は、以上の境界線に割り当てることはできません。 + + + HOM_CASE_EDIT_WINDOW_TITLE + 場合の編集 + + + HOM_CASE_EDIT_STATE_0 + 初期メッシュ。 + + + HOM_CASE_EDIT_STATE + イテレーションの継続。 + + + HOM_CASE_PURSUE_WINDOW_TITLE + イテレーションの追跡 + + + The configuration file cannot be found. + コンフィギュレーションファイルが見つかりません。 + + + The configuration file cannot be read. + コンフィギュレーションファイルが読み込めません。 + + + The HOMARD mesh file cannot be found. + HOMARDメッシュファイルが見つかりません。 + + + HOM_ITER_NAME + 名前を反復処理する必要があります。 + + + HOM_ITER_STARTING_POINT + これは、前のイテレーションを指定する必要があります。 + + + HOM_ITER_MESH + 最終的なメッシュの名前。 + + + HOM_ITER_HYPO + 仮説を選択します。 + + + HOM_ITER_STARTING_POINT_0 + メッシュ + + + HOM_ITER_STARTING_POINT_1 + ケースの最初のイテレーションです。 + + + HOM_ITER_STARTING_POINT_2 + 検察側の事件の最初のイテレーションです。 + + + HOM_ITER_EDIT_WINDOW_TITLE + イテレーションの編集 + + + Discrete boundary + 離散境界 + + + Analytical boundary + 解析的境界 + + + Conformity type + 適合タイプ + + + Conformal + 等角 + + + Non conformal + 非共形 + + + Non conformal option + 非共形オプション + + + Conformity + + 適合性 + + + + Free + Free + + + 1 hanging node per mesh + メッシュあたりの1接続節点 + + + 1 node per edge + エッジ辺りの1節点 + + + Advanced options + 詳細オプション + + + Authorized pyramids + 認定済みピラミッド + + + Minimal diameter + 最小径 + + + Initialization of adaptation + 適応の初期化 + + + Maximal level + 最大レベル + + + Output of the level of refinement + リファインレベルの出力 + + + Output of the qualities + 品質の出力 + + + Output of the diameters + 直径の出力 + + + Output of the parents + 親直径の出力 + + + Output of the neighbours + 隣の直径の出力 + + + Create an iteration + イテレーションの作成 + + + Iteration Name + イテレーションの名前 + + + Previous iteration + 以前のイテレーション + + + Invalid boundary + 無効な境界 + + + Invalid case + 無効なケース + + + Invalid case context + ケースの内容が無効です + + + Invalid hypothesis + 無効なhypothesis + + + Invalid iteration + 無効なイテレーション + + + This boundary has already been defined. + この境界は既に定義されています。 + + + This case has already been defined. + このケースは既に定義されています。 + + + This hypothesis has already been defined. + このhypothesisは既に定義されています。 + + + This iteration has already been defined. + このイテレーションは既に定義されています。 + + + The parent iteration is not defined. + 親イテレーションは、定義されていません。 + + + Unable to create the iteration. + イテレーションを作成することができません。 + + + The directory for the computation cannot be created. + 計算のためのディレクトリを作成できません。 + + + This iteration is the first of the case and cannot be computed. + このイタレーションはケースの最初であり、計算できません。 + + + This iteration does not have any associated hypothesis. + このイタレーションは関連した hypothesis がありません。 + + + The mesh file does not exist. + メッシュ ファイルは存在しません。 + + + The mesh file cannot be deleted. + メッシュ ファイルを削除できません。 + + + Mesh n + メッシュ n + + + Mesh n+1 + メッシュ n + 1 + + + Rank + ランク + + + Hypothesis + Hypothesis + + + Create a hypothesis + hypothesis の作成 + + + HOM_HYPO_NAME + 仮説に名前を付ける必要があります。 + + + HOM_HYPO_NORM_L2 + 標準の L2 + + + HOM_HYPO_NORM_INF + 無限の標準 + + + HOM_HYPO_NORM_ABS + 絶対値 + + + HOM_HYPO_NORM_REL + 関係 + + + HOM_HYPO_COMP + 1 つ以上のコンポーネントを選択する必要があります。 + + + HOM_HYPO_EDIT_WINDOW_TITLE + 仮説の編集 + + + Type of adaptation + 適合のタイプ + + + Uniform + 均一 + + + Uniform adaptation + 均一な適応 + + + Refinement + リファインメント + + + Nothing + なし + + + Jump between elements + 要素間ジャンプ + + + Component + コンポーネント + + + Refinement threshold + リファインメント閾値 + + + Coarsening threshold + 粗大化閾値 + + + Percentage of meshes + メッシュの割合 + + + Mean + n*(std deviation) + 平均 + n * (標準偏差) + + + No refinement + リファインメントなし + + + Mean - n*(std deviation) + 平均 - n * (標準偏差) + + + No coarsening + 粗大化なし + + + Chosen + 選択済み + + + Box + Box + + + Sphere + 球 + + + Cylinder + 円筒 + + + Disk + 円盤 + + + Disk with hole + 穴付き円盤 + + + Pipe + パイプ + + + Coordinates + 座標 + + + Create an analytical boundary + 分析境界の作成 + + + Create a discrete boundary + 離散境界の作成 + + + Type of boundary + 境界のタイプ + + + Torus + 環状体 + + + Radius + 半径 + + + Radius 1 + 半径1 + + + Radius 2 + 半径2 + + + External radius + 外半径 + + + Internal radius + 内半径 + + + Height + 高さ + + + X axis + X 軸 + + + Y axis + Y 軸 + + + Z axis + Z 軸 + + + R revolution + R 回転 + + + Primary R + 主 R + + + HOM_BOUN_NAME + 名前の国境に与えする必要があります。 + + + HOM_BOUN_MESH + 1 つの枠を含むメッシュを選択する必要があります。 + + + HOM_BOUN_CASE + 場合ファイルのメッシュが知られています。 + + + HOM_AXE + 軸は、ゼロ以外のベクトルでなければなりません。 + + + HOM_BOUN_A_EDIT_WINDOW_TITLE + 分析のフロンティアの編集 + + + HOM_BOUN_D_EDIT_WINDOW_TITLE + 離散境界の編集 + + + HOM_GROU_EDIT_WINDOW_TITLE + 選択したグループ + + + The height must be positive. + 高さは正でなければなりません。 + + + The radius must be positive. + 半径は正でなければなりません。 + + + The axis must be a non 0 vector. + 軸は非 0 のベクトルでなければなりません。 + + + The angle must be included higher than 0 degree and lower than 90 degrees. + 角度は0 °よりも大きく 90 °未満である必要があります。 + + + The radius must be different. + 半径が異なる必要があります。 + + + The centers must be different. + 中心が異なる必要があります。 + + + The external radius must be higher than the internal radius. + 外部の半径は内部の半径より大きい必要があります。 + + + The X coordinates are not coherent. + X座標は論理上問題があります。 + + + The Y coordinates are not coherent. + Y座標は論理上問題があります。 + + + The Z coordinates are not coherent. + Z座標は論理上問題があります。 + + + The first coordinates are not coherent. + 最初の座標に論理上問題があります。 + + + The second coordinates are not coherent. + 2番目の座標に論理上問題があります。 + + + The orientation must be 1, 2 or 3. + 方向は1、2、3のどれかにする必要があります。 + + + HOM_MESH_INFO_0 + メッシュの解析 + + + HOM_MESH_INFO_1 + 少なくとも 1 つのオプションを選択します。 + + + HOM_MESH_INFO_2 + バランス シート分析結果をスタディ ツリーで、ファイル + + + Filtering with groups + グループでフィルタリング + + + Selection of groups + グループの選択 + + + Selected groups + 選択されたグループ + + + Group + グループ : + + + Information on a mesh + メッシュに関する情報 + + + Group size + グループのサイズ + + + Quality + 品質 + + + Connection + 接続 + + + Diametre + 直径 + + + Entanglement + 縺れ合い + + + No change is allowed in a boundary. Ask for evolution. + 境界内に許可された変更はありません。旋回について尋ねます。 + + + This boundary is used in a case and cannot be deleted. + この境界はケースで使用されており、削除できません。 + + + This hypothesis is used and cannot be deleted. + このhypothesisは使用されており、削除できません。 + + + This iteration cannot be deleted. + このイテレーションは削除できません。 + + + The directory for the calculation cannot be cleared. + 計算用ディレクトリは削除できません。 + + + Starting point + 始点 + + + From an iteration + イテレーションから + + + From a case + ケースから + + + Iteration into the case + ケースへのイテレーション + + + Last iteration + 最後のイテレーション + + + Iteration number + イテレーション数 + + + The directory of the case does not exist. + ケースのディレクトリは存在しません。 + + + The directory for the case cannot be modified because some iterations are already defined. + いくつかのイテレーションが既に定義されているため、ケースのディレクトリを変更できません。 + + + The directory for the case cannot be reached. + ケースのディレクトリに到達できません。 + + + The starting point for the case cannot be copied into the working directory. + ケースの開始点は作業ディレクトリにコピーできません。 + + + The starting point for the case cannot be moved into the new directory. + ケースの開始点は新しいディレクトリに移動できません。 + + + The directory of the case for the pursuit does not exist. + 追跡用ケースのディレクトリは存在しません。 + + + The directory of the iteration does not exist. + イテレーションのディレクトリが存在しません。 + + + The number of iteration must be positive. + イテレーション数は正である必要があります。 + + + Number of iteration + イテレーション数 + + + Case + ケース + + + Mesh file + メッシュファイル + + + Constant + 定数 + + + Variable + 変数 + + + Type of schema + スキーマタイプ + + + Maximum of ... + 最大の... + + + Iterations + イテレーション + + + Nodes + 節点 + + + Elements + 要素 + + + Test of convergence + 収束テスト + + + Edit a file + ファイルの編集 + + + Print + 印刷 + + + Invalid study context + 無効なスタディの内容 + + + PREF_TAB_GENERAL + 一般的な + + + PREF_PUBLICATION + 発行 + + + PREF_PUBLICATION_MAILLAGE_IN + メッシュ入力 + + + PREF_PUBLICATION_MAILLAGE_OUT + メッシュ出力 + + + diff --git a/src/SMESHGUI/SMESHGUI_Operations.h b/src/SMESHGUI/SMESHGUI_Operations.h index e24bcd558..b91a92787 100644 --- a/src/SMESHGUI/SMESHGUI_Operations.h +++ b/src/SMESHGUI/SMESHGUI_Operations.h @@ -184,6 +184,7 @@ namespace SMESHOp { OpSplitBiQuadratic = 4515, // MENU MODIFICATION - SPLIT BI-QUADRATIC TO LINEAR // Adaptation ---------------------//-------------------------------- OpMGAdapt = 8020, // MENU ADAPTATION - MG-ADAPT + OpHomardAdapt = 8021, // MENU ADAPTATION - HOMARD-ADAPT // Measurements -------------------//-------------------------------- OpPropertiesLength = 5000, // MENU MEASUREMENTS - BASIC PROPERTIES - LENGTH OpPropertiesArea = 5001, // MENU MEASUREMENTS - BASIC PROPERTIES - AREA diff --git a/src/SMESHGUI/SMESH_images.ts b/src/SMESHGUI/SMESH_images.ts index 74697d463..676c0aad8 100644 --- a/src/SMESHGUI/SMESH_images.ts +++ b/src/SMESHGUI/SMESH_images.ts @@ -87,6 +87,10 @@ ICON_MG_ADAPT adapt_mg_adapt.png + + ICON_HOMARD_ADAPT + adapt_homard.png + ICON_CONV_TO_QUAD mesh_conv_to_quad.png diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index 67ca49fe5..827d8ab82 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -340,6 +340,10 @@ MEN_MG_ADAPT Remesh with MG_Adapt + + MEN_HOMARD_ADAPT + Uniform refinement + Args Arguments @@ -3025,6 +3029,10 @@ Check algorithm documentation for supported geometry ADAPT_PREF_NONE None + + ADAPT_WITH_HOMARD + Adaptation with HOMARD + ADAPT_PREF_MG_ADAPT Adaptation with MG-Adapt @@ -3216,6 +3224,10 @@ Use Display Entity menu command to show them. SMESH_Z Z + + SMESH_Z_SCALARBAR + Z: + STATE_ALGO_MISSING %3 %2D algorithm is missing @@ -3312,6 +3324,10 @@ Use Display Entity menu command to show them. STB_MG_ADAPT Remesh with MG_Adapt + + STB_HOMARD_ADAPT + Uniform refinement + STB_CONV_TO_QUAD Convert to/from quadratic @@ -4008,6 +4024,10 @@ Use Display Entity menu command to show them. TOP_MG_ADAPT Remesh with MG_Adapt + + TOP_HOMARD_ADAPT + Uniform refinement + TOP_CONV_TO_QUAD Convert to/from quadratic diff --git a/src/SMESHGUI/SMESH_msg_fr.ts b/src/SMESHGUI/SMESH_msg_fr.ts index 5ff731606..8a06db471 100644 --- a/src/SMESHGUI/SMESH_msg_fr.ts +++ b/src/SMESHGUI/SMESH_msg_fr.ts @@ -340,6 +340,10 @@ MEN_MG_ADAPT Remaillage avec MG_Adapt + + MEN_HOMARD_ADAPT + Raffinement uniforme + Args Arguments @@ -1610,6 +1614,10 @@ Merci de les corriger, puis essayez de nouveau SMESH_AVAILABLE Disponible + + SMESH_NOT_AVAILABLE + Indisponible + SMESH_AVAILABLE_ALGORITHMS Algorithmes disponibles @@ -1750,7 +1758,7 @@ Merci de les corriger, puis essayez de nouveau SMESH_CONTINUE_MESH_VISUALIZATION - La système semble manquer de mémoire pour visualiser le maillage, + Le système semble manquer de mémoire pour visualiser le maillage, ce qui peut faire planter l'application. Voulez-vous continuer la visualisation ? @@ -2816,6 +2824,10 @@ Référez-vous à la documentation sur l'algorithme et la géométrie supportée SMESH_RENUMBERING + Renumérotation + + + SMESH_RENUMBER Renuméroter @@ -2836,7 +2848,7 @@ Référez-vous à la documentation sur l'algorithme et la géométrie supportée SMESH_RM_HYP_WRN - "%1" n'est pas attribué, mais: + "%1" n'est pas attribué, mais : @@ -3011,6 +3023,10 @@ Référez-vous à la documentation sur l'algorithme et la géométrie supportée ADAPT_PREF_NONE Sans + + ADAPT_WITH_HOMARD + Adaptation avec HOMARD + ADAPT_PREF_MG_ADAPT Adaptation avec MG-Adapt @@ -3203,6 +3219,10 @@ Utilisez le menu "Visualiser une entité" pour les afficher. SMESH_Z Z + + SMESH_Z_SCALARBAR + Z : + STATE_ALGO_MISSING Il manque l'algorithme %3 %2D @@ -3299,6 +3319,10 @@ Utilisez le menu "Visualiser une entité" pour les afficher. STB_MG_ADAPT Remaillage avec MG_Adapt + + STB_HOMARD_ADAPT + Raffinement uniforme + STB_CONV_TO_QUAD Convertir vers/depuis quadratique @@ -3521,7 +3545,7 @@ Utilisez le menu "Visualiser une entité" pour les afficher. STB_DEFLECTION_2D - Deflection 2D + Déflection 2D STB_MAP @@ -3995,6 +4019,10 @@ Utilisez le menu "Visualiser une entité" pour les afficher. TOP_MG_ADAPT Remaillage avec MG_Adapt + + TOP_HOMARD_ADAPT + Raffinement uniforme + TOP_CONV_TO_QUAD Convertir vers/de quadratique diff --git a/src/SMESH_I/CMakeLists.txt b/src/SMESH_I/CMakeLists.txt index e04e4a604..0ce820e3a 100644 --- a/src/SMESH_I/CMakeLists.txt +++ b/src/SMESH_I/CMakeLists.txt @@ -115,6 +115,7 @@ SET(SMESHEngine_HEADERS SMESH.hxx SMESH_Component_Generator.hxx MG_ADAPT_i.hxx + SMESH_Homard_i.hxx ) # --- sources --- @@ -144,6 +145,7 @@ SET(SMESHEngine_SOURCES SMESH_PreMeshInfo.cxx SMESH_Component_Generator.cxx MG_ADAPT_i.cxx + SMESH_Homard_i.cxx ) # --- rules --- diff --git a/src/SMESH_I/MG_ADAPT_i.cxx b/src/SMESH_I/MG_ADAPT_i.cxx index 02415c69e..7950f58dd 100644 --- a/src/SMESH_I/MG_ADAPT_i.cxx +++ b/src/SMESH_I/MG_ADAPT_i.cxx @@ -19,6 +19,8 @@ #include "MG_ADAPT_i.hxx" +#include CORBA_SERVER_HEADER(SMESH_Homard) + #include "MG_ADAPT.hxx" #include "SMESH_File.hxx" #include "SMESH_Gen_i.hxx" @@ -114,7 +116,8 @@ SMESH::MG_ADAPT_ptr SMESH_Gen_i::CreateAdaptationHypothesis() return SMESH::MG_ADAPT_ptr(); #endif } -SMESH::MG_ADAPT_OBJECT_ptr SMESH_Gen_i::Adaptation( const char* adaptationType) +//SMESH::MG_ADAPT_OBJECT_ptr SMESH_Gen_i::Adaptation( const char* adaptationType) +SALOME::GenericObj_ptr SMESH_Gen_i::Adaptation( const char* adaptationType) { #ifndef DISABLE_MG_ADAPT if (!strcmp(adaptationType, "MG_Adapt")) @@ -124,6 +127,9 @@ SMESH::MG_ADAPT_OBJECT_ptr SMESH_Gen_i::Adaptation( const char* adaptationType) return anObj._retn(); } #endif + if (!strcmp(adaptationType, "Uniform")) { + return CreateHOMARD_ADAPT(); + } return SMESH::MG_ADAPT_OBJECT_ptr(); } //============================================================================= diff --git a/src/SMESH_I/SMESH_2smeshpy.cxx b/src/SMESH_I/SMESH_2smeshpy.cxx index 07b3d3399..f69c70eef 100644 --- a/src/SMESH_I/SMESH_2smeshpy.cxx +++ b/src/SMESH_I/SMESH_2smeshpy.cxx @@ -1013,6 +1013,11 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand ) { Handle(_pyMesh) mesh = new _pyMesh( theCommand ); AddObject( mesh ); + // set mesh name + _pyID id = mesh->GetID(), comma("'"); + if ( myObjectNames.IsBound( id )) + theCommand->SetArg( theCommand->GetNbArgs() + 1, + comma + myObjectNames( id ) + comma); return; } if ( method == "CreateMeshesFromUNV" || diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index 9caaa543c..fd17647fa 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -477,8 +477,10 @@ public: int CountInPyDump(const TCollection_AsciiString& text); SMESH::MG_ADAPT_ptr CreateMG_ADAPT(); + SMESHHOMARD::HOMARD_Gen_ptr CreateHOMARD_ADAPT(); SMESH::MG_ADAPT_ptr CreateAdaptationHypothesis(); - SMESH::MG_ADAPT_OBJECT_ptr Adaptation( const char* adaptationType); + //SMESH::MG_ADAPT_OBJECT_ptr Adaptation( const char* adaptationType); + SALOME::GenericObj_ptr Adaptation( const char* adaptationType); // ***************************************** // Internal methods diff --git a/src/SMESH_I/SMESH_Homard_i.cxx b/src/SMESH_I/SMESH_Homard_i.cxx new file mode 100644 index 000000000..55699404a --- /dev/null +++ b/src/SMESH_I/SMESH_Homard_i.cxx @@ -0,0 +1,2838 @@ +// Copyright (C) 2011-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SMESH_Homard_i.hxx" +#include "SMESH_Homard.hxx" + +#include "SMESH_Gen_i.hxx" +#include "SMESH_PythonDump.hxx" + +#include "SMESH_File.hxx" + +#include "utilities.h" +#include "Basics_Utils.hxx" +#include "Basics_DirUtils.hxx" +#include "Utils_SINGLETON.hxx" +#include "Utils_CorbaException.hxx" +#include "SALOMEDS_Tool.hxx" +#include "SALOME_LifeCycleCORBA.hxx" +#include "SALOMEconfig.h" + +// Have to be included before std headers +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#ifdef WIN32 +#include +#else +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +// C'est le ASSERT de SALOMELocalTrace/utilities.h dans KERNEL +#ifndef VERIFICATION +#define VERIFICATION(condition) \ + if (!(condition)){INTERRUPTION("CONDITION "<<#condition<<" NOT VERIFIED")} +#endif /* VERIFICATION */ + +// La gestion des repertoires +#ifndef CHDIR + #ifdef WIN32 + #define CHDIR _chdir + #else + #define CHDIR chdir + #endif +#endif + +using namespace std; + +SMESHHOMARD::HOMARD_Gen_ptr SMESH_Gen_i::CreateHOMARD_ADAPT() +{ + if (getenv("HOMARD_ROOT_DIR") == NULL) { + THROW_SALOME_CORBA_EXCEPTION("HOMARD_ROOT_DIR is not defined", SALOME::INTERNAL_ERROR); + } + else { + std::string homard_exec = getenv("HOMARD_ROOT_DIR"); + homard_exec += "/bin/salome/homard"; + if (!SMESH_File(homard_exec).exists()) + THROW_SALOME_CORBA_EXCEPTION("HOMARD module is not built", SALOME::INTERNAL_ERROR); + } + SMESHHOMARD_I::HOMARD_Gen_i* aHomardGen = new SMESHHOMARD_I::HOMARD_Gen_i(); + SMESHHOMARD::HOMARD_Gen_var anObj = aHomardGen->_this(); + return anObj._retn(); +} + +namespace SMESHHOMARD_I +{ + +//============================================================================= +/*! + * standard constructor + */ +//============================================================================= +HOMARD_Boundary_i::HOMARD_Boundary_i() + : SALOME::GenericObj_i(SMESH_Gen_i::GetPOA()) +{ + MESSAGE("Default constructor, not for use"); + ASSERT(0); +} +//============================================================================= +/*! + * standard constructor + */ +//============================================================================= +HOMARD_Boundary_i::HOMARD_Boundary_i(SMESHHOMARD::HOMARD_Gen_var engine) + : SALOME::GenericObj_i(SMESH_Gen_i::GetPOA()) +{ + MESSAGE("HOMARD_Boundary_i"); + _gen_i = engine; + myHomardBoundary = new SMESHHOMARDImpl::HOMARD_Boundary(); + ASSERT(myHomardBoundary); +} +//============================================================================= +/*! + * standard destructor + */ +//============================================================================= +HOMARD_Boundary_i::~HOMARD_Boundary_i() +{ +} +//============================================================================= +//============================================================================= +// Generalites +//============================================================================= +//============================================================================= +void HOMARD_Boundary_i::SetName(const char* Name) +{ + ASSERT(myHomardBoundary); + myHomardBoundary->SetName(Name); +} +//============================================================================= +char* HOMARD_Boundary_i::GetName() +{ + ASSERT(myHomardBoundary); + return CORBA::string_dup(myHomardBoundary->GetName().c_str()); +} +//============================================================================= +char* HOMARD_Boundary_i::GetDumpPython() +{ + ASSERT(myHomardBoundary); + return CORBA::string_dup(myHomardBoundary->GetDumpPython().c_str()); +} +//============================================================================= +//============================================================================= +// Caracteristiques +//============================================================================= +//============================================================================= +void HOMARD_Boundary_i::SetType(CORBA::Long Type) +{ + ASSERT(myHomardBoundary); + myHomardBoundary->SetType(Type); +} +//============================================================================= +CORBA::Long HOMARD_Boundary_i::GetType() +{ + ASSERT(myHomardBoundary); + return CORBA::Long(myHomardBoundary->GetType()); +} +//============================================================================= +void HOMARD_Boundary_i::SetMeshName(const char* MeshName) +{ + ASSERT(myHomardBoundary); + myHomardBoundary->SetMeshName(MeshName); +} +//============================================================================= +char* HOMARD_Boundary_i::GetMeshName() +{ + ASSERT(myHomardBoundary); + return CORBA::string_dup(myHomardBoundary->GetMeshName().c_str()); +} +//============================================================================= +void HOMARD_Boundary_i::SetDataFile(const char* DataFile) +{ + ASSERT(myHomardBoundary); + myHomardBoundary->SetDataFile(DataFile); +} +//============================================================================= +char* HOMARD_Boundary_i::GetDataFile() +{ + ASSERT(myHomardBoundary); + return CORBA::string_dup(myHomardBoundary->GetDataFile().c_str()); +} +//============================================================================= +void HOMARD_Boundary_i::SetCylinder(double X0, double X1, double X2, double X3, double X4, double X5, double X6) +{ + ASSERT(myHomardBoundary); + myHomardBoundary->SetCylinder(X0, X1, X2, X3, X4, X5, X6); +} +//============================================================================= +void HOMARD_Boundary_i::SetSphere(double Xcentre, double Ycentre, double ZCentre, double rayon) +{ + ASSERT(myHomardBoundary); + myHomardBoundary->SetSphere(Xcentre, Ycentre, ZCentre, rayon); +} +//============================================================================= +void HOMARD_Boundary_i::SetConeR(double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1, double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2) +{ + ASSERT(myHomardBoundary); + myHomardBoundary->SetConeR(Xcentre1, Ycentre1, Zcentre1, Rayon1, Xcentre2, Ycentre2, Zcentre2, Rayon2); +} +//============================================================================= +void HOMARD_Boundary_i::SetConeA(double Xaxe, double Yaxe, double Zaxe, double Angle, double Xcentre, double Ycentre, double Zcentre) +{ + ASSERT(myHomardBoundary); + myHomardBoundary->SetConeA(Xaxe, Yaxe, Zaxe, Angle, Xcentre, Ycentre, Zcentre); +} +//============================================================================= +void HOMARD_Boundary_i::SetTorus(double X0, double X1, double X2, double X3, double X4, double X5, double X6, double X7) +{ + ASSERT(myHomardBoundary); + myHomardBoundary->SetTorus(X0, X1, X2, X3, X4, X5, X6, X7); +} +//============================================================================= +SMESHHOMARD::double_array* HOMARD_Boundary_i::GetCoords() +{ + ASSERT(myHomardBoundary); + SMESHHOMARD::double_array_var aResult = new SMESHHOMARD::double_array(); + std::vector mesCoor = myHomardBoundary->GetCoords(); + aResult->length(mesCoor .size()); + std::vector::const_iterator it; + int i = 0; + for (it = mesCoor.begin(); it != mesCoor.end(); it++) + aResult[i++] = (*it); + return aResult._retn(); +} +//============================================================================= +void HOMARD_Boundary_i::SetLimit(double Xincr, double Yincr, double Zincr) +{ + ASSERT(myHomardBoundary); + myHomardBoundary->SetLimit(Xincr, Yincr, Zincr); +} +//============================================================================= +SMESHHOMARD::double_array* HOMARD_Boundary_i::GetLimit() +{ + ASSERT(myHomardBoundary); + SMESHHOMARD::double_array_var aResult = new SMESHHOMARD::double_array(); + std::vector mesCoor = myHomardBoundary->GetLimit(); + aResult->length(mesCoor .size()); + std::vector::const_iterator it; + int i = 0; + for (it = mesCoor.begin(); it != mesCoor.end(); it++) + aResult[i++] = (*it); + return aResult._retn(); +} +//============================================================================= +void HOMARD_Boundary_i::AddGroup(const char* Group) +{ + ASSERT(myHomardBoundary); + myHomardBoundary->AddGroup(Group); +} +//============================================================================= +void HOMARD_Boundary_i::SetGroups(const SMESHHOMARD::ListGroupType& ListGroup) +{ + ASSERT(myHomardBoundary); + std::list ListString; + for (unsigned int i = 0; i < ListGroup.length(); i++) { + ListString.push_back(std::string(ListGroup[i])); + } + myHomardBoundary->SetGroups(ListString); +} +//============================================================================= +SMESHHOMARD::ListGroupType* HOMARD_Boundary_i::GetGroups() +{ + ASSERT(myHomardBoundary); + const std::list& ListString = myHomardBoundary->GetGroups(); + SMESHHOMARD::ListGroupType_var aResult = new SMESHHOMARD::ListGroupType; + aResult->length(ListString.size()); + std::list::const_iterator it; + int i = 0; + for (it = ListString.begin(); it != ListString.end(); it++) + { + aResult[i++] = CORBA::string_dup((*it).c_str()); + } + return aResult._retn(); +} + +//============================================================================= +/*! + * standard constructor + */ +//============================================================================= +HOMARD_Cas_i::HOMARD_Cas_i() + : SALOME::GenericObj_i(SMESH_Gen_i::GetPOA()) +{ + MESSAGE("Default constructor, not for use"); + ASSERT(0); +} + +//============================================================================= +/*! + * standard constructor + */ +//============================================================================= +HOMARD_Cas_i::HOMARD_Cas_i(SMESHHOMARD::HOMARD_Gen_var engine) + : SALOME::GenericObj_i(SMESH_Gen_i::GetPOA()) +{ + MESSAGE("HOMARD_Cas_i"); + _gen_i = engine; + myHomardCas = new SMESHHOMARDImpl::HOMARD_Cas(); + ASSERT(myHomardCas); +} + +//============================================================================= +/*! + * standard destructor + */ +//============================================================================= +HOMARD_Cas_i::~HOMARD_Cas_i() +{ +} +//============================================================================= +char* HOMARD_Cas_i::GetDumpPython() +{ + ASSERT(myHomardCas); + return CORBA::string_dup(myHomardCas->GetDumpPython().c_str()); +} +//============================================================================= +//============================================================================= +// Caracteristiques +//============================================================================= +//============================================================================= +void HOMARD_Cas_i::SetDirName(const char* NomDir) +{ + ASSERT(myHomardCas); + int codret; + // A. recuperation du nom; on ne fait rien si c'est le meme + char* oldrep = GetDirName(); + if (strcmp(oldrep,NomDir) == 0) return; + MESSAGE ("SetDirName : passage de oldrep = "<< oldrep << " a NomDir = "<SetDirName(NomDir); + if (codret != 0) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + std::string text; + if (codret == 1) + text = "The directory for the case cannot be modified because some iterations are already defined."; + else + text = "The directory for the case cannot be reached."; + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + } + + // D. En cas de reprise, deplacement du point de depart + HOMARD_Gen_i* aGenImpl = SMESH::DownCast(_gen_i); + HOMARD_Iteration_i* Iter0 = aGenImpl->GetIteration(0); + int state = Iter0->GetNumber(); + if (state != 0) { // GetState() + MESSAGE ("etat : " << state); + // D.1. Nom local du repertoire de l'iteration de depart dans le repertoire actuel du cas + char* DirNameIter = Iter0->GetDirNameLoc(); + MESSAGE ("SetDirName : nom actuel pour le repertoire de l iteration, DirNameIter = "<< DirNameIter); + // D.2. Recherche d'un nom local pour l'iteration de depart dans le futur repertoire du cas + char* nomDirIter = aGenImpl->CreateDirNameIter(NomDir, 0); + MESSAGE ("SetDirName : nom futur pour le repertoire de l iteration, nomDirIter = "<< nomDirIter); + // D.3. Creation du futur repertoire local pour l'iteration de depart + std::string nomDirIterTotal; + nomDirIterTotal = std::string(NomDir) + "/" + std::string(nomDirIter); +#ifndef WIN32 + if (mkdir(nomDirIterTotal.c_str(), S_IRWXU|S_IRGRP|S_IXGRP) != 0) +#else + if (_mkdir(nomDirIterTotal.c_str()) != 0) +#endif + { + MESSAGE ("nomDirIterTotal : " << nomDirIterTotal); + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + std::string text = "The directory for the starting iteration cannot be created."; + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + } + // D.4. Deplacement du contenu du repertoire + std::string oldnomDirIterTotal; + oldnomDirIterTotal = std::string(oldrep) + "/" + std::string(DirNameIter); + std::string commande = "mv " + std::string(oldnomDirIterTotal) + "/*" + " " + std::string(nomDirIterTotal); + codret = system(commande.c_str()); + if (codret != 0) + { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + std::string text = "The starting point for the case cannot be moved into the new directory."; + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + } + commande = "rm -rf " + std::string(oldnomDirIterTotal); + codret = system(commande.c_str()); + if (codret != 0) + { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + std::string text = "The starting point for the case cannot be deleted."; + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + } + // D.5. Memorisation du nom du repertoire de l'iteration + Iter0->SetDirNameLoc(nomDirIter); + } +} +//============================================================================= +char* HOMARD_Cas_i::GetDirName() +{ + ASSERT(myHomardCas); + return CORBA::string_dup(myHomardCas->GetDirName().c_str()); +} +//============================================================================= +void HOMARD_Cas_i::SetBoundingBox(const SMESHHOMARD::extrema& LesExtrema) +{ + ASSERT(myHomardCas); + std::vector VExtrema; + ASSERT(LesExtrema.length() == 10); + VExtrema.resize(LesExtrema.length()); + for (int i = 0; i < (int)LesExtrema.length(); i++) { + VExtrema[i] = LesExtrema[i]; + } + myHomardCas->SetBoundingBox(VExtrema); +} +//============================================================================= +SMESHHOMARD::extrema* HOMARD_Cas_i::GetBoundingBox() +{ + ASSERT(myHomardCas); + SMESHHOMARD::extrema_var aResult = new SMESHHOMARD::extrema(); + std::vector LesExtremes = myHomardCas->GetBoundingBox(); + ASSERT(LesExtremes.size() == 10); + aResult->length(10); + for (unsigned int i = 0; i < LesExtremes.size(); i++) { + aResult[i] = LesExtremes[i]; + } + return aResult._retn(); +} + +//============================================================================= +void HOMARD_Cas_i::AddGroup(const char* Group) +{ + ASSERT(myHomardCas); + myHomardCas->AddGroup(Group); +} +//============================================================================= +void HOMARD_Cas_i::SetGroups(const SMESHHOMARD::ListGroupType& ListGroup) +{ + ASSERT(myHomardCas); + std::list ListString; + for (unsigned int i = 0; i < ListGroup.length(); i++) + { + ListString.push_back(std::string(ListGroup[i])); + } + myHomardCas->SetGroups(ListString); +} +//============================================================================= +SMESHHOMARD::ListGroupType* HOMARD_Cas_i::GetGroups() +{ + ASSERT(myHomardCas); + const std::list& ListString = myHomardCas->GetGroups(); + SMESHHOMARD::ListGroupType_var aResult = new SMESHHOMARD::ListGroupType(); + aResult->length(ListString.size()); + std::list::const_iterator it; + int i = 0; + for (it = ListString.begin(); it != ListString.end(); it++) { + aResult[i++] = CORBA::string_dup((*it).c_str()); + } + return aResult._retn(); +} + +//============================================================================= +void HOMARD_Cas_i::AddBoundary(const char* BoundaryName) +{ + MESSAGE ("HOMARD_Cas_i::AddBoundary : BoundaryName = "<< BoundaryName); + const char * Group = ""; + AddBoundaryGroup(BoundaryName, Group); +} +//============================================================================= +void HOMARD_Cas_i::AddBoundaryGroup(const char* BoundaryName, const char* Group) +{ + MESSAGE ("HOMARD_Cas_i::AddBoundaryGroup : BoundaryName = "<< BoundaryName << ", Group = " << Group); + ASSERT(myHomardCas); + // A. Préalables + // A.1. Caractéristiques de la frontière à ajouter + SMESHHOMARD::HOMARD_Boundary_ptr myBoundary = _gen_i->GetBoundary(BoundaryName); + ASSERT(!CORBA::is_nil(myBoundary)); + int BoundaryType = myBoundary->GetType(); + MESSAGE (". BoundaryType = " << BoundaryType); + // A.2. La liste des frontiere+groupes + const std::list& ListBoundaryGroup = myHomardCas->GetBoundaryGroup(); + std::list::const_iterator it; + // B. Controles + const char * boun; + int erreur = 0; + while (erreur == 0) + { + // B.1. Si on ajoute une frontière CAO, elle doit être la seule frontière + if (BoundaryType == -1) + { + for (it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++) + { + boun = (*it).c_str(); + MESSAGE (".. Frontiere enregistrée : "<< boun); + if (*it != BoundaryName) + { erreur = 1; + break; } + // On saute le nom du groupe + it++; + } + } + if (erreur != 0) { break; } + // B.2. Si on ajoute une frontière non CAO, il ne doit pas y avoir de frontière CAO + if (BoundaryType != -1) + { + for (it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++) + { + boun = (*it).c_str(); + MESSAGE (".. Frontiere enregistrée : "<< boun); + SMESHHOMARD::HOMARD_Boundary_ptr myBoundary_0 = _gen_i->GetBoundary(boun); + int BoundaryType_0 = myBoundary_0->GetType(); + MESSAGE (".. BoundaryType_0 = " << BoundaryType_0); + if (BoundaryType_0 == -1) + { erreur = 2; + break; } + // On saute le nom du groupe + it++; + } + if (erreur != 0) { break; } + } + // B.3. Si on ajoute une frontière discrète, il ne doit pas y avoir d'autre frontière discrète + if (BoundaryType == 0) + { + for (it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++) + { + boun = (*it).c_str(); + MESSAGE (".. Frontiere enregistrée : "<< boun); + if (boun != BoundaryName) + { + SMESHHOMARD::HOMARD_Boundary_ptr myBoundary_0 = _gen_i->GetBoundary(boun); + int BoundaryType_0 = myBoundary_0->GetType(); + MESSAGE (".. BoundaryType_0 = " << BoundaryType_0); + if (BoundaryType_0 == 0) + { erreur = 3; + break; } + } + // On saute le nom du groupe + it++; + } + if (erreur != 0) { break; } + } + // B.4. Pour une nouvelle frontiere, publication dans l'arbre d'etudes sous le cas + for (it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++) { + MESSAGE (".. Frontiere : "<< *it); + // On saute le nom du groupe + it++; + } + // B.5. Le groupe est-il deja enregistre pour une frontiere de ce cas ? + for (it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++) { + boun = (*it).c_str(); + it++; + MESSAGE (".. Groupe enregistré : "<< *it); + if (*it == Group) { + erreur = 5; + break; + } + } + if (erreur != 0) { break; } + // + break; + } + // F. Si aucune erreur, enregistrement du couple (frontiere,groupe) dans la reference du cas + // Sinon, arrêt + if (erreur == 0) { + myHomardCas->AddBoundaryGroup(BoundaryName, Group); + } + else { + std::stringstream ss; + ss << erreur; + std::string str = ss.str(); + std::string texte; + texte = "Erreur numéro " + str + " pour la frontière à enregistrer : " + std::string(BoundaryName); + if (erreur == 1) { texte += "\nIl existe déjà la frontière "; } + else if (erreur == 2) { texte += "\nIl existe déjà la frontière CAO "; } + else if (erreur == 3) { texte += "\nIl existe déjà une frontière discrète : "; } + else if (erreur == 5) { texte += "\nLe groupe " + std::string(Group) + " est déjà enregistré pour la frontière "; } + texte += std::string(boun); + // + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; +#ifdef _DEBUG_ + texte += "\nInvalid AddBoundaryGroup"; +#endif + INFOS(texte); + es.text = CORBA::string_dup(texte.c_str()); + throw SALOME::SALOME_Exception(es); + } +} +//============================================================================= +SMESHHOMARD::ListBoundaryGroupType* HOMARD_Cas_i::GetBoundaryGroup() +{ + MESSAGE ("GetBoundaryGroup"); + ASSERT(myHomardCas); + const std::list& ListBoundaryGroup = myHomardCas->GetBoundaryGroup(); + SMESHHOMARD::ListBoundaryGroupType_var aResult = new SMESHHOMARD::ListBoundaryGroupType(); + aResult->length(ListBoundaryGroup.size()); + std::list::const_iterator it; + int i = 0; + for (it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++) + { + aResult[i++] = CORBA::string_dup((*it).c_str()); + } + return aResult._retn(); +} +//============================================================================= +void HOMARD_Cas_i::SupprBoundaryGroup() +{ + MESSAGE ("SupprBoundaryGroup"); + ASSERT(myHomardCas); + myHomardCas->SupprBoundaryGroup(); +} + +void HOMARD_Cas_i::AddIteration(const char* NomIteration) +{ + ASSERT(myHomardCas); + myHomardCas->AddIteration(NomIteration); +} + +//============================================================================= +/*! + * standard constructor + */ +//============================================================================= +HOMARD_Iteration_i::HOMARD_Iteration_i() +{ + MESSAGE("Default constructor, not for use"); + ASSERT(0); +} +//============================================================================= +/*! + * standard constructor + */ +//============================================================================= +HOMARD_Iteration_i::HOMARD_Iteration_i(SMESHHOMARD::HOMARD_Gen_var engine) +{ + MESSAGE("constructor"); + _gen_i = engine; + myHomardIteration = new SMESHHOMARDImpl::HOMARD_Iteration(); + ASSERT(myHomardIteration); +} +//============================================================================= +/*! + * standard destructor + */ +//============================================================================= +HOMARD_Iteration_i::~HOMARD_Iteration_i() +{ +} +//============================================================================= +void HOMARD_Iteration_i::SetName(const char* Name) +{ + ASSERT(myHomardIteration); + myHomardIteration->SetName(Name); +} +//============================================================================= +char* HOMARD_Iteration_i::GetName() +{ + ASSERT(myHomardIteration); + return CORBA::string_dup(myHomardIteration->GetName().c_str()); +} +//============================================================================= +void HOMARD_Iteration_i::SetDirNameLoc(const char* NomDir) +{ + ASSERT(myHomardIteration); + myHomardIteration->SetDirNameLoc(NomDir); +} +//============================================================================= +char* HOMARD_Iteration_i::GetDirNameLoc() +{ + ASSERT(myHomardIteration); + return CORBA::string_dup(myHomardIteration->GetDirNameLoc().c_str()); +} +//============================================================================= +char* HOMARD_Iteration_i::GetDirName() +{ + ASSERT(myHomardIteration); + SMESHHOMARD::HOMARD_Cas_ptr caseiter = _gen_i->GetCase(); + std::string dirnamecase = caseiter->GetDirName(); + std::string dirname = dirnamecase + "/" + GetDirNameLoc(); + return CORBA::string_dup(dirname.c_str()); +} +//============================================================================= +void HOMARD_Iteration_i::SetNumber(CORBA::Long NumIter) +{ + ASSERT(myHomardIteration); + myHomardIteration->SetNumber(NumIter); +} +//============================================================================= +CORBA::Long HOMARD_Iteration_i::GetNumber() +{ + ASSERT(myHomardIteration); + return myHomardIteration->GetNumber(); +} +//============================================================================= +void HOMARD_Iteration_i::SetState(CORBA::Long Etat) +{ + ASSERT(myHomardIteration); + myHomardIteration->SetState(Etat); +} +//============================================================================= +CORBA::Long HOMARD_Iteration_i::GetState() +{ + ASSERT(myHomardIteration); + return myHomardIteration->GetState(); +} +//============================================================================= +void HOMARD_Iteration_i::SetMeshName(const char* NomMesh) +{ + ASSERT(myHomardIteration); + myHomardIteration->SetMeshName(NomMesh); +} +//============================================================================= +char* HOMARD_Iteration_i::GetMeshName() +{ + ASSERT(myHomardIteration); + return CORBA::string_dup(myHomardIteration->GetMeshName().c_str()); +} +//============================================================================= +void HOMARD_Iteration_i::SetMeshFile(const char* MeshFile) +{ + ASSERT(myHomardIteration); + myHomardIteration->SetMeshFile(MeshFile); +} +//============================================================================= +char* HOMARD_Iteration_i::GetMeshFile() +{ + ASSERT(myHomardIteration); + return CORBA::string_dup(myHomardIteration->GetMeshFile().c_str()); +} +//============================================================================= +void HOMARD_Iteration_i::SetLogFile(const char* LogFile) +{ + ASSERT(myHomardIteration); + myHomardIteration->SetLogFile(LogFile); +} +//============================================================================= +char* HOMARD_Iteration_i::GetLogFile() +{ + ASSERT(myHomardIteration); + return CORBA::string_dup(myHomardIteration->GetLogFile().c_str()); +} +//============================================================================= +void HOMARD_Iteration_i::SetFileInfo(const char* FileInfo) +{ + ASSERT(myHomardIteration); + myHomardIteration->SetFileInfo(FileInfo); +} +//============================================================================= +char* HOMARD_Iteration_i::GetFileInfo() +{ + ASSERT(myHomardIteration); + return CORBA::string_dup(myHomardIteration->GetFileInfo().c_str()); +} +//============================================================================= +void HOMARD_Iteration_i::SetInfoCompute(CORBA::Long MessInfo) +{ + ASSERT(myHomardIteration); + myHomardIteration->SetInfoCompute(MessInfo); +} +//============================================================================= +CORBA::Long HOMARD_Iteration_i::GetInfoCompute() +{ + ASSERT(myHomardIteration); + return myHomardIteration->GetInfoCompute(); +} + +//============================================================================= +/*! + * standard constructor + */ +//============================================================================= +HOMARD_Gen_i::HOMARD_Gen_i() : SALOME::GenericObj_i(SMESH_Gen_i::GetPOA()), + myIteration0(NULL), + myIteration1(NULL), + _ConfType(0), + _KeepMedOUT(true), + _PublishMeshOUT(false), + _KeepWorkingFiles(false), + _LogInFile(false), + _RemoveLogOnSuccess(false), + _VerboseLevel(0), + _MeshNameOUT(""), + _MeshFileOUT(""), + _LogFile(""), + _CaseOnMedFile(true), + _SmeshMesh(SMESH::SMESH_Mesh::_nil()), + _TmpMeshFile("") +{ + MESSAGE("constructor de HOMARD_Gen_i"); + myHomard = new SMESHHOMARDImpl::HOMARD_Gen; +} + +//============================================================================= +/*! + * standard destructor + */ +//============================================================================= +HOMARD_Gen_i::~HOMARD_Gen_i() +{ + MESSAGE ("HOMARD_Gen_i::~HOMARD_Gen_i()"); +} + +//============================================================================= +//============================================================================= +// Destruction des structures identifiees par leurs noms +//============================================================================= +//============================================================================= +CORBA::Long HOMARD_Gen_i::DeleteBoundary(const char* BoundaryName) +{ + MESSAGE ("DeleteBoundary : BoundaryName = " << BoundaryName); + SMESHHOMARD::HOMARD_Boundary_var myBoundary = _mesBoundarys[BoundaryName]; + if (CORBA::is_nil(myBoundary)) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid boundary"; + throw SALOME::SALOME_Exception(es); + } + + // Boundaries should be deleted only after all cases deletion!!! + + // comme on a un _var comme pointeur CORBA, on ne se preoccupe pas du delete + _mesBoundarys.erase(BoundaryName); + + return 0; +} + +//============================================================================= +CORBA::Long HOMARD_Gen_i::DeleteIteration(int numIter) +{ + MESSAGE ("DeleteIteration : numIter = " << numIter); + + if (numIter == 0) { + if (myIteration0 != NULL) { + delete myIteration0; + myIteration0 = NULL; + } + } + else { + if (myIteration1 != NULL) { + // Invalide Iteration + if (myIteration1->GetState() > 0) { + myIteration1->SetState(1); + if (!_KeepWorkingFiles) { + std::string nomDir = myIteration1->GetDirName(); + std::string commande = "rm -rf " + nomDir; + if (numIter > 0 && !_KeepMedOUT) { + // Remove associated mesh file + std::string nomFichier = myIteration1->GetMeshFile(); + commande = commande + ";rm -rf " + nomFichier; + } + MESSAGE ("commande = " << commande); + if ((system(commande.c_str())) != 0) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "The directory for the calculation cannot be cleared."; + throw SALOME::SALOME_Exception(es); + } + } + } + + delete myIteration1; + myIteration1 = NULL; + } + } + + return 0; +} + +//============================================================================= +//============================================================================= +// Invalidation des structures identifiees par leurs noms +//============================================================================= +//============================================================================= +void HOMARD_Gen_i::InvalideBoundary(const char* BoundaryName) +{ + MESSAGE("InvalideBoundary : BoundaryName = " << BoundaryName); + SMESHHOMARD::HOMARD_Boundary_var myBoundary = _mesBoundarys[BoundaryName]; + if (CORBA::is_nil(myBoundary)) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid boundary"; + throw SALOME::SALOME_Exception(es); + } + else { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "No change is allowed in a boundary. Ask for evolution."; + throw SALOME::SALOME_Exception(es); + } +} + +//============================================================================= +//============================================================================= +// Association de lien entre des structures identifiees par leurs noms +//============================================================================= +//============================================================================= +void HOMARD_Gen_i::AssociateCaseIter(int numIter, const char* labelIter) +{ + MESSAGE("AssociateCaseIter : " << numIter << ", " << labelIter); + + if (CORBA::is_nil(myCase)) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid case"; + throw SALOME::SALOME_Exception(es); + } + + if (numIter == 0) { + if (myIteration0 == NULL) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid iteration"; + throw SALOME::SALOME_Exception(es); + } + + HOMARD_Cas_i* aCaseImpl = SMESH::DownCast(myCase); + aCaseImpl->AddIteration(myIteration0->GetName()); + } + else { + if (myIteration1 == NULL) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid iteration"; + throw SALOME::SALOME_Exception(es); + } + + HOMARD_Cas_i* aCaseImpl = SMESH::DownCast(myCase); + aCaseImpl->AddIteration(myIteration1->GetName()); + } +} + +//============================================================================= +//============================================================================= +// Recuperation des listes +//============================================================================= +//============================================================================= +SMESHHOMARD::listeBoundarys* HOMARD_Gen_i::GetAllBoundarysName() +{ + MESSAGE("GetAllBoundarysName"); + + SMESHHOMARD::listeBoundarys_var ret = new SMESHHOMARD::listeBoundarys; + ret->length(_mesBoundarys.size()); + std::map::const_iterator it; + int i = 0; + for (it = _mesBoundarys.begin(); + it != _mesBoundarys.end(); it++) { + ret[i++] = CORBA::string_dup((*it).first.c_str()); + } + + return ret._retn(); +} + +//============================================================================= +//============================================================================= +// Recuperation des structures identifiees par leurs noms +//============================================================================= +//============================================================================= +SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::GetBoundary(const char* nomBoundary) +{ + SMESHHOMARD::HOMARD_Boundary_var myBoundary = _mesBoundarys[nomBoundary]; + ASSERT(!CORBA::is_nil(myBoundary)); + return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary); +} +//============================================================================= +SMESHHOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::GetCase() +{ + ASSERT(!CORBA::is_nil(myCase)); + return SMESHHOMARD::HOMARD_Cas::_duplicate(myCase); +} +//============================================================================= +HOMARD_Iteration_i* HOMARD_Gen_i::GetIteration(int numIter) +{ + if (numIter == 0) { + ASSERT(myIteration0); + return myIteration0; + } + + ASSERT(myIteration1); + return myIteration1; +} + +//============================================================================= +//============================================================================= +// Nouvelles structures +//============================================================================= +//============================================================================= +SMESHHOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::newCase() +{ + SMESHHOMARD::HOMARD_Gen_var engine = POA_SMESHHOMARD::HOMARD_Gen::_this(); + HOMARD_Cas_i* aServant = new HOMARD_Cas_i(engine); + SMESHHOMARD::HOMARD_Cas_var aCase = SMESHHOMARD::HOMARD_Cas::_narrow(aServant->_this()); + return aCase._retn(); +} +//============================================================================= +HOMARD_Iteration_i* HOMARD_Gen_i::newIteration() +{ + SMESHHOMARD::HOMARD_Gen_var engine = POA_SMESHHOMARD::HOMARD_Gen::_this(); + HOMARD_Iteration_i* aServant = new HOMARD_Iteration_i(engine); + return aServant; +} +//============================================================================= +SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::newBoundary() +{ + SMESHHOMARD::HOMARD_Gen_var engine = POA_SMESHHOMARD::HOMARD_Gen::_this(); + HOMARD_Boundary_i* aServant = new HOMARD_Boundary_i(engine); + SMESHHOMARD::HOMARD_Boundary_var aBoundary = + SMESHHOMARD::HOMARD_Boundary::_narrow(aServant->_this()); + return aBoundary._retn(); +} + +//============================================================================= +// Creation of a case +// MeshName : name of the mesh +// smeshMesh : correspondent mesh +// theWorkingDir : path to working directory +//============================================================================= +SMESHHOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCaseOnMesh (const char* MeshName, + SMESH::SMESH_Mesh_ptr smeshMesh, + const char* theWorkingDir) +{ + INFOS("CreateCaseOnMesh"); + + // A. Controles + // A.1. Controle du nom : + if (!myCase->_is_nil()) { + DeleteCase(); + } + + // A.2. Controle du objet maillage + if (CORBA::is_nil(smeshMesh)) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "The mesh object is null."; + throw SALOME::SALOME_Exception(es); + } + MESSAGE("CreateCaseOnMesh : smeshMesh is not nil"); + + // A.3. Write mesh object in a temporary file in the working directory + std::string aTmpMeshFile = theWorkingDir; + aTmpMeshFile = theWorkingDir; + aTmpMeshFile += std::string("/") + std::string(MeshName) + "_saved_from_SMESH"; + _TmpMeshFile = aTmpMeshFile + ".med"; + SMESH_File aFile (_TmpMeshFile, false); + for (int ii = 1; aFile.exists(); ii++) { + _TmpMeshFile = aTmpMeshFile + std::string("_") + std::to_string(ii) + ".med"; + aFile = SMESH_File(_TmpMeshFile, false); + } + const char* MeshFile = _TmpMeshFile.c_str(); + bool toOverwrite = true; + bool toFindOutDim = true; + + // Prevent dump of ExportMED + { + SMESH::TPythonDump pDump; // do not delete this line of code + smeshMesh->ExportMED(MeshFile, false, -1, toOverwrite, toFindOutDim); + } + + // A.4. Controle du fichier du maillage + med_idt medIdt = MEDfileOpen(MeshFile, MED_ACC_RDONLY); + bool existeMeshFile = medIdt >= 0; + if (existeMeshFile) MEDfileClose(medIdt); + MESSAGE("CreateCaseOnMesh : existeMeshFile = " << existeMeshFile); + if (!existeMeshFile) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "The mesh file does not exist."; + throw SALOME::SALOME_Exception(es); + } + + // B. Creation de l'objet cas + myCase = newCase(); + _CaseOnMedFile = false; + _SmeshMesh = SMESH::SMESH_Mesh::_duplicate(smeshMesh); + + // C. Caracteristiques du maillage + if (existeMeshFile) { + // Les valeurs extremes des coordonnées + //MESSAGE ("CreateCaseOnMesh : Les valeurs extremes des coordonnées"); + std::vector LesExtremes = GetBoundingBoxInMedFile(MeshFile); + SMESHHOMARD::extrema_var aSeq = new SMESHHOMARD::extrema(); + if (LesExtremes.size() != 10) { return 0; } + aSeq->length(10); + for (unsigned int i = 0; i < LesExtremes.size(); i++) + aSeq[i] = LesExtremes[i]; + myCase->SetBoundingBox(aSeq); + // Les groupes + //MESSAGE ("CreateCaseOnMesh : Les groupes"); + std::set LesGroupes = GetListeGroupesInMedFile(MeshFile); + SMESHHOMARD::ListGroupType_var aSeqGroupe = new SMESHHOMARD::ListGroupType; + aSeqGroupe->length(LesGroupes.size()); + std::set::const_iterator it; + int i = 0; + for (it = LesGroupes.begin(); it != LesGroupes.end(); it++) + aSeqGroupe[i++] = (*it).c_str(); + myCase->SetGroups(aSeqGroupe); + } + + // D. L'iteration initiale du cas + MESSAGE ("CreateCaseOnMesh : iteration initiale du cas"); + // D.1. Recherche d'un nom : par defaut, on prend le nom du maillage correspondant. + // Si ce nom d'iteration existe deja, on incremente avec 0, 1, 2, etc. + MESSAGE("CreateCaseOnMesh : ==> NomIteration = " << MeshName); + + // D.2. Creation de l'iteration 0 + myIteration0 = newIteration(); + myIteration0->SetName(MeshName); + AssociateCaseIter(0, "IterationHomard"); + + // D.4. Maillage correspondant + if (existeMeshFile) { + myIteration0->SetMeshFile(MeshFile); + } + myIteration0->SetMeshName(MeshName); + myIteration0->SetNumber(0); + myIteration0->SetState(0); + + // Only after full initialization of Iteration0 + myCase->SetDirName(theWorkingDir); + + return SMESHHOMARD::HOMARD_Cas::_duplicate(myCase); +} + +//============================================================================= +// Creation of a case +// MeshName : name of the mesh +// MeshFile : med file +// theWorkingDir : path to working directory +//============================================================================= +SMESHHOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase(const char* MeshName, + const char* MeshFile, + const char* theWorkingDir) +{ + INFOS("CreateCase : MeshName = " << MeshName << ", MeshFile = " << MeshFile); + + // A. Controles + // A.1. Controle du nom : + if (!myCase->_is_nil()) { + DeleteCase(); + } + + // A.3. Controle du fichier du maillage + med_idt medIdt = MEDfileOpen(MeshFile, MED_ACC_RDONLY); + bool existeMeshFile = medIdt >= 0; + if (existeMeshFile) MEDfileClose(medIdt); + MESSAGE("CreateCase : existeMeshFile = " << existeMeshFile); + if (!existeMeshFile) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "The mesh file does not exist."; + throw SALOME::SALOME_Exception(es); + } + + // B. Creation de l'objet cas + myCase = newCase(); + _CaseOnMedFile = true; + + // C. Caracteristiques du maillage + if (existeMeshFile) { + // Les valeurs extremes des coordonnées + //MESSAGE ("CreateCase : Les valeurs extremes des coordonnées"); + std::vector LesExtremes = GetBoundingBoxInMedFile(MeshFile); + SMESHHOMARD::extrema_var aSeq = new SMESHHOMARD::extrema(); + if (LesExtremes.size() != 10) { return 0; } + aSeq->length(10); + for (unsigned int i = 0; i < LesExtremes.size(); i++) + aSeq[i] = LesExtremes[i]; + myCase->SetBoundingBox(aSeq); + // Les groupes + //MESSAGE ("CreateCase : Les groupes"); + std::set LesGroupes = GetListeGroupesInMedFile(MeshFile); + SMESHHOMARD::ListGroupType_var aSeqGroupe = new SMESHHOMARD::ListGroupType; + aSeqGroupe->length(LesGroupes.size()); + std::set::const_iterator it; + int i = 0; + for (it = LesGroupes.begin(); it != LesGroupes.end(); it++) + aSeqGroupe[i++] = (*it).c_str(); + myCase->SetGroups(aSeqGroupe); + } + + // D. L'iteration initiale du cas + MESSAGE ("CreateCase : iteration initiale du cas"); + // D.1. Recherche d'un nom : par defaut, on prend le nom du maillage correspondant. + // Si ce nom d'iteration existe deja, on incremente avec 0, 1, 2, etc. + MESSAGE("CreateCas : ==> NomIteration = " << MeshName); + + // D.2. Creation de l'iteration + myIteration0 = newIteration(); + myIteration0->SetName(MeshName); + AssociateCaseIter(0, "IterationHomard"); + + // D.4. Maillage correspondant + if (existeMeshFile) { + myIteration0->SetMeshFile(MeshFile); + } + myIteration0->SetMeshName(MeshName); + myIteration0->SetNumber(0); + myIteration0->SetState(0); + + // Only after full initialization of Iteration0 + myCase->SetDirName(theWorkingDir); + + return SMESHHOMARD::HOMARD_Cas::_duplicate(myCase); +} + +//============================================================================= +// Create Iteration1 +//============================================================================= +HOMARD_Iteration_i* HOMARD_Gen_i::CreateIteration() +{ + if (myIteration0 == NULL) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "The parent iteration is not defined."; + throw SALOME::SALOME_Exception(es); + } + + if (CORBA::is_nil(myCase)) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid case context"; + throw SALOME::SALOME_Exception(es); + } + const char* nomDirCase = myCase->GetDirName(); + + if (myIteration1 != NULL) { + DeleteIteration(1); + } + + myIteration1 = newIteration(); + if (myIteration1 == NULL) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Unable to create the iteration 1"; + throw SALOME::SALOME_Exception(es); + } + + // Nom de l'iteration et du maillage + myIteration1->SetName("Iter_1"); + myIteration1->SetMeshName("Iter_1"); + myIteration1->SetState(1); + myIteration1->SetNumber(1); + + int nbitercase = 1; + char* nomDirIter = CreateDirNameIter(nomDirCase, nbitercase); + myIteration1->SetDirNameLoc(nomDirIter); + + // Le nom du fichier du maillage MED est indice par le nombre d'iterations du cas. + // Si on a une chaine unique depuis le depart, ce nombre est le meme que le + // numero d'iteration dans la sucession : maill.01.med, maill.02.med, etc... C'est la + // situation la plus frequente. + // Si on a plusieurs branches, donc des iterations du meme niveau d'adaptation, utiliser + // le nombre d'iterations du cas permet d'eviter les collisions. + int jaux; + if (nbitercase < 100) { jaux = 2; } + else if (nbitercase < 1000) { jaux = 3; } + else if (nbitercase < 10000) { jaux = 4; } + else if (nbitercase < 100000) { jaux = 5; } + else { jaux = 9; } + std::ostringstream iaux; + iaux << std::setw(jaux) << std::setfill('0') << nbitercase; + std::stringstream MeshFile; + MeshFile << nomDirCase << "/maill." << iaux.str() << ".med"; + myIteration1->SetMeshFile(MeshFile.str().c_str()); + + // Association avec le cas + std::string nomIterParent = myIteration0->GetName(); + std::string label = "IterationHomard_" + nomIterParent; + AssociateCaseIter(1, label.c_str()); + + return myIteration1; +} +//============================================================================= +SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundary(const char* BoundaryName, + CORBA::Long BoundaryType) +{ + MESSAGE ("CreateBoundary : BoundaryName = " << BoundaryName << + ", BoundaryType = " << BoundaryType); + + // Controle du nom : + if ((_mesBoundarys).find(BoundaryName) != (_mesBoundarys).end()) { + MESSAGE ("CreateBoundary : la frontiere " << BoundaryName << " existe deja"); + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "This boundary has already been defined"; + throw SALOME::SALOME_Exception(es); + } + + SMESHHOMARD::HOMARD_Boundary_var myBoundary = newBoundary(); + myBoundary->SetName(BoundaryName); + myBoundary->SetType(BoundaryType); + + _mesBoundarys[BoundaryName] = myBoundary; + + return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary); +} +//============================================================================= +SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryCAO(const char* BoundaryName, const char* CAOFile) +{ + MESSAGE ("CreateBoundaryCAO : BoundaryName = " << BoundaryName << ", CAOFile = " << CAOFile); + SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, -1); + myBoundary->SetDataFile(CAOFile); + + return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary); +} +//============================================================================= +SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryDi(const char* BoundaryName, const char* MeshName, const char* MeshFile) +{ + MESSAGE ("CreateBoundaryDi : BoundaryName = " << BoundaryName << ", MeshName = " << MeshName << ", MeshFile = " << MeshFile); + SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 0); + myBoundary->SetDataFile(MeshFile); + myBoundary->SetMeshName(MeshName); + + return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary); +} +//============================================================================= +SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryCylinder(const char* BoundaryName, + CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre, + CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe, + CORBA::Double Rayon) +{ + MESSAGE ("CreateBoundaryCylinder : BoundaryName = " << BoundaryName); +// + SALOME::ExceptionStruct es; + int error = 0; + if (Rayon <= 0.0) + { es.text = "The radius must be positive."; + error = 1; } + double daux = fabs(Xaxe) + fabs(Yaxe) + fabs(Zaxe); + if (daux < 0.0000001) + { es.text = "The axis must be a non 0 vector."; + error = 2; } + if (error != 0) + { + es.type = SALOME::BAD_PARAM; + throw SALOME::SALOME_Exception(es); + return 0; + }; +// + SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 1); + myBoundary->SetCylinder(Xcentre, Ycentre, Zcentre, Xaxe, Yaxe, Zaxe, Rayon); + + return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary); +} +//============================================================================= +SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundarySphere(const char* BoundaryName, + CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre, + CORBA::Double Rayon) +{ + MESSAGE ("CreateBoundarySphere : BoundaryName = " << BoundaryName); +// + SALOME::ExceptionStruct es; + int error = 0; + if (Rayon <= 0.0) + { es.text = "The radius must be positive."; + error = 1; } + if (error != 0) + { + es.type = SALOME::BAD_PARAM; + throw SALOME::SALOME_Exception(es); + return 0; + }; +// + SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 2); + myBoundary->SetSphere(Xcentre, Ycentre, Zcentre, Rayon); + + return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary); +} +//============================================================================= +SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryConeA(const char* BoundaryName, + CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe, CORBA::Double Angle, + CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre) +{ + MESSAGE ("CreateBoundaryConeA : BoundaryName = " << BoundaryName); +// + SALOME::ExceptionStruct es; + int error = 0; + if (Angle <= 0.0 || Angle >= 90.0) + { es.text = "The angle must be included higher than 0 degree and lower than 90 degrees."; + error = 1; } + double daux = fabs(Xaxe) + fabs(Yaxe) + fabs(Zaxe); + if (daux < 0.0000001) + { es.text = "The axis must be a non 0 vector."; + error = 2; } + if (error != 0) + { + es.type = SALOME::BAD_PARAM; + throw SALOME::SALOME_Exception(es); + return 0; + }; +// + SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 3); + myBoundary->SetConeA(Xaxe, Yaxe, Zaxe, Angle, Xcentre, Ycentre, Zcentre); + + return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary); +} +//============================================================================= +SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryConeR(const char* BoundaryName, + CORBA::Double Xcentre1, CORBA::Double Ycentre1, CORBA::Double Zcentre1, CORBA::Double Rayon1, + CORBA::Double Xcentre2, CORBA::Double Ycentre2, CORBA::Double Zcentre2, CORBA::Double Rayon2) +{ + MESSAGE ("CreateBoundaryConeR : BoundaryName = " << BoundaryName); +// + SALOME::ExceptionStruct es; + int error = 0; + if (Rayon1 < 0.0 || Rayon2 < 0.0) + { es.text = "The radius must be positive."; + error = 1; } + double daux = fabs(Rayon2-Rayon1); + if (daux < 0.0000001) + { es.text = "The radius must be different."; + error = 2; } + daux = fabs(Xcentre2-Xcentre1) + fabs(Ycentre2-Ycentre1) + fabs(Zcentre2-Zcentre1); + if (daux < 0.0000001) + { es.text = "The centers must be different."; + error = 3; } + if (error != 0) + { + es.type = SALOME::BAD_PARAM; + throw SALOME::SALOME_Exception(es); + return 0; + }; +// + SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 4); + myBoundary->SetConeR(Xcentre1, Ycentre1, Zcentre1, Rayon1, Xcentre2, Ycentre2, Zcentre2, Rayon2); + + return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary); +} +//============================================================================= +SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryTorus(const char* BoundaryName, + CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre, + CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe, + CORBA::Double RayonRev, CORBA::Double RayonPri) +{ + MESSAGE ("CreateBoundaryTorus : BoundaryName = " << BoundaryName); +// + SALOME::ExceptionStruct es; + int error = 0; + if ((RayonRev <= 0.0) || (RayonPri <= 0.0)) + { es.text = "The radius must be positive."; + error = 1; } + double daux = fabs(Xaxe) + fabs(Yaxe) + fabs(Zaxe); + if (daux < 0.0000001) + { es.text = "The axis must be a non 0 vector."; + error = 2; } + if (error != 0) + { + es.type = SALOME::BAD_PARAM; + throw SALOME::SALOME_Exception(es); + return 0; + }; +// + SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 5); + myBoundary->SetTorus(Xcentre, Ycentre, Zcentre, Xaxe, Yaxe, Zaxe, RayonRev, RayonPri); + + return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary); +} + +//============================================================================= +//============================================================================= +CORBA::Long HOMARD_Gen_i::Compute() +{ + INFOS ("Compute"); + // A. Prealable + int codret = 0; + + // A.0. Create Iteration 1 + CreateIteration(); + myIteration1->SetInfoCompute(_VerboseLevel); + myIteration1->SetMeshName(_MeshNameOUT.c_str()); + myIteration1->SetMeshFile(_MeshFileOUT.c_str()); + if (_LogInFile) myIteration1->SetLogFile(_LogFile.c_str()); + + // A.1. L'objet iteration + ASSERT(myIteration1); + + // A.2. Controle de la possibilite d'agir + // A.2.1. Etat de l'iteration + int etat = myIteration1->GetState(); + MESSAGE ("etat = " << etat); + // A.2.2. On ne calcule pas l'iteration initiale, ni une iteration deja calculee + if (etat == 2) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "This iteration is already computed."; + throw SALOME::SALOME_Exception(es); + } + + // A.3. Numero de l'iteration + // siterp1 : numero de l'iteration a traiter + // Si adaptation : + // siter: numero de l'iteration parent, ou 0 si deja au debut mais cela ne servira pas ! + // Ou si information : + // siter = siterp1 + int NumeIter = myIteration1->GetNumber(); + std::string siterp1; + std::stringstream saux1; + saux1 << NumeIter; + siterp1 = saux1.str(); + if (NumeIter < 10) { siterp1 = "0" + siterp1; } + + std::string siter; + std::stringstream saux0; + int iaux = max(0, NumeIter-1); + saux0 << iaux; + siter = saux0.str(); + if (NumeIter < 11) { siter = "0" + siter; } + + // A.4. Le cas + ASSERT(!CORBA::is_nil(myCase)); + + // B. Les répertoires + // B.1. Le répertoire courant + std::string nomDirWork = getenv("PWD"); + // B.2. Le sous-répertoire de l'iteration a traiter + char* DirCompute = ComputeDirManagement(); + MESSAGE(". DirCompute = " << DirCompute); + + // C. Le fichier des messages + // C.1. Le deroulement de l'execution de HOMARD + std::string LogFile = myIteration1->GetLogFile(); + if (LogFile.empty()) { + LogFile = DirCompute; + LogFile += "/Liste." + siter + ".vers." + siterp1 + ".log"; + myIteration1->SetLogFile(LogFile.c_str()); + } + MESSAGE (". LogFile = " << LogFile); + // C.2. Le bilan de l'analyse du maillage + std::string FileInfo = DirCompute; + FileInfo += "/apad." + siterp1 + ".bilan"; + myIteration1->SetFileInfo(FileInfo.c_str()); + + // D. On passe dans le répertoire de l'iteration a calculer + MESSAGE (". On passe dans DirCompute = " << DirCompute); + CHDIR(DirCompute); + + // E. Les données de l'exécution HOMARD + // E.1. L'objet du texte du fichier de configuration + SMESHHOMARDImpl::HomardDriver* myDriver = new SMESHHOMARDImpl::HomardDriver(siter, siterp1); + myDriver->TexteInit(DirCompute, LogFile, "English"); + + // E.2. Le maillage associe a l'iteration + const char* NomMesh = myIteration1->GetMeshName(); + MESSAGE (". NomMesh = " << NomMesh); + const char* MeshFile = myIteration1->GetMeshFile(); + MESSAGE (". MeshFile = " << MeshFile); + + // E.3. Les données du traitement HOMARD + iaux = 1; + myDriver->TexteMaillageHOMARD(DirCompute, siterp1, iaux); + myDriver->TexteMaillage(NomMesh, MeshFile, 1); + codret = ComputeAdap(myDriver); + + // E.4. Ajout des informations liees a l'eventuel suivi de frontiere + int BoundaryOption = DriverTexteBoundary(myDriver); + + // E.5. Ecriture du texte dans le fichier + MESSAGE (". Ecriture du texte dans le fichier de configuration; codret = "<CreeFichier(); } + + // G. Execution + // + int codretexec = 1789; + if (codret == 0) { + codretexec = myDriver->ExecuteHomard(); + // + MESSAGE ("Erreur en executant HOMARD : " << codretexec); + // En mode adaptation, on ajuste l'etat de l'iteration + if (codretexec == 0) { myIteration1->SetState(2); } + else { myIteration1->SetState(1); } + } + + // H. Gestion des resultats + if (codret == 0) { + std::string Commentaire; + // H.1. Le fichier des messages, dans tous les cas + Commentaire = "log"; + Commentaire += " " + siterp1; + + // H.2. Si tout s'est bien passe : + if (codretexec == 0) { + // H.2.1. Le fichier de bilan + Commentaire = "Summary"; + Commentaire += " " + siterp1; + // H.2.2. Le fichier de maillage obtenu + std::stringstream saux0; + Commentaire = "Mesh"; + Commentaire += " " + siterp1; + if (_PublishMeshOUT) PublishResultInSmesh(MeshFile); + } + // H.3 Message d'erreur + if (codretexec != 0) { + std::string text = ""; + // Message d'erreur en cas de probleme en adaptation + text = "Error during the adaptation.\n"; + bool stopvu = false; + std::ifstream fichier(LogFile.c_str()); + if (fichier) { // ce test échoue si le fichier n'est pas ouvert + std::string ligne; // variable contenant chaque ligne lue + while (std::getline(fichier, ligne)) { + //INFOS(ligne); + if (stopvu) { text += ligne+ "\n"; } + else { + int position = ligne.find("===== HOMARD ===== STOP ====="); + if (position > 0) { stopvu = true; } + } + } + } + text += "\n\nSee the file " + LogFile + "\n"; + INFOS (text); + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + } + } + + // I. Menage et retour dans le répertoire du cas + if (codret == 0) { + delete myDriver; + MESSAGE (". On retourne dans nomDirWork = " << nomDirWork); + CHDIR(nomDirWork.c_str()); + } + + // J. Suivi de la frontière CAO + if (codret == 0) { + if ((BoundaryOption % 5 == 0) && (codretexec == 0)) { + MESSAGE ("Suivi de frontière CAO"); + codret = ComputeCAO(); + } + } + + if (codretexec == 0) { + // Python Dump + PythonDump(); + + // Delete log file, if required + if (myIteration1 != NULL) { + MESSAGE("myIteration1->GetLogFile() = " << myIteration1->GetLogFile()); + if (_LogInFile && _RemoveLogOnSuccess) { + // Remove log file on success + SMESH_File(myIteration1->GetLogFile(), false).remove(); + } + } + + // Clean all data + DeleteCase(); + } + + return codretexec; +} + +void HOMARD_Gen_i::DeleteCase() +{ + MESSAGE ("DeleteCase"); + if (myCase->_is_nil()) return; + + // Delete all boundaries + _mesBoundarys.clear(); + + // Delete iterations + DeleteIteration(1); + DeleteIteration(0); + + // Delete case + myCase = SMESHHOMARD::HOMARD_Cas::_nil(); + + // Delete tmp mesh file + if (!_CaseOnMedFile && !_TmpMeshFile.empty()) { + SMESH_File aFile (_TmpMeshFile, false); + if (aFile.exists()) aFile.remove(); + _TmpMeshFile = ""; + } + _SmeshMesh = SMESH::SMESH_Mesh::_nil(); +} + +//============================================================================= +// Calcul d'une iteration : partie spécifique à l'adaptation +//============================================================================= +CORBA::Long HOMARD_Gen_i::ComputeAdap(SMESHHOMARDImpl::HomardDriver* myDriver) +{ + MESSAGE ("ComputeAdap"); + + // A. Prealable + // A.1. Bases + int codret = 0; + // Numero de l'iteration + int NumeIter = 1; + std::stringstream saux0; + saux0 << NumeIter-1; + std::string siter = saux0.str(); + if (NumeIter < 11) { siter = "0" + siter; } + + // B. L'iteration parent + ASSERT(myIteration0); + + // C. Le sous-répertoire de l'iteration precedente + char* DirComputePa = ComputeDirPaManagement(); + MESSAGE(". DirComputePa = " << DirComputePa); + + // D. Les données de l'adaptation HOMARD + // D.1. Le type de conformite + MESSAGE (". ConfType = " << _ConfType); + + // D.3. Le maillage de depart + const char* NomMeshParent = myIteration0->GetMeshName(); + MESSAGE (". NomMeshParent = " << NomMeshParent); + const char* MeshFileParent = myIteration0->GetMeshFile(); + MESSAGE (". MeshFileParent = " << MeshFileParent); + + // D.4. Le maillage associe a l'iteration + const char* MeshFile = myIteration1->GetMeshFile(); + MESSAGE (". MeshFile = " << MeshFile); + FILE *file = fopen(MeshFile,"r"); + if (file != NULL) { + fclose(file); + // CleanOption = 0 : report an error if output mesh file exists + // CleanOption = 1 : destruction du répertoire d'execution + int CleanOption = 1; + if (CleanOption == 0) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + std::string text = "MeshFile : " + std::string(MeshFile) + " already exists "; + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + } + else { + std::string commande = "rm -f " + std::string(MeshFile); + codret = system(commande.c_str()); + if (codret != 0) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "The mesh file cannot be deleted."; + throw SALOME::SALOME_Exception(es); + } + } + } + + // E. Texte du fichier de configuration + // E.1. Incontournables du texte + myDriver->TexteAdap(); + int iaux = 0; + myDriver->TexteMaillageHOMARD(DirComputePa, siter, iaux); + myDriver->TexteMaillage(NomMeshParent, MeshFileParent, 0); + myDriver->TexteConfRaffDera(_ConfType); + + // E.6. Ajout des options avancees + //myDriver->TexteAdvanced(NivMax, DiamMin, AdapInit, ExtraOutput); + myDriver->TexteAdvanced(-1, -1.0, 0, 1); + + // E.7. Ajout des informations sur le deroulement de l'execution + int MessInfo = myIteration1->GetInfoCompute(); + MESSAGE (". MessInfo = " << MessInfo); + myDriver->TexteInfoCompute(MessInfo); + + return codret; +} +//============================================================================= +// Calcul d'une iteration : partie spécifique au suivi de frontière CAO +//============================================================================= +CORBA::Long HOMARD_Gen_i::ComputeCAO() +{ + MESSAGE ("ComputeCAO"); + + // A. Prealable + // A.1. Bases + int codret = 0; + // A.2. Le sous-répertoire de l'iteration en cours de traitement + char* DirCompute = myIteration1->GetDirName(); + // A.3. Le maillage résultat de l'iteration en cours de traitement + char* MeshFile = myIteration1->GetMeshFile(); + + // B. Les données pour FrontTrack + // B.1. Le maillage à modifier + const std::string theInputMedFile = MeshFile; + MESSAGE (". theInputMedFile = " << theInputMedFile); + + // B.2. Le maillage après modification : fichier identique + const std::string theOutputMedFile = MeshFile; + MESSAGE (". theOutputMedFile = " << theInputMedFile); + + // B.3. La liste des fichiers contenant les numéros des noeuds à bouger + std::vector< std::string > theInputNodeFiles; + MESSAGE (". DirCompute = " << DirCompute); + std::basic_string::size_type bilan; + int icpt = 0; +#ifndef WIN32 + DIR *dp; + struct dirent *dirp; + dp = opendir(DirCompute); + while ((dirp = readdir(dp)) != NULL) + { + std::string file_name(dirp->d_name); + bilan = file_name.find("fr"); + if (bilan != string::npos) + { + std::stringstream filename_total; + filename_total << DirCompute << "/" << file_name; + theInputNodeFiles.push_back(filename_total.str()); + icpt += 1; + } + } +#else + HANDLE hFind = INVALID_HANDLE_VALUE; + WIN32_FIND_DATA ffd; + hFind = FindFirstFile(DirNameStart, &ffd); + if (INVALID_HANDLE_VALUE != hFind) { + while (FindNextFile(hFind, &ffd) != 0) { + std::string file_name(ffd.cFileName); + bilan = file_name.find("fr"); + if (bilan != string::npos) + { + std::stringstream filename_total; + filename_total << DirCompute << "/" << file_name; + theInputNodeFiles.push_back(filename_total.str()); + icpt += 1; + } + } + FindClose(hFind); + } +#endif + for (int i = 0; i < icpt; i++) + { MESSAGE (". theInputNodeFiles["<< i << "] = " << theInputNodeFiles[i]); } + + // B.4. Le fichier de la CAO + SMESHHOMARD::ListBoundaryGroupType* ListBoundaryGroupType = myCase->GetBoundaryGroup(); + std::string BoundaryName = std::string((*ListBoundaryGroupType)[0]); + MESSAGE (". BoundaryName = " << BoundaryName); + SMESHHOMARD::HOMARD_Boundary_var myBoundary = _mesBoundarys[BoundaryName]; + const std::string theXaoFileName = myBoundary->GetDataFile(); + MESSAGE (". theXaoFileName = " << theXaoFileName); + + // C. Lancement des projections + MESSAGE (". Lancement des projections"); + + assert(Py_IsInitialized()); + PyGILState_STATE gstate; + gstate = PyGILState_Ensure(); + PyRun_SimpleString("from FrontTrack import FrontTrack"); + // FrontTrack().track( fic_med_brut, fic_med_new, l_fr, xao_file ) + std::string pyCommand ("FrontTrack().track( \""); + pyCommand += theInputMedFile + "\", \"" + theOutputMedFile + "\", ["; + for (int i = 0; i < icpt; i++) { + if (i > 0) pyCommand += ", "; + pyCommand += "\""; + pyCommand += theInputNodeFiles[i]; + pyCommand += "\""; + } + pyCommand += "], \"" + theXaoFileName + "\", False )"; + MESSAGE (". Lancement des projections: pyCommand = " << pyCommand); + PyRun_SimpleString(pyCommand.c_str()); + PyGILState_Release(gstate); + + // D. Transfert des coordonnées modifiées dans le fichier historique de HOMARD + // On lance une exécution spéciale de HOMARD en attendant + // de savoir le faire avec MEDCoupling + MESSAGE (". Transfert des coordonnées"); + codret = ComputeCAObis(); + + return codret; +} +//============================================================================= +//============================================================================= +// Transfert des coordonnées en suivi de frontière CAO +//============================================================================= +CORBA::Long HOMARD_Gen_i::ComputeCAObis() +{ + MESSAGE ("ComputeCAObis"); + + // A. Prealable + int codret = 0; + + // A.1. Controle de la possibilite d'agir + // A.1.1. Etat de l'iteration + int etat = myIteration1->GetState(); + MESSAGE ("etat = " << etat); + // A.1.2. L'iteration doit être calculee + if (etat == 1) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "This iteration is not computed."; + throw SALOME::SALOME_Exception(es); + return 1; + } + // A.2. Numero de l'iteration + // siterp1 : numero de l'iteration a traiter + int NumeIter = myIteration1->GetNumber(); + std::string siterp1; + std::stringstream saux1; + saux1 << NumeIter; + siterp1 = saux1.str(); + if (NumeIter < 10) { siterp1 = "0" + siterp1; } + MESSAGE ("siterp1 = "<GetDirName(); + MESSAGE(". DirCompute = " << DirCompute); + + // C. Le fichier des messages + std::string LogFile = DirCompute; + LogFile += "/Liste." + siterp1 + ".maj_coords.log"; + MESSAGE (". LogFile = " << LogFile); + myIteration1->SetFileInfo(LogFile.c_str()); + + // D. On passe dans le répertoire de l'iteration a calculer + MESSAGE (". On passe dans DirCompute = " << DirCompute); + CHDIR(DirCompute); + + // E. Les données de l'exécution HOMARD + // E.1. L'objet du texte du fichier de configuration + SMESHHOMARDImpl::HomardDriver* myDriver = new SMESHHOMARDImpl::HomardDriver("", siterp1); + myDriver->TexteInit(DirCompute, LogFile, "English"); + + // E.2. Le maillage associe a l'iteration + const char* NomMesh = myIteration1->GetMeshName(); + MESSAGE (". NomMesh = " << NomMesh); + const char* MeshFile = myIteration1->GetMeshFile(); + MESSAGE (". MeshFile = " << MeshFile); + + // E.3. Les données du traitement HOMARD + myDriver->TexteMajCoords(NumeIter); + int iaux = 0; + myDriver->TexteMaillageHOMARD(DirCompute, siterp1, iaux); + myDriver->TexteMaillage(NomMesh, MeshFile, 0); + // + // E.4. Ecriture du texte dans le fichier + MESSAGE (". Ecriture du texte dans le fichier de configuration; codret = "<CreeFichier(); + + // F. Execution + // + int codretexec = 1789; + if (codret == 0) { + codretexec = myDriver->ExecuteHomard(); + MESSAGE ("Erreur en executant HOMARD : " << codretexec); + } + + // G. Gestion des resultats + if (codret == 0) { + // G.1. Le fichier des messages, dans tous les cas + std::string Commentaire = "logmaj_coords"; + // G.2 Message d'erreur + if (codretexec != 0) { + std::string text = "\n\nSee the file " + LogFile + "\n"; + INFOS (text); + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + + // On force le succes pour pouvoir consulter le fichier log + codretexec = 0; + } + } + + // H. Menage et retour dans le répertoire du cas + if (codret == 0) { delete myDriver; } + + return codret; +} +//============================================================================= +// Creation d'un nom de sous-répertoire pour l'iteration au sein d'un répertoire parent +// nomrep : nom du répertoire parent +// num : le nom du sous-répertoire est sous la forme 'In', n est >= num +//============================================================================= +char* HOMARD_Gen_i::CreateDirNameIter(const char* nomrep, CORBA::Long num) +{ + MESSAGE ("CreateDirNameIter : nomrep ="<< nomrep << ", num = "<d_name); +#else + HANDLE hFind = INVALID_HANDLE_VALUE; + WIN32_FIND_DATA ffd; + hFind = FindFirstFile(nomrep, &ffd); + if (INVALID_HANDLE_VALUE != hFind) { + while (FindNextFile(hFind, &ffd) != 0) { + if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue; //skip directories + std::string file_name(ffd.cFileName); +#endif + if (file_name == DirNameA.str()) { existe = true; } + } +#ifndef WIN32 + closedir(dp); +#else + FindClose(hFind); +#endif + if (!existe) + { + DirName = DirNameA.str(); + a_chercher = false; + break; + } + } + num += 1; + } + + MESSAGE ("==> DirName = " << DirName); + MESSAGE (". On retourne dans nomDirActuel = " << nomDirActuel); + CHDIR(nomDirActuel.c_str()); + return CORBA::string_dup(DirName.c_str()); +} +//============================================================================= +// Calcul d'une iteration : gestion du répertoire de calcul +//============================================================================= +char* HOMARD_Gen_i::ComputeDirManagement() +{ + MESSAGE ("ComputeDirManagement : répertoires pour le calcul"); + + //Si le sous-répertoire existe : + // CleanOption = 0 : on sort en erreur si le répertoire n'est pas vide + // CleanOption = 1 : on fait le menage du répertoire + // CleanOption = -1 : on ne fait rien + int CleanOption = 0; + + // B.2. Le répertoire du cas + const char* nomDirCase = myCase->GetDirName(); + MESSAGE (". nomDirCase = " << nomDirCase); + + // B.3. Le sous-répertoire de l'iteration a calculer, puis le répertoire complet a creer + // B.3.1. Le nom du sous-répertoire + const char* nomDirIt = myIteration1->GetDirNameLoc(); + + // B.3.2. Le nom complet du sous-répertoire + std::stringstream DirCompute; + DirCompute << nomDirCase << "/" << nomDirIt; + MESSAGE (". DirCompute = " << DirCompute.str()); + + // B.3.3. Si le sous-répertoire n'existe pas, on le cree + if (CHDIR(DirCompute.str().c_str()) != 0) + { +#ifndef WIN32 + if (mkdir(DirCompute.str().c_str(), S_IRWXU|S_IRGRP|S_IXGRP) != 0) +#else + if (_mkdir(DirCompute.str().c_str()) != 0) +#endif + { + // GERALD -- QMESSAGE BOX + std::cerr << "Pb Creation du répertoire DirCompute = " << DirCompute.str() << std::endl; + VERIFICATION("Pb a la creation du répertoire" == 0); + } + } + else + { + // Le répertoire existe + // On demande de faire le menage de son contenu : + if (CleanOption == 1) { + MESSAGE (". Menage du répertoire DirCompute = " << DirCompute.str()); + std::string commande = "rm -rf " + DirCompute.str()+"/*"; + int codret = system(commande.c_str()); + if (codret != 0) + { + // GERALD -- QMESSAGE BOX + std::cerr << ". Menage du répertoire de calcul" << DirCompute.str() << std::endl; + VERIFICATION("Pb au menage du répertoire de calcul" == 0); + } + } + // On n'a pas demande de faire le menage de son contenu : on sort en erreur : + else { + if (CleanOption == 0) { +#ifndef WIN32 + DIR *dp; + struct dirent *dirp; + dp = opendir(DirCompute.str().c_str()); + bool result = true; + while ((dirp = readdir(dp)) != NULL && result) + { + std::string file_name(dirp->d_name); + result = file_name.empty() || file_name == "." || file_name == ".."; //if any file - break and return false + } + closedir(dp); +#else + HANDLE hFind = INVALID_HANDLE_VALUE; + WIN32_FIND_DATA ffd; + hFind = FindFirstFile(DirCompute.str().c_str(), &ffd); + bool result = true; + if (INVALID_HANDLE_VALUE != hFind) { + while (FindNextFile(hFind, &ffd) != 0) { + if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue; //skip directories + std::string file_name(ffd.cFileName); + result = file_name.empty() || file_name == "." || file_name == ".."; //if any file - break and return false + } + } + FindClose(hFind); +#endif + if (result == false) + { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + std::string text = "Directory : " + DirCompute.str() + " is not empty"; + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + VERIFICATION("Directory is not empty" == 0); + } + } + } + } + + return CORBA::string_dup(DirCompute.str().c_str()); +} +//============================================================================= +// Calcul d'une iteration : gestion du répertoire de calcul de l'iteration parent +//============================================================================= +char* HOMARD_Gen_i::ComputeDirPaManagement() +{ + MESSAGE ("ComputeDirPaManagement : répertoires pour le calcul"); + // Le répertoire du cas + const char* nomDirCase = myCase->GetDirName(); + MESSAGE (". nomDirCase = " << nomDirCase); + + // Le sous-répertoire de l'iteration precedente + + const char* nomDirItPa = myIteration0->GetDirNameLoc(); + std::stringstream DirComputePa; + DirComputePa << nomDirCase << "/" << nomDirItPa; + MESSAGE(". nomDirItPa = " << nomDirItPa); + MESSAGE(". DirComputePa = " << DirComputePa.str()); + + return CORBA::string_dup(DirComputePa.str().c_str()); +} + +//============================================================================= +// Calcul d'une iteration : ecriture des frontieres dans le fichier de configuration +// On ecrit dans l'ordre : +// 1. la definition des frontieres +// 2. les liens avec les groupes +// 3. un entier resumant le type de comportement pour les frontieres +//============================================================================= +int HOMARD_Gen_i::DriverTexteBoundary(SMESHHOMARDImpl::HomardDriver* myDriver) +{ + MESSAGE ("... DriverTexteBoundary"); + // 1. Recuperation des frontieres + std::list ListeBoundaryTraitees; + SMESHHOMARD::ListBoundaryGroupType* ListBoundaryGroupType = myCase->GetBoundaryGroup(); + int numberOfitems = ListBoundaryGroupType->length(); + MESSAGE ("... number of string for Boundary+Group = " << numberOfitems); + int BoundaryOption = 1; + // 2. Parcours des frontieres pour ecrire leur description + int NumBoundaryAnalytical = 0; + for (int NumBoundary = 0; NumBoundary< numberOfitems; NumBoundary=NumBoundary+2) + { + std::string BoundaryName = std::string((*ListBoundaryGroupType)[NumBoundary]); + MESSAGE ("... BoundaryName = " << BoundaryName); + // 2.1. La frontiere a-t-elle deja ete ecrite ? + // Cela arrive quand elle est liee a plusieurs groupes. Il ne faut l'ecrire que la premiere fois + int A_faire = 1; + std::list::const_iterator it = ListeBoundaryTraitees.begin(); + while (it != ListeBoundaryTraitees.end()) + { + MESSAGE ("..... BoundaryNameTraitee = " << *it); + if (BoundaryName == *it) { A_faire = 0; } + it++; + } + // 2.2. Ecriture de la frontiere + if (A_faire == 1) + { + // 2.2.1. Caracteristiques de la frontiere + SMESHHOMARD::HOMARD_Boundary_var myBoundary = _mesBoundarys[BoundaryName]; + ASSERT(!CORBA::is_nil(myBoundary)); + int BoundaryType = myBoundary->GetType(); + MESSAGE ("... BoundaryType = " << BoundaryType); + // 2.2.2. Ecriture selon le type + // 2.2.2.1. Cas d une frontiere CAO + if (BoundaryType == -1) + { +// const char* CAOFile = myBoundary->GetDataFile(); +// MESSAGE (". CAOFile = " << CAOFile); + if (BoundaryOption % 5 != 0) { BoundaryOption = BoundaryOption*5; } + } + // 2.2.2.2. Cas d une frontiere discrete + else if (BoundaryType == 0) + { + const char* MeshName = myBoundary->GetMeshName(); + MESSAGE (". MeshName = " << MeshName); + const char* MeshFile = myBoundary->GetDataFile(); + MESSAGE (". MeshFile = " << MeshFile); + myDriver->TexteBoundaryDi(MeshName, MeshFile); + if (BoundaryOption % 2 != 0) { BoundaryOption = BoundaryOption*2; } + } + // 2.2.2.3. Cas d une frontiere analytique + else + { + NumBoundaryAnalytical++; + SMESHHOMARD::double_array* coor = myBoundary->GetCoords(); + if (BoundaryType == 1) // Cas d un cylindre + { + myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6], 0.); + if (BoundaryOption % 3 != 0) { BoundaryOption = BoundaryOption*3; } + } + else if (BoundaryType == 2) // Cas d une sphere + { + myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], 0., 0., 0., 0.); + if (BoundaryOption % 3 != 0) { BoundaryOption = BoundaryOption*3; } + } + else if (BoundaryType == 3) // Cas d un cone defini par un axe et un angle + { + myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6], 0.); + if (BoundaryOption % 3 != 0) { BoundaryOption = BoundaryOption*3; } + } + else if (BoundaryType == 4) // Cas d un cone defini par les 2 rayons + { + myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6], (*coor)[7]); + if (BoundaryOption % 3 != 0) { BoundaryOption = BoundaryOption*3; } + } + else if (BoundaryType == 5) // Cas d un tore + { + myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6], (*coor)[7]); + if (BoundaryOption % 3 != 0) { BoundaryOption = BoundaryOption*3; } + } + } + // 2.2.3. Memorisation du traitement + ListeBoundaryTraitees.push_back(BoundaryName); + } + } + // 3. Parcours des frontieres pour ecrire les liens avec les groupes + NumBoundaryAnalytical = 0; + for (int NumBoundary = 0; NumBoundary< numberOfitems; NumBoundary=NumBoundary+2) + { + std::string BoundaryName = std::string((*ListBoundaryGroupType)[NumBoundary]); + MESSAGE ("... BoundaryName = " << BoundaryName); + SMESHHOMARD::HOMARD_Boundary_var myBoundary = _mesBoundarys[BoundaryName]; + ASSERT(!CORBA::is_nil(myBoundary)); + int BoundaryType = myBoundary->GetType(); + MESSAGE ("... BoundaryType = " << BoundaryType); + // 3.1. Recuperation du nom du groupe + std::string GroupName = std::string((*ListBoundaryGroupType)[NumBoundary+1]); + MESSAGE ("... GroupName = " << GroupName); + // 3.2. Cas d une frontiere CAO + if (BoundaryType == -1) + { + if (GroupName.size() > 0) { myDriver->TexteBoundaryCAOGr (GroupName); } + } + // 3.3. Cas d une frontiere discrete + else if (BoundaryType == 0) + { + if (GroupName.size() > 0) { myDriver->TexteBoundaryDiGr (GroupName); } + } + // 3.4. Cas d une frontiere analytique + else + { + NumBoundaryAnalytical++; + myDriver->TexteBoundaryAnGr (BoundaryName, NumBoundaryAnalytical, GroupName); + } + } + // 4. Ecriture de l'option finale + myDriver->TexteBoundaryOption(BoundaryOption); +// + return BoundaryOption; +} +//=========================================================================== +//=========================================================================== + +//=========================================================================== +// Publication +//=========================================================================== +void HOMARD_Gen_i::PublishResultInSmesh(const char* NomFich) +{ + // Prevent dump of CreateMeshesFromMED + SMESH::TPythonDump pDump; // do not delete this line of code + + MESSAGE("PublishResultInSmesh " << NomFich); + if (CORBA::is_nil(SMESH_Gen_i::GetSMESHGen()->getStudyServant())) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid study context"; + throw SALOME::SALOME_Exception(es); + } + + // Le module SMESH est-il actif ? + SALOMEDS::SObject_var aSmeshSO = + SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindComponent("SMESH"); + // + // TODO? + // Temporary suppressed depublication of mesh with the same name of file + /* + if (!CORBA::is_nil(aSmeshSO)) { + // On verifie que le fichier n est pas deja publie + SALOMEDS::ChildIterator_var aIter = + SMESH_Gen_i::GetSMESHGen()->getStudyServant()->NewChildIterator(aSmeshSO); + for (; aIter->More(); aIter->Next()) { + SALOMEDS::SObject_var aSO = aIter->Value(); + SALOMEDS::GenericAttribute_var aGAttr; + if (aSO->FindAttribute(aGAttr, "AttributeExternalFileDef")) { + SALOMEDS::AttributeExternalFileDef_var anAttr = + SALOMEDS::AttributeExternalFileDef::_narrow(aGAttr); + CORBA::String_var value = anAttr->Value(); + if (strcmp((const char*)value, NomFich) == 0) { + MESSAGE ("PublishResultInSmesh : le fichier " << NomFich << " est deja publie."); + // Pour un fichier importe, on ne republie pas + // Option = 0 : fichier issu d'une importation + // Option = 1 : fichier issu d'une execution HOMARD + if (Option == 0) { return; } + // Pour un fichier calcule, on commence par faire la depublication + else { + MESSAGE("PublishResultInSmesh : depublication"); + if (aSO->FindAttribute(aGAttr, "AttributeName")) { + SALOMEDS::AttributeName_var anAttr2 = SALOMEDS::AttributeName::_narrow(aGAttr); + CORBA::String_var value2 = anAttr2->Value(); + std::string MeshName = string(value2); + MESSAGE("PublishResultInSmesh : depublication de " << MeshName); + DeleteResultInSmesh(NomFich, MeshName); + } + } + } + } + } + } + */ + + // On enregistre le fichier + MESSAGE("Enregistrement du fichier"); + // + //SMESH::SMESH_Gen_var aSmeshEngine = this->retrieveSMESHInst(); + SMESH_Gen_i* aSmeshEngine = SMESH_Gen_i::GetSMESHGen(); + // + //ASSERT(!CORBA::is_nil(aSmeshEngine)); + aSmeshEngine->UpdateStudy(); + SMESH::DriverMED_ReadStatus theStatus; + + // On met a jour les attributs AttributeExternalFileDef et AttributePixMap + SMESH::mesh_array* mesMaillages = aSmeshEngine->CreateMeshesFromMED(NomFich, theStatus); + if (CORBA::is_nil(aSmeshSO)) { + aSmeshSO = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindComponent("SMESH"); + if (CORBA::is_nil(aSmeshSO)) return; + } + + for (int i = 0; i < (int)mesMaillages->length(); i++) { + MESSAGE(". Mise a jour des attributs du maillage"); + SMESH::SMESH_Mesh_var monMaillage = (*mesMaillages)[i]; + SALOMEDS::SObject_var aSO = SALOMEDS::SObject::_narrow + (SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectIOR + (SMESH_Gen_i::GetORB()->object_to_string(monMaillage))); + SALOMEDS::StudyBuilder_var aStudyBuilder = + SMESH_Gen_i::GetSMESHGen()->getStudyServant()->NewBuilder(); + SALOMEDS::GenericAttribute_var aGAttr = + aStudyBuilder->FindOrCreateAttribute(aSO, "AttributeExternalFileDef"); + SALOMEDS::AttributeExternalFileDef_var anAttr = + SALOMEDS::AttributeExternalFileDef::_narrow(aGAttr); + anAttr->SetValue(NomFich); + SALOMEDS::GenericAttribute_var aPixMap = + aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePixMap"); + SALOMEDS::AttributePixMap_var anAttr2 = SALOMEDS::AttributePixMap::_narrow(aPixMap); + anAttr2->SetPixMap("mesh_tree_mesh.png"); + } +} + +//============================================================================= +void HOMARD_Gen_i::DeleteResultInSmesh(std::string NomFich, std::string MeshName) +{ + MESSAGE ("DeleteResultInSmesh pour le maillage " << MeshName << " dans le fichier " << NomFich); + if (CORBA::is_nil(SMESH_Gen_i::GetSMESHGen()->getStudyServant())) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + es.text = "Invalid study context"; + throw SALOME::SALOME_Exception(es); + } + + // Le module SMESH est-il actif ? + SALOMEDS::SObject_var aSmeshSO = + SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindComponent("SMESH"); + // + if (CORBA::is_nil(aSmeshSO)) return; + // On verifie que le fichier est deja publie + SALOMEDS::StudyBuilder_var myBuilder = + SMESH_Gen_i::GetSMESHGen()->getStudyServant()->NewBuilder(); + SALOMEDS::ChildIterator_var aIter = + SMESH_Gen_i::GetSMESHGen()->getStudyServant()->NewChildIterator(aSmeshSO); + for (; aIter->More(); aIter->Next()) { + SALOMEDS::SObject_var aSO = aIter->Value(); + SALOMEDS::GenericAttribute_var aGAttr; + if (aSO->FindAttribute(aGAttr, "AttributeExternalFileDef")) { + SALOMEDS::AttributeExternalFileDef_var anAttr = + SALOMEDS::AttributeExternalFileDef::_narrow(aGAttr); + CORBA::String_var value = anAttr->Value(); + if (strcmp((const char*)value, NomFich.c_str()) == 0) { + if (aSO->FindAttribute(aGAttr, "AttributeName")) { + SALOMEDS::AttributeName_var anAttr2 = SALOMEDS::AttributeName::_narrow(aGAttr); + CORBA::String_var value2 = anAttr2->Value(); + if (strcmp((const char*)value2, MeshName.c_str()) == 0) { + myBuilder->RemoveObjectWithChildren(aSO); + } + } + } + } + } +} + +void HOMARD_Gen_i::PythonDump() +{ + MESSAGE ("Begin PythonDump"); + SMESH::TPythonDump pd; + + // SMESH_Homard + pd << "import SMESHHOMARD\n"; + //pd << "smeshhomard = " << SMESH_Gen_i::GetSMESHGen() << ".CreateHOMARD_ADAPT()\n"; + pd << "smeshhomard = " << SMESH_Gen_i::GetSMESHGen() << ".Adaptation(\"Uniform\")\n"; + + // Boundaries + if (_mesBoundarys.size() > 0) MESSAGE(". Creation of the boundaries"); + std::map::const_iterator it_boundary; + for (it_boundary = _mesBoundarys.begin(); + it_boundary != _mesBoundarys.end(); ++it_boundary) { + SMESHHOMARD::HOMARD_Boundary_var maBoundary = (*it_boundary).second; + //MESSAGE ("PythonDump of boundary " << (*it_boundary).first << + // " : " << maBoundary->GetDumpPython()); + pd << maBoundary->GetDumpPython(); + } + + // Case + ASSERT(!myCase->_is_nil()); + MESSAGE (". Creation of the case"); + + if (_CaseOnMedFile) { + pd << "smeshhomard.CreateCase(\"" << myIteration0->GetMeshName(); + pd << "\", \"" << myIteration0->GetMeshFile(); + pd << "\", \"" << myCase->GetDirName() << "\")\n"; + } + else { + pd << "smeshhomard.CreateCaseOnMesh(\"" << myIteration0->GetMeshName(); + pd << "\", " << _SmeshMesh; + pd << ".GetMesh(), \"" << myCase->GetDirName() << "\")\n"; + } + + pd << myCase->GetDumpPython(); + + // Preferences + pd << "smeshhomard.SetConfType(" << _ConfType << ")\n"; + pd << "smeshhomard.SetKeepMedOUT(" << (_KeepMedOUT ? "True" : "False") << ")\n"; + pd << "smeshhomard.SetPublishMeshOUT(" << (_PublishMeshOUT ? "True" : "False") << ")\n"; + pd << "smeshhomard.SetMeshNameOUT(\"" << _MeshNameOUT << "\")\n"; + pd << "smeshhomard.SetMeshFileOUT(\"" << _MeshFileOUT << "\")\n"; + + pd << "smeshhomard.SetKeepWorkingFiles(" << (_KeepWorkingFiles ? "True" : "False") << ")\n"; + pd << "smeshhomard.SetLogInFile(" << (_LogInFile ? "True" : "False") << ")\n"; + if (_LogInFile) pd << "smeshhomard.SetLogFile(\"" << _LogFile << "\")\n"; + pd << "smeshhomard.SetRemoveLogOnSuccess(" << (_RemoveLogOnSuccess ? "True" : "False") << ")\n"; + pd << "smeshhomard.SetVerboseLevel(" << _VerboseLevel << ")\n"; + + // Compute + pd << "smeshhomard.Compute()\n"; + MESSAGE ("End PythonDump"); +} + +void HOMARD_Gen_i::AddBoundary(const char* BoundaryName) +{ + MESSAGE("HOMARD_Gen_i::AddBoundary : BoundaryName = " << BoundaryName); + if (myCase->_is_nil()) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + std::string text = "The input mesh must be defined before boundary addition"; + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + } + myCase->AddBoundary(BoundaryName); +} + +void HOMARD_Gen_i::AddBoundaryGroup(const char* BoundaryName, const char* Group) +{ + MESSAGE("HOMARD_Gen_i::AddBoundaryGroup : BoundaryName = " << + BoundaryName << ", Group = " << Group); + if (myCase->_is_nil()) { + SALOME::ExceptionStruct es; + es.type = SALOME::BAD_PARAM; + std::string text = "The input mesh must be defined before boundary group addition"; + es.text = CORBA::string_dup(text.c_str()); + throw SALOME::SALOME_Exception(es); + } + myCase->AddBoundaryGroup(BoundaryName, Group); +} + +//=============================================================================== +// Preferences +//=============================================================================== +void HOMARD_Gen_i::SetConfType(CORBA::Long theConfType) +{ + _ConfType = theConfType; +} +void HOMARD_Gen_i::SetKeepMedOUT(bool theKeepMedOUT) +{ + _KeepMedOUT = theKeepMedOUT; +} +void HOMARD_Gen_i::SetPublishMeshOUT(bool thePublishMeshOUT) +{ + _PublishMeshOUT = thePublishMeshOUT; +} +void HOMARD_Gen_i::SetKeepWorkingFiles(bool theKeepWorkingFiles) +{ + _KeepWorkingFiles = theKeepWorkingFiles; +} +void HOMARD_Gen_i::SetLogInFile(bool theLogInFile) +{ + _LogInFile = theLogInFile; +} +void HOMARD_Gen_i::SetRemoveLogOnSuccess(bool theRemoveLogOnSuccess) +{ + _RemoveLogOnSuccess = theRemoveLogOnSuccess; +} +void HOMARD_Gen_i::SetVerboseLevel(CORBA::Long theVerboseLevel) +{ + _VerboseLevel = theVerboseLevel; +} +void HOMARD_Gen_i::SetMeshNameOUT(const char* theMeshNameOUT) +{ + _MeshNameOUT = theMeshNameOUT; +} +void HOMARD_Gen_i::SetMeshFileOUT(const char* theMeshFileOUT) +{ + _MeshFileOUT = theMeshFileOUT; +} +void HOMARD_Gen_i::SetLogFile(const char* theLogFile) +{ + _LogFile = theLogFile; +} + +// ======================================================================= +std::set GetListeGroupesInMedFile(const char * aFile) +{ + std::set ListeGroupes; + med_err erreur = 0; + med_idt medIdt; + while (erreur == 0) { + // Ouverture du fichier + medIdt = MEDfileOpen(aFile,MED_ACC_RDONLY); + if (medIdt < 0) { + erreur = 1; + break; + } + // Caracteristiques du maillage + char meshname[MED_NAME_SIZE+1]; + med_int spacedim,meshdim; + med_mesh_type meshtype; + char descriptionription[MED_COMMENT_SIZE+1]; + char dtunit[MED_SNAME_SIZE+1]; + med_sorting_type sortingtype; + med_int nstep; + med_axis_type axistype; + int naxis = MEDmeshnAxis(medIdt,1); + char *axisname=new char[naxis*MED_SNAME_SIZE+1]; + char *axisunit=new char[naxis*MED_SNAME_SIZE+1]; + erreur = MEDmeshInfo(medIdt, + 1, + meshname, + &spacedim, + &meshdim, + &meshtype, + descriptionription, + dtunit, + &sortingtype, + &nstep, + &axistype, + axisname, + axisunit); + delete[] axisname; + delete[] axisunit; + if (erreur < 0) { break; } + // Nombre de familles + med_int nfam; + nfam = MEDnFamily(medIdt,meshname); + if (nfam < 0) { + erreur = 2; + break; + } + // Lecture des caracteristiques des familles + for (int i=0;i 0) { + char familyname[MED_NAME_SIZE+1]; + med_int numfam; + char* gro = (char*) malloc(MED_LNAME_SIZE*ngro+1); + erreur = MEDfamilyInfo(medIdt, + meshname, + i+1, + familyname, + &numfam, + gro); + if (erreur < 0) { + free(gro); + break; + } + // Lecture des groupes pour une famille de mailles + if (numfam < 0) { + for (int j=0;j 0) MEDfileClose(medIdt); + + return ListeGroupes; +} + +// ======================================================================= +// Le vecteur en retour contiendra les informations suivantes : +// en position 0 et 1 Xmin, Xmax et en position 2 Dx si < 0 2D +// en position 3 et 4 Ymin, Ymax et en position 5 Dy si < 0 2D +// en position 6 et 7 Zmin, Zmax et en position 8 Dz si < 0 2D +// 9 distance max dans le maillage +// ======================================================================= +std::vector GetBoundingBoxInMedFile(const char * aFile) +{ + std::vector LesExtremes; + med_err erreur = 0; + med_idt medIdt; + while (erreur == 0) { + // Ouverture du fichier + medIdt = MEDfileOpen(aFile,MED_ACC_RDONLY); + if (medIdt < 0) { + erreur = 1; + break; + } + //Nombre de maillage : on ne peut en lire qu'un seul + med_int numberOfMeshes = MEDnMesh(medIdt); + if (numberOfMeshes != 1) { + erreur = 2; + break; + } + // Caracteristiques du maillage + char meshname[MED_NAME_SIZE+1]; + med_int spacedim,meshdim; + med_mesh_type meshtype; + char descriptionription[MED_COMMENT_SIZE+1]; + char dtunit[MED_SNAME_SIZE+1]; + med_sorting_type sortingtype; + med_int nstep; + med_axis_type axistype; + int naxis = MEDmeshnAxis(medIdt,1); + char *axisname=new char[naxis*MED_SNAME_SIZE+1]; + char *axisunit=new char[naxis*MED_SNAME_SIZE+1]; + erreur = MEDmeshInfo(medIdt, + 1, + meshname, + &spacedim, + &meshdim, + &meshtype, + descriptionription, + dtunit, + &sortingtype, + &nstep, + &axistype, + axisname, + axisunit); + delete[] axisname; + delete[] axisunit; + if (erreur < 0) { break; } + + // Nombre de noeuds + med_bool chgt,trsf; + med_int nnoe = MEDmeshnEntity(medIdt, + meshname, + MED_NO_DT, + MED_NO_IT, + MED_NODE, + MED_NO_GEOTYPE, + MED_COORDINATE, + MED_NO_CMODE, + &chgt, + &trsf); + if (nnoe < 0) { + erreur = 4; + break; + } + + // Les coordonnees + med_float* coo = (med_float*) malloc(sizeof(med_float)*nnoe*spacedim); + + erreur = MEDmeshNodeCoordinateRd(medIdt, + meshname, + MED_NO_DT, + MED_NO_IT, + MED_NO_INTERLACE, + coo); + if (erreur < 0) { + free(coo); + break; + } + + // Calcul des extremes + med_float xmin,xmax,ymin,ymax,zmin,zmax; + + xmin = coo[0]; + xmax = coo[0]; + for (int i = 1; i < nnoe; i++) { + xmin = std::min(xmin, coo[i]); + xmax = std::max(xmax, coo[i]); + } + // + if (spacedim > 1) { + ymin = coo[nnoe]; + ymax = coo[nnoe]; + for (int i = nnoe + 1; i < 2*nnoe; i++) { + ymin = std::min(ymin,coo[i]); + ymax = std::max(ymax,coo[i]); + } + } + else { + ymin = 0; + ymax = 0; + zmin = 0; + zmax = 0; + } + // + if (spacedim > 2) { + zmin = coo[2*nnoe]; + zmax = coo[2*nnoe]; + for (int i = 2*nnoe + 1; i < 3*nnoe; i++) { + zmin = std::min(zmin,coo[i]); + zmax = std::max(zmax,coo[i]); + } + } + else { + zmin = 0; + zmax = 0; + } + + MESSAGE("_______________________________________"); + MESSAGE("xmin : " << xmin << " xmax : " << xmax); + MESSAGE("ymin : " << ymin << " ymax : " << ymax); + MESSAGE("zmin : " << zmin << " zmax : " << zmax); + MESSAGE("_______________________________________"); + double epsilon = 1.e-6; + LesExtremes.push_back(xmin); + LesExtremes.push_back(xmax); + LesExtremes.push_back(0); + LesExtremes.push_back(ymin); + LesExtremes.push_back(ymax); + LesExtremes.push_back(0); + LesExtremes.push_back(zmin); + LesExtremes.push_back(zmax); + LesExtremes.push_back(0); + + double max1 = std::max (LesExtremes[1] - LesExtremes[0], LesExtremes[4] - LesExtremes[3]); + double max2 = std::max (max1 , LesExtremes[7] - LesExtremes[6]); + LesExtremes.push_back(max2); + + // LesExtremes[0] = Xmini du maillage + // LesExtremes[1] = Xmaxi du maillage + // LesExtremes[2] = increment de progression en X + // LesExtremes[3,4,5] : idem pour Y + // LesExtremes[6,7,8] : idem pour Z + // LesExtremes[9] = ecart maximal entre coordonnees + // On fait un traitement pour dans le cas d'une coordonnee constante + // inhiber ce cas en mettant un increment negatif + // + double diff = LesExtremes[1] - LesExtremes[0]; + if (fabs(diff) > epsilon*max2) { LesExtremes[2] = diff/100.; } + else { LesExtremes[2] = -1.; } + + diff = LesExtremes[4] - LesExtremes[3]; + if (fabs(diff) > epsilon*max2) { LesExtremes[5]=diff/100.; } + else { LesExtremes[5] = -1.; } + + diff = LesExtremes[7] - LesExtremes[6]; + if (fabs(diff) > epsilon*max2) { LesExtremes[8]=diff/100.; } + else { LesExtremes[8] = -1.; } + + MESSAGE ("_______________________________________"); + MESSAGE ("xmin : " << LesExtremes[0] << " xmax : " << LesExtremes[1] << " xincr : " << LesExtremes[2]); + MESSAGE ("ymin : " << LesExtremes[3] << " ymax : " << LesExtremes[4] << " yincr : " << LesExtremes[5]); + MESSAGE ("zmin : " << LesExtremes[6] << " zmax : " << LesExtremes[7] << " zincr : " << LesExtremes[8]); + MESSAGE ("dmax : " << LesExtremes[9]); + MESSAGE ("_______________________________________"); + + free(coo); + break; + } + // Fermeture du fichier + if (medIdt > 0) MEDfileClose(medIdt); + + return LesExtremes; +} + +}; // namespace SMESHHOMARD_I diff --git a/src/SMESH_I/SMESH_Homard_i.hxx b/src/SMESH_I/SMESH_Homard_i.hxx new file mode 100644 index 000000000..0fbf2dc31 --- /dev/null +++ b/src/SMESH_I/SMESH_Homard_i.hxx @@ -0,0 +1,310 @@ +// Copyright (C) 2011-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef _SMESH_HOMARD_I_HXX_ +#define _SMESH_HOMARD_I_HXX_ + +#include +#include CORBA_SERVER_HEADER(SMESH_Homard) +#include CORBA_CLIENT_HEADER(SALOMEDS) +#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) +#include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog) +#include CORBA_CLIENT_HEADER(SMESH_Gen) +#include CORBA_CLIENT_HEADER(SMESH_Mesh) + +#include "SMESH.hxx" +#include "SMESH_Homard.hxx" +//#include "FrontTrack.hxx" +#include "SALOME_Component_i.hxx" +#include "SALOME_NamingService.hxx" +#include "Utils_CorbaException.hxx" + +#include +#include +#include +#include + +namespace SMESHHOMARD_I +{ + +class SMESH_I_EXPORT HOMARD_Boundary_i : public virtual SALOME::GenericObj_i, + public virtual POA_SMESHHOMARD::HOMARD_Boundary +{ +public: + HOMARD_Boundary_i(SMESHHOMARD::HOMARD_Gen_var gen_i); + HOMARD_Boundary_i(); + + virtual ~HOMARD_Boundary_i(); + + // Generalites + void SetName(const char* Name); + char* GetName(); + + char* GetDumpPython(); + + // Caracteristiques + void SetType(CORBA::Long Type); + CORBA::Long GetType(); + + void SetMeshName(const char* MeshName); + char* GetMeshName(); + + void SetDataFile(const char* DataFile); + char* GetDataFile(); + + void SetCylinder(double Xcentre, double Ycentre, double ZCentre, + double Xaxe, double Yaxe, double Zaxe, + double rayon); + void SetSphere(double Xcentre, double Ycentre, double ZCentre, + double rayon); + void SetConeR(double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1, + double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2); + void SetConeA(double Xaxe, double Yaxe, double Zaxe, double Angle, + double Xcentre, double Ycentre, double ZCentre); + void SetTorus(double Xcentre, double Ycentre, double ZCentre, + double Xaxe, double Yaxe, double Zaxe, + double rayonRev, double rayonPri); + + SMESHHOMARD::double_array* GetCoords(); + + void SetLimit(double Xincr, double Yincr, double Zincr); + SMESHHOMARD::double_array* GetLimit(); + + void AddGroup(const char* Group); + void SetGroups(const SMESHHOMARD::ListGroupType& ListGroup); + SMESHHOMARD::ListGroupType* GetGroups(); + +private: + SMESHHOMARDImpl::HOMARD_Boundary* myHomardBoundary; + SMESHHOMARD::HOMARD_Gen_var _gen_i; +}; + +class SMESH_I_EXPORT HOMARD_Cas_i : public virtual SALOME::GenericObj_i, + public virtual POA_SMESHHOMARD::HOMARD_Cas +{ +public: + HOMARD_Cas_i(SMESHHOMARD::HOMARD_Gen_var gen_i); + HOMARD_Cas_i(); + + virtual ~HOMARD_Cas_i(); + + char* GetDumpPython(); + + // Caracteristiques + void SetDirName(const char* NomDir); + char* GetDirName(); + + void SetBoundingBox(const SMESHHOMARD::extrema& LesExtremes); + SMESHHOMARD::extrema* GetBoundingBox(); + + void AddGroup(const char* Group); + void SetGroups(const SMESHHOMARD::ListGroupType& ListGroup); + SMESHHOMARD::ListGroupType* GetGroups(); + + void AddBoundary(const char* Boundary); + void AddBoundaryGroup(const char* Boundary, const char* Group); + SMESHHOMARD::ListBoundaryGroupType* GetBoundaryGroup(); + void SupprBoundaryGroup(); + + void AddIteration(const char* NomIteration); + +private: + SMESHHOMARDImpl::HOMARD_Cas* myHomardCas; + SMESHHOMARD::HOMARD_Gen_var _gen_i; +}; + +class SMESH_I_EXPORT HOMARD_Iteration_i +{ +public: + HOMARD_Iteration_i(SMESHHOMARD::HOMARD_Gen_var gen_i); + HOMARD_Iteration_i(); + + virtual ~HOMARD_Iteration_i(); + + // Generalites + void SetName(const char* Name); + char* GetName(); + + // Caracteristiques + void SetDirNameLoc(const char* NomDir); + char* GetDirNameLoc(); + + char* GetDirName(); + + void SetNumber(CORBA::Long NumIter); + CORBA::Long GetNumber(); + + void SetState(CORBA::Long etat); + CORBA::Long GetState(); + + void SetMeshName(const char* NomMesh); + char* GetMeshName(); + + void SetMeshFile(const char* MeshFile); + char* GetMeshFile(); + + void SetLogFile(const char* LogFile); + char* GetLogFile(); + + void SetFileInfo(const char* FileInfo); + char* GetFileInfo(); + + // Liens avec les autres structures + void SetCaseName(const char* NomCas); + char* GetCaseName(); + + // Drivers + void SetInfoCompute(CORBA::Long MessInfo); + CORBA::Long GetInfoCompute(); + +private: + SMESHHOMARDImpl::HOMARD_Iteration* myHomardIteration; + SMESHHOMARD::HOMARD_Gen_var _gen_i; +}; + +class SMESH_I_EXPORT HOMARD_Gen_i : public virtual SALOME::GenericObj_i, + public virtual POA_SMESHHOMARD::HOMARD_Gen +{ +public: + HOMARD_Gen_i(); + virtual ~HOMARD_Gen_i(); + + // Les creations + SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundary (const char* nomBoundary, + CORBA::Long typeBoundary); + SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundaryCAO (const char* nomBoundary, + const char* DataFile); + SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundaryDi (const char* nomBoundary, + const char* MeshName, const char* DataFile); + SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundaryCylinder + (const char* nomBoundary, + CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre, + CORBA::Double Xaxis, CORBA::Double Yaxis, CORBA::Double Zaxis, + CORBA::Double Rayon); + SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundarySphere + (const char* nomBoundary, + CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre, + CORBA::Double Rayon); + SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundaryConeR + (const char* nomBoundary, + CORBA::Double Xcentre1, CORBA::Double Ycentre1, CORBA::Double Zcentre1, + CORBA::Double Rayon1, + CORBA::Double Xcentre2, CORBA::Double Ycentre2, CORBA::Double Zcentre2, + CORBA::Double Rayon2); + SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundaryConeA + (const char* nomBoundary, + CORBA::Double Xaxis, CORBA::Double Yaxis, CORBA::Double Zaxis, + CORBA::Double Angle, + CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre); + SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundaryTorus + (const char* nomBoundary, + CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre, + CORBA::Double Xaxis, CORBA::Double Yaxis, CORBA::Double Zaxis, + CORBA::Double RayonRev, CORBA::Double RayonPri); + + SMESHHOMARD::HOMARD_Cas_ptr CreateCaseOnMesh (const char* MeshName, + SMESH::SMESH_Mesh_ptr smeshMesh, + const char* theWorkingDir); + SMESHHOMARD::HOMARD_Cas_ptr CreateCase (const char* MeshName, + const char* FileName, + const char* theWorkingDir); + + HOMARD_Iteration_i* CreateIteration(); + + // Les informations + SMESHHOMARD::HOMARD_Boundary_ptr GetBoundary (const char* nomBoundary); + SMESHHOMARD::HOMARD_Cas_ptr GetCase (); + HOMARD_Iteration_i* GetIteration (CORBA::Long numIter); + + SMESHHOMARD::listeBoundarys* GetAllBoundarysName(); + + void InvalideBoundary(const char* nomBoundary); + + CORBA::Long DeleteBoundary(const char* nomBoundary); + void DeleteCase(); + CORBA::Long DeleteIteration(int numIter); + + void AddBoundary(const char* Boundary); + void AddBoundaryGroup(const char* Boundary, const char* Group); + + void AssociateCaseIter(int numIter, const char* labelIter); + char* CreateDirNameIter(const char* nomrep, CORBA::Long num); + + CORBA::Long Compute(); + CORBA::Long ComputeAdap(SMESHHOMARDImpl::HomardDriver* myDriver); + CORBA::Long ComputeCAO(); + CORBA::Long ComputeCAObis(); + char* ComputeDirManagement(); + char* ComputeDirPaManagement(); + int DriverTexteBoundary(SMESHHOMARDImpl::HomardDriver* myDriver); + + void PublishResultInSmesh(const char* NomFich); + void DeleteResultInSmesh(std::string NomFich, std::string MeshName); + + void PythonDump(); + + // Preferences + void SetConfType (CORBA::Long theConfType); + void SetKeepMedOUT (bool theKeepMedOUT); + void SetPublishMeshOUT (bool thePublishMeshOUT); + void SetMeshNameOUT (const char* theMeshNameOUT); + void SetMeshFileOUT (const char* theMeshFileOUT); + + void SetVerboseLevel (CORBA::Long theVerboseLevel); + void SetKeepWorkingFiles(bool theKeepWorkingFiles); + void SetLogInFile(bool theLogInFile); + void SetLogFile (const char* theLogFile); + void SetRemoveLogOnSuccess(bool theRemoveLogOnSuccess); + +private: + SMESHHOMARD::HOMARD_Boundary_ptr newBoundary(); + SMESHHOMARD::HOMARD_Cas_ptr newCase(); + HOMARD_Iteration_i* newIteration(); + +private: + SMESHHOMARDImpl::HOMARD_Gen* myHomard; + HOMARD_Iteration_i* myIteration0; + HOMARD_Iteration_i* myIteration1; + SMESHHOMARD::HOMARD_Cas_var myCase; + std::map _mesBoundarys; + + // Preferences + int _ConfType; // Le type de conformite ou non conformite + bool _KeepMedOUT; + bool _PublishMeshOUT; + bool _KeepWorkingFiles; + bool _LogInFile; + bool _RemoveLogOnSuccess; + int _VerboseLevel; + std::string _MeshNameOUT; + std::string _MeshFileOUT; + std::string _LogFile; + + // Input data type + bool _CaseOnMedFile; + SMESH::SMESH_Mesh_var _SmeshMesh; + std::string _TmpMeshFile; +}; + +SMESH_I_EXPORT std::vector GetBoundingBoxInMedFile(const char * aFile); +SMESH_I_EXPORT std::set GetListeGroupesInMedFile(const char * aFile); + +}; // namespace SMESHHOMARD_I + +#endif -- 2.39.2