From 129e6f855c3dc2e9496cbb5cebb23e876ebd38f9 Mon Sep 17 00:00:00 2001 From: villberg Date: Wed, 14 May 2014 04:31:19 +0000 Subject: [PATCH] refs #4858 git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@29490 ac1ea38d-2e2b-0410-8846-a27921b304fc --- org.simantics.sysdyn.ontology/graph.tg | Bin 182267 -> 182687 bytes .../graph/Sysdyn.pgraph | 5 + .../org/simantics/sysdyn/SysdynResource.java | 15 ++ org.simantics.sysdyn.ui/plugin.xml | 71 +++++++++ .../contributions/AbstractNodeImager.java | 5 + .../contributions/ExperimentLabeler.java | 15 +- .../InitialConditionLabeler.java | 27 ++++ .../contributions/InitialConditions.java | 50 +++++++ .../InitialConditionsLabeler.java | 31 ++++ .../ui/browser/contributions/Model.java | 2 + .../ui/browser/nodes/InitialCondition.java | 58 ++++++++ .../sysdyn/ui/handlers/AssignIC.java | 120 +++++++++++++++ .../sysdyn/ui/handlers/SaveICHandler.java | 58 ++++++++ org.simantics.sysdyn/scl/Sysdyn.scl | 3 + .../sysdyn/adapter/ValueIndexVariableI.java | 10 ++ .../sysdyn/manager/OldSysdynExperiment.java | 8 +- .../sysdyn/manager/SysdynExperiments.java | 99 ++++++++++++- .../sysdyn/manager/SysdynGameExperiment.java | 140 +++++++++++++----- 18 files changed, 677 insertions(+), 40 deletions(-) create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/InitialConditionLabeler.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/InitialConditions.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/InitialConditionsLabeler.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/InitialCondition.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/AssignIC.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/SaveICHandler.java diff --git a/org.simantics.sysdyn.ontology/graph.tg b/org.simantics.sysdyn.ontology/graph.tg index 307eb73628b490ae77df9f572e801ccf3183d63b..98d3e2d9d3c08048e17df94d6c693b6727ff0474 100644 GIT binary patch literal 182687 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 z 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 a#`cu`ICv*f+tiLd*Yg3lX2wk3*Z*G>Wq&XL literal 182267 zcmaf+2e=(o`Snkka!PuGP(zpAkq&7`9B2*p4-a&;ruPr`4ON)jXq`CJ>KknL_YKy`8UJqt|F6;RZuJedhuW>d z8rhFjso6*-NOx;VyARg>z9y~3|B_@ufB#UBFX`*-ZAlr)(5mI;s5TQ-80hQl37pyT z&H{3I|NkvW#U|}8m72><1CnEG zOVF9pn`2k5T)E9)ySEb^(>1tF|G?5xDOpLW+?+qq|A|)D(AL{;vjY-OLt?UW?1I(_ z!)^4{Tr_)dd1qG((PvOPEuYo5qBSsxgzQ-HPACFQ?P3e3_oHbi4nh4wpiUd;Upa{J zv+5V2W?vYwV7PB~=i*k+g5e%U?2!wl4ZdmOLF zge;xj-_t*UqrC)c2Xqb=DJd&e%0?n(KU8JE&fa#d&>DxMEdZ`%eEUjZ`6?-DR zjKMA)+t)wP+u3vM5-7(G7Sbi+9$^bNsih5>T5inh?OfX0!3<_;f2M6%>sYZ=lF{&%Knmf$O$%x<7b%g^w=4#<*h!PN?ofK4s>=M-$I9Gf2H(HD%o+S z9Vs{(HJR2q*xGNnPo@BbqeNggW5frC20Gj9$GjoQtT|5|IeTF~T2k4&3vp^8p_d6y zuQj_p2vfUn=||M0v4WnzXiYem8!I><9W6}H_7Fz3aiSz9%R7g#tmLC4N6qQ^Xr$z$ z(wPGToGtly!Tiw90Tzm$s~`bgI=gdKYhb%#hONc4N;Z=#49ZAW3)klL4PnkLWy((^ zrLkbqES>G8-6XAU8ZtPq54NA1jIPs4+epf&S%a><^OnH*xTKG?tIZ-V45d|4sY*aNYCteaxVXT)7SWWg*5?D0~Cy)}QJwW8fWjA3t>cnyER z8ppxdIJS-=+ufZ*?4{;GOghd*E-jH@Bj>cSescxr7;0f1N*LN*~x$4wfl9HmM2hgiEDP>GDSJsx&$0eH76#)mOoBl0nV`mK>+Uh*M zXVrpM4_4Lgh5ab0E>b?by?CIL(Haj*LN>p1V2F8hSx74R)WN~lzz{m4c`yul=31Ff zksQrggMM7Dh^0!haDW5SoF_B}y*h6(S5#dnOQvhbx-P=%iW7^Y$Q~|LCdyFsFGuOC zX6Q8u$~q!vGx~=Yb6LnuOLzvMtGe4=Xd>2$jm0%;5Yx7&g~e0iU<@9X^xBNhp-yvZ zrLsy?>VvC#ds{;T?Jg9tl`$ctti))DjLufB@!1(-Y0Mg&-R?Wy^l5Xtq>b(vMqvZ& zYYaX6G9475*@5tVOQ#MDbfUxSizRV{H&d}(r=5~Is=L1z3&iwg?VfI2Ix*NClFm+9 z*y>%*al}aBN`#9h2j?)zwGLOm(l`@+7FL_y<^6-LZkZ5INa{$rLQd`KY7Gv`1nx$1 z@`RVWCcefjEL5Es6y`1Qf>5f|b;LkYsksT(Buww7RNb$GjQ-qg2^VZk@g^^2rFmX4 z3z;ytwtS%7Z`P-#jQv8-!dX|En=BdV??nXZvxA+SZXlJaF6`vh`;!8kZ42z?sHby~ z-7^zP@=2GkG*PViwEq5{Rww$mw7n!`W{7Y){7x8Gg?TIcTHVtyVCj}755k*Mu5rI4 zH09=@;0XLbaV#OpdbZrZA$Rx$SJE+!QBJWF{MDRBuYRcdx@F|ExI)Xn*aiG)_n z7ZaB^o$2m`YMKbM`j&C6N2BY~-IXy|y}Ga`GiRv@^a*(DU9LNt{gSyUGnbn=skd1X zxFou>rNk>jsWQ&4(VabV@=MtCbD|})`{hzG$;6b}+S9KlBVI}OFZQ(~#Z#Lhvz>*e zX2l=5uz#qt#}h1H5F;}4|KP%KyzbL>rEEpnvQ`ugw*GXt+D@Vy_F%XtW7qt*6)eS zP2OS(^PH(IcXIQ1B$O(XW?@j{)s8(wa6@lP3FyBaJJHBV&i6QMr*KZpe_4#w6M+e&73hcGbP;*-Hy&p{v`Rv zm^G}ZH*P(Ulb5XIPcCQK%!hU7>DVmn=k+iejxt+NUO3JTp__GO?zqYeM>)+jr+lcS zH?S?nCZI^;RldA%L=TGaA}o^BZ2B^@Qz-M=R9;x4%j7GqffQ_Uu$bU-geIIMTRSSvT9sMt8<`h8FyX-?Zv~qC?Wa(L>s$|yF<$E zTuW9+v{4=H-eGeMGyA-h4N6v2aesn&@_m8YtU=!6tiaUExTqv6xcZ`~CGDldX77Vp z%0W(6G-jTN>tegOPf3tgDvvsFzkyZ@9Y4UEt?iIBg6T=l6=zV+)G3mX9d`Kqo_=&> zcD8UTd4SSE>e}fjej9M8LnXv`mp0dEtBgdWnu@e<=xm9&*|@Gu}gV_$&>O3k#pH(F(F}T$?$}! zJw3QVE#hF-6wAbZRDb8@ZSotjkK|TEiZr{Slvj#m7~4Y=SgxVT?UGoRO-Y~Ju_nKl zB<^gc4h?m7E#m}nCuhO|OolnFqIxG+iZUv$VDf88=T4X%V5a+xl4i;sY;%X0?1UuT z>ziAd!_4GKeoWs^%>^xN?^hQSA-PHt^MwQLrRHkAkz^fVD`Yx8k;~skquqdrjzXr= zzEK@dRytPoF7EF^5kHh9uE4xaEJh-eg>|EeHg5cYfLDsFJrWJ`Pp_I>=Qo;YVlV91 zzBS{Oa*mcZ+GIw%6L%xMu2(42ZF{L0Ub)HGXls{l$6{gsheB8h=Q#VQv{9o=!=aJi zleE!AHg`cvejvj5Ii1Uwx8muTep$pZ*x2^+4$hU4aLp-gB-bO;n4-#D=}Q|;3>v<$ z-}ZGnS>&1xh#9}Xq-^5aX!_zq?KAP~pBDSpAChg={9d$a7%84txK}n0fr`cHM@Y+# z$V?gz9~N%Rz@^`&mC~x@>sU3|y{fO6muE69oz#JKs?}}RYIld7{!MhfA>OYor*`sP zNnQsHbu;Ee!;wBIuG~yFtYPVnk}!G(?qOD8)y6|FK2?OUGlX=qj<;0^i3)!&!i!3uSR`j$_itz5F|g2M;n`nawdw+sQNSDy9+gl(Ms@ zxSMW{XX>ubRx*w7mzs1DJf$?l-2s+X9G%TPiyDK=`d4b&Ig(afKAKXYb6nK)ERzLY zf)MOxbOTFD&+<$ht#r{yJoYqqXoYVFCZFkirP)X*rNJ%LF-)30f}6$dx7lT=fBS7d zj)cWbJ!V7)x}~#wa9OLxb-mP*)NK0j;1KVQN}a-uVp_4T%q-{Bc$Gc`Ps9=Ad8T-eGn4a-1^vI= zOzFl`OgYb$lYBue`I6pYGYcBeF~NJVnp`A~Q7bwJ+T4}EhNTLn@tjUB@}#yalF z2ZoB`cRqp<->T~f=Ia8N3ds@et~B^UyKv*1iaYg@y=&yx8k_q}LkYBLR5+%B0VGo=e0t4)@$c==}ZxIX~vhqsGRI)GqPNU-~Gsxr=GM zKM3LWloTV*bPJ3&M0%`Nw=HFP&mCxso8nB z_4+1BZKC|)ZdyntvZY|+b*A&W3cQ6DvZPxJIWht++SjB2g8R6CV6Ov_uEU^2x z`Y`Tz+&QN;w5-1y&Z|Xj&KqcBzh<}0=1S5;7Cs!s;*TE7C&8ILIq{IbVLXO%Cw%e5 zJWoU(#ZwH|sX_Z>JY!R{C+*|xj69 zZG@!h!|a@WkUcrtb#P(NUK1f@l~6?XFXC%!_R3-?=hPCs{_&pI=bMXT(l9a<;e$Ko z>~+ycQZM>O9pHuE3s?5HHTVp~+aFs8G%kK>s+oOw?_+Kc?Fda4dHme|j^VCli;AVtj>j7!a&zgX$Gb&57b=)N zABep692AfF;$~f7dRt5r{)hUeQQh?L^X9x5WluJ}4n!ljk;FC3$^4ldmD3DZ?MNK!$bMlFlb5nfW!VFFb)Ey)1guO)eRTtTSffHM_VOsvr8!+Lvw3a+J&@3j+;aCd|r5(~)L#TCJ`Z?t_mzAj z%%;*_mJ`|#t=O^_8x|yOEa_v6PuB!gsKk}Cv@xD@NDGVs>B$X}J^~LA+FhDj?w2_0 zdRtj+H|!#9iqIeQ{r?#Xr_4$HG6IlGBm?p0U9bputKI(%Zgr!6lh(^DnMd`1Lyfc$Bsq^H(; zJGpMjyGG8J^wX~Y)6)t|yU$vrIApSQU)F!SA`)pP|*8S<;f(>7hjTcw4ESM*@O^H(T zeBAG$>9YnGcD8%wEm>GRH$vJfQO22VbTmjOvA9+KAZ^W*lf1wui)F;%5H_tV+C@J! zx!+1p_H3(*NNy~-%}Q5$mQRW$>6KTFO>PoW?`35AStOLw(b%2hm5J`Ok+i=EW4u0> zD>ak@7-Ro+_~as1XW?AJ4I<9y=484K@G8Q)F!q(qcXJgfZaLUWJi<5XA$%AhX3i z!ML$^3+;2L&i3qwApxs}d43}=_mWp7X*~PNd|n5eZgX#q)rOn-z;|*-sIJKVUl<3WhTAhJn0f7US>)D<|fdG?1-KTV}%XPWFK&ZfD$ zwVxOJwIq%x677?B?yhm4izn|m-7oJYInDM7P7NP*V+=7 z>eA*T=kWCm-lMb@;YgHvY4dXfNWrb4U6#0&P4{#SNZBRn?xTx&=s71+*vmN+1}&xdC<|`X zioQ$uu(p(b#Pbnc!TE#*z4arp#BU=~*_EWD_3CYVBKev4`ErBroj&x|ahAxV4#3r* ze_)lq|4YwBdNM1Ohh8|7b_S;BdbK}9^ojf7W3YOmxK36W`~515i((bw(Z2NdzT7cbPO;-S&1!8Sg% z=q)&HmeZTzQ%UlSsJSsXZF}V&FNU$^={YvJI9RqoKCso~E;l{i^DY&ydx&1_6L<%m zE_J@7Uwo7FKEb?4!LnvPbenLmmh|T)88aYVCKxOL5kV#PjCTcH=T=Eq=4 zPjIzKCD%aSwmZcp*RgcKb4Yg$tg#$#oH`d{{lcf~g6(T_Gv?@bIg+=Kfb}6*qqas` z@>ZjhpJkJ&hOXh&Ki%48Ot%tK&2Ii-8A;1lp5-|tl+yJ(T0MAGix1}n@3*`aK7B!q zBkaDU*tPJv9v=JRQ(E%i3w7dD$F>vW#SbN<<{oUqq3xk%AF(&y59V~=1UC_f<6wr; zVW4S3Zr{v{X*$iT`pm-K?qlZZO3XY}D148_yZm&j7l1RPl&*mlb@4}zL~^$nMoeWV z%f^rU>IN@h$=zO@Ol;%4eUh4+DYVr4&}Nx)NY8Y0!F9KXcwNbxm+}dz+zr6UwWfSR z1Fx=&F9l!_x#3Q|j}w(|64Q9QhMAWLMTGJ#6mM#Br)oae&Ne*3#9O>J94sNm>cdqV z3${U#vNoS~Fz=(}L6^7uycj0;%I?86Mq?q*Uub#W%foxa@(G!pHf3(&%O}+Oi?1Xg z%b%FyZQ{$H6pP&z{+Z-$;>({BIq#Q=$a+4`gipCL)4Af95Z80MT&S9BK~3j+cC!OX z_}Br;w;^LBr{gg&-+-hK3x|&`_2UldV+{82nC1Q0h2so&w{cC`Ts-C#!-k{}o7b{) z@HrF^dpLc#W^-f6cW26@UM@B+eYlDH-u~lThZavj_GIGYo{N2m*vs(s6HH=h$5)Vq zdmUV%c)R8{rDb!888>YhufMi#_f4^9I=ZsVHMZQlrk$=+2Uo7KOf#sLXAzq@Fc?VK{snWM2{_}cq zyaSG3D~|EbD! zue;61TjeW=my7dja;VNqw>ax~1JgIi&kUn|ya-pirGI!utaLj!*Ya{-4P#q;@V_#K zj*(@wvBFJeWn>L!gNzk`cMj#g9M_$0d|n9&N6~V)gzl6>4PCxKycs?>F&z{PzQfFRSD!Zz$EXz_~y1Iq=g7D8W+oLk{Ji~Cvp?`*le>Ow^ zbaBj~f2ug<(7(guz685$)~rr?hjA(;bI5w+IINT;PKC=qj}fQB<(|ik^PaJzG8JB& za1!A<2jE4oGF{rhd+*A0*9KmZa25^X{UkrjRvsoVm+m}O4xN?PCWOS}A^i6~!rkI~ zfQR?V^!%eaMlpm5qjaiW;v@aPvo*%2MaEY#bO3tz~jgQotk0inHJ#i)Ylp=@Y$E5Gc+VDejI9w`KIqfQEXM>&iygtsQD$nWa_4ZDt zdXr#{_j2YPef8ENWw66$*-=8IOYrm#<5A`GtM15hs=Js&3}}@ThUN6)8+v#UUFE=6 z-zoER4V*I7cajz!{ew6=s_$qwR{3bKayB-L@~8qD=Sg*+IzPT+lek8pzXn=ZEvvi; zRlg?X^Sr|$%m2O{YS;=VcIE7(tA7x+sc=QCJS~00a{`C#o0p9T@8($JH$l~xCGM-{ z5T438;;D8n<`h1UaE_dzTn#GcXnECh#h3T>&s>3}2$8saRL?D1UHzhv+LI|_PcU*Q zI^hmFnZlxzjm#m7zSnrVT5X<#oV}HMr3swrIApUqd(q6n_EJoNDo_9FL#$two15xG zT40q|FLa@-Ak|@tebUqu%pqf~mP40if0G4YpMp4#;{K9__m((h51wo+*i8UVXZp!v z;fabvM&&fGp6sHIFj>0WtmSx$BP7dcbI2@f%Asbdm_}AHmS_VTR(Xh7Dr_zeSrN`L zG*3QWTdgsFDaCVY&bVq-(2m5~;!IlI{61Ed-CbR~PO<~Ho+OnQV=yL&w<_mX!sR)c zz=9L*qH)MUx>zhpr>Wc(q>H6;mzqO*ZWd3<^OQ@&?Zlfa!#uvFIOa0J)vR)}WHvJs zEx-ptkoX3bm;FzzRo<4QnmFckqSq>%w3U~OW>)?yq<7r>HT6*VNbI7nA;z=<_ zx8DwUB(T~cfw_~yAx*qoqilR`4Zxj9^%AjsRSvblg!6_c(+TqN`Z1uSMq|=6hn%ry zU8zc)s$5p8vaD3Otl$vEWpi*??yd33?R0z!2`Q{gHix0I`Q{M5e0%YYS;XfVz5Yfr z=b4yqpByo3#t}H+g(qKKUXA}h%^YHG<~;R~+KKOyt_E|GKX~VqK#_pKXuMb5Vx?k{lqiN9Kw@- z$#^;rUa$~!CFx62naj)}Jv)e}F>Akt2h5y1b9M)!<-0L$hYSx)Nq5%059Z~+m82Yx49zF?axO9Xo#~)C)AK(HN?4wf7~8|llxvfg$mCjK z4mtaJ%^|y!mkk(Li}!iBeS+D?e#l7gOFxv&Aw7%4Q=KC-bTMI(lzOx|WW>YGA?NcA z;!fuuVy4E;#2f4@?)=9Fi)XR z@vMm-=9N_Y;-346wCu7bH%ZoU#Y6Vs<$S_!!YdbieWmy^_2B*k{lm+Vc7!OS_Q&f1 zJk4}1=d~+60&jX-%V+4J)_mtZ{8Oag>mX6$GF10 zr`oAp*^eHp5o`<5Q8ItVjO#D@2LpuJWxjXN&6Ww^u0A_zGT-B@Fy+THFS|-CqvZ1seglp(#n@n8?N*60 zF?{dfx|-M8>?nTR8Yi=TlbLaUfK>A_3p<$Ubx6fWs^!gtwWi-gVtQQ@AG5}-sr@_z zw@K-BBlv#GJ(*3pdB>Z4JQ=kwYv&Efr)9BHa1lwjbyF7~0j8N>S(Q(El(<%v^3mQ4 zI`ehO64#hgjt|P|n>&5ATAEC)F&a~72``;pt!aFTiZq^GrO7ESKz!`bc!0RBS30jX zrO7!~&@Q>-Zv2r6YkLk}n@SD53B*G-TuvH)AW!fNqr@-paTF50_cjQ`9anb!`bhuq zcN5%V0MBh2zFQG6>F%p7GiifqyEAYqDw| z@tO{ISSjyQ`867Tq`{s7$$up=l|-zvT%GW>AenUbJHo}13-votldJ24@;*>Lc-Htk zlfL8TLzzn>Ui#Uy87j*yuN)yy%k|w?gFCt8E|)QRQf$S~NMWYENyC$#;YBfcFDx7X zq2)zqDRV6^uasZBLWIXiCptNKzL4enZH;%B+k5Sl+$(Yoj}qmxYEXY6DWh6?wKK1| z8!t2KFTBW4i!tT5k$9GHBbz+!>3=hUI%Rn*&T$&wrtxo{@vkOOA69Yd|EB&|Pv@hF z^2+84dCM#>h~avju6sNe&-n66{_+4%N{F0y<(1~gw~*ltW_ZNQ@LSEmwnO}tB-r<9 zuhIW2&wq!=P1iB3EVuK?9iHo#;u_gS8> zjM6ET?jVkFn5?+x>EpMWbWf6gO|-@VSld_Q-kI+alHDb3jSru?_H#9ylQ=`{2Q=gZ zXpQ%fnEcaKHRW!ul&)2TY0cv&`tVsL{}fI5OHQToXzwe5=4;65g%FYxo1TDkmp_e? zoS5MEPVnHpB)^(cZWgEA);q}0obADY8{j;ZU)xId5v+5YP;8$QevdiX$Nef*^FSte zue1|>_rA2j+R}mi!8o%Bp!>Yf$JTch(fi}C0COl#wxb`=)ylp;)Dfw4~16XxAagI_m=buQSqZI_OX7-uau`( zjFoS`#ZQc|QQP_A zpX9a!{_KO!iZ|vn(|q?+Ommp%{nk>0zYo)xAM{O!W^~<<$(d3e-6da3_O{^(e`lp+ z1^*7>Q4uC}>$l*;`X#JNsp{SDW~T4PVlPq*tPV|fl9<>2P`~jrKz6g9$jMQ~J?h}# z!es-){ylFtC;`Uc{z-oS&$TS!&(Pq_iTO4uPb+U(%Xp3_hx3D_5X`4Wksv>=aX7oy zi*uw{xsVojW*1A~iCScMhm{;8^2q2hKtq04<)Fz3^S?$mJBB44G-4Ls=ymlBcelD{ zaW~G>IXOsva^oW=W|KdPk{pC@TSyize*A@n7(0zvgi|_%Uq0l=BrR~Uiedi zKV?y>PBwEyrb2u(mwZAj=ap3@oNixLvG-*(?pWrxZzK;dCI3n@rLwFDL}sY@)2iuGFN2&mIXTtrI-(QW~WQ~ zSR~4h!#lOJ&$5Wq<)=GYIF|7PnDSY-mS#OBcUO_yZ}4Rzt!)E;WS?i3GvH-B#rLy6 z+O{u~F89j#ig;KJyQFhEXJ2uagcDOwbgu~sXI81&2u`;zN!sLKq@uyRL@cA`_DAX8 zm2?hAhyA_Sg)MpQ!=E0>z8fxsb-4;xwQs%oSpN?E_3OMVLGxIqc()yO7FNH`oZtK~ z@j)$I2%0>>>fd#3uitbd1-{@?K zng4t);hz;tVMEb&^u6{aT&QshdJ`hykN#mX`^br~EJ5Y=hCUYmosJdbe*AYY$E9t+ zdpZ_yf*Nd<2fbb^&?)-W9DD?|HJEeI^(Y$@mdj2 zj(APS&5_8zM#PgMo*40jh{t<88u7+?%=nmVc6_D0F%ctAppSAa^Bpm)E<7UQX2cDT z*`NH8Zad$}HOF#(<&GtO=2-O9as6oI$2n``iO!oy8=vD*iJ0fVuLFH@lz2$8S!5te!^q+$Kw(I*<-f%PZ2*B z@uMCy-Xk7A2!7Zx=X2vB#|`Qac+B$t81Ww>{=LU6@3-LE2lyZUgV%B7+R}pO7K|U@ zY%W6j9PoXSAFTdaMz2{v-p4n76ZygFpJsIRPX+%v@`KgCm(kUaYj5M;$PZTkE=E^B zuAPm0B0pID+Z$c|+kt--`N8Vn!szPX9Q@134^}^}UDVZ&Yggm$$PZROu07P%zb^Q$ z$PZROt|ipfk84Te7m**Veq0Nvs~_uNB9A6b@gMdY}^|8!Rr5~(bfMl_?E~IR{x7e zS3lOa#?K=^Sp8U=sH^{J@XsPYSp82JUHw=)8aGFNu=*b}y7e=5eioQ z?P&Zo@`KfnwSv0(G4~ojiTq&o`A7e}1`g4qB z<42JntbX(rb@d}}AkboE~g{z2pi ztN-gpw|>TMpv+)B2dn=|qg#J|1sHV-{9yH8W_0ym3jS{72dn=gqpSZy@OL6VSpDZ2 zUH#{RuZ#R(^`BvM^?w$OJ`3s(R{v>6SN|u$--`TT^`C5X>u2o7HzPk-{VR-a{rNEX z8<8KZ{u7L@{$*f{VNidt`g@IT{fynfoCy42^|y_#e$J0;B0pIDi;Zsmc_;X5ksqx7 zqm8cq!@yTZez5uvH@fvRcH^qZ4_5yIqg#J|F!-yHAFTd4Mpyp;}$(zz3wwmo^R(3{Zb;Ze}@V4TC&U)s!Y;HO^r^KGGD;{1)3h66u!>mLvOOP-(g z0SA8Setj->eyI;Q@Kd+(w?e!xI=|Eh9QdhQKkM@a&(HdR13z`YK3Kzo{s9Mm>Nfu7 zh=(=K`lUYLz)#)!S)b2)e%1#Z_^JE#xxo3Qf53sCx{bdn;+^mOQXg>Or*8eD;l~=R z^=Ey+fuFixAFR>VFZBTje(E;3`13z`^XMN7`{HzZ+@KZ1R8Rzra&M)-= z2Y%`{{uKDna(<}~IPg=qeva3fo}cvr2Y%{)ea>)xsSh~tQ@8QgMLb-?Y=269z=5B- z^|OCY_x!96IPg>V>+>1sm->JMKXn^_EyVk@^GkiefuFkdvp%PJe%1#Z_^JE#Io0{4 zKH$Jl-Ns)7@lJ7msSh~tQ@4JO*QY!`>jMt_)cyLL?EF$6aNwtI<4-_5>>+~j0tbHT z*3bH!9P}a2 zf0W_CPu<2(pbvWfqYVds>V?0wBlH31=g0ZTfuFkd&wze{^QW5_4*b+@eNyPloxj2M zf&)MG!k@9d{hpug1qXiW*8c(YKF`ngf&)MG!e8d~v&Z?R{@}n*-PXSh|MAW*^#=!j z>V;qG{|V2}`hx>Mb?bi@dfW4}{@}n*z3`_T-(}7(^#=!j>Nfs=;a}?fQh#vZr*8f1 z|0SNE^#=!j>el}@^p@vm{lS5sdf}J;?{ekQtFZTSb zKREDHxBfSwcY1!-9~}6p`}IG<`KA8gz)#)A|2N_tj=v7`JTJqwPI*r1|m5etfcx|1%tu zZT#OE*7(0I*pGi8(ro;dI41k?$u|DYg>K`2%dp13uV6p^ETsAI$$osYjeir4$u|Bs z4Qu@06zs=80BJTpuJsMFAD?XF|FqC;{A&zr{9hOB$KM}mMSMB`$$osYjsFuIll}N$ zjeoDvgZa51(u(-9K9K$RWIsOHj}O-P_dp~2^`D6}+dn-2$$osYAD`^U2W$LanfyWg z8A$W{hwR5E+xS1mG1kpZ2k4?z`NixX-Ast4ZXrg7*4pBK)3#cdx4!DOL;qazDGjjmq1` zD-T+OY|HzmVVhsd+uAD+-Uiv0$NmFbzm&I?W9iQ=z4D+n$hJI=AK2!X^0x5GgVrG1 z@-8%N{ZiiMF29ubF|Rym4YDoo>xON9DQ`2cJa`*qJAT}MfURH3+tjg?w~1FCvq0D-T+OY|A^ru=PuM>$?0>-a1}+&>Cc09?w6p%`fGx z?Ue_uLAK?cW!UCc09_t6TekpH)V<~UES01zm*_Oxo3AXvAym4N6&>Cdh zpQ{X8zmzxD<(Kltc;!KBkZpNvAK2!X@ z*F66v(8<=%{sIU7-1C14I@$VJA8_E$B0stC%k>i+_*2in1o6m)U(N?`;7>e%3x2X+ zA8_EWMt-tiA8_EWc>aqKpIrD;UO&KrzwG%x2c2x|!~O>cexSYHXXipETR+z~uVe7~GOAh?+d;Tv%C)@fTXE^Zx*X8H=P=C*H{RYGJ8?j$H3ditLum1>qH1s-&z*-)>b+Rq*0vx~Yl}C+i%R9$# zP~K}UzLfW>V<``;<-uDg+w#uG@he_=)X26xtOw+vyni~D@?Lf<<$<+4cEE@SV!+btR-NwsKDg37vI{WiQ zr`PWQzu?7#CT!!;4?T!Se-SUi`CotD<I)9)d!HAd8o7v{UT8RoPumXtxmT6K|eT%N4kGDiDeq^FrF}QUW6Oh9 zC)@JaKCsO%<=y0!M=#m#k2s&e)-UD#)UlNJ6UVY21M7Ya-a7e5#s0k)$3OPUqek}2 z0|(_@?^xzD*v_}?6FB~%H$SM6?fhW8Y z|9#JE54~hNUgsFLe(Aq&yYi$xVA~!!f4=3lhZ?zPkIZMVjVJA)ZqJ`C_`mMnFDG*i zTR%TfD0&m)F%S7V!PmNY{Qd~peqJ$KRPYk`ah!4exF+(0)j!|p_VbMy%BX)W@`Kes z%joJq0DN`i2djU&(bc~z_^QYcR{!2cw|>U1e>L)h)xVq3)sI;9DS`N8U6 z!|2w}*!4>zKUn=^jBfqeXz(SGAFTd{(bZoDe<|{V)t?#N`Wd@^apVW9zhZRtBUb&3 zksoaR>AOa^{`5cKFGPN@`rk6T`drxYIwUh_F zek`~L|6Po~b6tF?KRAd_-LL=WoIia4`N4sodf`tWf{r!Vejk+IZ~PFS9qBQj73ndb z8R;>f5$Q31Hqv80-D@wdEp>3vUh1~JSX=9#@%&h;$bp}_^<(X;pXU71|KPw+z3|KY zIo0VhzF<4Pd{0^@`{R2`_SM`%TKVp#sKXvP8TUL91#3BcN>ekP;tn&OT3&{Mpa1ro)B< zKXvP02_1jx?=c+ssat;^bksrp%M1s8>ek;29d%GY&u4Jpr*8dS(1$#Kr{Ta)z3?Y5 zK_B$|M;Q+M)NTA@pbvQdBMk?B>ehcW^b=ftWj=$0`9}8V+w#Z{4*X=_-yiwGfuHRA zF$T82QXh^9`c2kPo-btIk1^2x=l%(7^UHpZx@|A_TbKh@m-w6$etfbY|MKezNb!oDAY~ju!P#ev4zW?_V1E!Rr4bj>*1%N#qBspYh4Q zzZLnx>Suhi@9&QMVC$FlknH<0r-SR)5#D&$;04?MknyH&$GZXjaOdZ5iIW3Ab?dJ~ zKP>Wt13z`^ufl(*^QUFQfuFkdSD-I)eyI;Q@KZ1R$@}mh68XV_pStzG2mivz4-Wj) zt^YspcQ}9YqT#?#-TMCleSznH-f-ZjZv8JnKiKpC&2ZqSZvD?epYQqqYB=yyxBh3L z&-46G8xH)`t^XP5b3Ol)h66u!>wgOR9MAuV;lNMb`X7Zp+w(tYIPg=q{)eC+3pT zksqx7jf}4T4Z%A_ez5x2F}nKK2Jaa8!RlYb=<1&Y-XZdX)j!7Q>K_f>KJtUrkA9@C zeqJBZXSTnkKf&rxjjsL#j6MzgVD&?yZvEAF!P`WBu=Q8pGrILNZ++{?4_5!1Mz{Xz z8({3gg8G2f|Ekf|{|b1^$PZTki$+&JuU}h4ez5wVHM;u$3f?^OgVq0p(bfMr7;`YF zKUn>|o{+KU;`7JqBVf$Yzzl;UY zu=?*Zy802Tj&mreKUn>@8r}MAfboGA$jB7~X2dn=AqpSaX@Z`u3R{z;XSN~byH6uS*{ihpU{ilGj zMh5i(tN&D^TR&shv4#eIu=-aU-TJGmz!M`sSpCCBSO0SGgvbw8{|QF7e#WkkkNjZu zA8&N)uYLkNF7kubk8!20e(n#(Mt-pR7aQIBnYTVB@`KfXq|vRvdIWfM&a31-=>c?72UHx3&vd9lsKh`4Z>c?7B zPa{8A{XCz@n0InL;(jHG{9yHCZc|r3#=c&S{9yHC?ohXW=B-yEKUn?fE9%x?MceD; z$PZROVpCT?@^ZL>`9LgwKd$m$qg#LFJz7IQS^aMtUHz|s-;exY^}k_s>z7z4)2~kr zto~PVOfLGLv1_PP;Ab6e{a-Y?^;cd1zZ?0%>VMYg>i;YFKan4-{wIvC{>Q=ZM1HXP zA2quAv7f1-&w~214{iOipP{b)`*Hm5$PZRO_A}Jg{~H{?75TyHzuV~QzYF|kU1{VVc=)&FCoTYu$7@avHuto|PwUHv}*zZUty>i@RU z)&DIp=2TFB&M{m6YmKh{YrvS(fuD2S`mZp$`o9AHXXFQ~|5Br?{}S-aksqx7i;S-R z3&Af%ez5w_GrIcE1^*-RgVleA(bfN1@ZTdpSpBCNUHzwman1$(!*kH~&q+pC|7tMK z$-vKZ)cRK#UHvD3pO5@t^$!@``Wd_ST;vCdl+5)*q_v}<_3PS`gbzA z`ga8XIr4+mzpc^LzbW`nksqx7Esbvdj9q&y@`KgCnbFnHSdT`2u=+PJy7gD4fFFtc zVD+zKboH+demL@j)j!eb>Yo69DDs2VKgQ_l9}Rvm@`Kf1H@f<3;0Gcy7f!mKSX}8^;dEnlZ*J31jqMBez5v8qg%h^{e9#It3Smtxroo$ zwcka4u=SVUG`jVd-vIwM@`KgSwViDHhimtJksqx7e;Hl)yx@RzKH9vaLVYzI!4+Sp7Vo$kxyE%+Wv zM1HXPd2W$ye9q6?BR^REJlDuJKJ)%x2dn>jqg#LZhv1tc zKUn?WHM;u02}U0T*E{w}aeXX*%jnk6*fsP~;Afv%|JRIe{pG8{KaTuh^`{}Q9C|4ZN>MSigQFEYCNF9hEZ`N8Tx*XZj192k8Zw3mHu+k2+b)qe&UV-WZ` zCf0wd(bazn_y>_6to~u6tA7am{m2hi|5Bq{f2kY%y~qz%f2Yx{pRsG0BSHN+XKeis zF}nI0>pPJjtp52%xBgNW_`1jsR{w0HTR&shz8(3&>Oa8f>Srv>*`WTM!?yl2jIMsh z!Z{H5c}`gWzDBqH(qiy8B0pIDdm7#P8N2rN$PZTku0~fsV_h5h!Rp`1=;~*zYa%~b z{o5H`{fvckG-xl+S=-*NjIMsh!Z{rHc}`pZ$BeFi#=0ud!UD)_+Z-tDmv31_geuN!CBX=;~*zFGqf``o|bu{fu>a zh(tAc%Kl5H3`N8Uc+vw_NtS?4>u=?LHy80RG3y~kJ{#T8ze#XKzA*esE5w`v> z8D0I1g=y)z4VxM}DySA2+)C8SA{r z4_5!9Mpr*$og4YV>VMGa>SrumBZK|{tN(tZtDmvXiTq&o-)D67GuGLWAFTd+jIMsh zIxF&n)qj`K)z4UGMt-pRZ#TO78S9M54_5yzMpr*$eKzug)qj)G)z4U`M}DySZ#264 z8S68VAFTc#8eRR2_36kDR{wX6u71WkE%Jla|1G1dpRrDj{9yH8YjpK97WP2F`~j=~ zDx<5Pu|5^~!RqJwO1A42W1SrN!RqIFMz((D{bb|^tDox!+4`CHq{t6eKhIaP^)v74 z$PZRO&kwToGw-U%4^}_tBiZ_y_r%B#RzJs|Z2io;GV+7ff2z^d&%7%lKUn>2AKAud ztl`KHRzKsBt)F>^B0pIDJm#PEGw)#J2djU%(bdnq1CbxB{vM;NpRrDe{9yGjGrIa2 z3o(NE%$W9i(K5RAmyQ7+ANj%R?>4&iGj{D0ksqx7E~BfTvD%Rztp3GDS3hH+O+o$H zMq7XGFUYq484Go^pBFDpH*E9s^Jbzqv45C{xHG^gQ~i4x4*b-ue{bk0Q~i4w4*b-u ze^2PgdH!7t2Y%|-zdQ6}J^uv5fuFkduL&JvX7!Zw<7mgVh2Wzci+-eI(T{K}`r(d6 zKg_Y{hdLI0kz>&haV+}5j`{u5+Wd$)4&Ltz*5*1cb3F!^aUM7RZ1M`@JZ(G%Mqd7# zUz&f6VLKn>-wK=U=`8;sk0*i;^qBfA$7P=XU@af9gt4yi-%VpIVOt->svY3+mslUL z*5^JP@9*g>Z$I#6n2(&h(8y)1`}}v?*f!BW4t@~F=!<|+H{qiH_E`D2`b+ z;-$#fTnons<8NkEKF$H{Kh_85Ou*9|%XombKY0F-ZToq?O?7^0KUmxU8yxTJ=`3#_ zk2xMV$Aa>4PFj}n0BiaCLL%GoKrCTfAD*u`2W@_-4_NE-YaHVoR-N_P9c;&g=Qmi# zgKeR1#{+E-7)MM(KIF|DRtmPvXbv-{2OW4*2v1%K; z{8AsV*5{Wv-pJEg-iBa19?-}-9&8JBJ056zz^IF`KOW3)$Ae{qbv!T@wGE>3r$oGd z#Opbh@c?UoAa9Lq+mF1pb)8?@57zeIjpKDZo$X)SV~)pK9#fy}SjGdaH7I|y#~hDQ9dp@@o<25oeBNJiyu?$Xg@Z_9JgCb$)3-SlfRGjuTI3`>P(aeie_YmmSM^ zfVF(YqORkCSi-hGh{fjV_;dV-OU(1Y#_iY}f8gmTFMl6gj0ZKcjtANzx*ZR+Jz&&D z*c%VYZ^r|n$vPewi~PS)`R_&iZp8m_%<6qg|*76Zcc(u8nGnTNe4`StSxcrfA^UBi;iVHz*;_HQMcy@V+q^(AXff@%P;i-Ykh8k{=BEN zyyw7nJfM+vJkS==?RcQ=0i!O${&+CI9S@XEUB?4sk^e0!|JjKD8u2rZWjw&zAIO`N zZTpcof71_X#9&c!(co9(8xOe=sVHv z_@l1_Mq2|$-Gu%5z<72(pf1#PK43274@LEPFyaRy{-a}=4`A&d5^ zgSEeZ4E-0L&hqXA+xZ8Ltn=>=g>L5`##a26(boZ^F9Jqgh5h-+_;x;`Zq#)?J_Noa zs^9Gq;~J~iU)CSjILk60!P;NQOI_z9ug|wSzw{4S`{zdJSfgz`8856^${eqsdCc;0 zPFr2Z3#{dHy(h0OuHRh$$acICE5FI*m-2qVwG}piEifu`Z{2=Jz&&L*q;xKXXgXzLS5&>_28?c`dk(9S0ldC zvCIds_7C#rWZNIe%YXAcm=9p>54Ptkp3eUGvd0{s%RQ!knPV9ru$GTl)OCCiOW4*2 zvGPk@ei@?@j=@IMqPyc@nC*C9w?i-jt9mfzc?!Y zixGbz;)@*1c!0G(kT)mW_9Jh8q4P`o!PUh;GLNZ4VfA5%$M}`R#b1Z0b55 z7>oSusQj}cJ~QGo9LsoswLg$IC)@TTZ~j^5m-d6T{ntT1-P76r&v?x7__W8=Pjf8e z0oL*ni@J^nVhP*&AXa{=%P;HYDIT-DPkGGpPIfHifwjC-jjrV(7X8|O#L7SE@=N={ z+J3ILCwV%{!?j<>9~xQ5AAKjf9e?z7z-W8GsEe>a9~jTh2h@eS&Iined{tB*^qsD6 ztl!FrS2&jW0M`CN-kfavA9?d(=a>EfYkzzb`jDryJk(Xo=lBeGO#KAMGCp7}AF-(G z_#l?Btq)@5%Uyn%5B(mqygrXvUaw;*53J=O7IiHTv4m}Th?V!a{8HZW9<#hpc+B$J zj-@=XmWNo>wLHWUw&fvKzRcy9{swD*^Ln||(^=jU@Mh-yCN;9oKa7>=cK%^(14ds5 zjJ^mMbrtsKBjeloh`LeN`G~ogx1#!WN8A@ z=L70OUFQSlLVie8pM?>3M7+SU%m=Xc5Ax<@+aJiAAME_nA7Jf|tDw*KboR$Qk2yYb zJ*Ga#v5XH`%SSBgIzEUcZ0mzq`D~Y8=EFfAv%CX6W_hz5OL<@|53#6gd59%!%R{XE z0GD6d57zcy34MQ0XLOx)T1Li_L zGpf&wh^I$9&9Te}u=Wq~=49I+$eT}fe(4Xe_Qw^__w{u4$37l&eD?O3`d*G@e85`% zzDC#aK`i>UK8Tg?>GI2b*u!I%x4XwIZ#TzM9$3pmEb3YwVhP*!BUZkv%P-|&?1Jm@ zE*`VIogGVgU@Z@^sB3wMC2Y$>tb8YzU-}!Y{e3y~9X*}p?Etp(4;oqLAI3^_JKr$2 z0i$mNMqdPsx(fUAk@4+(MBS+Ce8gPLQ73(0h`Aat`_tFAiFm_^Cq>){neVdvczl-< z@N*GA9PynI-w^TFBK}gu=R~|Z;w2F;ia6>Y_NCO{_BZ!W+ePEOt>fh9(81XY*sm-w z-kg1!fe*$rv`cX8^Q94AX1LUZA7y1vfwy+?Wxj9aSjq!ydGO|2;?I`%#fUGCnEeNT zP~H|UzLdAQV<``;<-wbO41cz~3nRWL;x8Bu%EP&$=P%}BzNup=53J?En{R?YTi*E* zUl8%<4F~0I?BYxNHgYWGfweq%bDjgXyw62^Zp7yq4$9lW#h3D?IF|CjS{}Ul`uMZu zofYxf5p%x7AC$MAi!bG^>sZPIYkBbI>)_9p_t}Wgi1 z8Gp9CPe=Tjh)*{hl((jfFXgS_Sjq!ydGO|w@Mp_ACE`;fKFx4Y-b5E)%A4R=$^&b8 z@aE(2XUqF!#3x7mDZ@c|V_keHZ;WFp53J?En~!vQ=^(?k4or!|a9ZJydJSt)^Kkt4 zQ1A%++4`-DnCqplpJX_wUyigo;?2i@8~6j;^Ov8GCfm;!XaB-+>U3#O;<#}vba3N1 z#6#V)*TGfjsB`^D{FnVn{y01j!n1e5#d=&CZ#cORze$Qe)zL4_>Bz^iui&p}uhh-s z#tEU`7>IZ<;-QF#4cq#%t}M^?SEIM!qW+?nq1*az4;^Uh*XW73FJfF10{?QuetFpk zEKJw!Yaj;CEeo zsV`XT`zrMRIGyt+d&eukJK|QvOCnxsI4J*Z7hlQ;Yx)0x|KCoR^562xKLWbXoe?jN zxXW-*{+lkoln>VO{|WyaPM7fl>v$bwbUnY12IHKw^NZ^Rc41Kat?y^7CUMZ9^$ znA^UeWd)3~gzfyUgE59d`LB58ZwlRG&aHqs{?z?==o8D*zL&jtW8n9gV-qm@le!-d z=Y(a6hcOTM?_T_kkl*Ji5%b#W>%8{)yhg+mB1TcZpL0E6p1)qajPsN1x93HVdA>aF zSlS1+*N+U|?72w)8@QMs%$xZPudrX;7mVEcRgrQHf1jU^FlA@83=FXA`p zf66Nld4)%s^`BnhCi3^=_^0+weROz95B|#fU#BujI|?RtQ7&{Tn`xMR=_wn0><157;_|w-vDB=elmpI=ai1-f?|32d1Mtonyzlr$Q5#Jl}JrVyZ z;$KF5cf@x^{ELY1jQIA5Z*!de2>o$u#J5C@YlIyy@&7F1ntpW3T=*L4_14df|Mq2|$TLVU014df|Mq2|$TZQfU z!RzA>z4m|CaP~d(?_sBBgMZ+DZ$G=V;Nti8(?y2u`0@Al>Cdh!{ylBP&b|}H2iy4B z_i_B~C_dT7?=X50AG*e8tgF5FUj<(k@s$x@;aJYsFGtKaeg*6Ok@zpXY_lytyUcKQ zIrM#TjJ(-JPM3HWM*R7RFNpa3h|i1oT*nFf<8u+8<2W0HepbYv@%VJ;;Ow)g{{eVz z*Nfv%;jj4jC`2O{|2{%CV03N&DTUwudzL4HS9|e~1F!O!^?^t8lUGK(!f|pi^x=qy zB1WBpcqe$g9QpBQ_qWL$FxqJSGCtkjd}~4Xc}c;={Nuk*LEYw;`Q7PQ;vMJqZ{dY*jTz`E1(1;I{-o%@`l6%fC(SGxoad zKh^Jw7<=hJzbE2*BmQ;7_eK1>i0_a1j}bo@@xu{68u6bZemvs8MEq35&qVxe#Lq?i ze8ewA{C6TnG4jBGfXl&S%U8vhLq7cLK)P1dP53 z7NZNjCcpfGT*`4f5@AWZGRyz|4n*r{}{vCKUadc z^K_2Swh?dRF~<|vNR3DTR*q#n!CD{0qORkKSi-h`h(*@%L|w8iT|AjzTSUCM$E?rC zJZ60`wzhs!AF$R3v8Zc(5KGwB2eHUnAJiq=)Wwte1=jxi3iM4po#k%~Mhux>(8xN! ztZvs!jFtE;qb~wR9ASSxF`k`Is0($SPnb*DMp1n>j2L?)+dtC3Qyj~D0&9OEZ$`HL zgS^@L&M*A|*8cc1^z}TQ?OoSnju);&LHXFzS(fnvYx#(kk?s0~Si-hGh?TA7@=JRr zd(86I^qBQo!?BbH*76XGx|WAn!nQob$|kw|(tfbE|1#(()3!(IGXZSp1M36U`GCG7 z>v}UKVzfQbQ8!_KJ}{o052y=uoe!7`+4!hF<02j#G1drMf0++p?H}aL$hJR_HyiEz z(jQ>$k4vGC@^tq9$cRUH%>HS5On<|%j2BqzgILscybw#+)(^4BdOo8rS>45x@u_*t z@^g<_e&$%p2W$C=MP18BEMZ$dVr8kzFXbg3v%IRuEU)5N$^&b8h(%q?Lo8ui9%5x> zmtV#MtmAPpbjWsmS)cR+u$`YcBHAUr{u}Xo5x?u0^ECzA{z{Qoxagl0dDH(mKl_KQ{qsfeJD$$|dD~-*SNd;{ zslVlz<3-l;5leWr*`NPE_Rc%b?xO1dd)sc3B|zxiYbe=-bebTcg#eLGLKkF{y-60f zu_ei(QZ0ZY7DU0`u?r|7HtdQO5fxC12q>u7d-;7nXXczaGg*8P9)Ev5c^R|sd-|FA z&Ue1$F7zd=`M_7>56ND}wM%~Y&?p5rr~_P82@eu{&~SaEBKLuA1?Tzf`3}@ zg9ZPj;0Fr6zu@}{z84(pZNvGp@#Dme?}2{=#&OQ)*T%8Go%=_*+Vl8?KA(ll^Kg}G zf3|}B9v8phDc^~5jraY)^>2jxC$ts&7_ae6@ZE(!$KsFd{ejINeinQ0@2;dT^PjBs zJ{$UEUoY6|Rk^SChlM|~`r8lw$lf2={HfggV^6+|@i-j+?uNf$egBHSGDdD0vtF;y zetO2(33tN(Ab$Qq&TV@ZyjSE{5652YmDRtp##h$-lw=g!FQ&9%6z>8tmDu5Opft7_l@lP54rVU<-Y%%quPI5A2h($f7l9Z|8CD&`bYgJ zZ)5++T7R^+dS4dg#xDnd8+~~$Tnymn9Rln8X>1d?@lEJlj-T;w<6BODyTF+~zJYQffP?qEA>jmEi*7Y2^4f0(4Mepl3M4pX$SL0{cio6p% z2%Up+t{)P3(n`or#?R2Beq(d+Y514@_?qhn`v=ziq<`SXSD zN87A_@Kv()E5=*RSAANs0#gqPhso*byXP~~`pxYq({*kqRuob!QALWsye_-uj zo%|LU|G=3(*z}{Vag=5Kgzu8ApE0KSXFqRA@uYvBDEMZu_7A!ZvhN>R`v+T* z`~Fex`v=zk)w%ZvTmO)I*GyMpSIvkA8h*UFMMbHnSd>R z^lkl%IhlX<@1rT6^zX)kvBp{dpxYq({*kqRuob!QALYJ(VC&ysg1+?+wKT4G_3jY3 z@nL-SV*HGMDYyLD&yP5L_6KbG&?RU3@R9Xz0=9m|m}bv@F$esWd>HFP@V5y{?8ndV zjO@?Xluv_vG0qo%g8YL{|80@IKILBj17MXefd2anexG~4;zf{y?R<^c8N;{mROEj; zelA({{rJ(JA3yS3{MGXxS;rr_(Z7u+dque(f2f6Q~~{t=)Vyh$79Oxz}FUhb)kP%VmY2(3D)`XD%g{C zJaOI^j{X}>@Re?V_pHDgpWm0DT>Z6iK9cuo3*Wz>{wth4J|}1P;1^S?#HRd6G9?7Fp$cM)v)Kz8NNJ`-Oosd&o0;vf5K0YqrkM z#@S%3Ng3mq*L>yr_>zJz25Wv?Ps!?kL1f=g$Sq%$`+i;o`S3^f{=nu><=)?g zZvA=z>^;9QuwB2v7v;vtRan=Lp~x{G)+%yk+Ft;B&5!*!zhK17`bF0I=0TsV_B?*U zR-ej!eW)q(M^=AxVNdq{z~)co-rw^Je`NJH2mZ+3AK3h<-1|GP@JCjEv*C~I{ejJ& z%DumFH=fXKct$Q{8^0(wF6HP&rjK3=`|+l~m@mgdHyF;Js`vbQAsNDBwtnf!xf3x6^?EQhwpUS%2%_JjXD5Mj-KW@Mi~^eumt`~1&M{^Wc_R)1aaNA~`}=1=9*uq0xCCF?QP z09_yD{67fRe7Qc5)&Gph-aq8#U*+Ea0PLf_><{`2?sM_>hJUig+byz>2f4*lxsP{F z;g78Tc7;E(_XjqAD);_y4$1n{>-_WlLRSB~ME3q6H~%X4{?|Bvte>p@c8=`*L2mw3 z?)|M!{^b5US^Z6iKeG1+Hh(Htf15#n74$ptKa6u@8UD5k?n(aYKZ1OvGS)qWXtE7QLg!H6>)B(H~3eLJJz=Yr$$A^Qii=F@~e+4mQ0^{Cv}b2{|BKeGCJ2Kj&17 zhG(unVCx5bWsF>fwLcth>T7>gu1xz=A@};HIR7U?PL6U}Uru)U?*uv6_II3bn~J_{wDgKNa|VUL<^e0B_+ z)d%?oto0%n+FSj~FK~0$aXYMb`Pc zAhPC1{o`Fc`0~u>h{C@A(6|1b3;A&_{`P^h_>gOV>Q_a%#;5+VE!@LC9D7KqC6gt4emD~xA9i_G|UG*za9;HfBceFzAx;LO8y&=2}gOOnKSPr zha3}hMv6S_Oavkp|pL|w4Ua^;;zCDj&PY;8B ztWVZ=vag5i`?I9bCwqOe*FUt-CwqOe*XKO)`H;On+3O$T^cSEWvi5hI$kATTw~$+Z zRj&SKL;v8yA6flv9p&C1VIa`mUI z@su?mWz9FvulgSm??BX}bW&`z5mX2R45ySARU7_e%ccdW@|8peJ(g4|4OTa_?`?+{&7aD>KlE7b+1rL^^eSV-$r!n2j99`t-X*KP%GIB;##7dO{CrvH_7CSE9$5Fg zvOX+u^0OfaXY%<@j%&pRIFn-zSidk28({5Er?T(g9LVvx{C*0=YLIn2HjW&}L-sF_ zn}3x@e{z2SbH?Q8Lj$bGhsv{flxsZd&vf;zE_h8~tM@i=SIWP#F0!9Llxw|B$Y&&d zIbV}C{zg&m?IE{%RPO8D4fe=ep7%hP@8lRGwy=&r^QAn-W9}J8d)sfcg4}o&cxTt2 zp1|6Vw#ndUz`u^yGXvZD1DVKuKX8qdjR#r#fxH`J-w&|$L*>37J0^eiU&Eg4?a5JJ zp4aVwdM?KNL#_3%K_6`LuLst6d{#uc{BA7H75K^ceFfi8@XZB(rr<9Y%<4>5A&|aDKcxFAGS&wJdt2xJy`qE#(cVed6;(>SGPHe2yykIgvG=l2za516|99>j5~+hphQ<{U&QZ z)W;g9ayfpR_St&j znfB!D-;=c; zuob!5b3YBa^+V;_4~{p?v-#)w_8_+YYz14qm!KWbCe?cMk zlm0V?e_`jJ?DNl<`u~JK?Z*P}KMH-%)CXtrJ*zy%=XxUg%C`o#`c4A>y@-!Fkmc){ z{=r#%&nnk=j1RfRI}!ZXBHmw$c%JDGoW=93avu+Ji?KV_DtjAZ$svq;?`K$g1_|tgsEv(~@<3V^@SkJj%tN%Xf^LP^0 z{CMn8?(M-=ugar8srPq_Rh;$yJzO^nX$>b9+a&5Dp!BX z8c$jCQRdvG|2TiRUe_PT-#DMA;MgZ;^O@|&gRK3d{;!-pj(u`wPxkg?wWt0sojs0i za%NBV_GGoE{x86B{P;X_1AffO?}GeM$JGD1^M|!W*v|*Ztv^w2&o|*q^!@z!ne)$h zVAH=h^4%DMRrvWH{Cyz*#)9kM~g0mv~@{$N53I zk4M&cl>ao@OFVEEkL=?;nDiwc*y8;OKU41Gku@IWKS}ly51hp#`*;r|eTfIQcw8ST z_wmRYkMjGIy~G1&@yI^jeMw*9fh``7KgxYPvc{tvb0V9+|82&c%i{fS^ADYW&PQ<8 zKeF%N50bw04{ZJ8dPceLA9AU{TK=7S?*X z{!{MPC$QR2QMvEeR|ep-XG-VPvz=wGswQ= z>>m$o`jNH2yj~Lhc>dz`QvHi5AIgL^ADnB1eLm1P|0?(Sd?ESc`!sd3`op_#*p!z~*1&KA%q~{rYF13$A}Q&i`BR z^QV$r<{v&&|NQ;Sb@FVaxH{<8KLL*U)<1^NZZ7!a$zJ^3==Re`LLY4QA1#>vy!hBF)kH4Rk zxlpd$wkv*qx6^+Q_??bF9Jv0GnD6yq=KQY6u+5mhA-DY?Yaw^ye}nk>?U7@?QY++k zz49E$-{SP&3dWjd{dqI^jfr{xx&8*n3&7VFe2wEBAb)+quLH+^%6OBtpFf8_+0R$7 zjgQK8zHSBC)rCK@`ukawdw-CdKb3obuPywM)!!qqC3}Bh^QUs}?=?>TFn$JS^NXzW z>#8W%c+`J&l1snHD#zYS0Z9QQu z*c-DJ&+L_Fj)iBAwdYqA%(?32JXSpO*z(L{*YoQl>w5RH$gzK1OGIB;?UmKPvc^}| z{FF6+Wvx$H>sQwPC~NN&%9R6_|bxKEs)8vR~Od#G8ud+{A+*C1HZK3 zmw=;w{SwGuT=0tuzPR8E6U+K^K73q+kcZ-5=+-^MSH_5yF>)bWJ{Lru0e`*t`9l1C zVUkO{QOB%z1bTUFe?yLs2g9f4Q%7yWIzC5&2XNm!{=U)4>@nEI zm-foYg*~$U!PR(yoD{Fp{ zIkw(Edz&$P#h5yOXis*(ubXWB=KMhp#?J%8#+doE9Ipbebld}8;h6PzJLY^iE3wRX z#IW%>5OS~`-$#Sbbo1k&z?Ki^2jn^*q&CNs56EpX&!%*N>%vt)CqK z6Oo@DpGSdDaLn;M&N0XH*u*lPu(9#nA98Rup3iaPxd?Kw#p8H_Z9JK)EHQMp~@`A4@_!R|TS@0_($NutNdhxHvr^=PpURnJsYkXzRFEYo%`a078rXj zW$}kK*Ze_N2b({RH`)86zW0YUURnI%7&L!e|H0-DeuTY0>U)0&B^H0E!TdqSnpD5e z^@TN}_D;?#){GvQ9DS*yhKvzA<9)$#{Ojxw#wz2zlYSfLGuZz7U#CUJyp{jHACI@a zps(YN-e-*7WsKT|WBqND!8pb>KdFCV!3zqWpSW@n?7{l`&+4!hUf(9a54sN9`n;qs z_lLmt`_7PeeQqHKtDLg>94Dtg%tihFKV@Y7eQ1m&a_t9l6OQ%r_brS5BgpSw{LJ-@ z_9NgQ;%CO&y@)rf;F$$?C6<1Gtsk(hleHhPt%z?Ki@R{fby&Uj5Qa+dukWMu0(?1<3W2J5A3ATQ`sPLa%?h4Y@TQ4nJiyiu*w)EfKWyup zBz>tLZ1r<}+1Sb1@2QSi|3;1}$6BlXlJNjreE6c=#sj{DH6Qq@Pf7NY57_ddf2^VE zU)Ik_U>y&xuV5Pw)IzrLKPtoguK?O(~B{jL4eG2+$! z;h6HjCuTgd#-lIcc>K|qaEwP^wZA2M)=#$jaek=%)yWy}FW@-dl#y+`QH;p*tsk%z*7{*v`+d@v`oUH|&bPJS zIXUb9tz(YIZyZzp>%=l1V2cl5lhq3_n-EUg!2=7FaF~3$J}baDB?d>@S_F)Jh6-i*!lt68d>XyZS7}C zU+M>2{kubs-1PX8jcAtm6S0*~SC4h+M}5wP%c6g#CEXUdIEy7k@e)$fb6F5&yn|?=ASpiDf*%)(_a$ z$XY*aYd=c*Qa{-0p9%RrPR{!8cFgg(%Q59YOf2I8w)pTxxs3;W32Q#^Rr^7*mwdpM zPZ#9hcXGzN6RhI_8QI1IwTN8D1GQ(2T!j62&|b&m{^(D~1G&_&?q&1yj)K2i@a>6Z zJiyiu*w)BeKWuB?N%~Sh*y=}}wQoB)>;INxj>k70Q~r&_G9F-y4_}nqc)*vi<^x}~ zuP1vs9&dBZcwckOcwbE{@xT@jz9_eN@FlGA;H&nPWH0f)?3nSsttSmVK0?F-3X`VF>z?*jSfot*JL2gW$?dVw;s%{Ppd$aTKmUNCx{$CK4Nnh#(TfI9%{w619y>E2P{=dO7<<};b{(~((d{J)whc98x2fk|8BzwsR zZ29Z}`RkpW@m>ek{zFE#{-YL=YyVMu#>hq3_nY?GZ^W)$UBr8B!B-`geuJ%E*w)Be zA8c!{N%~SB*y`IJ@>e@K>wA@B_WPBNDZetY^c!sP;fr$XH+%_eKJZn0MY5NCz?RQ; zkYC~CjQ4V|_8T&?^&7Q_T>FjMGe$1LzTdRhej|46WktNp3%)F|^c!sT!nQ`%`e0kT zH0euyV5@Ii$Y1K@tnVd`+3y!Sru;>TrQcwS4_}m9zu`+*^MSA0CCOgavx^-w9?sF( ze)Gb_5)W+g;HySH59`C-_!+*0H6DD`E=cxLKiKNu8uIgy(0$Tl9RMdUgjs6AukBJ9V5_K(EzK<~w$jt6q79ah9&Qt+V#FHS7u0k(d? zwnoo^Hb3D@So49e+Fr?C@&Q{uQy|~d$r*1Cu=XD^vh^Reh+O-R+A~Hj!hSqx zuj7HIYl>lOdnuj_`Q@>84s|%r~0b4%pkniB+jJG`)J(T;kkdbXXP>aZQ zJWzYa$VJ$X2kmt{(0lQxxFG?>!dIBg00>LqXD)cx3;#a7_8;iKYKwiw|FvTmNZK)_mZrwpp^5{p>Wy)Zf%G<86{y;(;w5d{J)k z;7eHJ!B=hLWH0rDt^OM1IA>eEjE8fWjW^HdU>k4rPUJe?=yk@ZHDlx^?8l$}MsWWA zA!Nv3}qRAu=NABHL}(Z+Zv8B)tCCgR(}<8%z2Zue#{ADjz`@w z<>;BpWjw$ZpT`gRJk)o0@FlGIz*h}1)n4)eTRs)Y@z>;x2ek2^9BAW#T12knf!Z?$ z2>briUXMSXpUFBN$ff!(d=T|HKdb*N_#cVc|0-DPr>$_Tm$ucvCw{l5 z@2`&0|LR{HQ~u|~>_6G!!%y3!un1bS?3qWO5|~Vacnb2?=wa(GDfb#ZvK&VzA@M8FN%B~EBMiZf1X(8AK3Z> z+bUW60o&@&lD_lhq3_n-F2lkdB-_u?-e|IDp=e-Zz_f?=2S z>&J;JTo1t357-K8{fzmeq%ZY@t$rS__c%H0zuPg#<1WXP|1hzP2iW4n7v(k{@FlGI zz*qGL$zJjSTRvPbzVGCWcPCiK12VFW2Wk?F>(?1<3W2JkNcxP9S`JE{az9O zj)K2i@a>6ZJiyiu*jC9}KWwYtN%~Sh*y{f?L-)E)DO1$ zd49RY$r$$R$Tt4yoyc|k(d&$FEf~3p+|LL4)A@k07ymjRkX!ZUBA<^Jd{e<6 zODyvNZ2f_4m8|`MZS|u`U-|*Ie*6yd8=ai}xWO^U=X%GKeGwSL%EuS@z;KiKO34dm}}a@PND#~hD$Ii~!biDf*%79YMS zxAA~4Va*4=s_#hlk`LJO`8DKkcXGyi8(7B!GO~>aY7x1P2Wrn4xd{95puLUlW0KOGO`QoX8(|C)kdoml!0w)$aPC2PH~t-dPhOTA#L_m_~r(#cuxm5$l}S2(8p zip0`?u*HWj%B}zKC9L_tSM}w|Uh)B3KEHtcWlqj`mxHzckddwbs72)3f7G5aauN3Z zr@i(Yv8$KCf3&a9F1T6n76nhrneYC4e|+~m;|B`9v*6Dae0{-O4_v-{mnY+*9=?l^ z$p;F4Uct)>KD^)q3*Mt(j8hhG`+_$r7_ImEy!Onv=ok0qnfz-7V=s`&KUgrDkMJd|`M_88!elS`fGwX#A-}-M8Si{B#+mn~Q0_X`Sseq!l2*y`ncCu@DMt)7?kr9QCL_jAa{ot*W- z*5b3@>l{@Z1LfXa_cvI32Q#^RUJ$AGM`2rGahX5#>1Sq@r8_RcrB2u*HWj%B}xA zCdir(d{tK^d&viE`8))9%gGt92RtJlUyzZl|ENXe+JDrZF=7k*e$!t2jo8(dMZ6US zcPEy9gRNfJR>@i)Y^!G_eW?#@_5BoboMWuNtnW<6?DrXtDSvKa={MNo!x!b&Z}<|{ zeBi5kda{>%z?RR0ke}w{jCU$n`wbb{`h8ZEYrj#u=qn=^Vc&1sYrhe@dP))Rq3FOP2ob@ep%zmHXnDXNjOTWPuAHFEJe#4ir<^x~V z99r^})9KoTM-Hfvvv#Az$j`tnUcN?Dyf0DL*W+^c!sP;fr$XH+%_eKJZmtlI$fP zu;p_f`2kMO`W886zxQ`c`Lh#CzrhwCz9_eT!}9_+ z$1&s0c1-)-6H7d>#e*-(EgpOcYyI$5ot5k*-b}}g*X5Y;FxFbX!~Z|CHUw=G!52QspaPczDOd{DdSDZ7|S?^|!+5c&dDc>}) z^dD^T;fr$XKYR&mKJZoDB-u+oV9V!D$TxO!#+wS({zFE#{-YL=YrmN<^_7u}ug9{8f%#up&^+Hd5ZF>=osxs$CQh%NjntVcZe zBKOL_Qhcu0m47-$zLkGCru^@TIUmWIFMSE02mg2DXZRA1<3V4Qza@K)2if}fUGQI> zobmnwj`NW+vdu?~rO34(9DC|3<44bu3*~Npia(v7n2W-3eloYppOe1y=T8OyvEV-> z=KQRHtv|38)_%aY^82JO{Qz4(z6JU3oSgmmZNa}O_}7lvU$FVR4g9#1)8DTgbG(1) znDSpFu3&zWtseLi*71ff(U1LS?inNZjFG$8Yd;WMIL=SzUU@9Vm;QjQo^L|_sFO3_ zpM!P2Kt|U2!d{D9^W)f1UzxR${rsSPoFAME;!o!Xa;f|*>C60puKhk|=0lGD`A&*( z^w0m^D%pOYv&yI8{>5V0Z3X$mh5v^N{%K;FZ(tiA*jC8eU)WY2O#0GKu=Vq6kpINV zng0U?-(T>3jyd1J=I={j)TI5C{$SlP=6w5+W5&BDvCKEH)x-Xfb-uxu=#LrSgNMFa7*}!FMK>`2e>5!L~wP5C6;+wiTQMHNMmfwtBw^`5jKq zda*{EKKb^7zvGzm0c`$03&uGzv&R}|%=v(0+L->okyz#f*y@2V%56Ttm*{JMk$c8G zztEq`k-OMyKe(RIpUwy5Uio^8Fa5?EYWXo=95cqu7jr~e&X1fkFF?OJ*6>BS<;(S$ ztnqpLeI?n;cz~^cpNIU*PR@8Z#%%sUMz;Bfu@t%1%dw}vGHdnBT*!Vt(x1*hnRwrk@m_zDc;zK9nPdn!P1Dn5F zz!+OwZ@GSe+or|!cC*Nvfcx<|?J1A_;-0DUN#~#Wz^BFMeE5W8%5P5g^d&qMzq9pp z{H)xGc!S`z`1|o>FY_I2{X=ZZZT_$x>hFX3#j(D%U>N z@uhyS^^fw8IXUb5D0oI({~#mV{KHs^T=V1DQ(u|6ko|n4z0NnpuH2a9GTt{7e0^e> zZ(!>eY%64~7q*p;Bz>t5Z1u4pA9ixq_aVm|-w!&b`~!(){J<6;z9_fxf-hms2fixr zPxeyZ`y4agdmS_0b%`Y&*y6z#9~jg5RE4#v5$)!?r@!dSP36Thf<$!B#Kl z*IS*O^}fY1`~POgl)ovl^dD^T-x}oBfB2%l z>pyA{x%QW}Q(u{}$-dvT*M1{*<(edye!srp*Cm#IgRNfJR><0K*jBDi`cfa*>f^Ef zS|?|HS2Am6;3K_nY?GZ^W*=BFUxSR}}p6#L{oD)eGASS?hysH}MSH$Z;5 zle50d9JAk-I;Q-kiKX9Qiw|FvTfgB;So49e%1e^HOo^m-D|}n6bu-_WW-*W^&C}rLd0gc9CO#4fd1% zl#ef1<3+i}Q@%OZm-B)1$F88pMzs`0P-Q^I|JN{pV2F_ zoeyzt5xM4fVZj`G+UtBkEU`x%87qu!We{;R9({xL{Kx-3Mg=)&zvSIS&(O`}Jq4dy zF#GH67Z?1jf_Eu++k!Dqyg#{D@BGWXSywi=9?Q9US0^17tdEtGO3SyDfzH(BOpAqGVE&8WM<}pC~lOrQmWmU45{8|NLPO5*A zuPk^)!QJqw`NFnBeqM}+SY-7l`BJX=BDUyjzKA8P`65>3tYk0woLTU53qGyjQwly2 zJ~dz1R>+#~S%I^BDc5`vTl6(w#1htg5v#JSh=(;){Yn1E7knJVnD?Eqt8l#~W8QZz z559yk?>d)hn1XSPsJ_T?4z_sEt&lYyd%l#wts^Lkd2) z;DcN|=vK%Y559yo9&E|#U;24qVu^P^!HWvs-^GJ&g{<-5OIYKWh3E7Z17>vc`iiVU5TA9^`5-^Khw=8%I7Z17>vc`iiVT}h{au#p% z#1e0_f~OU{sf!2Q3R&a9m$1fzEjf#~Nn(k&alumy-pIv+ZiTGz;7eHJ!IqrG>r5>1 zrW8E6;7KkXbSq?y2VcS(54PkiUPoey*Isa=;JS+k-3nRb!I!YcgDp9WS4%AMss&dH zChGAHT@hXJ1ceUUXDZNXW*KP8rUe=PV91^?c~qb^zF(HB|c(H5M=`(0v*_uGPhQ}C}{ zJnE7)9(|ED9&N!{yvGwuyk8ak%YuL5;!&5Z@#u@J@n{Rq;yspF;yqgM&kO#Ui$`6u z#-lH?#-lAbi}y%kiT7~94;B1V7mvDRjYnT(jYnH>7Vp8t67MGkKTz=fE*^Es8jrrn z8jrT%EZ%*ICEmRS|G3~Exp>qiYdrcQYdqS5vv~I;mUwp;d{@Cgbn&Q5)_C+q)_Al9 zXYqcJSmJ%Z;5!Tco{L9avc{t?vc{t=IE!~jVu|&cz3(n$wJ+Z{Qt>CW}{8bl^x@3(7VpNy67PnBuP^u`E*^Es8jrrn8jrT%EZ&C`OS}&i{K0}h;Nnr2 ztnuiJtnp|I&f>j4vBY~{!S5~jIv0<+WQ|8(WQ|8#a2D@9i6!2<3w~F@?{x8~OV)Vw zMb>z<1!wWzkyzrrz2LVM{8kr_x@3(qiYdrcQYdqS5vv`*zmUtHz zd{My{x_HzjYdrcQYdqS5vv?OImU!nE{KA4?;Nnr2tnuiJtnp|I&f+~kvBW#C;PHaj zyLi+kYdrcQYdqS5vv}(gOT4uOj}<)X;!&5Z@#u@J@n{Rq;*BJhc*6ysTkw#JM_sbU zqc5_?qb)d#2VG@}2i=VO3+{s$KKQ(&jk;uwM_*)(M_aJ^Ykc}5 zYkc}5`}ik1X8aQpOZ?*!OZ=n38lSdgAD^u8>5HuK>5J^+9|hL&WdA&~SDu->XZj+m zzsdOdIgXDEJc;?C7n3+1kWWHho#@>pj>l4`zW_fU=J;^@yu>l(i}808*!Sb#EhESL zr~DwY=CgU=`ZvNmFD9P`d-{Q0+adU?`t*NLTbsR4bWvb?|6ffo%r7%{yhkP9oLx)c^>5am%ZS>bMbdy{M|M3Y{+@+tNsiy*B15)`jar% zJ5R>X3-R{={MGt)!q59BZoE2h<8|SAdgGeNuZ2CvrEzuS*MM=XG_C^ghrjBN{dyMu z>UeA#S;yo1kyW4L0eu?}mFsx0#=Y@Z{n0;J{oNVa`-9y4sa*YWeD}awg?ZhHdD>AA zto^Uw3Pz7~yeFMiFxM0>UlG{Glew|SI=<`$S;rT#Gv@s9a?T%etWSFBnf~YFuhz?c z%qe&lSmy&}WR1UjWSvj+MY*3(Gr=04GP1^-jGwz4Gd|~_%6E&b^N+f_;BWL-zaeL_ zrQF*;1FZQr@$-)OtK-l4N{;@f+!0yrIiDc6@mINy|5lK1kH6}V>nmCPeK)fA2f6uE zx%anivX|UE(>Gb?L&>a#a;;9nK|%YwgD@aGHubiub2{E32#^`L%ZA^$+Z z#qnD&j?emA3jH?~TpYjk%M1Bs1z%e5OA9`~;QoS(^Fw`UAuo=P`l3Rw)T@GS*@yx*= z*uZF&pHFG6A8iecKzn2|S>ki|*fyoNr!_FzJKEbCktDpQ>Lm3PobzT1UGk0=l)YlzTc}1rA@?c`jy2}?h z>ABg8QtucUlZMy1aMV`~5B66_aWb29x<45IZ{a}a;-6ya%NGs~3jgrmNo~?o;zn)K zR1S#tn;%bUlZNxh_~+lO3=WT<;(>*(Iq!`(bYmyNcD;8KprMmr9@ zRlV!Ma;UUxT5=S&hs-9^Q@f@kOHQ>oyu;y_AKsj_oMbvFxqy-<$4SQtOYVrwx#uUP ztp8}$Y1yQ#X_FcwqvL(8#_Hk0F_bgu)c>24PvK;STV(Qw|4wcTE#(LKT6H zDn6Ye>-;2~HpCEmVddv1;su}RoSYKpAa^L7gMQ(hXilDz&B=PBm*?b3BdxVOXN`CE zv_@7A_sVXhKGZ$B1`bdDzxnwT<|j|Q{KFII)@`wu{7qEWYf5WvVF38^7Hz)!{3QPQ zH#1h2w0vU~_E8PlYr%o+H#X*?w=9k^J`DRNO)AXXDa*!3dd3Ih?kG&$&bZa!J{o3W zp*7bNt=(Y{G}-T}WcOAcK{Caw`LY`hwQ^S#7HGe#+EmUD*{({CkE+{M$riA>G0HwP z&1jUcC;oB|vS~bQxc?w;6q&;%dlYwAZRYfOhncMU-0zV6VaO{E_0RnnS@k!G?DZ!) zZ1pgvZ!c$V{;-b6=A@Id!}>qJqB`;a4)UjPkn{c^|L|b{&#tJp`~Pr7CC9+TS5({b z5ZZi#E2^zUu))=cT*z$huBgH)v)xg>Be>4SZI+2H+a_8cCb;U_UJmDCTlRFWy0+YK zefTe2b@56{uS$57%av7JHF%$xtXD;xA6!|yzN|D+pI2RE)#s|jO{mu=ZyEKu0+3ao ztCGK}qRcaWduDEA-QYgetFGf^r@N?$KfMD(W24OzTHSrk_0OIUEJ8XX%R7-_C=_KXc!2UJc)OZ`e!#s*Yu7wSH-(e&F;Rw!F40e{=uH!RpT@sUDIl=?H=y!UeVV= z8=9+e-9m9|Zu5x2bv)@t7b{w8y4Us&4maU$U~shA+dtGNH+EV*&GFXgT-3WnYB}U- zG_-GUHJZS#9xA>nxYsdhan`VdglY#Lb1FoWrf4av9q2}T(N4rd z-5Aj3;Hu{Oxy{%&*4~GkB9z0LDj;9k@4ia}J~M8ws& zVHeth8s>=ir!%bZ7)uEErlo}4vl6;|2{WvOaIacR2zRP?MhO#CP^SG%@%VIFzjAOy zTOaO;OWx1O^4`Jct@kL~CWU+Cns>NEK6ml4%l?PfBVzAB%R0ZMIDa~whr`(Ua93U` z*gUIXQ(pmhc=BgbxJ$1Ubc)h+R4_s3i>xP$?$c>JnxKuJB+evlzNmzIXK`_@3&lCl zQ;PhVRP{<7{}P(LZ0Y|r=Y88d!UKt?({{KEZSVNIWWfA8{+6ZoXQ7aP$DcI+jz4Bf zzY}UA{|VZjcc`lf9`yohB|&KNy^E+78ILt47W~`pGwj4$r?86(oTp5QTl8iY_`!{3kFi1&C z4Jo8KtJyW$oRi$lL{LikhohN@pO}sM^_D?3HeDrZ$QVi!y?BHze7JHEPlKI4eZZUJj%}8@> zXkGVkPn=|EPocGDu&-yNDUUkwgpBj+bCSyk+t}CaU`2=xkJNR&J)>(j{P-zOp>zAoN#T@Yc)B+ngB9_kC$oBDi`>zw&}Oy}L1&O3w-IQrN_Pdw__5ZTXdZqJ8X{do4?gVNV=CGTci zdV1I5ad}U3#dveY+$K_eoA`NJ8P?J_m(W*H+s<YdV9`GQ}I#>(U>tbZ^pS8?w4jczeuPml1r?v zi!+@IqYf_RJ1#Jt^D~|23+;8<(nC*6Q}MLc@L&_`k(+Yo;iK8j?s+T1A-S%1M0P#n zVm|of+u&B!|LE3)c4l@{E~q=!OJHlxx~!ad6B zn9kXm&T65(PSGARM;_7ZpIi^a%POrW-@_-fsA2TFvDa7;&KKR`Y_WnXT#u`0Wmd;o zPVzjf^~_A?xlZSF(>X2EIaz4V(b(q8x|*H3xx9_w{!bqkH{7Y{mb1bNF779a*?*%C z2Tat5<*t%tS^md4$+1@BF`3R$PUlF|c}}KtxX|pQ4?g7y`q0-syn2H+gxgN9X-o6r zkio&eR`&pRDm@#X>IU)na%_U#@8H0yZfq9+gA*a<3`2w|6WoS*qpmPWhq}5KXVo6$ zBz7aKBfF8+vA@&7Tnv9Y_RIXF+d>`tn9AOn${s=|EIn-b5lfC)!tF>%e0DQt%^#%t zX0|tp(pV>yxVzv|rs^ngzW8omHp+XI;BdPr@vK5Vqu^Z%4)<-6{Z55^`+~PAINUTz z_R|V^LwJ)D@oti<=%GSuXVKBe^h>OPx-;! zjgG)Wk-_2dCSM}MJ^VW)bYt0?RtqnHwcjo{`H=46=HfNjcH^UOhmVfyZP`cPl#iwy z#d}$*7OsDGT9$5NAJ^ACz5;K_HBmO6-}5Cwxchpr%|5$LKHGX3B4R(MuTnOT>RmD1 z%{LL+za|QsP9O;vR1-AL;Z^5I6yFgdz=MmQ2ULASq3KHaov z3MF9+*Ae{lgDXX~U50`jc5{=pKz?*Z2%Or^5BufAsW<>u^{&QE^YEr&d$)W%>7@AB z0E(x|C+DRVSRSQ}HK+6B)v{UL938|ni{?sP(zJS}Pq5IAZ(t!$I>vCUHgU(FCdG4@ zaXyC`!_wG(isTSB1!%|`CbSq;bdAY! z$sfaGg1lCwjBDv$UMaVS^WQr+*|0}phZlCsU8{PBM@F$Y_l@-r@N_@Q2QxFZS8g*X zg46e#-Q4dCG)*4ggzm~k;?N+T6r~;qJHDCA(`PT-H>Vdd;@C`N?YB=DA+HiI`eX9q zxbQ2v4-F5FVhP2;8}6@ICUFiZ4>YG^F4qrH>aCKeaK*p-Ym4~UU^ zQQ{eRFf}-oatSuLYr|;0&E2zz6!P|uxQvw+26Hk4D)+8}W(t5_9NxlnLf*5G>4+0( z6EDPfH+@US7BGHjh@|PFjV*LCX2>#}d_1@1?90R(nwKibky9_^*UA#(SS{c^Vq}4Z zV;~jAM#zM)siv)gJ8T_R;u#|@+lL0RkKj{P9G0VNFqxaJ;bGjw@zrlQve7ZB?HXT* zdz#}5X3pvw!w+K%X3pzEF7lIWf_0urM8I-$q%2!8!oM0J&#=$O|gUr!^@~JMZi-dN5600E`x_xoG?Tg#9eR2Cf z;_#p}0r4e_zP_$8JkaKH8IEIFzn9}IwF)vfS^0r}W21d9@pN5 zU38x0XopLPkjzYT*d;F1;jTi5ySi+oWsEsp^*Gm|m7A)g>jvlaaQDf#Cvb071_vG3 zSsbn{#ys5N8JOVaHYFp2!|~AcqxOWakMJIiI-DKtXXB=>jKFk>uQzPk!)1|H8!n3E zPE7lb){z~uj%+6sy2f{Sfg7B%OiKT~sC{gP8#d#4E0OL&wXhFRW`sy( zhy1|@KbFaJz%|!g3%FC@zzbPpBV4*q?pn5{ch%_bhhqh9gsb#+TzvKnt^r~6 zm2l16ST;Ji68C`{;i6YHmQo`;d21}?%Xh$Aq$#Sgm>Qpuj~a{n2FH4UAI&rlrpAro zql3rR_xAP5&49)SGOd%S_5R@Jr0%}8xZrNQMZSg@#;0@2#V?a~DYmJS5h35m#4BkI+4gYXp z&Ili*a7!f)UK(wL^=PAT*}rVOA8&KvQ@$xFe;Q#iiC=tdWD7*2TBKADM|Pa|_3TKg zhx=M8`;@e7YIp%ZUjE=UosWl)i+cz4aD$`Kk2{O_dPe=)Ffc9L2pI-mBWa{|*I!@e z^%60dv1W91Xuo;$Hu$>cyn_d@_m+bK-vz)*TYs?_%z8qDWv#w&bMK_y*1GWZ&iaeQ zX6Glg@n6NPhet?Htn9y;P`^+-@4alOwX$~=zQrqtD|#`AHwlTuIHY@dlM4?myPL76 zxO(RIFLBh?Ul=mO7gOEWR7d2y4|9Vy&N%U_vGub=dDFAI*LKhC!%Ka0^?RK4V@rwN zy{#W1lAXeVo!$(^)@BS}+&oV@i(5nWaAmNu+^1~fr2)Q1&CkQd!KQX^57%T!hmwQD zbH|eK)+jy*+sd7I?ue_s-nZ`^S>77P^3~mkCA+>*40#b!Ul4pmJ$w*0mAJDI)VsoV z9=G?K-K+3nb7XAgO1u|~%{`XE?!NJn-jVFlv1sC%J8x6r5>}qCIGgm!Et?`7zkwkfS=o6>sNl-|P9;|;du;g!^h%GFm@ zC$6~JCHGwLHb8e1Z%>c*;-zKwr)wd;D>QS~Q185jvvD!cI}nV;*9LZlj?Q5(hsgP}sA|?yBCNr4~*^L87NVe6QT=)cz&J`BeL-9xt`9 zm5T>eEu55YYK-*boryJFLt*PDr7j%^-*U%eRLTahAh1L?!?`9bUDX^qU=iNM$sNSE zYeqy}_ELB^XH-^hylz7uoHXH0Jb5l@n zC*mA~m2FU5CtpR7)_Oee3GVQ|iOXpWB@JR&`A*FcW(a4)-~g(UuMpr2#b0}YZx(PG zND~HP=bCs(vtOtsb$A4?LJSXgk4xj#LoUYhJKS1{fT4?cork4M$d!Zr;T6&+GRF+7 z{aNNnxkNqD>RbyOdzn(%JGZs4n-9lR?YB1D!nR&#+pi?pg>AUqwt1Fh9^yyBj=eTG}c_=PQN@!gvx>xXa)A4gd) z_J+;rJd3Tx?fm&%2L@ol8x+9|H#fqE@GYOtpE;d}!}lcTHAS!VaBz2CH0ZL4-wD<{ zz1W|yQk(CPh`3=ji!WK#zMHl1+d^_DqxLOp^EWe{a8Vg_ZZn;)WjbGpeufa?%cc{q zHFdZ?FFGIEXr$HO%V*Ht!(HoV^M1TER|=VJ{TGzegzlrJquJ|u=RY4{S)w=+3 z<>#3qRi5VP3M{U$9OGM(J*}`~<^;ntMp%UBj(EK$Y!C5DBF^;Vv=tl{0DtFKdm+v%?8wcvv-pTj>+pVb3|T zN8J6*or`%ff&DSi!5g+yr}TH@{Z-!h8S2BY6XBKN)F~qikW4X6N8&qcBP$?Z$Yl8p zabyqv6dx5ztdV2*$uV;%oggl2lDM%E3pZ%Qdf3m8#`^CBjd{Z4#XiKQIr2t6eABLW zs~or&a2T+$!8Z}P&vZ+bycLZ{SOVg_oXK`+2EpcSvSAa$V9@O zDLG?&Msn(~OU~LS<%4>7L%ep2twG^lm99bI_J?ZSWLh5!)_ib{I5!Ag(l#QI^&N3d zJ6_E8uI6 zpS@r!BQSOGr8G0Td;ygLZG{9FqT6ipu{^ENGe6s=Lq%JtlkVNKTI)c+Be)%1aMO?$-Di2|%$Fg*~ zOb@d|4%RqeaLpQKO;f&}w4b$Q z(IT{k2l&-;h{|gI+U)p#wNPBvUS$V(cz;e0@GC^=)0Kh2B^)7nS`$`gd`lm*4L1^G zU=cLLu%`Y+jBzc6k$bw0PLW)gI24;_7#pM=56h z(pAmz!7*$nF;}|fC0;pVxO2h*wsK7izjYAzF?pfR=R!Oc@QZ@jCL$sxwA28fU9GvR z=d#&aR+zxp^)8snksoN{tPr-kJUyU`FOxomv%}?C8(-?%_!4Vlxbv=Uyu_JbY&sWZ zj?Nc)aT{jchGz$SIMz27?f^WsGlTOW=YzxG8 zzrvr|+DvEE>EH%<)EUln28C{_;bym-ld#>xPpvMz3Wc`MZk|0;j)q>WuDqukJ|l#i zc>Yuqz9YZ|I^1EGS(p|m*-~TalV2^tRif0FlPo{Sk=u=J#Cq9PgsT?18Np5-6IuLl zLBK)VGbXP^`t!>A zV}-5kJ#%5|;PdyGz0d5uUpTYboHq}ffqgNn``sY*Wkb{JBzRO6hi`SJ({eg^KpAyb zW;$mHeWb=Gz1)RxM~`Q|Pi2VZ>km(UgbVfm&H!tW{}1DvjV*fk@5Xjd4(^%K`tmot zjM**r1-Q8$rj5U&F`mic<_vKo=a1)RLwl-FJb#>G<9~9dv|Q-Qw(z?`!jl~SCfM}5 zLhw6C<~H$?AMWqSiNzn)`EM18zpX^?tBJ`|znyl1WcIY%bG*2b_8ga0ezZ_*&r#N% zBQvG&!0`&UC*D##CjNq!uJF48X2##B!Y*ac?yx2WjikUS{=d|m@PKniUW;yUp|}+9 zbmOi&uN0T0;^TXf=}Pe+kzo}QZTD<4-pk0hgL!ehs<Ia@DYNl=V4$X~({o!|l!i z681^o5MCte;k>@T{H&+!eVyc4HhlYJI(rIT-WE@uVgAaFhnKi|XJ~Yg-z&%O9m2Db z5uCol)3tImbt%y+Ic~r8X%p@p4d9g2#oJJ_GhNv?h%HojznGVOD_Xdvgzpiu0}Cao zr#-R5(`K32;iX4y%pCC_C-!XX%=XCx! z_o+V3t%V2BdvI=tyDR$OeMP<;>c_2~)h*dLa>nl}RZ3UF6Ki*GBs{bhS<~7Qo*g@_ z9mK0Sdpd>D;kF{7QIS5n%Hg9{=%of~~@@Am@e&hoSiA zwXa-cHM{UV$HC?~1B2`M$QBozc-1*v%!dP2Zu#Qb_Yz(sFyRIBXYaw=CwuVd>Xb_G zWZT`DWAp8_X^*!3S+%E7nKy!yFT70=Zyos3cD$n&9#!k17M>M{)yduks@1dBhG)fB zx8ugPyE@~gPkJoM?lJ>h)8PN@VK#oJnSbgTZVQA(j z^0BMjxX*5F=xq&LH`0B)W{|5Z)*x1Mn}^}1gRJ9rdleghWP~dLxos3KVZ$S!P$wT2 zXt6LBKkU8i`uV%%_`MsMbaEVrUpyzLzO-*|hM2fNxV~p_6gSfO4{u@X-FWWVM1(2H zLB}`T^&{T+mXBuf8RdF;>9ZPMACO5@{imNg)xQM_Q?L40Id<_bUG*=SR(Mt%Z{}A2 zs7H7;ybcxo8N|?P-BDb zp{;~6t8tTteU`b(|C?j3!@SD1<-QBA2XVt7EUi3b`1K_GJ6CSV;D&K>;n(BojMpWB za6?rKm^odpwd7-b_h>>lGJleJh~o{PI03n@sE?>{M3!318&O+;yT2p2bDLtgVxJ&!Oznx^7kHvqxvG!Jk-$@W zHG5y6>faZrK5WOtL)noN-WRyIO@5W$25+&2UmTZjd@+Bi{KUJSr+mFryQJ$5(MZ`nA1Gt;?E=+d^8t=>NUbvEI?r+;XJ12J3&4Dm+Z z6I}+_jVXT}fXBo<+58U|0o^MGaXy!efa+HzrTx+-S59PO`o&7Oc^T7hQu?Nx$EJk0 z4P^3vIji>zLU9Uw-kS2cOes7?j7py|rB7!{w+MZriZ4bEEbJOvFnesFtn!E9wOMTJ zx_j_EoL4#cO{}~pKf#NTe2D95^t5f626I;8O{$QG#7t!7J~@a0s#Tv)wXdibOd?C@+>M)js_ zEN&Ev19pQA*!7vxhlDO~W6R^Az4YIV4*RU5$9)iH@Dm>EsSp3*`?=Ndfc8mu;QdmA zbl`niaqkg|9eB5O;9Z&0+l5}z*3Hoji@J6IpKSQ%n=2pkto#L>b@H9)-4{Id>cdmp zCtdwpB!8*?%~@gL$!@IvTC4t=OzCQ&OWV5B(yrCxlmDT9X#5xIze-XHYxiriWW%GZ zAhF-(ReeRK^D?0~R`}b&!efPlvtQx0!6|FQ-|&UEg_p`3vN*7@-@?M3URtyFsMdzZ zNpsd>x7QU^^x+epL*ezdi8TLTdDjADXHu2tP8O0(HmD1WD6sr{cNZp``}p6F*-X~S zWV1vQvTkPC#UZSdnVZSY%-lQPJCjV98c`5eP^5gU3aFHzC|E#=g%(n1`7WizQVT5~ zXsIPC7T}|Nmyhq9)7^jncka#Hn_U*G%+@Bi`|or5^y$;5PoF;Bjg<@UY+*^Yh9X zhbI<0IA|^b4bZPb-o4kcAX2}fW#?gxI!?u@Zp{Z5Dp)(s`}RS3d{ZAxvBEifd4uUq;HsuTz^Antr7zg64IVmk0vC6+d{qYcksa@@X z0OXBuW}q%O)IqO)c-vom1vAc48%Su~!_FBK0O4D8(|DF$Hl?gD7MlDxr_`s{7{16p zj+V}^<3djyP@=?A$rH%Dpy|1}ZCr~^rqOb7*&CTRwQ-9kH6}MPI+*aQ z_(2=+lm(STtqiR$J!gG6Z{%6_ z@3cIh<1+6%(A`{PS*CxViW~!;n?~G|;XFu)QId7Y=mLB+7vQ5{W({fd8F#FA!Aej^ zJ~aVWG(IE3dvv$(9_4VFqkV-}eH%h}hwjpw5nMvv%wr|IDbJNai3j;qk>efpsgI6& z?sOE%t~sJ8u&9Q;hghWU6c%%9ILR%6V~XDvLSnrvIB~mD8@u16#LrrSeWoDtr>!q9 zHzNOFp^WUfzMA4GWKOep&h>7h9S(DY?<~PQJK5@%Xgpz2GE=Buc3Ne?(refJXS}e9 zI-W7aYbX|FH;u;CF^I_C0)wecxSlIyO<1mtEzc>lC%4ZnG+RER^IGN}Hi6PBZF3Ws z2DE)6SLa)7{lyk%q5@}R2bPyu@Ej_}$R=uj_-4Fj!B|2(@TpUqi!pSBXZ6}ZegJG7;#9LVJsAD}g7(BN90TDT` zJuinRuFf|vz+^-R;3}srzq&;iIW?ky8o0hlFPCf!}%r)16-ZQ?QzraBP+gnh>r@7+^6EB zFg-az#fd6TLetY-R!@`*ee@FR%N?eVUR)?6o2+jgTf!5Qv?r;SntDVoz`BzU$`bAA zg)Uf*_*G@4@_LGOxx~7$F{=9LDhED7*%*Z6Z6fQ6z3!%)d6SdI_Y0WLBp*4Nhb?8P zE74ck^Q}tj0>y;PkhUQE{L2{u3;Xl=C%=JBK?(Ty-2CHhhBaTdtJrfm=RITUf$!^+ zw&;o#qCaUS&{~I@+350(0kpAJU>bd-n2CI0+=D@#5l5f__$MC00?)|J$C1B;NtnlH zP}t{oD--;#v7Bw^@b>jt^?Fi`m__f0*G_CUaqPM^N1@qW#n4_=vtTZ5n0)+k8_na` zik;~!cOj#6&Y>q-%P!f!!ZzfadPugcMNv;M;aYX<;}rLuIea`W8_Kz&D*X?aV)&9d zfL!`78&l~&IQ4_iqL}qb>`t{XdRnA|FoZB~+L}m|N<|OWilYN9Fo5MI2DNc2eglZE zSroA9AyY^X9PVY0y4k0{$eDoJZVXTJuTl`Gan~ZF>rA$q?2duEWe$DcVNVAfJ5rR6 zDp0j-7PCE!48&SI+@RCm6ndV&JrCnvF$DYoJ2W@Yqnxil=3j_&)Y1A2#T{&SD_yn< zo$d}bUa2uUzr}hCLb%q!TF57D#(-5ata1KIsj_*bapH;ph9#-_ef1)i=KxkfBx4A4 z&_LUqX32va3g4gwOaI2*Y`v&pv<3XuShey-;7DSu5h!6T{VUf%B3b$u{%Hx~=ksr$ z)7qr;+1^s0;fyE8Xk%MwMyo+hKx^5d+zw@XJG;H=477nVF!hWtE1Kf$Fv zYJiExnv&K?P!V)5sAZecja^JVNY@SqBFCtGHP=g|jVNWTdYbes06+dHes= zT%|)~WT)a*h*d;}k#a^H7+FGk*qU$%bvSE{k5x(yL<{^D%J^0BJ!+iu31A{lBT@(Q z#9eoh?;s=BB6$lW_JXUMrCQ=OIIe)~=Zka~>wJ4sET{ zsD;U~y^VXXDp)h%uV80~GD5cDSD4Jif6pd_j zYrXhU>x()0TKY&q8GV>jZ$Hf9g0}W*5sn?}z*!H|!zh5>!tf;^!i-8;lN6tuq(C^c z5;B^^6n`3!4y#Sh_s9^;G(%WFwL<-EqLxGuj!cUXsDEdVOy`ALI4i47G^)RNEFmI&fvl4%^}>=hUezqZM{J=7 zN!uwtvHqqD+EfuU#(4=!1vPg>S(pwN^<>HUk$eupbb{Nh?J0#XyEd}0ZO>Rc^+t2vIjBY@4tBLG5UUjVST9w4|ZA`bA$Unfp_0098_2qjF{e@tOk_1b9 z=-J|A>f^2*xT~p`QLt$Qm^)4{(Xk`6hW8IJDt*lLh;^7zLs<3zG0K#XkYwedp<0GW zIC>4izLcPLy^mWH>tY522XeuITjpv>QWHKRzQpmEOYtfFNO(?f3w}ztGw3ZnbwM`E zB?%Fb$~^|88|leb(umT#Gk8Z52?OJ_&`~^+%J65J0Z=9`XsT+?89Wv+3u5isRR_0b zjBcC(2f>im;RzA5S=OQzr5$E1%ZjZmYAYL#Vpz@e6hs?Ppfz*UDuW`k^UcR$5JCT< zyB=>r&U6Z!^3%>t&u7+%5>q3h_m+a_z1b4IHyP2Ba1fPZwEV-?QmyjN13h8RqP0Z|AtA%Q4>^X1GV%9 zi_?Yhosz_iJZzIQ42qGF;!92ow@9 ziRDRevUb8Cu@|HA={ysB*f5_icLg#D%-H|(h3+Gg@wHs;?qTQyxI}V14|gzQp@AJ0 zc(BgN717u6^%ack_T67EEz{?-BUSY^T>48*13>c2v7-+>U(H{r4Jt!6VLpF8v}R3K8*jd2Q-Zdg-}aS8=$gME2~TGt2L2$=7q2kT3i9 zM+SEU;!M>WYjhWQ9U%8}g)cm5ETB5x@|nfqh7GGei3FHg^l4^e$7f4$X~dgR_SdNp@3$a5{GX_*H;+511BWgR(pj$VU= z3_P#c5Rqjdyu)sY$(4YDk)-W~jOh7RLoE45MG}>8$dYShe#Pj`kr05}t$K2)21W@B zn8>9WdAE;V%X1mzwqh+LvOsqmf7`EQ7#R{{FcP=EgmK(zOE3^gXuja^C7AMLB_4~>8B42QdXrt0TF8fk` zLjupow>A*)c&S;Z7fRQ0XWzo3?asbwWpC0v8|vS=7OPs>yS{&K zG`>MoKTUE)FYGp!=GwD(#E@=MlAZ4%5asmrNA%CVB>od;_`{H>=)xTebJ$q}RsT3F ztXJO!`wzW@e4aCcVF=M3brLaBxEB?ad~R6aoIg46XM0KcJI)Z%?l%-zTC{%%+GgxC z3{c&hcCT)O{cUf>f6W>3-gqD{IB>U%sh=Je9&G3b|5v>P{Uv97)vyGeY+T~2dD<|F zScY?1`HNvO328UL^yj@q{uyUv!w@-(+n3?u*+t!-4vT^$xj%|e^^*0+oH1CTvJ`dj zG`lSK#{P)Q52bS~s6XtjR^lR}VYs2k5t=0T>p+wxlwt_*d?eZ6pX?>)_c%lJ%fPW@ zFm#E%hL+!D*rA4%4fZ>|H2gMaObx@5ht=H$q~RbX*mT971f9hC#IQKL`am4N)l1mN zIit*k4P?&45D^gYn_PBs??!+Cf%uKy>VBOwhTx}PpHoi=k#_sFVZpot*su0h|I5ST z@eK>9`d=CrEayCd{bFzRzrY#c-VB6tm5D`nB%%BHVWBZDc0+%xmza-ohV7E7^1c}`Ch#M_mSSJf0i@uxv|j6gK1Rn&v5ah!_=DteYm&MpXQ7`+G_?e z)%zia7^=MmxS#5+`h%PSOPegi59ox8#QQmM$3XM=k#3_yf%reEfnZ>dy-z0y-FrFl zl7SfbK`=t`<2KZLbb^TZF-{C7;(T*;g)qEZ15v&2(h0)wBb;ys5;4Q~UJ;IWYB0j_ z!#Y7Yeuxu;8-gWan|bjL4Mn_oyG{_kw{c=H8K>74mK#2i@%?6u#Y@YGlF0Uc#RmYhouE^`aF+TPxzCP~$zsFDc z^Oz0%CT(_TNw3$sSC^4{igQ2m=&}2^ z)^M>oJl9w#Oqa0;N62++u}!h7)8$9zPF2$~z17fKqNv%%bh*_o-+z4K*qzm?GYi)= z-Q3PG52srz*n7m83VTu}Cv^cGY<@#o4l?yH{ z)^&J69dky#oEKlri{sjS3=?dl&eA1=oF>m}0T=SJEUUYI-S?{~ zQSDww)XP@22nrhef%>lN*6}T`WVljOT`+VV|C{1Eqb84IV%LAUQEN3e>L=$;*7e7# zTU**#$}5}F{4{8&SvpfVfRn*|e5_m7`3!%JHYCu$UM-4~)b}~_a)aU|rps9^jr|0F zIJdbpT}B(d%=I{}shKiT;?@E|psTPyg=sBxI$0KEMd+pWVhhAgm$ek~XM+X?N%@ z%IWgL=0@9Ob{dynHC=Y?^ka5<5VG#Z^;I+i*E)4@#q6~yJVZ*t(~3S&h-m7|nm%a* z<%E75nYtVYl&(2ZElDb_Q%!4eREZoH2SQv&C0=V4R#j5qOO@Uynxgyt+e=ILVQti2 zX-wS(sl*?Zta4XRdFvY%3chOrLbiskMUYQp5~7t>=&vJIDZ|c1@g2b4zyTUOv)I(@vUAjS~_UaRCBDb&kXXt3BX3R}@NgrG{+aq2S7##80!R;?`U*cD=xlb;&fW zR8iFR5;sYmMF-xAB#gog`F<@(d^dJ8&J3b3bkj;yi#-(ZkQq0sNhL)!_!2m_>{uPI zqR4>OtGM`&e@N9|?k%1NxVLKT}fRohkO)Q&R@L*lt=1 z)SN~NjurG-Xk-_MjjItxonOO{MS|3{TNq(`D2@@evl^tNooS5HzqsodPblgkV@-Nr z04?pEeOkMw2iwheO=`8DwJY_)7prSR)ioiao}am%c^c zh+*?|jG1F~GCtWRH6}1wuuE6r0+HcJMj~C1ucUJw?iFn3w>#72yDsq`_2D8v2B|;A z{HO4#jawpcySFUB6mD(X5?1paW`hDW#u|OcwF^t_Ytv;h%Pk%8+IAZ@pHXcFXmM-0 zjJZFHLqCn4_N*zotUFy^-`WK)55-k+k8}gf;D2N>VUdRS zHbJu(R%p2E?y5+Y(94uWEh%>6Kw~^Kq?Zf@kH$orF*v1iZMj4J#t&5tfZ+2+bOa|~ z5g>e`3PX3f*{W`|*Zbzv>72eFI2^t2my7L<4eB6mTOY%1dkb_VDwi*vgH=$hS3y{} zPCb0`l-S>}#}^l;XsQruv%e%qggf3w8}`E8#rvLmJ+m> zP}J+Sh1EDLG!#F07_#5M>ity;M8leI0gngl60c=g{z1u~?rQXDK^`p&nSa9h z#>*owhytvX16q}Zu-k(;KBD<=uknm-pmt+dZ23%U*84 z!!mVob7RBK<0S~#-stFDr7fm3Prx#?nuzwZRF4Eur<@W~T^uOIIL?2jLZvIwjd*8_=&L5{%&c)tcu zLYVmd3jjk<%b>v$xCpeQ8YOoLeMxOY$0lvhTsU6c~0zsb7>Y=0vEp$FR?5~L!}YG>LT0}*zX|a z3l~e0rf7HGU8Wp-2Yff;Bqjql36nU@XxejK6nEiDpr3vSwg$Y)3_)muE8S}73fGTe zPl9|bO(D*D6c(HorUOKv7dnfEah9z+g(DvgC2;*k7q)8}1Q~{rmP=YN_ewAeF25Q& z73y+Ees#vu0wy>LMVDH|;ZS8$wUD#cTq>mDa^SRSKt2vKJ=<6k$I{Nr=)}v#$?$__ zMbGuZTIfZ3uCbsy7%M*3>;uM1hoFO+=X<5FBtmOkQLs z=5juHSq%nvr^{h2&O$FX7KZg5Tc>a-^T-oHJ62zY>zHPp;}h^fKfpfdgOlekH!p1* zJwumio#3on&cIQP)bRuOYwQ;K3xD*#WA}g482^vFDK3BD?z?9mnLBs)-N=zUz25zT zn{#X*yYu9^*|}Fe^ne2*orfMdapv@_Q?AzQj|Q`K^36KuU-=-83VHSV1FtAMdJ43> z%MW%I)-N{~yLA*~?=?Gg;ZF6~mwTMt-{Si=6Q~7k9L$b(Fiw}Xhtc-Z!&iE2+4fnP zA;{B9?*NiPaGZy^_#VTWAHxqG`%qUkh(H#Ep#vonCSIIm4aeK_wZ(+`0^Mke&H8^TOLUJ$^w7a%W+f;1#Dkr@VX&JuJGMX~Fv%p{6Z zk=DbQL*#i-BEW+VM~i$fP7`FJ12Z@qIWu!3 zKM4pr^=bCt+A^2$`B4azK4m3vL&nGgdp-Cxxrz+L5Osb`-AtsoQ5dI0T?iGF#EdKr z0}nX>ONkFuPnyPwvr3MZ8bm4pP6zCXs1sA5#s?Bq^<@#jo}YlRG6!ZJp@Yo=k30Gq z_&`3KqM!}@gdM?oL#vmXHXA47*Ml_{V94+@MS*6 z58-pMZ9;k(1wsq}SO&yTWMTMFE~GnvFc2L@_+t=vUN2zcSS<48I`8P=M};e2g&$7cL+(id^U@IKcr#EfKMW zL5e*s%Jd=q7}F>j`p|h0Eo25U?6r^t9DIj9!<-6m7)Bnv?SO$wh+H8FiUYzx(2x|2 z1VZVh31wl3kx-&5kQstG&{Xe)16il)nxiQum0>VJWiT z`cOKc*HH&4mn)T-^ThRyhAusRNS)0$83)ebrX-U(cxtu1uwjxDC)=CY`O4GhaZ$Wg z95=hrB}n=^Ra`oVZ8x0f1lTQP7a(hV5NQ*6i`fjY+cSO(Ibyg4w``!T#Dvm8KCEb0 zM^z5Qf7swB5XP|o?8164{Juf-?O$nJH;@PUB`cG>^&H>7v#_eMJ?kJ2-bvIpwPW8Q NKH%2MnaTV5{|i&}u3rEE diff --git a/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph b/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph index 15b72b1b..63dd7f0f 100644 --- a/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph +++ b/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph @@ -348,6 +348,7 @@ SYSDYN.SysdynModelicaFunction.Output -- SYSDYN.Experiment.result --> SYSDYN.Result -- SYSDYN.Experiment.resultSet --> SYSDYN.ResultSet -- SYSDYN.Experiment.ic --> SYSDYN.InitialCondition -- SYSDYN.Experiment.result --> SYSDYN.Result -- SYSDYN.InitialCondition.HasInitialValues --> MOD.PartialIC + + + + + + + + + + + + + + + + + + @@ -1645,6 +1680,10 @@ id="org.simantics.sysdyn.ui.activateExperiment" name="Activate Experiment"> + + + + + + + + + + + + + + @@ -2549,6 +2608,10 @@ class="org.simantics.sysdyn.ui.browser.contributions.SCLModules" preference="2"> + + @@ -2740,10 +2803,18 @@ class="org.simantics.sysdyn.ui.browser.contributions.SCLModulesLabeler" preference="2"> + + + + diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/AbstractNodeImager.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/AbstractNodeImager.java index 802a846a..244ef889 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/AbstractNodeImager.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/AbstractNodeImager.java @@ -38,6 +38,8 @@ import org.simantics.sysdyn.ui.browser.nodes.ExperimentsFolder; import org.simantics.sysdyn.ui.browser.nodes.FunctionLibraryNode; import org.simantics.sysdyn.ui.browser.nodes.FunctionNode; import org.simantics.sysdyn.ui.browser.nodes.FunctionsFolder; +import org.simantics.sysdyn.ui.browser.nodes.InitialCondition; +import org.simantics.sysdyn.ui.browser.nodes.InitialConditionsFolder; import org.simantics.sysdyn.ui.browser.nodes.InputNode; import org.simantics.sysdyn.ui.browser.nodes.ModelNode; import org.simantics.sysdyn.ui.browser.nodes.ModuleNode; @@ -69,12 +71,15 @@ public class AbstractNodeImager extends ImagerContributor node instanceof FunctionsFolder || node instanceof FunctionLibraryNode || node instanceof SCLModulesFolder || + node instanceof InitialConditionsFolder || node instanceof SharedFunctionLibraryNode) image = "icons/folder.png"; else if (node instanceof ModuleTypeNode || node instanceof ModuleNode || node instanceof ConfigurationNode) image = "icons/bricks.png"; else if (node instanceof SCLModule) image = "icons/bullet_gray.png"; + else if (node instanceof InitialCondition) + image = "icons/table.png"; else if (node instanceof ExperimentNode) { SysdynResource sr = SysdynResource.getInstance(graph); if(graph.isInstanceOf(node.data, sr.PlaybackExperiment)) diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/ExperimentLabeler.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/ExperimentLabeler.java index 865638d5..37c02959 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/ExperimentLabeler.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/ExperimentLabeler.java @@ -14,16 +14,29 @@ package org.simantics.sysdyn.ui.browser.contributions; import org.simantics.browsing.ui.graph.contributor.labeler.LabelerContributor; import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.ui.browser.nodes.ExperimentNode; public class ExperimentLabeler extends LabelerContributor{ @Override public String getLabel(ReadGraph graph, ExperimentNode experiment) throws DatabaseException { + String name = graph.getPossibleRelatedValue(experiment.data, Layer0.getInstance(graph).HasLabel); - return name == null ? "Experiment (no name)" : name; + + SysdynResource SYSDYN = SysdynResource.getInstance(graph); + + String icName = null; + Resource ic = graph.getPossibleObject(experiment.data, SYSDYN.Experiment_ic); + if(ic != null) { + icName = NameUtils.getSafeName(graph, ic); + } + + return (name == null ? "Experiment (no name)" : name) + (icName != null ? " (" + icName + ")" : ""); } } diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/InitialConditionLabeler.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/InitialConditionLabeler.java new file mode 100644 index 00000000..97a1a3ae --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/InitialConditionLabeler.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2013 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Semantum Oy - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.contributions; + +import org.simantics.browsing.ui.graph.contributor.labeler.LabelerContributor; +import org.simantics.db.ReadGraph; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.ui.browser.nodes.InitialCondition; + +public class InitialConditionLabeler extends LabelerContributor{ + + @Override + public String getLabel(ReadGraph graph, InitialCondition input) throws DatabaseException { + return NameUtils.getSafeName(graph, input.data); + } + +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/InitialConditions.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/InitialConditions.java new file mode 100644 index 00000000..138e890c --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/InitialConditions.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2013 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Semantum Oy - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.contributions; + +import java.util.ArrayList; +import java.util.Collection; + +import org.simantics.browsing.ui.common.node.AbstractNode; +import org.simantics.browsing.ui.graph.contributor.viewpoint.ViewpointContributor; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.request.ObjectsWithType; +import org.simantics.db.exception.DatabaseException; +import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.ui.browser.nodes.InitialCondition; +import org.simantics.sysdyn.ui.browser.nodes.InitialConditionsFolder; + +public class InitialConditions extends ViewpointContributor { + + @Override + public Collection getContribution(ReadGraph graph, InitialConditionsFolder model) + throws DatabaseException { + + ArrayList> result = new ArrayList>(); + Layer0 l0 = Layer0.getInstance(graph); + SysdynResource SYSDYN = SysdynResource.getInstance(graph); + + for(Resource r : graph.syncRequest(new ObjectsWithType(model.data, l0.ConsistsOf, SYSDYN.InitialCondition))) { + result.add(new InitialCondition(r)); + } + return result; + + } + + @Override + public String getViewpointId() { + return "Standard"; + } + +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/InitialConditionsLabeler.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/InitialConditionsLabeler.java new file mode 100644 index 00000000..21d4541b --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/InitialConditionsLabeler.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2013 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Semantum Oy - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.contributions; + +import org.simantics.browsing.ui.graph.contributor.labeler.LabelerContributor; +import org.simantics.db.ReadGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.ui.browser.nodes.InitialConditionsFolder; + +public class InitialConditionsLabeler extends LabelerContributor{ + + @Override + public String getLabel(ReadGraph graph, InitialConditionsFolder input) throws DatabaseException { + return "Initial Conditions"; + } + + @Override + public int getCategory(ReadGraph graph, InitialConditionsFolder input) throws DatabaseException { + return -2; + } + +} \ No newline at end of file diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/Model.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/Model.java index 805f6e18..ddcf9354 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/Model.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/Model.java @@ -27,6 +27,7 @@ import org.simantics.sysdyn.ui.browser.nodes.ChartsFolder; import org.simantics.sysdyn.ui.browser.nodes.ConfigurationNode; import org.simantics.sysdyn.ui.browser.nodes.ExperimentsFolder; import org.simantics.sysdyn.ui.browser.nodes.FunctionsFolder; +import org.simantics.sysdyn.ui.browser.nodes.InitialConditionsFolder; import org.simantics.sysdyn.ui.browser.nodes.ModelNode; import org.simantics.sysdyn.ui.browser.nodes.ModulesNode; import org.simantics.sysdyn.ui.browser.nodes.SCLModulesFolder; @@ -58,6 +59,7 @@ public class Model extends ViewpointContributor { result.add(new FunctionsFolder(model.data)); result.add(new ChartsFolder(model.data)); result.add(new SCLModulesFolder(model.data)); + result.add(new InitialConditionsFolder(model.data)); return result; } diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/InitialCondition.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/InitialCondition.java new file mode 100644 index 00000000..dcd937a5 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/InitialCondition.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2013 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Semantum Oy - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.nodes; + +import org.simantics.browsing.ui.common.node.AbstractNode; +import org.simantics.browsing.ui.common.node.DeleteException; +import org.simantics.browsing.ui.common.node.IDeletableNode; +import org.simantics.browsing.ui.common.node.IModifiableNode; +import org.simantics.browsing.ui.content.Labeler.Modifier; +import org.simantics.browsing.ui.graph.impl.LabelModifier; +import org.simantics.db.Resource; +import org.simantics.db.Session; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.CancelTransactionException; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.util.RemoverUtil; +import org.simantics.layer0.Layer0; +import org.simantics.ui.SimanticsUI; +import org.simantics.utils.ui.ExceptionUtils; + +public class InitialCondition extends AbstractNode implements IDeletableNode, IModifiableNode { + + public InitialCondition(Resource resource) { + super(resource); + } + + @Override + public void delete() throws DeleteException { + try { + SimanticsUI.getSession().syncRequest(new WriteRequest() { + @Override + public void perform(WriteGraph graph) throws DatabaseException, CancelTransactionException { + RemoverUtil.remove(graph, data); + } + }); + } catch (DatabaseException e) { + ExceptionUtils.logAndShowError(e); + } + + } + + @Override + public Modifier getModifier(String columnId) { + Session session = SimanticsUI.getSession(); + return new LabelModifier(session, data, session.getService(Layer0.class).HasName); + } + +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/AssignIC.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/AssignIC.java new file mode 100644 index 00000000..a84ec550 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/AssignIC.java @@ -0,0 +1,120 @@ +/******************************************************************************* + * Copyright (c) 2010 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.handlers; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.window.Window; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.handlers.HandlerUtil; +import org.simantics.Simantics; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.ObjectsWithType; +import org.simantics.db.common.request.ResourceRead; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.request.PossibleModel; +import org.simantics.layer0.Layer0; +import org.simantics.modeling.ui.Activator; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.ui.utils.ResourceAdaptionUtils; +import org.simantics.ui.workbench.dialogs.ResourceSelectionDialog3; +import org.simantics.utils.datastructures.Pair; + +public class AssignIC extends AbstractHandler { + + private Resource query(Resource experiment) throws DatabaseException { + + Map> map = Simantics.getSession().syncRequest(new ResourceRead>>(experiment) { + + @Override + public Map> perform(ReadGraph graph) throws DatabaseException { + Map> result = new HashMap>(); + Layer0 L0 = Layer0.getInstance(graph); + SysdynResource SYSDYN = SysdynResource.getInstance(graph); + Resource model = graph.syncRequest(new PossibleModel(resource)); + for(Resource r : graph.syncRequest(new ObjectsWithType(model, L0.ConsistsOf, SYSDYN.InitialCondition))) { + String name = NameUtils.getSafeName(graph, r); + result.put(r, new Pair(name, null)); + } + return result; + } + + }); + + Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); + ResourceSelectionDialog3 dialog = new ResourceSelectionDialog3(shell, map, "Select connection point type") { + @Override + protected IDialogSettings getBaseDialogSettings() { + return Activator.getDefault().getDialogSettings(); + } + }; + if (dialog.open() == Window.OK) { + Object[] result = dialog.getResult(); + if (result != null && result.length == 1) { + final Resource res = (Resource)result[0]; + return res; + } + } + + return null; + + } + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + + ISelection selection = HandlerUtil.getCurrentSelection(event); + final Resource experiment = ResourceAdaptionUtils.toSingleResource(selection); + if (experiment == null) + return null; + + try { + + final Resource ic = query(experiment); + if(ic == null) + return null; + + Simantics.getSession().asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + + SysdynResource SYSDYN = SysdynResource.getInstance(graph); + + graph.deny(experiment, SYSDYN.Experiment_ic); + graph.claim(experiment, SYSDYN.Experiment_ic, ic); + + } + + }); + + } catch (DatabaseException e) { + + } + + return null; + + } + +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/SaveICHandler.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/SaveICHandler.java new file mode 100644 index 00000000..de738344 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/SaveICHandler.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2010 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.handlers; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.simantics.Simantics; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.Variables; +import org.simantics.simulation.experiment.IExperiment; +import org.simantics.simulation.project.IExperimentManager; +import org.simantics.sysdyn.manager.SysdynExperiment; +import org.simantics.sysdyn.manager.SysdynExperiments; +import org.simantics.sysdyn.ui.utils.HandlerUtils; +import org.simantics.ui.SimanticsUI; + +public class SaveICHandler extends AbstractHandler { + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + HandlerUtils.saveBeforeExperimentRun(event); + + IExperimentManager manager = + SimanticsUI.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); + IExperiment experiment = manager.getActiveExperiment(); + if(experiment instanceof SysdynExperiment) { + final SysdynExperiment exp = (SysdynExperiment)experiment; + try { + Simantics.getSession().syncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + Variable v = Variables.getVariable(graph, exp.getResource()); + SysdynExperiments.saveIC(graph, v, "IC"); + } + + }); + } catch (DatabaseException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/org.simantics.sysdyn/scl/Sysdyn.scl b/org.simantics.sysdyn/scl/Sysdyn.scl index 148fe0fb..a3c4a81f 100644 --- a/org.simantics.sysdyn/scl/Sysdyn.scl +++ b/org.simantics.sysdyn/scl/Sysdyn.scl @@ -98,4 +98,7 @@ importJava "org.simantics.sysdyn.manager.SysdynExperiments" where activateExperiment :: Resource -> String run :: String -> () + saveIC :: Variable -> String -> Resource + assignIC :: Variable -> String -> () + \ No newline at end of file diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/ValueIndexVariableI.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/ValueIndexVariableI.java index ab3b0f17..d23ce826 100644 --- a/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/ValueIndexVariableI.java +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/ValueIndexVariableI.java @@ -38,4 +38,14 @@ public class ValueIndexVariableI extends ValueIndexVariableBase { setValue(graph, value); } + @Override + public String getName(ReadGraph graph) throws DatabaseException { + return "$" + index; + } + + @Override + public Object getSerialized(ReadGraph graph) throws DatabaseException { + return "$" + index; + } + } diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/OldSysdynExperiment.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/OldSysdynExperiment.java index cab9a8d3..1338ecd5 100644 --- a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/OldSysdynExperiment.java +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/OldSysdynExperiment.java @@ -815,8 +815,14 @@ public class OldSysdynExperiment extends SysdynExperiment { * Modified copy from AprosExperiment */ public void resultsChanged() { + resultsChanged(false); + } + + public void resultsChanged(boolean force) { long time = System.nanoTime(); - if(time - previousVariableUpdateTime > 100000000) { + long sinceLast = time - previousVariableUpdateTime; +// System.err.println("sinceLast " + 1e-9*sinceLast); + if(sinceLast > 100000000 || force) { updateSubscriptions(); previousVariableUpdateTime = time; } diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynExperiments.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynExperiments.java index acbfdb51..3b333601 100644 --- a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynExperiments.java +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynExperiments.java @@ -1,5 +1,6 @@ package org.simantics.sysdyn.manager; +import java.util.Collection; import java.util.concurrent.Semaphore; import org.eclipse.core.runtime.IProgressMonitor; @@ -7,8 +8,21 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.SubMonitor; import org.simantics.Simantics; +import org.simantics.databoard.Bindings; +import org.simantics.databoard.binding.mutable.Variant; +import org.simantics.db.ReadGraph; import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.ObjectsWithType; import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.util.Layer0Utils; +import org.simantics.db.layer0.util.RemoverUtil; +import org.simantics.db.layer0.variable.RVI; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.Variables; +import org.simantics.layer0.Layer0; +import org.simantics.modeling.ModelingResources; +import org.simantics.modeling.PartialIC; import org.simantics.project.IProject; import org.simantics.simulation.experiment.ExperimentState; import org.simantics.simulation.experiment.IDynamicExperiment; @@ -16,6 +30,7 @@ import org.simantics.simulation.experiment.IExperiment; import org.simantics.simulation.model.ExperimentLoadingFailed; import org.simantics.simulation.project.IExperimentActivationListener; import org.simantics.simulation.project.IExperimentManager; +import org.simantics.sysdyn.SysdynResource; import org.simantics.utils.DataContainer; public class SysdynExperiments { @@ -115,8 +130,88 @@ public class SysdynExperiments { ((IDynamicExperiment)experiment).simulate(true); } - - + private static void processChild(ReadGraph graph, Variable child, PartialIC IC) throws DatabaseException { + + System.err.println("processChild " + child.getURI(graph)); + + for(Variable c : child.getChildren(graph)) { + processChild(graph, c, IC); + } + Variable values = child.getPossibleProperty(graph, "values"); + if(values == null) return; + + Resource represents = child.getPossibleRepresents(graph); + if(represents == null) return; + + Layer0 L0 = Layer0.getInstance(graph); + SysdynResource SYSDYN = SysdynResource.getInstance(graph); + + Collection exprs = graph.syncRequest(new ObjectsWithType(represents, L0.ConsistsOf, SYSDYN.ParameterExpression)); + if(exprs.size() == 0) return; + + Variable v = values.getPossibleProperty(graph, ""); + if(v == null) return; + double[][] vs = v.getValue(graph); + Variable value = child.getPossibleProperty(graph, "value"); + if(value == null) return; + for(int i=0;i 0) { + RVI rvi = target.getRVI(graph); + double initial = ds[0]; + System.err.println("rvi=" + rvi + " value=" + initial); + IC.add(rvi, Variant.ofInstance(initial)); + } + } + } + + public static Resource saveIC(WriteGraph graph, Variable input, String name) throws DatabaseException { + + Resource model = Variables.getModel(graph, input); + Resource child = Layer0Utils.getPossibleChild(graph, model, name); + if(child != null) + RemoverUtil.remove(graph, child); + + PartialIC IC = new PartialIC(); + processChild(graph, input, IC); + + Layer0 L0 = Layer0.getInstance(graph); + ModelingResources MOD = ModelingResources.getInstance(graph); + SysdynResource SYSDYN = SysdynResource.getInstance(graph); + Resource ic = graph.newResource(); + graph.claim(ic, L0.InstanceOf, SYSDYN.InitialCondition); + graph.addLiteral(ic, L0.HasName, L0.NameOf, L0.String, name, Bindings.STRING); + graph.addLiteral(ic, SYSDYN.InitialCondition_HasInitialValues, SYSDYN.InitialCondition_HasInitialValues_Inverse, MOD.PartialIC, IC, PartialIC.BINDING); + graph.claim(model, L0.ConsistsOf, ic); + + return ic; + + } + + public static void assignIC(WriteGraph graph, Variable experiment, String name) throws DatabaseException { + + System.err.println("assignIC " + experiment.getURI(graph)); + + Layer0 L0 = Layer0.getInstance(graph); + SysdynResource SYSDYN = SysdynResource.getInstance(graph); + + Resource run = experiment.getPossibleRepresents(graph); + if(run == null) return; + Resource exp = graph.getPossibleObject(run, L0.PartOf); + if(exp == null) return; + + Resource model = Variables.getModel(graph, experiment); + Resource ic = Layer0Utils.getPossibleChild(graph, model, name); + if(ic == null) return; + + if(!graph.isInstanceOf(ic, SYSDYN.InitialCondition)) return; + + graph.deny(exp, SYSDYN.Experiment_ic); + graph.claim(exp, SYSDYN.Experiment_ic, ic); + + } } diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynGameExperiment.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynGameExperiment.java index 835ce84f..36b13025 100644 --- a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynGameExperiment.java +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynGameExperiment.java @@ -31,6 +31,10 @@ import org.simantics.db.Session; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.util.Layer0Utils; +import org.simantics.db.layer0.util.Simantics; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.Variables; import org.simantics.db.procedure.AsyncListener; import org.simantics.db.request.Read; import org.simantics.fmu.FMUControlJNI; @@ -40,6 +44,7 @@ import org.simantics.modelica.ModelicaManager; import org.simantics.modelica.SimulationLocation; import org.simantics.modelica.data.DataSet; import org.simantics.modelica.data.SimulationResult; +import org.simantics.modeling.PartialIC; import org.simantics.simulation.experiment.ExperimentState; import org.simantics.sysdyn.SysdynResource; import org.simantics.utils.datastructures.Quad; @@ -66,7 +71,7 @@ public class SysdynGameExperiment extends OldSysdynExperiment { public static int DEFAULT_OUTPUT_INTERVAL = 1; double[] currentValues; // Current values from FMU. Updated with updateSubscriptions - + public SysdynGameExperiment(Resource experiment, Resource model) { super(experiment, model); } @@ -333,6 +338,44 @@ public class SysdynGameExperiment extends OldSysdynExperiment { job.schedule(); } + private double lastResultTime = Double.NaN; + + public void setSubscribedResults(IProgressMonitor monitor, double time) throws FMUJNIException { + +// System.err.println("setSubscribedResults " + time); + + monitor.subTask("Get results (time = " + time + ")"); + currentValues = control.getSubscribedResults(currentValues); + monitor.worked(1); + + monitor.subTask("Save results (time = " + time + ")"); + for(int k = 0; k < subscription.length; k++) { + setResults(time, subscription[k], currentValues[k]); + } + + lastResultTime = time; + + } + + public void setResults(double time, String key, Double value) { + ArrayList list = results.get(key); + if(list == null) { + list = new ArrayList(); + results.put(key, list); + } + if(time == lastResultTime) { + list.set(list.size()-1, value); + } else { + list.add(value); + } +// System.err.println("setResults " + time + " " + key + " = " + list); + } + + public void clearResults() { + lastResultTime = Double.NaN; + results.clear(); + } + private class simulateDurationJob extends Job { private boolean canceled = false; @@ -369,12 +412,13 @@ public class SysdynGameExperiment extends OldSysdynExperiment { try { - + // initialize if not initialized if(!control.isInitialized()) { control.setTime(startTime); control.initializeSimulation(); - getInitialResultValues(); + clearResults(); +// getInitialResultValues(); } control.setStepLength(stepLength); // Set step length each time in case there has been changes @@ -383,7 +427,9 @@ public class SysdynGameExperiment extends OldSysdynExperiment { double eTime = time + duration; monitor.worked(1); - + + setSubscribedResults(monitor, time); + int stepNumber = 1; while(time < eTime && !canceled) { if(eTime - time < stepLength) @@ -392,33 +438,26 @@ public class SysdynGameExperiment extends OldSysdynExperiment { monitor.subTask("Simulate step (time = " + time + ")"); control.simulateStep(); monitor.worked(1); - - if(stepNumber % savePer == 0) { - monitor.subTask("Get results (time = " + time + ")"); - currentValues = control.getSubscribedResults(currentValues); - monitor.worked(1); - monitor.subTask("Save results (time = " + time + ")"); - for(int k = 0; k < subscription.length; k++) { - SysdynGameExperiment.this.results.get(subscription[k]).add(currentValues[k]); - } + time = control.getTime(); + + if(stepNumber % savePer == 0) { + setSubscribedResults(monitor, time); } else { monitor.worked(1); } stepNumber++; monitor.worked(1); - time = control.getTime(); } monitor.subTask("Display results"); ((MemoryResult)getCurrentResult()).setResult(new GameResult(SysdynGameExperiment.this.results, SysdynGameExperiment.this.subscription)); monitor.worked(1); - resultsChanged(); + resultsChanged(true); monitor.worked(1); changeState(ExperimentState.STOPPED); - } catch (FMUJNIException e) { System.err.println("SysdynGameExperiment simulateDuration failed: \n\t" + e.getMessage()); @@ -474,7 +513,8 @@ public class SysdynGameExperiment extends OldSysdynExperiment { public void refresh(Session session) { try { control.initializeSimulation(); - getInitialResultValues(); + clearResults(); + //getInitialResultValues(); } catch (FMUJNIException e) { System.err.println("SysdynGameExperiment instantiate failed: " + e.getMessage()); @@ -512,31 +552,59 @@ public class SysdynGameExperiment extends OldSysdynExperiment { // subscribe all variables control.subscribe(subscription); + + clearResults(); + //getInitialResultValues(); - getInitialResultValues(); + Simantics.getSession().syncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + + Resource run = Layer0Utils.getPossibleChild(graph, SysdynGameExperiment.this.experiment, getIdentifier()); + if(run == null) { + System.err.println("No run"); + return; + } + + Variable base = Variables.getVariable(graph, run); + + SysdynResource SYSDYN = SysdynResource.getInstance(graph); + + Resource ic = graph.getPossibleObject(SysdynGameExperiment.this.experiment, SYSDYN.Experiment_ic); + if(ic == null) return; + + PartialIC data = graph.getPossibleRelatedValue(ic, SYSDYN.InitialCondition_HasInitialValues, PartialIC.BINDING); + data.apply(graph, base); + + } + + }); } catch (FMUJNIException e) { System.err.println("SysdynGameExperiment instantiate failed: " + e.getMessage()); - } + } catch (DatabaseException e) { + System.err.println("SysdynGameExperiment instantiate failed: " + e.getMessage()); + } } - private synchronized void getInitialResultValues() { - try { - // Initialize results - results.clear(); - - currentValues = control.getSubscribedResults(currentValues); - for(int k = 0; k < subscription.length; k++) { - results.put(subscription[k], new ArrayList()); - results.get(subscription[k]).add(currentValues[k]); - } - - ((MemoryResult)getCurrentResult()).setResult(new GameResult(this.results, this.subscription)); - resultsChanged(); - } catch (FMUJNIException e) { - System.err.println("SysdynGameExperiment getInitialResultValues failed: " + e.getMessage()); - } - } +// private synchronized void getInitialResultValues() { +// try { +// // Initialize results +// results.clear(); +// +// currentValues = control.getSubscribedResults(currentValues); +// for(int k = 0; k < subscription.length; k++) { +// results.put(subscription[k], new ArrayList()); +// results.get(subscription[k]).add(currentValues[k]); +// } +// +// ((MemoryResult)getCurrentResult()).setResult(new GameResult(this.results, this.subscription)); +// resultsChanged(); +// } catch (FMUJNIException e) { +// System.err.println("SysdynGameExperiment getInitialResultValues failed: " + e.getMessage()); +// } +// } @Override public void updateSubscriptions() { -- 2.47.1