From 23077f080506422abaf2b8a544693634fbf08833 Mon Sep 17 00:00:00 2001 From: Sander Land Date: Sun, 26 Apr 2020 21:09:40 +0200 Subject: [PATCH] p+weighted --- ai.py | 12 ++++----- ai2gtp.py | 2 +- ai_performance.pickle | Bin 72965 -> 88501 bytes config.json | 44 ++++++++++++++++++++++++++------ gui/kivyutils.py | 2 ++ gui/popups.py | 57 +++++++++++++++++++++++++++++++----------- katrain.kv | 22 +++++++--------- katrain.py | 2 +- selfplay.py | 17 ++++++++++--- 9 files changed, 111 insertions(+), 47 deletions(-) diff --git a/ai.py b/ai.py index 3931570..1573d20 100644 --- a/ai.py +++ b/ai.py @@ -54,10 +54,10 @@ def ai_move(game: Game, ai_mode: str, ai_settings: Dict) -> Tuple[Move, GameNode elif policy_moves[0][0] > ai_settings["pick_override"]: aimove = top_policy_move ai_thoughts += f"Top policy move has weight > {ai_settings['pick_override']:.1%}, so overriding other strategies." - elif top_5_pass: + elif top_5_pass or "weighted" in ai_mode: weighted_coords = [(policy_grid[y][x], policy_grid[y][x], x, y) for x in range(size[0]) for y in range(size[1]) if policy_grid[y][x] > 0] aimove = Move(weighted_selection_without_replacement(weighted_coords, 1)[0][2:], player=cn.next_player) # just take a random move by policy w/o noise - ai_thoughts += f"Playing policy-weighted random move {aimove.gtp()} because one of them is pass." + ai_thoughts += f"Playing policy-weighted random move {aimove.gtp()}" + (" because one of them is pass." if top_5_pass else " because strategy is weighted.") elif "noise" in ai_mode: noise_str = ai_settings["noise_strength"] d_noise = dirichlet_noise(len(legal_policy_moves)) @@ -65,13 +65,13 @@ def ai_move(game: Game, ai_mode: str, ai_settings: Dict) -> Tuple[Move, GameNode new_top = heapq.nlargest(5, noisy_policy_moves) aimove = new_top[0][1] ai_thoughts += f"Noisy policy strategy (strength={noise_str:.2f}) generated 5 moves {fmt_moves(new_top)} so picked {aimove.gtp()}. " - elif any(keyword in ai_mode for keyword in ["influence", "territory", "local", "tenuki", "pick"]): + elif "p+" in ai_mode: n_moves = int(ai_settings["pick_frac"] * len(legal_policy_moves) + ai_settings["pick_n"]) if "influence" in ai_mode or "territory" in ai_mode: if "influence" in ai_mode: - weight = lambda x, y: ai_settings["line_weight"] ** max(0, 3 - min(size[0] - 1 - x, x, y, size[1] - 1 - y)) + weight = lambda x, y: (1/ai_settings["line_weight"]) ** max(0, 3 - min(size[0] - 1 - x, x, y, size[1] - 1 - y)) else: - weight = lambda x, y: ai_settings["line_weight"] ** max(0, min(size[0] - 1 - x, x, y, size[1] - 1 - y) - 2) + weight = lambda x, y:(1/ai_settings["line_weight"]) ** max(0, min(size[0] - 1 - x, x, y, size[1] - 1 - y) - 2) weighted_coords = [(policy_grid[y][x] * weight(x, y), weight(x, y), x, y) for x in range(size[0]) for y in range(size[1]) if policy_grid[y][x] > 0] ai_thoughts += f"Generated weights for {ai_mode} according to weight factor {ai_settings['line_weight']} and distance from 4th line. " elif "local" in ai_mode or "tenuki" in ai_mode: @@ -120,7 +120,7 @@ def ai_move(game: Game, ai_mode: str, ai_settings: Dict) -> Tuple[Move, GameNode ai_thoughts += f"Balance strategy selected moves {sel_moves} based on target score and max points lost, and randomly chose {aimove.gtp()}." elif "jigo" in ai_mode and candidate_ai_moves[0]["move"] != "pass": sign = cn.player_sign(cn.next_player) # TODO check - jigo_move = min(candidate_ai_moves, key=lambda move: abs(sign * move["scoreLead"] - 0.5)) + jigo_move = min(candidate_ai_moves, key=lambda move: abs(sign * move["scoreLead"] - ai_settings['target_score'])) aimove = Move.from_gtp(jigo_move["move"], player=cn.next_player) ai_thoughts += f"Jigo strategy found candidate moves {candidate_ai_moves} moves and chose {aimove.gtp()} as closest to 0.5 point win" else: diff --git a/ai2gtp.py b/ai2gtp.py index 2962b28..fa20353 100644 --- a/ai2gtp.py +++ b/ai2gtp.py @@ -44,7 +44,7 @@ engine = KataGoEngine(logger, ENGINE_SETTINGS) ai_strategy = "P+Influence" ai_settings["pick_frac"] = 0.5 -ai_settings["line_weight"] = 0.1 +ai_settings["line_weight"] = 10 ai_strategy = "P+Local" ai_settings["pick_frac"] = 0.0 diff --git a/ai_performance.pickle b/ai_performance.pickle index 81552a6d9529dbbf9ea53b7597746b603361977a..b8a8140e5e0caf47868446c06bc59a764ba68cd8 100644 GIT binary patch literal 88501 zcmcfKcYIXU+BSZW-b0aIHdSg!sG(*D2ty625JJjMpY)l8E`dQh2n4Bu!q5c)V*yb? zwo(*92_Oi9x@{oU01AjGziZvspyxdAd43+xdp_^^>+CQ0T3PqC*4|Ts>M9lEEYUhK zE-ouREjuo*V!+^v&XR4WJDLPh;+Sr`j zJa0(Fz|5Tfe^5nd8H_HQ?<^Nt4uj)zNRWQchM}W=>w7v+B^2GIdt`L_)QpWg;tLWEMIbpO%+4HqYrbv{qzQP`QBR#(Qf5wKd?sc| zN=hE@tc7Z|`pmTKXTs~_iC zX@fsjIxeyr3XqHH;py7=t)%t?7^ zc{q3K54{spQk~7YmDpR)R<`(u?H-$!mF#S3({oKsQlf+`Ejc?rAu~BHXF_&zZk|2O z;cPWej^tQ-ZgPB5p7W`p<;O*qMs;>P2J@`*7`ATXY%?ywu5N?2`ObE&?WOJNP`A%_ zcCf31?ATgZY5Bao1bYRUFt}ZiI!#V*I}U5d)^?mtJIWbA()5&NG9!j65nV}I?~N;~$<{tw$@$5!~Xwl}snv1|6G_Gb3xc0^(SvwM51 zd3M#Dy>(;*wC7n~>wiA-eSEyTwQ>4-+U%6??EJXRF8R)`s?B99O4u4id8;<<(ptBF z+1e!@;s07|-Txb{b#LSJ^R(6@-`VqVYrXQFy;W=TyyM&l#()23YkmG@Yo15Kf33B? z|BcrC+Bp3^t?BvBfXA)%%Xjuyt&ROMb^i2S-~8FyfPdNA_2cS)AOF`{3;b`i)}xJc zprwj#y)8m%ajwX3}PR@6xJnlI)-)UDp z&+4;p^DlSb`iGvw)w>zI7o6lwQ$45uKj}H+Z}t4g694y}Gd(?LM_%n_7hFqJ~zH@?Vc|NXrk_IwRFtn~D?D&P71g=s`F>; z|J)b0Zi}a_t@+NE9=EkE-??42wQ9$~&+n`&_h(x#|Gls2ufJH?ZU2j} zQ})>Z@;j6_|Icp<{^=``z5LdoBbxBsjsJWseEEu_z6w)sBObs0s5gyod2)R_-}%nt zT=(TW_p4l&&VBmPz5TN!SM_~daJy0R^;mL}^Ia9~fxn3Mf4l_!FE_iqq?-S0e((KN ze((Qveh2>|zeCJVeKq)JkN609*b~l?eCG#`!}&1Zc~ph7SiiNZZqC$y70yR0oMV4G z9DJ#SZ<31TB$kj=j{mQzeEe6beDc?+ocN1WikM2He@;a{emwpzw2!Yh&d|wm3CS_e zQ?2c7?9*+!BYvEYA#Q*nR?a0pP#{Xo=qS2Vk=Fq&*D1M zrbpdBXUg?wxc0UA-+%aYpIJdR-?l3$C&SPTo1%|iM37|a(w~U z(KbEglQ}BWInIl?4zlS1i=<>T>-RuKjI#&g5<` zxwdd!VAGu~uA6fGHLlT5c*=EMuD`)G`n9e9&64YHajn+7?Hf(5zr!{9?N@rbTdu#y z^*sD}%XKcfzJ%+QxV}G9lk3a4MjmmMUvIju;puj3l)3*MGx$@L9fBQIxyrpfh9T>IK|U$1HW^B-}Iyd1;d z;dL>tk!Q>^t97Zrg=^K{v@xb!-^Mla%=)@Ufn49gHP#<_z{G0 z@+@d>%AeoGHS%^E-}Cw&uCd+`E0**6KCaR4@V?WzU%%iQ{l*u1v%d$pR(Z~UM!mP0 zc7vcG~ndKPNyC zVRaHBjBZxdN2rD(Uwa#y>A&zDQ>Z4Z&~{|~6Qo)sXVQ}!vnny8Q6e?R5Oz^ETM*q zeATgysJqq_YQ(CYHnZ7~Pzc&?OhR5clc#DzO-Ng82aaWqa0_W9%$0rMDMP5KA_*rV z+e;H_#wvs}=F^8>Ld{9)*^ybG3$-92oTPN#PPr{fDx9*5P=s~0BB_Vu&V_EFr%2ee z&cl`%Lai0~sz*VxzO-1V4GD`#+VzS{s4WMoyW`#zO{g8K5Oma#R8o7A3i|e=LaFLN z!U5>AzB#MBNw}?|v)hn5D&qY;^Oz+AeOQIO996O*XvmjUik_Tl2z4T{jL4USe7wXP|h%jmTQB%l|q#o5b&XRhN z&`|P{1VgHNlGJlTU!)85B4H6hRhPJhdXuo!gh72=LVXm;W5^NW*`dCy!geGtenyun ze-eVu?Y~VE(n+`#!n<5GgaSxy@SCn%-@AqSk+9p2Dit9}wLb|Bd6&l4@wu%f&*WB&1YT= zldx2y{AYebF(d>XwfR($P%KF;b?8F~77<56+i^F0=|Tnxd9_I@V+zHS5OkuZTS5sW zJSU>6eg?r@i6nK4o;g-1ltjW|N_%>mA(Tu)L&N%b?v4}^!f{L;p-ELL2|=gTj<$sC zBpiU$U!P!A8c98d?3E3vN+<2K`M-NU(-O*1DC%Hu$+ zE3A7W1QCuUAus!^0#=P9p~tk2=Paoj&$*CS`U7uPO(0>QvrTyihbs`Q1lo9toS4HKd;@ zG@pbddT$AF3oYPWSZZL^%Y{PElCZ7_|3ik*LK0H7ubyEFEg~Vp0eyq8oxM?%~2#cvxzOG#MQsO7tKp=Bhrolx}!4qQ%BN3PBu z4qTzgSA7V`n3M04fh$P}r~lzo5Nz5ilDZ$`?z8H7&ZXM!_aT#5%_`*8^HDx&4Xd!! zL3`R2$y_h63PC%kuj9I2Bw@F+(pza#wUz^smv=Aq_j$00btF7Z0=_L@EaWDk?Id?= zQ)oR2sSfgW>p~kyh|sv^d0ViNgrJR}TbyeX2@S>F{7I96n@M>3I&QDxTw6$JC}Mi= zLaEwHLePWuUv>z+L_*N%+dR+0Z6vII(8o(%Qng)?FJ6)LS__&73%$%LoSd{#Q!Jq! zB=k5Y`9oc3CkJ9XGPlhn?P8UB9lFwh^a@Ee^x@Sa8CXcd>cc+R!KznDcosH0_?la) zUQ;ADUsk0rHKEs8r4Hsz&->LkNN6bfskVkx?IvMe8Kv9kLVHMRT_3#19^WM40A#fK zjd|@QA;O^zt7tOtEfO}ZbJJ+f^)^X8kPrBpQuPiA$2YR%X-jAy3F{h=aY_@~Pg481 zLw(S}VS1N@v)UuzSymk&VLM_fmo%ixBw-)3gYUY9-c#hSUSYCt*VTmHXB9Rr^U6zx z&_NQCupj8;C3J{{b&cFNK^HnqLJ}#Xc4$IJND($OXvhhd&<7-hGcsp|F7zP@Z70l0 zwuFu<@>idp?a$36eZ(rXozs2==@_f9+xCSuG#PlDr+;#V={B9E>&kpn7&r8@7zLXIWXF0<_2AWU~4~Pl}h4b2}9@{tB|U5Y0YAx^CYyL zP~xUb=yMK4s+o89YC;!CH~>itf*_dwB58}wY~Hw2kl?22_8)PmK21~$lu!y8TcLNLaI4l zUT&f9NjT9pY6iH3E^#290RBmyC+1}m&R64#Z*brbB&>eG?-fZ`I2X1f`{#a~>nf{| zYOfQ~4w?QMt8jAawJFwwuCq$LQ2cO)18p0R{(k#Hu`UwadRxo(rNkEthOT|##_7xFT`_1tMck#GP~7M#(g>Sq%6 zF|E{CL+CCEOYOb2F9g%yBjL#9bbX(P={^ZPM!tH6RlktbK9*^r%fJVU{L~j-ne}g5 zLcg*KJqGPaWrPn|g`l&3+Nnv^Z>&PlS&e>l3H{D01nu|rC{{gU6&^65lkR#+Rf#9$ zp@7wg^t=ec>PwPT&^49^3q7I8PrV07%H3lKm131Ta^>H!gi4bTPR@7b-9lwZxVIyE z@7IOOaxUzUJ=Z}h$EwLT|KBpVxumK*3E5{=>ggj?frN)u*0n4{s3HkLryh#cg({IE zZ2q@1<29kmqOabPVHo)fv_ZWc<_lO&wg)K6kawMjUb0l(zx zQdNh9pp)h;aSPQYA&Hbmo=0sx67otL(M*%7`Xns1Q(rGjsDYw^>eVXO99t~ZkX1NL zakKgb3pFC)U?#r!u}i2iX{F7KIr*|%s0pdSX4*1(m_ix}`y3b$XFnkPzV@+bEY*wd7m~$N6)lTc{PQkbOq-cthwZ5`s=C zssX_vZ_R<~ke>}Ph1#$R**kx*AgF4~DkPEHU~QpLJ67RL1a%E_3AHC7ocKW|sRIXM zJ91~w(xu9qRXB2K2iLfTI>0sUiRLl_!E6O5N)@Leq>2iCsv_t$Mua6 zEVVNU4LLT4x`n!MpgI5#o-GpU$|}5yj+mF}66!`$kF@M`2L?Z!p;aV|ud z<8{F;RXs>ZB4M6o3H9Va)}O-t-^nXC$8l}aMvEUQM4)G=u@!6gHO zIS{EvF6^KSg^+N*T9@7f!2t;6Ks1!s_DHZ$7^@IYQiGj_P&f(Uv|cgIB^1Gdc{Vd- zW0Ed3l7t@f+FoMSC=w!!Y`L^hsv=2fJ8|(02o^D#G}&fGPfpT=qDb=)^oKEq&=`_B z6SF)Yx1vedT6^1p92i5w0Z4kTgIfm1l8~yS@-{;#j)dpexU6~*EW#k+Dd(K;r3uB8 z)IJ{k*heUVguEP|c-}lDk`PXAQW7IfBB`fIQ8SFg^vNV-pR*<2C6q!!gd_I$G=)-0 z$lg)wxFuvKA;JMmN*O|FBo$7b-I`Fkq9FBfPkX5)Q%gp>ZTk4q?v zgzbob{RdMho1~Iha+Xy&B=qRKdF=u`6NV`@%~hd!%v(_LeP=l ze`EZ@tUkAtqey5r35&=a_`5@B4heY$bvQ_xOHz4xpKwdnJVin3*JA#0VO~P> zNh+`3`veOuAYnVw%inYfJxjt*wC`+Z3N2JL5MOMV+4Cxp7O@Ji+j%7?auJJJh22h> zJlB$e1thecSD~yXw1k9kQf7J{Y0r^V_MbL)OVv^mb|~?JXKR;{kXMdAlU2(VNskHD zMv+#KaMy;d@VuW`$${!tXc>mtvD>RyrH=2F-KNm`l{ z3ZE$Y)xBU!)dp4}RcCIu4}~_8kZR62&!@~yB%~VOcX5$aZRT8f(;QUtb(hc<65b&< zieA8~tt2eM`LTmlFOl$$&wIr&?)Ekk*7elDpD-0t-A+QPX_KpxUMAs8_&garQL1*3 z5MgTG)k2}2By3vrhpRbo7fCIm`8iFhULhe>W8-#K6_U_U*YT^pr0P`?8uD6{WC^`S zLiWj{H@byhCn5Wsn)wi{{tXg(Z0xKK^bQHD?>Wp9^ga@LEH~EIlB)eAEVXOP z@xemxk`Q5do7oUFbby2#CS%23OUNYQq0lq3Ko@$Cgr(+G@SKVFN$SY0oy>s;Nyy8Y zlI@a#he+zt@#85&=r9SZ*ZXX+gpQD~`o6z9xYQ3w*p5`&7G0`7B;h0FgYVlwu==AU zWZ$(>kxS?!5`rFCu7@FXjD*$a9S(qC;BgXCO?<95>0=U3PFC&jxrk3lNjCpqA8aI@ zAmKToZ@J}?xr#_=sK?2}hR{h8f*#Y)bL38uupOOyb=RcoGzo3@7{0nt=u;B5!#U%w zTj&f4+Y$ET7ES0Z2~U&My$ea7kyQ5IrQ4h9l~u@VXrFev&^1=! zT}QJco4AkHNqE7pd~~%TRW~>gsgCMe48iJevI-Fz+uLhGKa%jv*@j<57(&GysGa~h z{ki&EtU_K6)AN+OO~NT`Q`Q^fF#R14L|zp}Y~Wl!u?pEoY#41y)z7R#glSDY57E1< z!lnggC0J5*kAzgqe=*!Gbe{v&Yuf7D5d6enScSY|CO^-r2P7Qw=!9@hs(vLQ=+3^g zb)knOtiD^#Q>5P%1*tF20>%ZprRsN9A+P8<8BF34tB~rzi{YkJl_({L9IGF`euE}d zl7xeq&~bn+^aM#o`1V#qsFb20d;;_T;%Ap7RGNfv!pjDG36kzM zvLOeS<3K#gBbPPTq^dlt@B|q0pf9Nc33(;_5a^bwiX^edK^&6 z^R}}w2|+NMjWm3Wz$O2{k1liQqv?IItNBU$960HdL3Y=A?D_ z)n7nWOQ;1&Ej28Lt8Ym{gtSUvY+O)PLq&i^x2QHy@BrGDQVQovOJqh=ATE{7cLLEpd`?#YnA#V~6xg)9rsUryy z#+;jhBK$-j(iXh(?M|_Td=*8j4|oIDc%EOKNb1pXaE>8WojDMPe83OSGu196M3`PS zMVG3s9Ec?J=&qJfH&&tTz7y)Xg}So}sXE7cUZnj`>Mp73K~fLCQi-}yPm=nT z3g}jVcbqIp)&ni5u4Es&e01|d6H_7vO4CFxc7_$Ew zQyoZB_x7V*YO*=GHj+Ap{`1^IgE$wmPwml*RfAcjR-bbbMHo1QgtkL7$FpiE2|;IT z`%S4DM#3Wc?S73(3@0Jzc5hDgk*XjPf=-S6E?8)UA_+R9!DY8lFbSy+`emC#D1-wM zPS&Ls5UeYdr0&|gmP;s%1CgrptIu?ya8@Dvgi4oL6~QW`I`HUXL#jry3O$B&8fOWO zBB7z+Kof$W7)es8rhKaljaC$)ewAfx_}UVRA|ch}2LYzg7!E}CIqgOpLeV6we(-}e zOd^JaRPBvgq6j}RmV~xP)Sf_!BO%qa&9g~{q6qb>FuKy#LKzs(Dl|0Wr<=M^0tpR` zc-ix2K9Qszk0V2Tq$-JX;oLjEDZ%WMS%nDW#(khkRSK&R;ix7vNvW(tL;CWMTvBCc z6}H2XHr^6SV-+Io-t03?D4m3G9AA_nWpE%O?Dxc4Q>rpa2s%68^Y>t~I1oJswG1<) zDx0Jpe4Fw}IV40FaX(U%DhCNqlfZJfAqd(@LiWR7O>_(8{xMf>({w{9kA&<8cQ~yH zjU^$%;b#ggp>ZVS72jZuAv9i51pWrQIV#07*8~zaE&F^~4xGq=SiNKT0}h--LWE(x zf6!&F$t1j?3=dsp3O!9iLq5;E2|+_sNZ7~3MfVJ$e3E(sctvPJQ%MLqW) zPKujl3b{yFebjH=A((zT39BEL-kep>C`wWvMPeUx)TL?$t5iejBV9r>S*7lwWg7~F zW|5Fr=)ftu&}IC z6(qc{+OD-K7FtO{5`mK{nnJ5M7tTcJ_#~Im^Q^*|2%0{aw3=1e+R&Mwno_lfRmi^Q z2TOFJ7f8q}e&7U4=tUC38I|z5OK2?#4SDaV2EoZ$M?zkqTN8qX+$1b@V6^9(hxLl0 z)jxF-va7u=RU24^9*0i<#4WUugd}3QIdK$6qRhT z#~rLv&($-tT~f7^grI|F`dC7{I1oMRFN}j=u2)D{eV<3CSXD^ErVagdtCv*0NO%i$> z{mR{9p}iy(^weFN&|4&Y9qF5OoAkCKmA%=#LVzw+@30DOM?4)v+DAe|qh~n{soKwh zxM5;Ptp~_8I}}$~F-Y4N{lHTe? zQ|KTGtM77opIhh9V6j;-&WRVE}`QjL>SgA2!fOIF$u?HaMWQ< z=o1p!9+8{oC3J$M7LmBr6e=R2$Nrr?FFGelh_IAZyRKB7QWULT(|qSHa|@kj6_(oU zhUd}oDXXyC-Aj4i`<`JH!s%G}jUfZivI^5D9y?el^ckzLuI%q8K+w=RR;jIBTFVkT z&nisc|HxZzq0dPOr`MKLQ|JN*Vuw;43rH79*p8Tf$1SP)f&-DgZ@oIY(3d1M)G@C+ z1dI5JgtkL&9I}Kgl3MELHCXjE3Db|dlFXpLA>k8ix7Uvs$iQzEWvZ7Df9yg;RIeR$)9+IbK$m1kNKI? zUu6}J$q2t29C(dYH~>DETk0~`brMcaaH)GPp&J~CBt~DzHid4o3Jr~%xLX(ck)$4J zEl#+Fib?1(dhA$J=oaTfUQyF}YeKh4_}-+YV-Ez`-yz|cG>&bp3;jgGVe+|O;3f1k z32pZYpJEB!B_W*lT?2!K?kUQ|KU`({-|~Fay-z|C;Wx^eQuPZ7dBuF*(=GIXgzXs7 z^hHhRSCYD|y0vB1Lq$pI?g)D(#U)k0u?pcNC7soTekUQE$Ok(i=R2RHjf9Ui4G)xLl@|#&a^uUN zp$KzTC*c;2p4XdIH54V`qnqi!Zz`!K2|>qJJ;Zg@;z0E}l<<@(b3Mr_1RZ$1NEfQj zDn!`FHjz|^gm6X=IHpNeT@sdBrP(1%s2(ZL=6`*iC;R#&L^!BZ2M%mNQV|ZBPija) zULyxq(PgeiisZ;e%yO`*F{_Z*un&Atge01fR1zQ8v4k`do^lz}A9x8hB_aD*@8d3^ zW{Q&3r_8v%n{}b)tU}OL60Z~pwIHF#iXoq9LM=%+tA20)Y6-O>A=TubB@CgbNQf}t z<5q5=)+FqZ&xG5-LTyM0C*VXq2pVcj!o$6K{XV)-JCf@0>LF98JqbyKyPkFkbs%9M z!_z!(+`LJ+Yi;psi=?U}2|d;u6bivl^dX_gW}~aPgnUWJYs6QZ453bn^3=mUazu_> zs57e&VZw$@K0;ksg(N}_c%SU_OP5qZlUh1!n&S}^8DpXKN8l} zv}~d&RXs?EuY!ePVv77FPkyqO;}*=-30kkDhy##Wk8KSh#P%&(cO>Q6%35pR!k zN!0)n@*3WA5Cq#1$hlOiUmwzi2C@prr1LwTQ)naMGfcN~L55Tf;y{GcG;XRTG?;{N z1_T_3VEQ2(h$MRL`_d2^$}032e5cS78b(4m%`?9t4JRR-sQh)@?I6yDpaZwPW6Ho0 zBpl2>TOtjiU=rGn^4-g-5Ry73mEY%Fp^7rq{TQ_)9OJOmFjnEn4LG-07Yb(;?(Mf zTNjEVp~t8K%M=JV-9pJE z^ca`(vnG^6!ZGo?Gl<)fNhWA&3b5U&bP#nyERO(r3nZXd7Igq|j0JAC)f zV$~E9*463#I+j%Blki*Jkw-f~F#S{#wxed3ox0F865eBKR;)|NMM4q-@;8yDlW=!5 zA9evnnClr5+Ri!I!V;Q6LS9|!1eiiINn7xC<(pzdXch_Kbba?rm(XkyR^NGp=abGH z5~k0}?`=xeTt$=BD@=HW&Kx+8RS2i~nggtwPr|+ZqjjED3rNVTU8}`b3AOrXN$7FV zfNG?LB&@5A{SIjnN!?acSGZ*0ViIncYLk2&LIsK@tFJ#sHLA;jOIU@VeQNw>O4V~D z9Dw0_N)!n#C86#55l{OFEhC}r_)YO{q2-Du%fDG7tTC%runM>6fM2(hR%yJ8@q!VYCabL>v_X;VcGU8= zy3j@vo&cdIvNfSi9EiLImY+k~%qsQf^w>mQsb zLzmDStU?k2eft*)?PeA7YPn~tDYS=G2q$RVbB55HtilZwu($yPi`Yv-UO~U>n$TM$ z8wqvvbd}rqH`2 zd=pS*+cH)i;6QAM&qwEUsWMpwik|8;h2CQovIq&uhhY8hvkJM!&U&389we!FDoiSr zszV%zH=b?0TlokbCLxQV-&}VK9U&paVV^`8LLZP2PiXahme7YJ#M6JqXYfR^P1h>nK9d zXGjRA(?QQm>sb{}c~;>tHQn$u>2nf} zNtYWBNf$`StFiZCT?Sqx;Y`=RA4U3tgxwB3IGS7gB?;m9)(+NW;8!FpqI&8rw~$3b zszDQ$x`e(aA)Kcs7U@FYkdSKh#y1Luz9k{A$O(Ry(07Wat5-GWSkJq;?^%V_H|e@Y zm#Rx7b#i=u*Mu&U@OG=t+vi+DKadbkvkLt!p(`YW)8x|2ZlS9rG*lz2m{r#lO;;~r zxhpmlNY!;#A+NwUZfHU`NLZIP*yO;Q9H>_RM6O$^eq=r#!v#(cU(7rH}2UQr|WaNtiQoSc%sPt&C8XGPQ1D`akm?=7LbtWuBB zXYF1>_gIBf=qUb;Rrg71^}6R<9oJ>9Us;840v_IX2|Xm? zja19IyGXxrAX3el*xrrO;>;E&=Kg#zBCEpIN$rukg75y)pnOs99WiwaGcGjqX<8- zoTAC<7Z*?M+fFLaDm3K$BHfaz3Z#Mfi#GLsDH5tk!Xlgn`K+o$!t}ZOr;;j@)FQfX z&}3j0MU&NU7P`0ed{V1QT50pYJNOqC@>E*gmQxYB>17`LmHRD_=iP@DjscOzD zn)+8LJ?4!*{ zZAdD@A<4Q_wI$&m8e2Wk6lzCOPk`FX`4iid5Ki>meH_?_Sqv=qV=$ zb|qmuoce2;4D3cik9kjcyM?-wkVIakESHcU3EPoZA+1QLhax#lqe{H13-x3bl86eO z4MFz3SOtoC#&gJfvkFN#D?3=#hoqA5^6XGw5_-%jXwE8s5>j=BRWM|ForH$+sxK=L z3Lv2&XFzpRs2>TbIy-c53H2wb1JL1lx6l9*B6L2OYzhUE)a|};c%jfh64sSukL0}Ka_+d(t89LQZog4jfKG zkB&PFOsNVYsUAn1F@#1ankO&#gI=(Nf?1_j|7lNFg^-YH&e}MaRE3hTdgsM3R)vw! zWAtkonpB08)QR5RgR74qsiii_a7)!lk~)}Pk2r7?2}z8({Dn)ZB1vk~^!=}U&OEHC_Nh;N{bGfbxC8-{tZ(#|=k&uMr zJ1k>*~6&e~{cnpFbQ(1*aTI7^KR@qslZiW7*45>;ZsUz3g^S2e#Ij{|? z4!@yERR#$U1^f5aAecUrgg09aPkEEFNSU?+zeZlrr7D|*TOsMxYnD(BX*&K^VA^F? zIY{`Xsl_5+X741S$Cj6tXfiODgndk1QEUq3kuaCzM2t&lED1r6>2k;r8b`wM)rKc) zLgPuu-tl&0OK1Wq6JG|W#*!wI5aHlb6S=NQil*bm&`j%4*DV7lvq~*u#;-1+r%Bk3 zwgdJ%gr<;^YzH2#yJZUHlT^?L9WJ4%BOGsFKXWzvxq31}*-iT>r z2`wezOjHYw@Df@^!lpSwJZEA#2|c#Dcg~cm6(nSz-m8Zuw31YS6TPP|lUPN<1159Q zeV0@{Pr`Oo-SCSpw3>viO<&yF5?Vu2$9Jx`CiDUc5yq8!*)8-U39IkY+w+-kEeYX- z&!5SvbtI%3U-b#D%T2=l*lFj7n#{GHgzd<9_BmZ>14(7Scn+&JlJGRi`D~e6sy303 zYI5qgy3l44BFuiUfK^*aNFwUnTomCHZY3eYkc?Da=p{u3^3t@>3>MnPDxBz{2~7>5 z?Ia}ONUPuydYOd0vbEZz9i$+98Bu+hE>$~8NWw^VXhOS4XglKQx2Di5iVD=HxvU=o zm{%dI)T_b~&yD;ltJJ35xypgBu?k6yd9$k~bG=Sd2O!z=3I7d}x{-~G9JrgLeqtxn zl7V{^6{y#=5iy?o@l6s^wO0;g)m{<~d6~I+ZW;I%2}w8`mS)x4B%Fz)d0(Ii*}p?V zggNhjtqJWTshjWHdJt6YC*gU2q0wqX=v_tg)Q7ULAD?5@0TRxA%;aNksWM5(%W)u2 z6MBzxVW};hPM6U8tU@?B$2`xkgRDZ^@wZl4Qgw)=9-<38K_BKo1f6<0&ycDktU{{J zd3Ak+K429nD>jH#AF>KTr}XbcI!eMlH#h`YAd*_EcyX;vZojwQ<$3Vq5dG}I#5a|+L}3PC4^Tr;HVEUQ$i?L5zk&q#Px z$XS|ZN!2+LHm$>s7a&;bc@lOg{h;T3eNMtZS9&sMhFhvGknlimo~J`F@FEH8YW~4T zrqCB8^*Yow*%11YgzO!MTS74KD-yC#_@$0R$Rc5DGm1N!LSK^*^svc2TteR{l2kJ* zZ-8K~Z&`&M$~-XD68es$7O^zdE%ZGJZTo1AG@(l*oSd|!o;MGdN%QbUe1DfERX>oh zL%p_G9C(F88 z{Y1icj6NTy3H?mM`LZ`$OS((K@eO{ZB)JD{Ypa6)sKX^g&vY{Cemgk@R zQdNe8pmV1GstJ`PA;PR*b6rB^NN782&k{?hyrPxrb4PmfMFm0?ScSae8-HmERb&;; z#F$bQAqct>2|+tb8*_y!lhAf{RG=wTg@kkOKQ`4%s47XFi4*hvgsLejQ2z{$|4@Si zy;y}L!amLLk*eyfQjglQUWQN&5_-(M+MEMxav)N5Zh6L%s#+xEja9SIFJK2owks67d%Fmc9a zQ>cTY0`*TMCr;1Sg}ncmtBHQIP^cpbN#xcp#|V8$SXc8dKeEb~gjC~0`}@eiP9&9m z-35kFXGI0-i|m}*qcx!}tiqY7J3QGf)Rlyw9lLg!LfuG6HSXQ=E}`z63tt6a4*kh3 zdCnfVe*7C1v0P~2@SRF@sdlZH%UG3>wRho^&#OIUAyZz z2#!f#lDe&8E}KIBB)ry^Kca#_l}^I(?f&wMZlM5@n*QDEnovKI%B#2^tNN3Wea5PH zi=}D+2}||q?|Bm#NW!}6+wSR7HIRhuNS&I^xojk)nzQb7uv85q;Q+*+YvmFeOhR4> z^NTg1AtY>C($b-(&`^?kh+a%C6dFcS4NaNu5*kjzyP>375h@D&8}Lck$FvQ(hR_HS zj&Hk#C0s(mB%IZxDa$OO5E6Q9-9MfbN>V>@_7#^@g^{ownYZ`5g~AoBQ!gh*Rka2z zBI3`1VS9Cd3us|>+UOkx#!?7bv_luW{0j!W-qQkBAi z=rN~kflDZrghSpxq=PAB=Rl+y_S;twOrORoEFx*%>y}VDNxjTXi#CKZNJt`T^gvB0 zlZ4NYf!WJgm8EEP5w6N<1dC#$fJ zS%o>eP%f(wj(yNEw@@Cd5Ok+(mnAfoRS0Lq6XlDA#*y#@X!pZ7m(X|;dJH%}SreK- zQpaR)6VgNy!pYcgGo@-02@N$G{0;<5ovdi3`plQ0yEUPwS%vHez1!7GXbK4t#x#4* zC6v#BNFsKS=R26GtU`}5@7}beY8naQ*e<@U3%NKD;bbn=Sv8%6-|Bw4wwxhV&u}1m z?7iCaUTy{nn-&!OizZbwNx0qnpI)E~%_1SfkyA^$g=Q;SsebiWZ(IQcZO>s9k_akV z>k^tvLWIuajom`?NQf|e%qdpQCt+Q_JJygEknrZ=j*+Ixz-JXns&Q9>3xyW4DjNUR z)LIoxp+zL*m2+&+mPe6Z;6Qv4H1hs)rc}MiDr`sg%3GwhBsA3b zT60~h){)dAZj>asITs?#dAoqLo>jQF?aMzmW#9%94(8||Ge{drc%c|{&qtH0O(fiW z{;$q-3vDJL!j!q5pSXpDhDw)cYDm>q5_TwPei=*XB@%*;`e2MHw2h=zf9HrqHV-G~|2Yh#~ZvqAlvRBcXXsOXzi0A=O}K9bM=RRw10wnOUaLZdPG> zr*(m}hlK2deXsMFyh%d#qiR*sW#C>C@(QlI1%ku$mZB~A;!MwpFJ#r*tU}NU?L#f8 zdWVG7d#}4n+Q)$iXV5FDD8gL(N$Pfg?JG^_T@FO5scG9Sp#vmrhi%0XQ^+J?JK}rZ z(1hM2sh}JGq8x>R|{SB;mFiwa$xGhe&9<)YqOb*bkF%$cL4+G#PkA(K_|g zG^U^}2Yx_8k6l83H>B!A4)nA6-zu|R7dlE(K@WDb>LXGF{&fH)A6Qa#jD(;Qt$v!& zaT4+xIdTN)V-oUmL_Tjx)h8r0)WPdty5oirA75Ig^Ea9@NuijoanlNXtDRi2I?4uU#(S<(cKs<*0J~{)zPdr1y!HgXl;u1Pb!n%SgzhDS` z#<>t-T!zgOI>#y;CflpcT|(zcIKCk@7WoK$PC_`Dlg9)LT_7RC;Om+tbdiLIdwi$f zrqCB8M3}JE^b-1#gw+qLA884FMM4szPxsY?EE0mwS-;Q}`dZOC^+_i=f3Ys~4GBRf zt&byp%YjHD(X|Cd2y3B!CmyutB^aBa2 zx0P#YO4St-dW;XR&#J2=?B zh3#njak@+BM-nz|RNy+dP%#O4WiQ#xs#_#{3@qLC9{2G!Nu8Xm$%YKPqe#wb#y2Z0 zp`TcVwnv4xb_@MXLaJ?BT{ng9lJH2&O<8LR-Q!%?p*YtxUFbfmaEo@Gy_56{tB`%d zT+iF|2P9-~tX_+8*tB0cP(6@ed5Z%dl8|ba?=?fJek0)&wqEUW3;j;QPt?!6&#Ffx zL|FU0=Kz!_hqkw<{|Kh>;7d&gmLwt7X#b8J_yh^5<_?{MBCM+v2@wvsv_=;yO;St! zX0s(!hJ-sU`NUyTS<+5?VohwQNmV%#lE~QXdH+?Ogw+pOrkhe#fwT^HZQ1X1p^A!j zs+YMq|FSNjN~}VJ**9t!LX}Bshh7}Y15kwnv5#KWbPlXa^25Iu^3+C4238}XZRbfB z$xG1|`Hz&^-_fP2Itkk`de$tLPz?@5gqfQgK#*5WR;h5}E?GjgNXR~9Q@SDaBnkVN zvaJEDYI813pSErttLl)@c2MJTx(uw#fe6|$?==prN5VtF=iNiBs!u|MW1=S+GOz&& z*=G%pa0xXeA^XUenrcFgNJuq#>X9O$#)@{T|Gems*BeeOyx2jD(;aGn~3ma}s(CO*2fP79@l-vh7GxOA;bXnC^Kfv?3vU=cw+i zdWwVy?Z*zdWvq2cwNHt~CDnqCp38}`f8|@Nm&$-Z0 z-0DY~PzMt3j()3GnnKiSl z2)h5-*kGyZtZ0k+t~Na(T^H)YD)bm$zN;nFm4qZxR!t^#BO$M0JwG#~syhimkFM;? zDnF8HXu^6FVW~Yx$UgpbxGvO_gd~!G^f82bDcYjm1BBnAM~oDUelYC~V|I4jf2A5@GM%aIP%T$i~9k&tT2faz|b!6alK zzpyC;5e^|C!v1};T|z@iSbf;BFiU6{3HM{TV=t?QE0R?EjojgusvuS&oL<$Z>Ovz} zg`mSSx|l-2tn#%TC{9mx35Bo<5vG2U%&JgUp~v_y@fA!=ChrIMGSf`3FFXX+Mfeo_WVvKorEN!3v)H8${?X_XQsDHD3hc%Ejf@U zI*WvL<=%4*8p^1OYmDRZ= zt0w(1SH@Ev3#4i?35y7SzLz2NGzm+!M}BJwO(9|W>}xX&p?ngSn)qT;q0rPn=W3s1 z3QZ$n^^Uj3=|V0={Ewgyb{Im_Nx1oj?i+3iJwrmOBa0Wig=Ua&Tg7ibYY5FG;n6Wt z(@C>P>M->h<0DnGNoo=Onz@ALkZ?>QcJt4UZyRPkm@XblP5;p}ZfF#QW8^k`Ij z#}ImvgmuN{J!1*2B_Y*>#lMo)k+5mm(I+&ia+9#N343FC0M?V#nFw9Wfg4DOFs<_# z4%|q>*5<@jH)XC(B(+2H8?b6K3A^n$UehI2TS&;>S^1hSw3Vb@0!F{+7J7-K4pY-3 ztlCCGIAdZZ3j7=JNr=#v5`%FF=VcO-NPBU&CbWZu?6pt!1q+AoLaq;f!g24}!Vg zCL#NbcAuLsfU~k^BebgFo{;+&^Fy^2)6e!2|Fit1x{+Mh@pX$|^*dWB0r*_=u#!IoQi3Kk*m| z;S9K(YY81EA=T_%F^15`B;=Lytvvbg_rFL;!tlChO4SJx+73)!2th+dB&3?w@V+H< zl7v)~Ds0k)PAO77>LD)$vFbFd)SWhe4e3)7@=ERTGzXp`Aur>J)ugi|^}HYQfxCoS z#Ak|p@%J9}$R>SFp>wQK5ti=6s`DguyB~dCm#WW6NFulSgCd~|By|8Pt#=4rB;gaj zu8ritFBJKzuNjgTj54L_OA>B{_$}34LSK=v9jOmDX+jnW>q>hs-YxVs3FkiA>x@h2 z8xn555woV4Lf?`QPH>g3ton|G`!RIaG+nB`Cn4xTO-8cnlA<T({1|O-q%qr}5 z`i`NR&<`ZswL=!IbPHV};klX>*${%DuadCTku@6>2wfwg?YO<)nL^h|SpDdAE?wvb z2}>Q^vJ~m2BK6;=*Ap%UbFLpr$bR(Nuwofl%z^3_eWl1Pbc>{3<_=#X-6kQN^q0Em zQgw%fk6Q_qcCziC6iE`v5hpnCXI5dUBL`l0$-uiL9Fxo@v$=?SB(=2{%Ue=)pM)ev z-{@)x{X)WS=d5_LNa%qg)uS2sOuk#_S5~R)r@y5MJtV0Yiq>htLcfvFqtpF}tN)#( zZkSR}qX^sah=kS0R;;ZHl_-y&C+j8L)H~Tr~(OXkM`PG zC{&Szh9cUWcMDY_Vf91uDp^96NeJ3`eX$`_g@kn_>aUTik}!R2mkyd#RU@fIyp`s^+>bR#I1?GZS9GbWNy1r8FaupewMa-JcKBIC=t+_~zRw2e zLbXYFe%Za|n?iL+c!*|K3($n>k`Q5L#bQ!D5^m)1$it>o)hFQ|ivMY^Td08|KlP|> zaq>%-P(xN>AJbhw=|YW2SZdCM@@}EV9Ei8D5f|5KLQPnOptBBaA!#Ip zrC6u~2jW$qC7WBQD+zg}?Cs8~Zi>_aFtZj8Go-3JtB`~q@v1|} zk5w3${@r3zs0XXmA-|o=wtKP)XTn%gfFdlS7YS{r-^wQSCZWfK@mo!)>O(@RDaWt4 zg!+T{YJBl^(r`t->bu&wxYMK{61F32 z^&X7FB1Ui^BD7ENa|;Et3g^B=y60eqkPuFB!rW=w}K%wQjz@E;&Y=;lSYxSk7-9rx}_?T1J#T48?zx;{b&-}9=2+V zB@{)%!+pe$cQv6goD10pyi^T>fzhnOlidH~y`&ftwj*}0=Y4c6Nu9zTZCMpZLiV=V zO$?dKAR&q9hZ9*9Pr@Pwce>*xRS6{gYPs!(#gwUmZ~%o&cuK@?G2%Hl3GOaBvUAZgoeV8 zl;Cb>l5ha@m1Qic$|9l1$V#msNHv?Z6aQ)Dk4hOrIV41wl4X({B%FzygfC2~a*}Xz zGQL=%3+0l~_Q1W3-9mXJWS`R5^Qn9+33&~Qw( ztiJ#0LQAS9lF;@T+jh1+iG)QAe)CNqshUhe(An4b=t57EkZRbd8m)HOarmh4(H3b zq~#(Mo!h8F5NU-5;*mC{=n0S`q4r`E-}X)H=eCiny*r$(>~I`k3=|ho=TSrIB=5&;`VFb^#?y`vj|NL z?bcs&eJnx~aW7W(F||cx9v)qvfS|9fBJ`TwtD{5OCPH87_nxvy+eO$==xaX(lXe*D zXnvz9?bJ}M>k|yvd*Nk>FDOv$&di;jv=biX0Xd`uk^nWs*{YNfsup|8w~=MX|)$3?iiV;;Sy zzP=Kn`>Y$M)YsP{EOpQieKhbJ5!TgbWVFM%3Pd=Vo-zYn(g_i6g>Fe-`$;E7IIB4~ zOIxIGMQAmpV@189cF|Sgoa+Y>y3Z}T+ebPrLOD+E zpMKIA5jGUH^dbaJ{3tT5e)pkEIxE5+BiD4ZNasXowa-gK9nw!CRM>D)1DEu(2vTojpS&a%HO&h@(pO~f~u55cxCiO}lEm^44>vIu)jZ0v;~bwz|>+)uh{ zsE>Ic&Ft`bA?Xhho+dffDq5sJMOZ|7!%BYAH4!$HdvUW;*G0J6o`2JPOx-XPV!r>z zw;C%d6rr!Q-G?2fZi-A3RcdY~-O^m<034|5C*4*Gt!BUcf<^jEguXIfDG$LO?`R-? zNi+4x-%9_e3bC_?wR)nClU`1h;3&*I~#)OABwQ;l*{p2#3Kzvg}E>KT&9YY<`ptc zT>fx4si+9QF*mR<4uZKJGZbRpPIAg+JEX@&*kjU?L!x3Di0hcLGw`*nxCnpUM9i8| zUJfjwfw&dIQ-+F4icsO`Mhg+bE0)qgl#_e?s)tlsWVZdyMVIu12BNR%jawX28KrQA zGU7TxFjrZnP)_XIoxP-TN@3fc4HbQ)@=D<`)UMY#hg3l+^p$lZ*Chohg(hWd6rNoO@Il9dyAVRTg3Od0*|+DXb#GFC0Ym%U7zZ2>&-y%rn(Q)kJ6_ z&wn7Cb3G}-!Hj#hijP!XGzaSnyIDZ0A;RTIYkA5`dP;=wg zMEDK-ywBs5sx88G^mO^u$5b5=&R1T!`l7lbbG~{dc$l(8CC@Fs9AFqNhb@!gFF)FjEah*mmCgb^N48BJ9yK-w{0{GB5a5~eh?Ik1@s+xC1gRrIU~d(5#iT&9|f(ATglYauv= zEktNF_szCGQcIEPYeNw~DOiMZvTiJKNUcQXIzIT;CAAje6y~kJp`zP}aLC7H^t733 zE5cI8m8zn?+KJ2o=+?_&s=WvmdPY|-AaxL-`(gKDEmB7ju25>{CqLx2uZO@tVq8=i2Kc-GaQK$$_Ja?j~!+||TXfCnicn$HlVAHu{WK8eN(~TU+n&6W zE(Z=2VUKyQzOtD#NMtT;mpbZxun1QubJ(ASObrpC`y^|Yj}$IKh1t=GHYq}c?w!uX zc9J4RsBpxU@Lspdrg&|eigB6HU^KI~&EP6P4iNc#McONv*@9L(!` zAb7_j2HP z5k6uJ>VBbs^qdIY=LXNUNE1X@YDjqC2Y=6tu*b&h#(J5WD8h9NzjYsiCSDMs!la%@$PIkmnkK?ANzV(mnR;1dDqQuWOPVgi9(!bO)+^2s;rKq4Sy;%_D-fdecbD#MRP@{Fr!;D4^yv-@LA3? zF5gRfO@vn43~MZUU4%=U+Mub$)Ego^()xu@hTsalDKe{nc9WNsFTy|UbMjcF%cOZC zJWV3cZptUk7onU6g(D!CYk>%R?9gXXFzGFkX|-BEo3v1bZC8nZ7lMI{M7TnU17C4S zi$yqc4GNoBq$MJ>npW`@A8DxweP#Z*ES$7VguYU5Z*fV>MR-nRJn@G`S|LIcPUWc( zEaGhu`s$w+=aAkJq1EBndRnBFBAlGmzxL~L_(VAO_TH0P#JeIK->~^7y&U+S2sd*2 zq~4nAeM8aatvqRLl#i(oM3_FVP6aP%l?I~1+<{?AtyT(qOn7df&D0vDP)^tfbwq1L zEAfM%X@U2&bt3fD|G+(r!?xFJE==!vlptU4$u}6Doom(qtsRn#Q7Sq zb*aOF+eA2pooDaxlD3ObVRFJ@A8CgOeL437f86+q2;Ju#3-U9yQ-pGQESl~m?J_jj z{O{T$zPjj=b}NOxa$>vtNPCn*U+IZ=yrjKKVX0wfUa&~}M5r*X&UZHHQw>CgBg&j` zNc)w-hWcz-55X1kD}`1wyVnsN5TUR5Ca?RMI;es8*5mimK2W<~#>JJgRPi#C_d;C*`Rx^It zh7g*#CPMdP_T*Zm>msxo{mxSk>4wN$?P2eENrfU5o!b6_roSn|>f0a8FJS7H2-|LW zd##^zTV#rEeF}m_{3XJ{9FV=#BHa<;!8c}LJs;_B5xTbz?{-OdMW`^c`IivPbx*Vs zKSOToTBLtO=qsUNzK8U$2p274a#NRd-_U6DJ`~$7@N@G2l){GWI^i}`50pY*QJVvI z$3vx1v~xL8(?1en+g0k-bU3ic6TGd^svWg#GpVQu6*`}_^OGJkG}`>2F}qK!mt_9N zE!>Z2V(1&sIizAD^wsmfNSjn#191S-e>iE8N+^YLMuhD5kxD9s3bQVrw@IaxS{WAd z@Zb|ll~xKja_GMo{Y*U}LOF4FT3Mtr8i)!zMKxEdtWr3uk&l0(R5=m)O0d?rMa&f{ zFG63*mGhOVpt*2`GH+bW76E zbxBo3Sl94J14UIea5XONg|vL8s)IISf^uqWpebipHHTD3gbI^hnNUcoD?&M= zKK&+`WQkBtUg%d4%vDc>Z4YpFIHdZ9qRpShdX8s$Nez@jUr`}TL{BS)R^$6jb(m@> zLOCN}dP1p2BAmkL*~K<9^^E31Uv)bD3Be*7D}}xWHTvBmH4&kS)|Z!hNli5neGNM^ z%_cPyVfBN$Z}pL$6`|<38X+#Jxd^KtXnpJ_wJ;QIerc!kTZKMSOQq0iwgI!QV39dY z->e8CwGyG|-Y=bWNUcREx=r|ci_}JhF9u)!bNDo=tq4o)^DsD{)Xor#&aK+ZOKPta zmKvEqT^Fr`$lO*@Z+n>PsDWrT_S8|$)k!I|I{MFf8rWGW{Hb*1qjen)>>@&|L${B& zNal}B_2|fJTh&YIrn$^9IT84(+g)TH?gy^;nF%6x~yVR^z9awMe~0_?RC3P2m4y>n$>iST|d#J|c5lxpiy~3=?4y zJ!{rg6MaQ^#qP_0K?twdPlV%}Qt*>Q>Tf8~Jlx~^_wbzlhrN`WlO=!6ICt__)A3%n%W7tDLKiHCMREd!5s2MT`%W~G{k>s ze#DPOeWamEnLi<3+tE*o65(>hgpYSf(IPYvv0}7R!$fEz>e=T+F(T9I#BCZlT!a%H zIsa$T2tzDqWbwIn5mVtv5suv0g-=?fQ5uL=)BdQf)Myc|P>y@V%T%lehTtb#2XYHZ zW0XQU$#>HIq_HBiu91OnbB+j?V^p&wi>Wxxg_AS%VP6Q=6|WS!51m}xM@kT3+oA7v zb4ZCIl+*U#y?#=X2$wcH?HeB{S%k|G`)lBKPcg(MoNXI5FjXnsR&lpac{wmmDeSTF z>tiiax(I#sIGYT?QZqCV>*_FkypNQr6wZC0@REK~mI!+sJMo-F$`;`}O#k(9K2nb6 zGTkrec>DXd*hQp^r3CgeHbxYV43+&|Ir=FxOozAWahC zo$u)v0!2^OKy0XY`8GCFFN)BYJ-(NZ^pXbRI%X~G;U`T|3Vn47``RH*RSNgeh|__` zkXI?}vE3I*UZ$pr%$v^5uPoBbBJ44$cvA?0AB0 z$48oJXteo#lg!hn{G?e*VW~Z;M%bj;B5b?O@W5w)IU0zA>3sa9#nfD-&_w^7W1?3@ z`0;J~$GaeerM{+t=A!kVC3;1g9az^ET;Uz85z+GYcPpn;Uk={}Y_oEZpT(nRrT*vh9rums# zq!h|&T&b0pv{;0qdv|~6BP|hOsZFjXxum5cl+!QvHUv#96QR|xUR{)0F2d?tmusQa z3K1Sdsmr5n4t(1XFPi7pC?Dw^5zcC-auK4HA{5;>FV4@DPji{e(WJXedRH_DbncNu zdQXI(l684`vgm!0S;WOWi>VJp`1z`*_-LE7N`!KrzW26|v|5C1_evk-lGYd+ZT`-l z7T^2{K@)35xD^Iw%oDBCK$O$})-)ee>y|L?b1LT^3kO(jJ8M1#ZjUnu+v zYrrBt)j({!fDmzoPF8h=3x1nWAk6wZB*lfC_LY!lfv9lwX9xYH0+IQ7^xug}ozOt^mHz6vV5Uwgg;x9i^(+L7_*R6z8pK8^bxH%# zSM2T%YV|v%(AS8e{cR5XUMcj|EBw4m`ay)gk_txpNvAasC#Uz@+mt#ZLWSX7i`Z4hpZKlp?Ao?17pwLhHNhy>QG5sZ_epU)iv}pRWkE!z_Y&-PB zVJ^uPp~5zammp~37ZI9h@!l5>=~qLU{2TdN^z)N0D23GzICnzj{3b#xOtpw?sHOqb`LNl5T4titc~CjOZ_=aJ!Fuxs=P)9TB!2R`sAo`dfr` zHSPJgpLADqq3GyagI&@+5iUpEl)y9k9}UE|ok|Zarv4R~_l}TMFX_Gr6-M+wDdweLuF&TJffCfGip|3ux^1K{aqzq3ER$n#F?~;m&a4=hy z>|>K26QPMwGi&)skBd-rbf= z$|BRm!xA=ARYcg(vq4iuRYj;UV$s$DrmBfh^zegcT+)*wRM_mT*CE(;bwlIKKV~x| z;f~f-Ln(9QmK^jl^^{U*B5GfEhg4H3^woFfKv69bz9PlkcvY*ft%2w(qVmT|)e+%f z_Ng`4%em@mAj%p2_+vhjCBn92LpRx^dLoq5aPByVR9|EcQ?tO+q=5)c^!(?bpQ)!s zD7r?|pTbEE4RPCjFJD)xky0q9ZQ>D!sb@rJA|mvzQjIkbO+%me2BF;OcGL|@NrDd%utYZ3O?)jW~RBHD=1SJ?ezm(*5->zFiejzwxGLKD5m z4s}TF4UIGZ0#V<;`{k25h_J_~FKa+BeMb#M_e~>O7LYoLaJ3`LuX0G8H4v?i+Mv2hZu=M#BX|xF6kqIU*e2R%3T~NpT`9BID`6*N1pRnda|> zw12OL5LTa{6w0vVwD4pZp8&Nj&-LeT?ig?mZ4A}qDt_22!ZJP}&0_*meB?l=*a+IHdV zHdEsbO)~G>V|rcnlAcp4KP=?0o4F7yb%F>*mmBqhF75Lo^woO(0h_6bBAl;~XE!;d z7ewfO^cO22m}`;<=e~7`XH?;25t>N8zTV5!iz4(jFd}f|UJ{{u=d067O%dVTSKiVS z<1qbHL)?(l_yeW9N|}Q>K5*`*iBPmt@Q=%ZFKZwk9Wlq+iKdJ2ER2ipp{35yK(yN8 zSbaYSz9Pa>!{3guNi#+0tHsbqKGG}^%4z*wJ*8$Fnq=M;`t5(&%hVjDP)?_1>wKiS zA{5=>jlcb*S4C(w`f3%WUejE-j-$K$YBBY?QrKh9F%=3(Z-`LgkYm$b(wicbGiKi+ zA1PmRp^1<|T^-UqrEm%(-VQw6=PPB(nS25vbiY6;Y`cBmGr^>{MEPO+|2Q+!B`wrI zJVcvZTwh39q!h}rxBp|27As}mD9YZ3VEQE@^fj#62VT-r5w<<>wE;n-Wtt0pJ(XC; zAuSi7ugGqdyrdN(Y&&etArI+o&4qHFD*cp?^o~-fu>0n*e$q;%%=_cKz!TFaLSMt8 zhUGK$t_WwM?}=_2_?`$Sr*oUpE>rJ|&}z)XQlbw;*tY%fV{K@ap>gK#5lCzj>~P>} zrSPe?;q@YZ(i#!UX@0nYXsyU>Xs>HAwN7M?$rqhP>qWTvq9cFsGPOa3>06ZcEA^oW z+wOO#g`cU7hQ^t9zP`S|PYXU$3Qa`*-ctiNiEt*GUHaI|fty8WqQ=#Z4(Vf&x!uzu zeWWcStiE1_%y80H5z1+N<_Vj$O@u#x>~-kF%cSjw#+lzr3AtZQ19vEeQ+O|^zQfcf zBJ>sF)PvxB?G$0#ty<3Vl6Hx3n3~>t*CFi|p|Ae`9`%v-h)_<{^rL#ky&|l>WX1@a zseK|G^4@Lze$uBR^c7KbuTuL(gTq4Z|MjNGFG7Wn4Q_&QSn2^0x(}4*sL zq79$8CORrYIm0_$7abF!!iIKnmjk~Pq3FiFKe0*2MYtcsol{=YS0WsfhTb3YNnab9 zX5OuGN3L;6-zbH0Y7QS}lL|yAy8FJLAn5Ca2=9E6Ti$X>Cq+0WT{btiNZ*Q3;poe! zMW;mQtM4D-HdEh;%q_Y--$(jhgl)&O@wWSuKmpB zz>6ZB)!{X^dP%=)E;Nx>xq+D<|No=NT-pYmT+(F?#L21u+V3{$ic&Zexx1p3x~dfZ ztf_p>Y>TNsL^zn$i!9f={uH6F(9e6=OkLAl*ih~VfxqA2x>6{o=h2%!rf!H(&ZsJ% zTBJe^?1SHMId{5%bW?<)v+JDql5UC2)jnHCbX#-bVU_y9nINYAQVNGDx6(lfnz$n} zO>}7JlK$2}wA#Pq=!nOui)^;5Ul=@QfBqJuPIfeEYAHT^FSUr zW3|gvQA5+rM;}ke7|~-QG~wA)TLT~0Kx}(J!wihW^u?6Iwms_}iHeKxyNa1#uL)wR zga{vp$NXC>m{d}8;S`QqcuT2LN||!f2KbmNEy8mm=DBo-^n}Q?`useLR7QjYkg+b_ zCY2T8=F6>+ZpT|_Fu&SX+=I?MA&|$BiWPUD<%Yi#BcV-7K z=}8ePj2TziCRG=qoYwM6DHeX_`9 zsANY>eC`~h5AQ#BsCOaL!Ot0*rY}xG%+ggs*m)H2z$)!`W6IpH5TDc^O%27 z!cY?tHstx>p^wy5WLAH!p;q5aWR6@-kC&-uMW&pxi7u(R2u)-x`q@WnA;PvjM;eJ* z8k%H2r47IMwarwpQrJ*x+ZYJe)k=hNM%NA;-_|1BeB(+L)4JM-OkbZpv^cP>$lNgP zGxAC8L}uGN{!^;G2scbp-K8#59Yp5R2JM4j5gkR?P)^!pAE}cF8yYuwxl)})rs(Ip z_?hZrh$nhj>;s$BRVl1K*D2>EbrWHavAut@NZmzf)w3Z+sSpt!R^!@aB7}9>A}lq} z_x5H|4-xj5TW_sJ3Kf}yIp9Jtsi(-?FlEa5NxekoPK%6&VEW!7v!VE#UQ!Zv8$CJL>WvZ`IW~n`jdr1A1!floCaRsIND`l3N*2rOMfXE!CX6JpRfg-%3 z=Z{ui(jd)+TOsY`bel9-gb!}bYnNAQhz6SJ2kmf~3Reo}t4{GxgGdod;T6X{-bNKh zDwP=)a=@xvz|>Hs%!Xnr7LuZr!ZSK!tY4{U5$=w}^rtPRhKX>6*7-Ewgk-4;mOHPyG3{5j{nd64sQz~95^NM?l z`I$-(VO?#Pj#VmAgo~DVx2lh+BoX>b>r&PsC5ud7QvyF4ND*PFZ9T(-nMxI*FDLT0 zkCY}#4BLODd8Eoo7vadImh9s&l_A1KOPuh#OUg7f4UZvz`m7l?DNBSs=Dsr7OUl+j zT#nQ)dih8>B5XTvLX~imM}#-9#*2M^QmzR1P^Z0pwE8>|%IUU0@R4lX|Id|M>qm^k zbsR6kw(GZeS@fI;*RkojaTZe(M7Tn^Q%l>V=S5hA^=Yg^UIA%_2u);v*vclo zB0~46HOfJ-)R`ibQ~b++M6*OVCTRzkhBGx=gzj6%cD6`!M0lE{za4mf%?06aj+$fs zf3aQ*7c2Lwa%e1X^EaZ`L?JkuMQhre?R62VPAfV&i1daCUBv(IpJ0AdWFEG`i@i+c zi%??xYp;vuiEvuuQ$7;S7oq*+;gvBC8($zYxAJ|1`33Nd3OKOL|9yzS8zhvPdgMxRU8DLbM^D2z{lMpXp=jT|?UT znO9uWdrG0gboYIw-WQ?54hIL>Ono52m$#8uMk}>SgmO|Rzu+>p+EBjvv)J^og?`c+ z5w<;M&=n79tp;L4@ju@2k=7}NJ96yyDnX?6A~caOH^fWYAi}m2k2Ld>J`|Z}<|hL! z(ndpb%pwNQ?e3C35}Eg_-TwxYHi@up&y>Iuf3xN?$E2ELG4-)hs4(ir8Hcn*gmNNh zyl<1XiqJ%S%3-CpiEx;lxn9wBL%iB)bLRUvaEDT8BGZ4+OZr49+@!&)uDPV0B5Ww5 zRVg27mk3Y8CclRJNxMbnwi;O9ChZZS`^cs9)csx&D$MxT?`3MA2;KKDtr zUvGJvwBOJi^WK+LyVC%P~q6T1ef%c2urQsVRJa?YY|$_ZS}mL z^oAHOig z&(v8FF72(0fh%-Qgex@Q=j&dkeiC7+9Xze|ia(3y;QL8J;OTo_gv*f;Q`*OYt_T;c z_WZjx=@${!mDjYr=K58HD-@j-c!*vQq3EpGbd1Bce-q(grcLYVk}itO(flNb0@epQ6`(Hc`rdYSq|WFC)0ESvPF z2zz`w`HDrlCc?STwHEnE*G0IrX^)yHbwh-{GItO3GgTo@on3Z`pY)$nC?|c-059o* zQW)sj@R8`D$n^F7YYtP7M7U@{MZXgjDaYxtp(a_MyG#`op^3P?SvKi0L;2>XFi}k( zQ|fW0%q=?bgvC@brLgVP=xGI{;!2_Dw)1=WNhOrRxexiWiicEEgmQAWUsbA<2IA6Y z{}k#nRaz%W=i_|~^(S7QbpIy?^O5qf?dgdEH zsi9KlVbv_rOKK#-<>-eNM2KspcZ{WJ>GnC$-RAc$!4?-QPr z_oL-!s+Gum|DE1Usn#O%Ro#0=hpCOBeDm2P`Lhcy2ewtpyk#B_JjvTBWzNKZ)sSL;#$Sif*T2Xfq`fAML0R}FVxW$>L)T!%*kuC`u-xc+P`Ivmjefg%(@1*aYzG2xI$S?0#B1cB6OeI zZIT8K7U8aqt}#v14-ui9vNq3i zNF$WO<%lc$nwKZ6XL(He-Nb2?=rgi9MM!cvEH-r|zRXdtG~ zj{U?YjaACr3U8MeIZENIhWd9EG8HGn!5kB@!y?6tOsmZ^G%!JP;nMbcVv|ydB3!fx z{23<)CTSr0O6~fWQprl;0aK@T6Njl35&BB^B-^A^5gt~dl@36#$25^SzLU~iQo5nV z=Km~r9(`|-GL*uZ7`Fay0Vz`{bf0m*uP94|qSHskYhbnpn&aE!(oPP{5n-vFLQ4mc zJR%gGI_&LyQmzQCwySpAOUe^r_3i7v4Z-Ti8CuN0WVCYN79Fn?Dr`GygT>TyN}>Cx zi8Wl(1Q9B9-aik)T+eGDiq6RW$3vPZLODsBY(MD*5&kmxp6ebtq)8(4;M>^1CQTNh z`|Ljh&xsceEjC}u($Cbln0iSm(?shbe$o^X_Soj?EzwjB#H~|1b`MZO;&)=#DWjEA@)zLOF@UD*Kt5sgyZi zr$2E>vqV^GlNMckq}dvXqT4>GrPLgy&}z4V`*pSFicn5ga3e1VzA8e6o>D_J@HLU? ze$QQ-snLx+o3DXbYOi;y`#5l(2<43Va+?`B zD{sCCd+f3Kq(fRD!t<+L`#GYw4DmYVG`~{7)IyPYe~iB1B`wlG6dkpylm;$V3a#es zs^e#BiBkBfXk@~FHfgB{Po_@CCpx5MBJ*(n`WOUDT`oeaF$a?@(h3n;&B!V5klq$y z^&y3mMem5vYTCVa`An@8q17=>D%&KV2$v(fL!jt)MP?DVu4}IMM0id#+8*ZR!1qOH zHU8uGZPEuKY$&vtr30`^gkzGk;jqKhYLWQ{c6NL)X^jZ0FVlaCMOrJuJ(N(%W0Tg2 z(0yX;EYW(AS?cZC4pSRMcqnxJ@i|TZp`q30?PN%)65&j3RLVSRN6c|aABk|$hDLwo zC2bPnq76GY)*)>cVUHc2@9rUeEW+wLwk&IrwusESzC0q@Dnj=uYkwAPGql?LXmf04 zUCp&!gjRkZ69U6%46Yh`nlRgoliD7Y5AUGyFMOatZq^5T9lYN63_i9P;`mvl&k-;fUNxIl{iH9I!sSRV zx>Q9USIX=$qNB~!S4yG6(d%Y7q_3620f@Yo>LYz4LWOZhzH~_iB0Rr3|7lyK6NXlr z|0O*;^?fhtq*CZBZAiRJ`c^5lI;P7uAL*1*sIcGjXC2aaA~X@*_<@)7y$G$Q?muUf zeh^_1v3W5;q|=60n)kG*34yNm!}jKop(TVYEv+rxg0i zO)Cb$@%>3Dv>I{$oJIOsDJ-@3mAekNk;jSXrAa(nSqK6EX7>UDEF&^wlaj*+;r0GUu!334peLuE!hoM1>lNqK997&t>YSQYa^{S1r*krBF`l`fEA>x0NzS?u)Ws z4*W}mheF=Cz&EfvA~Z3oSxu$>)?8>crP~;X1MiA(h2qxFv`P0g5YMm3Pd*JM{Ub8R zBzm$^|BCRa?b)b<%hY`lp5&2fH@&3)L}p#XHszBZh;TXjm&>q74@KxJa(WLh>5&NC z4;olORHQtgm{?c8{vW$c6&0Ch;q*QbT%pHASeO0SUp~^~BAnHh_a|7SVj^@uHm2xi zQgIQ=No)CuQYAzvI`PsRQArW5P?j^GkONDJZ~z*$-v_}WN{d$Fd+n<4L{AvnXx{lo zjw)g?RYoavpVMK1pHx<4Hgq}gEG#F&wxb4RJ4}@q;oOhBG)e<2i161G)K1)KGZkcL zqxplS$oC(2NEMYrIeo58^^+XjD`ghp9pGcCiU{ST|2@V_s;YtJOvK%H zN!64>6JshT_(@NS&_wd_f*?|L4MY?6wgi_{Ln&OLeqAc~NKc8d?cT%2`bjl45Z&ii zAL=F5QVQ46Q(~1xs;v|@G<^2aa8ezmup_)m!FX%SZ6qxrvHrW$G>`pPTwyh~~%!gWljHAD1_ z2BN~g*Iq;jhpDkr*ih`xcWhD<5&9aq;a4xIsRp9xv?0487}!jNZI7t?oMW}FO`C1mKg(05Rr!ybAq?RIdpPZbfRImsSnAqB%+Dx_5Txc~n`Uz2MrO;RT zWxu#gwGpA{m_d0EEVZr39Hyl)O0^T=p)k6B;G(rRwA%dOtVh`YrI&ra}y@HectH`aIz$*-DwG+?ySg>LJ1{8Zl(I#Z;&W7j4L{8a`4_5xS3a ze|1Q`M5eDAiGEUV5n4?euoi+=`xshn{_4Z5pGNygVM<|-{oCzxNPU&Uqod!a6KqmH zrLfd~Eq3@x{gpziNiYAFPZ}UXtIp58T+%=hS{-}likCD zwkTR;o^m1YiiU|$Vd|Ra+#+TXF(ULeddy0PG+cyoqVnhYNFzkJ-9!5aJ|K-W#O~9V zx3rlWr4+W^w`P5pG+Ja9F?+Q|iq$|I^0e`nAy~v1rO>@+Rhm*`MYyyPooXoMh|IGv zt(eP!aUxuy#QE_W7%xK6gRU3aOeKi0$ME;B`$>r+Y^eRtxrL-85#HT9y*tiJN*1As zn4!;zQbgELUN66{P^xG(&VAezmjly8=5nNM2_mJ7P)KbPmmN*`01hIW~E zQD;M#mz1RxE?RcRZkLoTGEd(RKd?zTA{_D|`{FE;M}$`M$|O3ZToEcvp3&VV<%!G{ zn)j_z<3!kyoga7tj5oB)e18m2|J>rh=afSC1K%ou;5tqaq5GJIX)ft`5w4@>^vg<3 z6rqX!_lG)6y&%FNPc0tmBTX{23-9i>Gw!S^oU9bK9s5V%UExKgP;_?np%{lnyd*+} zLknIq3!9ZUMP!~P5v!D%s=3ft)8#+-nDUCu6QJ@c(KL~{MMFdVOua0^BKn-@ZIh-O z+GYOVv*^<|H&G4Yf|nkzzIy)yEZdR1h$-TsWr)N3O26??WL1nYWTgiD(>aE_n!h6oj= zOnucRy(z*T$1H!tOUf7F?ufSXeWZDYHk$8`<5zdFNb^Ow-MejFE?OW$tJzCkFH>)6 zF1*9o3tkj0R0`$f9QxB`YLQZCb#&NFKWVWDd(4}XR7hGP!n!(r75G`lQq6@5hZntT zGqp@9-0rouUw25$McCtr^-(_33Jt{N@RUvQlHOJdMfd);is&7Yxof)xi&l!zYQk%~ z{T%2Mq5Cu^aB|)?w9&kard{c)f$xcMFbDX?i{2NZ)$Fa)UC#A^<}%OdcH5ugDMQI83e4T;_gEDWlX{rLgU+l0!U9trKBGou__m%F=_3)!iGAt*X3{1NMA4b$2HB*|O5slH z{Y79yAB)VxYD8ZjQ(Hu6)iYzU25uFhocQ=TE>qh?c;<9m@}!rv-OxsS*s`PRj)kDY z9ZI2z_HR9KNuP+!D}Hm;PueNMjohzGTsUc$$dr@cN2%Q+bU&iWPM4`YB5Y{nvY#x{ zUXgjOItx|wJ`v8B-O?&#>Qj+907a90r2Qi7u~*v{Ay~a%giD+HOw9t)0TIrZXLqdT zIw->B82xyLkEzc@_+!K?{}no79fOrREJD%4x@@$W`dow!#Vy*Q>A(2@fq5Ta zRqBWcmo{!fyq5!yif}nbzJ5$gJto4*i3}NNG4-VgMJKh|=#q|$@cAq5c%2~9S0WUh zR5(QRwFuizt$Gb1l=F=U73REH$xkW}VfA4pN;;$yBD3uezq3duMd+(lQW?>=A{3qb zL2(~br$pFL@|<`5r0+zSzRmSkqVGlK)8piFKBj&U;fGyAx(skhr$y*%*wUF0tp1D$ z8yZ#fh(-EQgbk(CzGjooim-?Q0}nf-b0TxQm;c&J`bmUEI46CgpGA1ZHieeU)OitJ zG5w!2ev&J~-)8a8fc_5Y7ZDaQsN(=H=~t0?#nM$FSp5Z&xoB(Ov`D{+@QS0WcNSd~ zp^2DrZM;nVF2W*muZ8(Ymqd8Q%>Vsu)R#r(ay4qo-??dJP_LB+? zwKAXO;>$1al5QI6h>ubGe>?u8MY<)zT=CJL=~lR{foA#(HI(|xP!scM=&AX$9S*!B z!lNT{$O@hNzYXypqt2dE&d=0c&4qQPJPh)Z?uqcFti!W07U>^D9nHV#kaH&6CH<=u zww+O|m6vqiP?J=w%YONo=syiK558iv%m<2Dc@IR`cDl;!3>M3qJ~=G742T17g6dlLtI2?`LhV&6(1L&oP^{Veo`?JHk7-h zh)XIiLSMo6?~6(pVqftm$M~5lX~jub7uI)XE$H&)0!lp|q%DSjeR>DtS5Z z2}4@fi-9LV8Ijrcln8{d)Ut-m`SSN39OEaI(_C0;W=yK6ya*|K)DDC&u!06+uB@k* z`ba?{T#m$yE24^qnwaaDyRCtrsY;?&VIkL>w^6FHA=9eA-i!?vQ&p5gg-M@(?UJgB zkP6Lx!y#2O#AA|DJ>4cfDMDXkuUxZ8)iuy;JIm{kY8YbCna2Y^sd>r}4?u_R*IcG* zYA(EDr{WzT*mfUq zhp$+qXEhg6J&(QWB{dge_4O_nQ>ujqVvkvQKLs<@(ohqed;6&e74$R-7GYpi;R%GW z`c@iJLizb^BU+GrrA&nwp7LuzY?2Ow`m8;8_RgvU_kq~aE-z2?He z%w2yJk~%1bS4=zcj7{oji2ufL-ux97sgt3@=CSMaksr?58O@tWYzxbPKFSbawQdmUZ-Z!=S z9)`HC&|6&`rb0#7P`!i8eWad-SYc+-?hs7h%TS1UMbCR5TBP1eVO=?MnrtTZQ3`Wq zTrOsl!VGakNn4kCNqr3+Ha{n~&bLykp9Y%lOQ%^(^*7YVq|$#gf<+7v;g>j)-~Y`= z8mNId(W!@yTckmT_)v)WWUOeg24Y>A7k7D>8X_{6!*kgog&R^iZI;@k2oc^NZ)RMF zU=fl3pXynnsh2cVghk{B3#{fQd!>?6!wm5{dUo#jGZiB;ciNuQ zvq{4>7mCiUl5dknXfA9hcf?e6KT-oh+2ILVfAtQ z0~;EnxlH%lR%x!Wn#=65)h$)%D22=UDnn$>#Jl?)Ql=r^RvC)|$2UtU6rHkajgP5prA%LU4qK!gLx=g! zHzR&C$)l9nV?85SYOYeI)#Oq(DNlrxvogp%8OFCf8W$ zWoohr15>7L^^soGT;{Bfz3L~uq`6Ev-vt&iMT8Ay-2X?ZsUo~$>fDYN2YUa1VCIqE z9n!S_ADB7+zK`^>A@e!M?ht#*B~2Hh!m1Y=L9n42BD2RwOLVng5t*g7o$6(3rXlk{ z-v8T)z(=21B3!gam){peM_Oh`t)`UJz~xF|5vdEiI!vt)VXo}B zK7P{MhS+LM*|9e19TCdu{li6zw9=5aJ*J3KKBX{M`nZ~+ca<{7&L)PkT#02u8iLn zXE;1y4Mh!NN?58CG9iBPeUnhy)ODxWSXdY z$IsM$L*{n(x4%)uA^DZUD|+fqgkbsuN}2QZPQ2)#$ZUIZg3Z)thFH#^ciQ?$hm+iR{|>>nzc$1QvtId6^o{1inaCW| ztB|PzL;BGCzhiPjb0IY@>3NH(lbXxC;=?SP^sNSBsgX5SLGX&F4C!<9%)n=+@07wG zM~77nX6k!GT58k%s_+LxdYhZQ#%1cX24dSicm86L&S)TBF{4O3FX=}^`rc7GL3CCr zoYl0)%UevHGo+8{Q+DVTe^Lr>hAFMsq91hP20LYWhjn4e@HH{xW}A}M-@t zkS=ZEG7ssI$Xt$&)4il3K}@0h?5}$%Rn!o-oz(YnA5)Ksu%VpVZ(5|sHP9^e+5m@C zOesvCT0HP+sJNlS=0_HJlLJ35EFr?`JCDEOa-jJrpeAxBR<%i`M0myW*RT0V=KrwJ z`O2;qDtf{Yzdxp&E9+&dj0T$H+vY2!$|{9*rM;1EGgVH6Z71|;?~=+J;zJ?p)&i0F znS|DrJ$zv}Q$b2$`lLPo`biZ35mFg-%89CIAoiI4@@R{x zs!Cy9sh2MJNY#|WD`s6^A$n3N3{07N&t|H+A^xnkL7C@WQVo&06_QRV^^_s=gGReb z&9e?uH4T|}n2^iWQv4+Ikq&d=>6`iH4G2zQZ4o{V)!sJSLo$C768Km!sis4!Yl!b@ z4MGClo8OZM;klX;dCX#}o*};dW*m=qN%al!^VjI+JMrIm#Rej5J7;|=1oX5Bhdd`L z(obqA!cucyic_kQAwCP!Z!ff&dd83`XaB`G*H3CJ!tt&2!)2wKi13P@1%X?%spc|Q zyI2VgY^Id?Y5K5>g`DeI5f+h9Y`sNlu7TKg{Ja=Z3q#yvt5Jhprdo>7{U!fZhZL-V zI3`2Col`(+Wr&|@i=O&wGpV&wSbb>k*YV#dr;QhHzYJ+ltPgb3j!Xheu-7A=>&W8B@=;;=CPIOTU z8)|VbaLBug%tb3w(&E5w8i)_N^{uCTr0yb2ANAT`4=KbD4^wX4x-Q8UA=T@Hp@pO# zhS=9*OYd5wP^GY;%=FeiQctCD55=rD<4|EQk=b_fDWcwn*lO;fWtW-iW5~4XZ}&?} zixeg@tv-6jN9t>cORepF!B6U^6qXt}x29744Ve#=``vG!?a0&srLYK3;U^Yppyo0U zn9CErq(MsIe1+Z~>LU%-Tv$ZzwCw7nAsUEROivnSk-|ktrNzwhlOiLfWhz!F zP|oiDe$p62e9C2C?xWOLrBF`FnS&Nnj^+X-g@58B#Tn9>7$2onydk~UMvnJ0m7o-k zN#>wIK2o9xtIxfbYLk)-agQZ4t2m@&rLfe@2l+lyiXnbzuKLm>rBV&?r;2$!A`rsy zP18Uelk^v}Y*M-*p4DD&?srKU8i>m=Zq-VqGL^zBX73tO$W)e6SbbW#B^D`Lgtw;5 z4_ia@V#>51d?b${ex=MgyV^_2HFVg#>9pzJU6cpH-yFp)RlN4Ehq-Yk#}9bP zH|i-j-Vi@hW`CaGGWDDx{W!JfL8T^WpgGga1NA(wlsTGzj8ST$A@dVyyHiw2n{&M& zLaOS~1^J{&hWIHUZB?iSPF4!_c-~y%W9mf_HXa@Gk4t(uqJwR|D~i z6~BxTy{Z%rO4?>8m;+x^3gzVd@1IS6T`8=~^VcPpsW+4|MUR~6BfTlYx}qLG<|XB8 zpxNWD`l5M;c+pa}{@`b7z6jH&Pk88%7HBRUfXrt;3n#rL!n*RZJ6WWK8i=CPw@mht z7KyN~#F8)hNsA5fi%rI<9{HptBD0}gGazVnsUdy(-EkNH4O*s@xr-Lg+Duxm6#lUE z^1j6yxI!u1e#wP_?jSZen3Jv4BQ z24dSO4{kY3trcNgB)>|9`H`X7fZF zMdlQ?`o?AIBSU;As&zfEp-qPP1Kb8>y8D>gEJ72x)*3JAV-Y_6CU5!ECT%ffKI+giA@h{BlmGYE8h#?e!0bj(d6?R1 zh;KWd##w&SE~T)D%x_bJNxMZ@edg-J`J_FD^u>Aj=MHJF2o>g3D2o5ab=+r&<@7xi z_yqQ;Qsyw7{i2Ym{f6{=DNUd8ll&swqGO^X9nt|2HdN(vuTlp^SgPmDTRx^f6JdH! zc}sN25I;UV^VVFOsly@+41FaDf~9_Lh)v|R+Z#;!!jM^g$ek{q+oU5RETZ}HW?s@! z5$1}2(RE124DkSTtGvZe`ch<4HMfb5i_ofPMGQh%#8-y+RcgR+pHg2dg;yNA;v=QL zQHlfCiV6(z9Wry_&lU`S2foN0x#A`SI;nw8!uDTYRLv!QYbfx07I(d*Q%aeoc6`Gj zeW$r_zQ#pfw)2=-rZ)CelWxeb7mL!kxnaR=IV6PBAwA(*iet(3jL%Xl`N{yPlg1Ou8Hu~;E$E%mAWoM6Q0Lk5#2Dv!{m8&kHdk5hFDHs+1DXBOg9a2 zUAd2)^^tCAAU2e7XQ@lNEy7Zh|F4L9500ul!vL-VRcQ@G1Vk=fuz+BM1PV=&G^;H_ zg_k7=XzTNZf0X(w|g2GEiT!}~4SNcdzMm*{|$E!TjWu5f8)iW!E9-^|cYF{qU#5>PT0VvOz4o$t7JCVNZk_vmDYj5gq}h)#*+CjgkJ~ zB6g?8)c=fllAhG@WtVi_h-b`EZ=8T&5Z@|=D+XscO5Ko&l+Nx8AMlvEQDje;llgU| zn~XT2ft!{?(5sn|ookbmqy3a>Zp7ce@leWRs)c%C^s&g}F6jp%EKcP9GY;uy^+Iae z;cW$^Ta5S_icIR9O}bSnY=GFwkdM^T$c{e#g4`lM>4!%AljP}cwnzGrQkZtEV`Y+b zn|k4<#fSHTU_u!xwDzy3--)y`;>Ju|sIF(KwR&ONrOS6DNtq(-=tm2>dZgQpxHz$) zueqc)BFu60IeS*(ig$=`#qze#LqKhfbR2H^rAulj!WGM2$Pl$xq3xWlMRiQwsT6v} z_pR_q9gMhy(G_P@c$W$>?ZCOVKBhXV5aWv6yV_6cB*Nh#-2af;cUB<=5gId6sV*X0 zujY+D7XH|XCzxp0qxB@8QfNP++lC~mt5TrQ_BkG@n+SVi?0`lHR^o0WZOqlDQ>34W zkaDU@e5CG1_7*ugv~}1e^-u~!jh!mFNa|_CAN0ZGxd7=N6(UvK_^hAQON0ppThw@@ z-Xbh?x$}jObgz+KZcgl%B4sIs36%#+MfWL%aRrNxdQ9~(;%6v&@IsQ*S7e{ZwFMAN zJ6nYqSG31YQI1j|XHNR@+s}ymE7H^yU}1k1VsT0{d;3X0RUyU|?PKQ@v>%{CY=GFV zgi-@V7=*Jb>uaWdCc?+6Tl24cq}=a%m9MLDNk2Ez>*s&v`ALIRi1wxbo|Yutuaw=i zS-X@PtX`NPAt&&Vl5TS6$t0!I3L>1bEk~93ILL)uh$IMQWij=ZBUTP9eQZE!v{ZIOXJlQDM z7AJVM3+iw?rl`>F_ATkJp@32t>bSgJ9#d15!cfP>&lixU8S#l6x;slWU1YsRYd4_yr7Dg1vFg?IM1ZLoBJ>J8cg#Q#|uX zfHc>LC#&qLLeV^>@NJTFrOLWYh=>Yyo(M6_ejdUbCdniSEMPyeT)+s<*Z^Xk^c-r>VhY0N-Ys~dXJ5^{4o!IY^c8Rcr5qE2f zwA+YlU%F$4N7^H@l<&G|uL!rJY(a*@)IJfe7}zvXsXrSv*q?(ti|bNM{Y8Yr$l3I7 ztE31MiVgluh5JPqYOqDN3J)0ZM_Htyzsp|lh;YT|yzweLD8f*k(}haCt6oTjSAL|_ zAtT=HAxqAR4l9NGIJP>Ky1{P85%t0#N^3SlKz~&sdc`Z(D0Nh1skf&3m^!9jm}BCL zv)QEMBBaLD97&N*s1T|0+6<-MQwr@TSHHKEsrQW@vX7{9-)@&wuM}3bZ1|_52Bk3i zvVluHrcR2`D>&=PBaLE3IBIYijO)-8IwLHH!t4@ zQZXPacfjAMqO%M}mo0FXi!6u1@p%bj(sR0|Pp zUPEg|R>hZca?|ru;xWmToU}1^XLXz3wU^cZR>^D~=}DRKInEkGD@Im8SPoP35|W%X zZGOi+xytxLR&G*47S58KoHEW?3u!f-^qkbJu_|>nI+Wg+}465?Fm?VXUv2#K53Jj4drx6xjCunY0gHG z^^x_QE+Ho&Yhr$SKK6t9qEAw4nzM0aMRj6y>#48_YFGP4(U|n?6sKm>^GraA5;C=v zoP@-zl=$57IVpMh_H>7{>0H?=W9)e;3Ca1+W<$%5jVz6HP67rumveD@v~J^UF*ebz zwr9%%XRFrs(ss4ko-1&+wyO=+uhbsD3sdtG?G@yNLG4DUtLSWF$0lmq+K#)RXH8`>M$8{4s7`(I16 zH=S!&E3h|@Y=AX*=Fs{d_fubApKfiO-k!CzFL3%iT}y`or>|Pevb0iv?7q=dt;H_$ z@AyyWe}!A)zng!j|Bd-~Z{zIjnSYl8XV<6m?^fXKuI4}ghmMy*=KS#2{CoV<`Fn1v z|8D+0|2O8}qm8qdXa2nloPD0ozi)xFpPK)~y60w3T6gfT`TPCT`QJRL{`cvBH-G(q zWBxtcIQ>2I?_b~?@O1tI3!DLJ{_~c6dVZwiW4RaP`PwcB&n)L4bt~BZ=~DiGU5df~ z;ZoG|AV{WwdpOWD?;!=wp-<;MtiU;3&3kcm=cvbFiPF1FcErD#Y%O))p7q?u|N6ci z`5#WU$zPNG+mju4Y-evi_WO47ZQ~5`tRc9-8S-=up#{z`wT2}deamf{{=r{s2>&;0 zD52J1;k)90|K`~<>OWjVW1PxU_}{Og>(e!02@#$pL>4%so-QG}z&TniVd~ASc9ZqS zvVGJma!|X#r>|Ph7`2CD|IL!*vUpw!|IL!({=+4;_{Vv){`+-xdb%!kZQ?x(GYXsu zPZyS0;7n2ro7wlkrr++r^LGmiQ!li5FEi1ZtQMB?zqhc||7u}>o5%lsVQHR)*$bTM zPZyR^;LKDDn{hwP>y`XM*>rM+vi{9NVi5tD3VTp-1U$mt<9PdGi1FRyF3oTGc9z8_W&EGl z>iPe0RsWXSPnR;gz&S^j@^ea^ ztPkySHDva4|GU}$tG9~t{-0;x5f8Nap4q=x;9T%@_6rM~i`48FR-a*J-+TVA*%$tI zvoG^6x?lVs&R%_*_~+f@_Fm$d{L%vFvZs?@Uf^7zCck*;{HodSoRD3lJ}m~d8>T)n zIbTwnXyt#mkbiXpXK`U*O#EbnY7qoSW3#SME6c<-N7#{+j#d|8DLj z|HTg4^8Y$_JchP<=Dw}Kx&7(fUn_9#P;+1Y`JM68YhU<3HqcJBfp-0yb*T3!=uG~H zr|Q32$LmEo8BrS6ko>q z4&vA!KL)6E+K}V-aU5aOgFl;HEXRj%9B9*%_pa0A*u?QFo1W6>bzeFD0LMW#Jw0}x zF2^6@xR*`Ooz%@G$A@t|-=;fT+%)C*2#&Fyu+*En93RCo)@xh$hb70yaIEIL?K@45 zKf*EA+rRWQw;X?r;~DsR%e5{!K91uhIDR-vljBctj6UKkzu}hS6FA2CoK<#Oa(oiU z`2Hhiw$bJIQyk;`L#_mxa{L*NJKGN3yPy@x@hKc*enH!^Ejcd2G5T^QYMLCM#<90e z@8~s^Uq6Fm^yL`-9*@uB7=6aRuu7Nw=QvjDn>yN*<8wGhpV{BmD3s&#IL7=Vj~z1P z_zN7P-`r8{d3*uKs?WmarhNS(j?uT%_>sq7;u!NCxnenwFX0&L9o}ymuh(T9W4#Hx zeYn1_aIE^A_kwz@nC<);$7+3*t6OsX4UW-oR%*Umjx8Kx|3v=K9*4+(i(@t4Z_b%= z{2h+HZD#woUohnOdmOK`>Biz0`2BytG3FPUKgp7>|A=GEFRpF2OOCJL7=2`(US!De zRUD(gterg^a{LpH(QodoxA^sII7UBdgM4)P`gI(u^`$*2mg5^Z#{7%}PlDw5CXUfx zZlwh-IlhHstk>~Q16_`9;~4AH54N`C_-7pB`u4JYV#;wbj?s74;ye8M9UP-SXYsv4 z`TAWPqc3OR@e6W%564?=dYfMpafrTt!7=)XX;#%&j(@d#+gsR7zXk7^a(o|O$9f{` zpW^WY9Ao|Q&)wniLmZyLl(N9)NrX|Nua6YUzyzUxP9p{xOiBH06NoKPlArMeW z5?aWeG({77hP2Lh=tR~?w@@h(&XsfMIYX$lB3XWTj+Z7>hAA{K`t!$LLS;$nCeJF= zh02l8LvjZ9eO`Hzs-o;dgfOoPB=t1gxxg({k%SAPI|XJ;5f&yv&?`)05yRGS0UroZZI3DqItzDWCUA5(QX5KZ)X z^}ZpgdL&i!7khM}`W%P~lcyawg&L65GxgSaQbQ6Jl(IO{kW?d*y0i6#x=>>hCNZMw zVz*Ee5~i9sxUWk{QzW;DBiM6=nlgpUk+SFoT~f_RC^~PzHchBG341@R%XLGj1*rvo zntbO+w@^zGuC}8}MF?7LMZ$ve^eMW~bBfd^KXg5%DycP7=stDUn=VPUAz_W-)l0dB z+LF*juy&Qyj)Y}Lg;g(-ls5^>PJ6GPOQ=0b-RW;GBl(apuiXCUHA!_K;c7c-u8I`$ zCE?~vS#}SC1$88$uf%4}T|%8m*o6V}u318zN!Y%@*IsuEbs?z*O?<6bs4EGx5B{_| zQ{6~vjh*@;gzwm$gjQ4cy`l^CAYqLWjaC&3^(3jCbD^a}s22%0a?+d!5S*(w370ne zySAE89}+fZ=4Wk#g!+=yR8No9h5C_j`kd4bhL9f#Q#Hze(L+clq3GyMXNrXUNouM? zA44#S{v<3r{&sI&XaEU)wMi~x3JoNo=p;?IgaSx-PDEGz0)lf5BB@*S+=<;nHWD^d z`twr_p}{09Xjos*-4RGaIgTkKHAxL2q3HD5F_zF!5;j2E@6RwbjHDhz_R5B&hLg71 z{NBHqWeJT?)LFgw1iU-kOK2ohD92uV5K}=+;U#_WmS&`2rm)5=zb?8A3?bnPrM=S1 zB^1hmm}>U8@jQJPQ|Qb7dOe4v!bxgJw|>PG8pVN_S7`Sn2r7&qp)dQ)LZ%`~SYvvJ z3znp!crNsn@yLg%Xc7iG+tg=jGzn`Avqu;*FouNJv`)LOFcnL}>~rFCG)cvgRI7Jh zEfk6;p^2oij|?G0QD^m%8nFD4ODKUUT%q)m7E_5#VU1-PH6bOD@EwzD?ZG%KJDG&O zMlImmxx5q-c64ZVb*54kd8;=aIj_tQl7VSVVMnKWw={+9B<$$nuVm^%=^Ti@VmCC= zgff^yISHAQ4WUe?@Iuij^-o`+ED|nS_K^OjP&Nro^w}Kj7RuqdFx7ynS9c5Lk}$7u zzaxf_gM?P?tEQVmP7*2{*ki6Plt)5eqhHE)3+0p0S4vaQGkOdOeMR<7@RHP65|*7% z{H`H1j)ZwdEZ?OIjVEE*iB(_WzzHO^|AnI6CEHU8s-)aXGTK%^)piO1%zUYd~5; zQVaU{dXWrVO2X_zKia|6G7_GJ%?`immeg`Za`R|GyUm{^aG0(L% zB(;)+d1aPvqYJ%EQuF%g1Fmru2^%1@)gSC@H3=0CZCFKB<$6m{x34Mo`lO0Te+kmsSPAt z$DE-1ZlR5edZ|~KoV#^3p-oKTqGes%Y6xv6p$Yq;PF_M=NSN2C1LJj}tt2#&8nHtY z+C~bpnIndratUoGp`1~=a9AhoWBUV~~Bx9MVpvu!i*$Gi~8(y3lS8L^&a4OBq6MFok8Om$_~Uy~&iiYrS4$>Maspbb6S>+>&~m z1J%ySpX)2Mhbfd}cxAeT_A(W3Gn@Y6*Lqo0&J_ z5(Jm_U8YnMmrEEz?=gi|ol9#L3mqU~*@-1?yMzvMAX?43zh4u2pM(vNJbwfPr$0nm zXEU2O?o=dX@?2;&^VB&*=mQe&+PHMxCG;T)6=r?-It1rB%yXf_^i>N?p(9LT_G$hx zq@yI<$iYE@q+_H&d?^0WZpgrocrLV>>*eJZ`j~_rU8APIOXxTU;tAlF?0I5-Lc;!P zT=8uVJVC&)U zB=r!DUW*W#I88!1&ak0wp)({*!qzmXQ0T0p&gyMJ_V?#3q0dR!6B%#rgWz1}NVtw^ zr{Y{f=XoylWqj|s)4m{K1EkJBr%UPr3D+^b)EGnPA_-INv!x#dr~i_KEtlK%LvE%^ zB&;#=jdM(0CaLRKriCs8zf#m${bVJp{#{GxYo@Tq5j)aY;Wtd7=;Lebfc zes&3c%M^<4@ofZC-!X*;OvuFhUXuErgxLr8x(vbWe;}!%Yb*~E`jO{CU&(oU4WTPc zsV!IjZA<7X3FYMeP~I){6AAZrc%Os1&^4Y5SIC~{AYEr_tj+I_tZgny-5{a+>`J|S zg>I7Yu*$xXZ3x{Wq3EZdQUO^fPIO%?uhg!V)Sbp~AHOH`wYO5*Fm& zbF(g~yCh6C**nP)x<^7^?aK`<68eRNR{LI9q6_^>!lljXW4VRylU8A>yQXsB0}`GS zd1G(ymefNM_G;Q^v83Nf*qHvm<>``oL_*QYa~HdXekY-c)JC31?PC)9N*~!wlhhw1 zOtn)#FH7i8MgHp5D$g8KEcApaY^L~`{ey%`JR`3i*qBMLe(Dk`Nm^nvV^6>47J7y> z-)7n}dzwO}NVtwE4aZwTr4{+BAD228Ut_8aQi$Vno+amrykl%1Ib(lDs$&mm_c1OkGmdnZlM!KfKy4RD-ErxZ3Sc8bUQm z=*!-x6u)CF4#cus#XPYj^(<3Zw&Ugo2&P(_gatV^g}8<4aG=@%k6tVis>>8!MMuuf zatYNV;c}$sWI%AP`lK{m+BMxci3U6uD$Mn|i$Ze+^9HXMiwNBAYUh1!y^ zAZOBtx==d~L^<)t?~=Tk!lljZP=S}DJqdl~p02LRKp&Fo{!Y3f)PaO6l+rEDE##}H zm->-)+>$J&Ix?l2NIcI}Cz9GGZN|G~U}p|QtC0)Z>q1>f*k7$n?}cCkbmc%SD8KEo zAfawdp`7FfI}M@kB$U&7#Z;G24-U++nZX;9b)lXltTDgs6{dQTP+?@trMo57n}lU2 zEt(F&B>IrX+RT_q$(m4K(hL;+ajYTKkEHg*OwY$HKN2pjz3m_l)JfO?$xGV1WuQL^ ztvV`iGlcq+@cbH^T@Qju3?Sht=bY!I2@NEv>v;H6U!edJ`f_~cdGj!cgmUtdlUbpS zq@E^4%`gt9A522`xtkMQLV+YyIC6h4Q)mbY-8*WXw1kF|P~pJEr3|5ABvnqGJ(|#P zMS<$!p1!pzX#`VfHEvR*E~$|ul#}teuS+P1gv*ie)=#ETFiADB_&ie~B&^YS`^Ha_ z3MHY!oS(OFU>HfQarj+LQsE>l$a&$uE;NdS%aQi#>xNJS2}S43^09;>Nw~CW&0lc~ zMJWnYFDIF8vNfS-rchy6_dg&gdNc{MchtM-7K$OE!r&dJNwGW^`f{GXs7or2DYWVs zP-!XxNq9cFcwW6sUet6N+)3wS%dy`2xXAa z*NFCqNtqBuv8jse`HcB)sGES#g3_`$ZDw_1vIe za4NLAfP_}lCsidaBw*NNCmA zu$`%;BrK@wxK&<~T1LWxycQ-~Ld!|$J|${{TWAFd-RIUUfME77k+8*% zhJ@Mo8s;f_EeUHZH>RT{DK`mI?b>o&kkC33Dhz8g3xWl$C*g+4T(RF0+CaiXp;u&~ zF0_$^speMj?1@bzwdK}K;=s)$^yN&=amm0fB=zX{`HUg7m4w;reb-w;+enywzuz64 z>UI(?N1AQ3E~(c@_(=Ka$2Jhmeg_HNcWqSU652^Z(WA=sG=z4MF#G(Y{tyg&orG4C zmh>U*CSm7f*Zz@{c!Lyg^ZWhL2GW}(JSX(ccU*F=w@6q}&(lW@p|?pWdUSu!mfJ(Z z<>=hIyC$inC!qX&e{{qsxB-Q;78Fop% zM?!_!vpPYr>;sB|)SHLY!ykAF9b^g>CfSD=LhqAM;qYTCOrb+0^wqzzI74uQKhD8 zk~+y0`pSqoUFb} zsL;l&T^o70^|_2A;eK}0eQ|=rIyRc1JAB@B4&vPL9sxWdr z&-DdU=stXXlqsnTOrgT`CZ31rMW%4k0}4tFg~Ez>r7%NHn;E=$}cbFk#=~BB5duo^pNN5s2RJqN$Md9m$s8v zDMRQtlA7v9KbO!W60UY~bcQMPJE@n=?EmgPL+CLHw?b~U&vl_cNT@L9g6SjqFYvm^;chkP-{OH$7$k_t1dWJ{c)_MbjSszgGCX;nR+3@ei`uQq9uj1uaiRUx6(f!jZF2~{Ow61fd)TSC=HxVO_g zOx`WzMN-|zA9o2=Ct;I2qT7>dkWgXlh3N?4JJuwv!zC{OM)3T8D%RGs>pwlB&yrXhM(aY6;b23d`;{zMfmCK2vDbImYuM z-GGFra_24U&qzg47sb5KMnoep=!W#SBwYw$NL{X6X;Z54}&yqBzu)m@P z^w%WSlqs~Dcs#vWs2Nk(Oac2Aa$s{3$}zs|;gVDf4#cI+PPwfKwPXr?8E@zi6y1s` zJgf}+ZPIfjT%o*V&*QN*2V#xE2XC;|HY9a#KiQ>DHao8^N$o)D$r zZ>H4jb1x%=f$d3Hc1YGZrhG^!I!8NbN~!}1ljy(aO*Y|6LecH^P4SgfM-qxoi~J!- zsFNZoId6$=7~E;BCDe8mqk?@UW#hT9?;YQjVE2QWLWS{T zKhh)>$P_A!XflH|gefdYU;c?pQbU=-<#42rvxJ5*g$lbj`$7{MPC_}3ugZ`{a3Ct| z|I8XwQX@$yI;X(%=U{?35NjOKGSrY%FiAc5Hs+H;NT@LUVWcLhP!gUd0p;#OP;?jx z-4A~w$t@KAw{zt+%`k*Ukd8*f}qd z&{xQo#2}&RBusTsjOQm0GZaOrzkU(C%UhS!Os25Lq0>Hd3(X>-iQYvGcMHuXVO~SR zvkjp+But|H!pEe!iXzmXmrE>K<&xAqrtmuo|GA|tq4`X$!<(&6A)3&OB9-Yh0)(UcDQNPO-SgMNFyZ>bY4iNfnY%^oSY0me67j#2WQi#zJteB_zzg z?~^l3EhXWi4gGzKm!y`F(5kVfq(f*qN!<#5n_NOGNa$<8FKbCJk~*Lgf&LJe!o~~HAxjcWtS%O3JE`s?3jI*^r|A&z1h5izb>gY zOkvsK&&QJ1lCYqtnNCAeZVto^6Bn^k6I#a<78K<_(j~N>DO{oKV?XLb8%Vf9@wkF6A z>m*bd+H3>_J7+fu+axghs3!CV3CkXtm+mF>CP_^qX{jmn771${(Ao2%^EL?;ma=Ns zmDC_KsWVAPMF4-kfF%z0ZNTLTQfqq(dZJj@bSu zElHUii0(VqtD_5jK*EAL7n-Qi|DhrD2?@*gd2Nv? zbb^F(0xp;2cRa~+;kL?%{gtQxlqqbJkv(p4;Ac!>1NdHTsmr-ek+5@uN%V% zh`N+x3Y}&O3mP?Hk1lkEq#kK4PPv87lCZ{@F=I@j&v`EN6+N|&CUlO3pPRIF?1iBF z^CWDO#&NB6p)W|-Oui2by@W21u;{UqT{L_;k+Jj zpn4rje9n|}J!A?+2b?U@g??iS7524FAUz_XoTz~(G)etV!c?m?J7NhvCgs@tZm#uo z{|5;b4(`;R1OFtc3Wv-iJt3j5QG=@Ja;_4kpKiJEnGU8(DoVrO(lm#C{M{g-$|RKIf2tk?3#vlG!@YX_ zzPeCVl3L^SBc@O_5}F8eJ?{|mBH=oQrF-7ERVU%DwI!@6l2i>6)>vOoNZs#xmaQ>`CqTR5o@aDZ5-J=%=bk3#YDPkZ!-n_UE!3QZH}j(>xhKs3?&z}JS54^voU(7oN3PzMsq zX`b~R$(Mw3q6^mYYIo$hP;|hy_e>esiG+>WcXOm6)R}~3M|a%MR2P!kCY3+rxwSEjRGOB3-CEQ@FPSogZjIJ($8zG3uvTyh1%mfi}N0(>yjMbBV;>Tl2xxa#7wSvG8lwv>Q>Y(lhV9U|6Fm2$9|`5y%<+Yi z(iP>Xm!|M*9W5b$rqHTiif8BaX9|5KZ@Z2VCNY4d`daajG>`*PPEfVybV&s;g>ph_ zyvNial6sm%N4X?r<3Oy@@5*hr&|nhQ7@zyACKO1*HtBJ1FfYdt5{hoy`HU&4p^9?U z-{0=t`!;D9Q&>>P=9P6x4JTo$;fv-nHG-td*}R}wQX_dT%s%GhOD>@x68Z}L-t#mG zCZYS_!bu3BoDh<_hk74&3x$&K(-oWF>>!~q5=&OVBS(|ccfk>4>|QJVUjE>R7`d9KkUJSSRB9*DDJ z_AwlYSB2-|>bittNhqh=r!Q$jaU@)hj{9da6;HyvI(=Bjl9WNhZ*@l!T*LyzcWRP(B?1Da~q%swaRj)8%6*_ZZ7E>sv`RYSV zWs`7k|7=}kDu;x=+O=9_l~A+KC1H(&2Ua6FNSId}`#qAAq;9JzD_k-#kAxeh+Qg0y zp?pPS)sH_S8r9{%F-)Oo-x`0Ik{V0G1{l7#M3K-q5|&**{CQuY@gyueVPk?@Xo8}# z>Nyb?+L)<{OyL$C`1^L!B&JYK@X5QD41As`ygokr;Kn|o$t0|?rFq&VR6s(71Ds)| z&=eBp)nWB82>P0;XsmjD?D<1mOUOl1kD-sV-9pni5X)}2_5lO~Um(q}`JLQ9+!UHl zLWP~SH*gEhAff2k?6!u`Oht0FqnEeUg=Ue^M98TeO=va;qOU>aXOreIrQV#Ln4n8) zE>q}Budv<{nn%L2`&~$ZV5;*uP%UWtV_oP)5_a^!mGcat1ssT0L&A<}LJLV)cAxjV zSwf3A5Pb!1SnLuiWD3jf*2U!(T1>*mY`u6jQ%g7y+az-8Pnx8bGNpE*F%W{OE@KK; zJ9Kr&Vxi?sVc_6z8f!u;m_lD+!#;Kiy~Grn@b5RENN6Qf=&R-4EvC@ROre|+W0x30 ztC+$KALc2(qM6;~{y3p$+ENFmjza_Mr zge@>~O_3q=1_`akY}mupnYQ1+H@ly-mWoLi?{Ug!XVCmK_@N znI^QCgxQbw=}6i~!t9$>ehVQKy`O|~Ivw`Bw7x^aFSBy{zu}V9yCjsO2W{cN_Y~!* zf2AlU{0FzB4lsqy)O7vxq=O`ElPC3)L$CqPl2G)huvHGB&q?Z`rvL61I!8iz$t>#YfHYN2fQ`ld%>jaa&BVmnE?*+Rh z^*srF*}lCBL4`k%@XGCz_5~O8BMB9TjcBMz>WZSt>JJ?{0zBPcC7~SW2R|5+`iZ2L z-K7)NW|d&pSAU^fO6KqWgMH1{NzCtA4Z4y`|@q+8xpoo8SGw-%Lr}_893g3Gd3YKWVN@>JLR@)klN)(tCo0{v@IMF5k>x z>In(^-gm+E36d&NMy@vYL{!h-mQYEOD(8#Cn$Ro*X_6|-6#5!++F+_2Q&^Cr!s|atsyqolPIX-Wh2>NrsSR*46d~-d ziX>F%xVT3XszkzO$~oSQRGFkI9Fn3-stO7B(3t80rchOqdIHp5&hJ=_gmPl$9N<7N z64sdCaGjS7tWH8Xc`M&>3DqE}1(oim3DqRwa^(FMz=5?$c#j-%X0;)yXGvIgR=4>< zLbXZQIgZvz99V~>ZqYMN4y;SU<#6h6YBI1M32V%M#>XvGpM)mzD`mTc8jx@~@++hl z2{lwCn<=8i`?^pgrqD!m$SerDZ_E@Z_65%-Z^9Isa8`COrIAzvI%W83;F9~aO+?#Josv}9QapXBesFR`@@`6A36-%fyQ)>2~_hPCG z39aU?iFZk=D+#lAUJhld8wqQSc{5X!RCkiv(R+Gw_B}{ys!cN8lIlrP8`J9v2lgVN ziP2ZTa!IN;NnJGkAX9xvvY^t2r1~nFp*|ZL?j#8IS3jmOuh?a&rjQ>=wOV!#=cSX> zygEOtNy?w3*7$M@OQ=5yO*nq=GKB^xnxWpVWIf~gz3xB~o&c#vDVL-INdEZqGR+4S z3Jv19u)h+s7rKRPBrGUzO)EoaFbCodlK0H}E}=lCu%M{jCm>kk5T@`*i<}(5)KI3> ztuWw>A*o>`wdGoS{_Y!uttl`c>Y9a~UXY}r= z2~8r+$By3Hk4-#J!UHC2;zO6DCX;YEs;>V{7b+m((q=4bZ3#^wsqH(*M-!S#LWS|= zUULh%NSJ+>KAz8f(?}>MY~Bo}ULc{>gsRVQUeigqA3N>*Sd(+jAmMUkzPLmenn_aK zFPhENEE1k3xnC@EOKLU=t)`@XuM5o~p~9R;^O>4ULKD&7=OKh$IFE!1gEP}~q4|pD z%S+P&Gf3z~rm&-jCN?#M7Ld?{BfWx4XdwxG(Hu7AUYD=fnCA5htl#_eH^ZeS(6qcQEXQd^nEhP02o$o1n zD+i+Jw5$1sq_#1IR-JR}`U-7l3X~l;f~nV-LeZ%MI+1pea1Z(BZ*$4Oog`G4`}8k7 z?;@eXh+j8)N$PbH-jaFWx0^z{NoX}=)g=fje1oL6+-D({(3>PY0XoI0&rwLdrD%rw z`Iqx}peFP-2}Os@JKz%9!-2SKYn^||6xz!ay6;f3>~5ibOkqJSQarnGKT{|=DfosV zsdt!Ct+w+#C*CFDRUvn2x+SUiNVsV2cf10@R1c7Fg)$C%_SZoY{$A3EwfVYl z2}KW^)YBz&RFSlrRe3!G=Q_p|u29yYDVESjBsGbpX>Os9Nm#b8)<_dNPQuPfU+Q`D z@Cj)Keh@#vWl8D;30J81W{U$)lCW2`t)9|lX3<*sn-wZKIsAZr1+qv?#_jC(=PQq(i*ITQZI!8kH z&XK20Nu4KQuhyS1!4mp{gv$|iFk|- zq`oCB!9UYE|4mcqJ4H*>i%wSSqngn7Orh1#i}Ng@A4q65^F*v$=tmNo2=Cyd3tb^$ z*;$*@nYv0+%YHV%kkn5k6rDTmcTMOT2^D7lp63#}PQtRY_b#@CZYWx!K6hj^Usxz~ zlPUC-(D-Xp=oV9${peB^At?Gb2}L_f8*_wyCSln*(E+AVF$w$LZ%mq(&>fQ66Q}0& z5W1^qzWO^jenSloyvG!p2>m?MS5m()r5?3qy$qpWNmygn_2wLSp99gVbMp(9q#lsa zmt)mhUFe~r`RYZ-8TO`I=rHx$ul``u$I)&|{`>*Om#I z;uiXYDcn{a<64vcB=y2COOFN`l6peIEo#-M070uI%F5+Xt=6+?LM2IP)%o)-?!sqC zC?~V|KwVO$NGN*X1Rn^_Rhp!Ve#iY#s0>Lx<@)3m36)hO-FpozUMW0!YizWHDv(f4$`zX-RFQ;MQ`i2=R3)AZO$4XyaY?E&36~=ywn!7ILc(qJOz?GG zs458yYJ99@p-?pvc45-=O{S2SqWS7?BqvSF(S@r2?OaXt+q;EokkCY4?Q*QJCJFOu z-sNYeYLU=tLdXDL8Tc$obzgVBAyiw@eD%jdb8AOwLUowJo~S!K#Vu5qgrXh0c9}x; zNN6?w{qioM`aBnY6nr)07q?IYlDb8YJtQ?Gq1E)Mp2tulo(mPGj6YW>0~?dDpte1? zx`djL)bqaH=a!I0!ZW&d*Rc?6lcpqfTg6^Ag_@D@T3h~@DgvqIBy8XAuf6IPYC%$` zfB&W?)RLt7D(=rzD-ycTT={;nq@E*Ts=fm}ZvtDBFt7Ty2fC!%kZ?KDrsVKkZAoY~ zckS6ANwp(k10-B%OfKpnmo-V+V6fP|Zc$<>aNhl}hw>=PiM}I}D)GJKd zpNDjz{!FRvceh|_00~8hr}Q)>HIM_*M0)Z=ODKRToGX2&OA{Kz6v|0>voZwV(Z&?k z*k`dnX)sAWSFgOUNh**7vBuo8g)X5XBy92l!R<|f>I%<$6G?EmE9~b2;V=73|67~EVw6s{4R4`MxJNoor=@trM3Pn4I z?jwaVg$kpOY(xn23S$b_F?)BeE)>ob%CQeV;T9Uj6pHSYSWu(D_aK;RtfD3AvxWS&E!6Yz+HO9Vw+mciw3FX)>zpD!+aUjac zTBl>VvT)PdEU#Vl5o*R1pTH-DvgBOeZblIx{#fO3P(*T=@v>? zv_$>tuin@~2$r3}6q*=Ow8kZrNkWCrla1X%StL{#Hu?-x*(A)XN$lh9XsnI|rxF&v1? z5m`3TEi{&di`F~0p(Zqrgf(`Zv)mFIPeM6K)8B9jO(3Dw(C=P$3r!?pjlo}U(S#@hNR|^aD_(9D`N@GC!y%* zk4Bq9FOt;kZ(Mf^Eg)g9MqQY#2`wbyJ$d@?uUkTkNZ1oeJw9WqP|-T|(&T?6(L3KAnu$f*_v<^Qw z({mGcGxaJ{C_2$Q#FEq+5@zqS_Bv@T2cn$8ucsk|bGb?Cc7O95O=uklqSdtY?UvAb z5-x{r#W7Q80|}QSq1P=jzq;`=|bduFy6MCJ5zDA82N!m?9UyjI^ElIsW!h-r5$02C-O+~BJ54+N%`hS0k_7b=X;v{^#$F@?=!d!xBa=l}`ZH@L<^U!j8}l#?}Sbdb>d zBvcr5Q?rB)k??R&=+ws)GD)Z~af|6C^Z^O8A67ro68eyYCZf*v(}WI_P;~CP1*Xsu zMXS^&os@z_y3kP)icVe^PddhdXd=nA86lMO5eZHBpDHqiKITBQ>KwD)Ep(iO?jws| za0z|FftZ(3P=a)VgxTB5wKOGll7uxTgw<#2Qxf_LIe5-3sn19#C*sy`y3i>S?%Hxa zYLki-$tI6KA8bkLG*h@7Z9mO$37sL~qD2I(bqk#(p|709o0$5XgpYxxyFTD`JV#PH zCwr111J5gxy_)&m3QOntLsAwAyRh{t zms{vt627B;?n9=&Bca0D7d;!`dlD{(@#t$!2L3=ot1*5ZIPgajTFo0e8zIc=3JDbs zys}ysx=K=0{ce*b^b-kpTFR-Tq-&(D_{5sjP?OYk5}L@|b%kCX$_-G=fw+!d)pQQLL+Xrw7xK&o zO9tL0VcE{pF48@o3-cObe@~axFC<)!sF^ceLcek#D$Lr{0D`{mGo{LjzhVhJAffx< zjTwf}LlUlI>b3?<{l;_Q^yzEYGWCdrWshiFPM3kdb0CU#%zcvsACvG<@O}RXQ-6?9 z;pmu&h7A0ZgzmG4hr5KHkg&$ctxYwd66H|zI`xyllqtuGgi0#fs{T8hL*8m+2|Yu? z{u;D%r72X3YvX<&0`Oid3G2 z3KOS!9tssm=-wI8ovDf>RA@hO$SvopL{j&5zvnff%8J(E!;c=ht+6gtg@jg9H?A~< zs*=!Z!rCa8P&J+l3yNR$L=*BN;qK_a>LpXCItQZY-2Rykp&CqKjgfD^4Z$|4Nm5&G zbA3&y772URb|`_VXGth}!1=f!N!3;)S12PfLl>&U6xJA4zN;lvmxLx#S56|;BcZQh zy}mFcRiA{Sqbhe~ssTwYX#6^aFx7@6bf0iGOc!cILK7)J`x-)x6|Gb60m2GaYeG#( zC^{nex=TnSp`6r1XWT+fc`lUGd5>qCG$Ucz&rSNAspcGrE0q2GV3!PR!4#GqymFu+ z)RKe>gWf($YDH38&bnzy>N!PHVRn=Lq}EJfL7}4_b6^`1nh5>iKCfe2lDcazF4yH; z?MP@fb>K9&kT(h4CoE_RL51x}sBl2P9G8#}39}D95o!r_AmM%tbL?lzSCO>Zf7A}Q zq&hN%a(Y*vq6>9m3Pp!zb}@xIGv#eNRGg9K66(SfDopzPteaj)=Zy2~}Y~61s2KrUuE6gjRz-Scni(Itkt9e4Iq`Ct=x{QBy5R^(Wy2 zUN3)dU1$JFEj!?{AvBPL*$-*-i6#_4QV-E2A77zCq;=Q;)t@aEvXQXHjP+Fwp}{0v zp@g~dE}=jYzGGg}_oN{ttZ{f%&!2oAO2Q-te~^rESmUt22EOL`oz8F)nuyt*r%7rA z3Cnh7`M88elGH^@3E++nB4J*+HRtJ)3MOGexx>~NLLnq9DErH>BB4-{+N=I$nF=G} zJEnJCZ%QhhgzuR7`74&tC=yN|*SnG?6hXoyvJM_%Dw2fnnCH92Evcx#ohxH`JqVhJ zCaE3$YY$6k^xw{v-MJ-GF@HN(=5rkiB^67;B*I?qZ3xAYFjafx_m)sR38&AwG2IX{ zNSJEUtI4~C68<`ucd{vzNW$zL?~K)jk`(d3Rvzdugpx_P`Gy`CZV9E3(CVn-MQ))~ z5^k%6?dJ`lG!h;iqcojlC#lWUd$g~l(n)F({hPUjGDz4a;k){2LYX9Nxws@Z1g&O~ z{Bf=xPjsPd5^k$3FBb%<91`9}8KIjHRsR@lC^};TkwA~OIOTtCVZPU{wG>(J{gC<-hjVGylyT>v^QWHq1 z(CCvun)p}B-31}6aS{nlIJFN=q320>pA)vDz%4YHgxLr8Z|M>$AYl^G#hWalDI{DD zXCD)S(@!N~jYhTi3?UZ@^NP!V!4jHALaT|3ekZ*^!bQu8Ii*QzItiCHaeo{)zzmYw z6CrCja3%>Argt9AfwM@sw7K!sO*z+WlDb0k8Zb47gsbg1S<@w{xg>P&tb9WknnzME z0a35Ih31pgW@>tjsTWBoXLOuYfqwy?gbHn`u^5MP7Lw3J`m1|1p+zKguYGnPNT`s6 z*&F*0Gqsq6qO*?QMF{6wLP9x_dxn`pOG&6O@%}i{G7^f;x&D<~Qp-trP9(fv!V+3R z!WxH9{8ATsiG&3OH1^DXB?+^S+4UG9OyXq{UbmyGbctPOH*hK2}L{3%+!U}lF(P#KQBWt&`m;L_KcpI&^i*9ZJ*P~ zEwrAbHdAs(2nKE-p^3yi&(n7!N$uz^gA7S+BH>M7_g0=aTboJPIpL)WbV+R?p?gR4 zMhH&7mGm~=P@Y`J)HX%(ACM3F!t-$7&J_B}s}jx)@ETJ%ePU)V&$WXoRG4e`ye-&C zQso@(?UL`fi-d9pUd^+FUMHc|oL#Yo&~6g?O8s7*eE9QUBs5`oJuoHpCJD<9NLc{E zg5Dyb)%1oBEuptbXf?UQMqOx+BDF?6c^O`xSxc+jAvGn z-XW>y{g98`CDbI|RpgC7_ozoU>1PVP$CRqDbSI_`kksvd{AFEI2T5omulb`Qq4!B@ z15{e)5IRJ{CwyHS#et?GZ~SvPddmC=Q&Jz0a4RHiuI>{0kc7*T_IRTvbeM#BrGJp% z7CJ)0zK`)b=Mp+f!p%2w=44ao7zyPBRq4vqMjA-ksPlKPm0q6aq_#nf>{E$pZ; z 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

9*{+Y>PyBhjmO3WY3{6s>GldGnA6_+3>akiC-F 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 at random and plays the best one. Change `pick_frac` to make it see more moves.", + "_help_left": "Plays top move if policy value is above `pick_override` to avoid obvious mistakes." + }, + "P+Local": {"pick_override": 0.95, "stddev": 1.5, "pick_n":15, "pick_frac": 0.0, + "_help_right": "Samples `pick_n + pick_frac * ` near the last move and plays the best one.", + "_help_left": "Lower `stddev` makes it prefer closer moves." + }, + "P+Tenuki": {"pick_override": 0.95, "stddev": 10, "pick_n":5, "pick_frac": 0.25, + "_help_right": "Samples `pick_n + pick_frac * ` away from the last move and plays the best one.", + "_help_left": "Increase `stddev` makes it prefer moves further away." + }, + "P+Influence": {"pick_override": 0.95, "pick_n":5, "pick_frac": 0.4,"line_weight": 10, + "_help_right": "Samples `pick_n + pick_frac * ` and plays the best one, biased towards the center.", + "_help_left": "Increase `line_weight` to penalize moves near the edge more." + }, + "P+Territory": {"pick_override": 0.95, "pick_n":5, "pick_frac": 0.4,"line_weight": 10, + "_help_right": "Samples `pick_n + pick_frac * ` and plays the best one, biased towards the edge.", + "_help_left": "Increase `line_weight` to penalize moves closer to the center more." + } }, "board_ui": { "starpoint_size": 0.1, diff --git a/gui/kivyutils.py b/gui/kivyutils.py index 96cebb3..2596411 100644 --- a/gui/kivyutils.py +++ b/gui/kivyutils.py @@ -24,6 +24,8 @@ class DarkLabel(Label): class ScaledLightLabel(DarkLabel): pass +class LightHelpLabel(ScaledLightLabel): + pass class StyledButton(Button): button_color = ListProperty([]) diff --git a/gui/popups.py b/gui/popups.py index d7d88e9..265b499 100644 --- a/gui/popups.py +++ b/gui/popups.py @@ -8,7 +8,7 @@ from kivy.uix.label import Label from common import OUTPUT_DEBUG, OUTPUT_ERROR from engine import KataGoEngine from game import Game, GameNode -from gui.kivyutils import LabelledCheckBox, LabelledFloatInput, LabelledIntInput, LabelledObjectInputArea, LabelledSpinner, LabelledTextInput, ScaledLightLabel, StyledButton +from gui.kivyutils import LabelledCheckBox, LabelledFloatInput, LabelledIntInput, LabelledObjectInputArea, LabelledSpinner, LabelledTextInput, ScaledLightLabel, StyledButton, LightHelpLabel class InputParseError(Exception): @@ -16,8 +16,8 @@ class InputParseError(Exception): class QuickConfigGui(BoxLayout): - def __init__(self, katrain, popup, initial_values=None): - super().__init__() + def __init__(self, katrain, popup, initial_values=None,**kwargs): + super().__init__(**kwargs) self.katrain = katrain self.popup = popup if initial_values: @@ -65,7 +65,7 @@ class LoadSGFPopup(BoxLayout): class NewGamePopup(QuickConfigGui): def __init__(self, katrain, popup, properties, **kwargs): properties["RU"] = KataGoEngine.get_rules(katrain.game.root) - super().__init__(katrain, popup, properties) + super().__init__(katrain, popup, properties,**kwargs) self.rules_spinner.values = list(set(self.katrain.engine.RULESETS.values())) self.rules_spinner.text = properties["RU"] @@ -82,11 +82,11 @@ class NewGamePopup(QuickConfigGui): class ConfigPopup(QuickConfigGui): - def __init__(self, katrain, popup, config, ignore_cats): + def __init__(self, katrain, popup, config, ignore_cats,**kwargs): self.config = config self.ignore_cats = ignore_cats self.orientation = "vertical" - super().__init__(katrain, popup) + super().__init__(katrain, popup,**kwargs) Clock.schedule_once(self._build, 0) def _build(self, _): @@ -161,23 +161,50 @@ class ConfigPopup(QuickConfigGui): class ConfigAIPopup(QuickConfigGui): def __init__(self, katrain, popup, ai_modes, **kwargs): + super().__init__(katrain, popup, katrain.ai_settings, **kwargs) self.settings = self.katrain.ai_settings - super().__init__(katrain, popup, self.settings, **kwargs) self.ai_modes = ai_modes Clock.schedule_once(self._build, 0) + self.orientation ='vertical' - def _build(self): + def _build(self,_dt): + colbox = BoxLayout(spacing=5) for mode in self.ai_modes: mode_settings = self.settings[mode] - column = GridLayout(rows=2 + len(mode_settings), columns=2, size_hint=(0.5, 1)) - column.add_widget(ScaledLightLabel(text=f"Settings for AI {mode}", bold=True)) + num_rows = len(mode_settings) - 2 + column = GridLayout(cols=2, rows=max(num_rows,4) + 3,spacing=1,padding=3) + column.add_widget(ScaledLightLabel(text=f"Settings for AI")) + column.add_widget(ScaledLightLabel(text=f"{mode}", bold=True)) + column.add_widget(LightHelpLabel(size_hint=(1,3),text=mode_settings.get('_help_left',''))) + column.add_widget(LightHelpLabel(size_hint=(1,3),text=mode_settings.get('_help_right', ''))) for k, v in mode_settings.items(): - column.add_widget(ScaledLightLabel(text=f"{k}")) - column.add_widget(ConfigPopup.type_to_widget_class(v)(text=str(v), input_property=f"{mode}/{k}")) + if not k.startswith("_"): + column.add_widget(ScaledLightLabel(text=f"{k}")) + column.add_widget(ConfigPopup.type_to_widget_class(v)(text=str(v), input_property=f"{mode}/{k}")) + for _ in range(4 - num_rows): + column.add_widget(ScaledLightLabel(text=f"")) + column.add_widget(ScaledLightLabel(text=f"")) + colbox.add_widget(column) + if len(self.ai_modes)==1: + colbox.add_widget(ScaledLightLabel(text=f"")) + bl = BoxLayout(size_hint=(1,0.2),spacing=2) + bl.add_widget(StyledButton(text=f"Apply", on_press=lambda _: self.update_config(False))) + bl.add_widget(StyledButton(text=f"Apply and Save", on_press=lambda _: self.update_config(True))) + self.add_widget(colbox) + self.add_widget(bl) - column.add_widget(Label(text=f"Settings for AI {mode}", bold=True)) + def update_config(self, save_to_file=False): + try: + for k, v in self.collect_properties(self).items(): + k1, k2 = k.split("/") + print(k1,k2,v,self.settings[k1][k2]) + if self.settings[k1][k2] != v: + self.katrain.log(f"Updating setting {k} = {v}", OUTPUT_DEBUG) - self.add_widget(column) + self.popup.dismiss() + except InputParseError as e: + self.info_label.text = str(e) + self.katrain.log(e, OUTPUT_ERROR) + return - def on_submit(self): self.popup.dismiss() diff --git a/katrain.kv b/katrain.kv index 9587ff6..62d1e39 100644 --- a/katrain.kv +++ b/katrain.kv @@ -1,8 +1,6 @@ #:kivy 1.11.0 #:import ew kivy.uix.effectwidget - -#:set AI_MODES ['Default','Balance','Jigo','Policy','P+Pick','P+Local','P+Tenuki','P+Territory','P+Influence','P+Noise',''] #:set PLAYER_MODES ['Human', 'Teach','AI:'] #:set PLAYER_MODE_VALUES ['human','human+undo','ai'] #:set BUTTON_COLOR [0.23, 0.30, 0.35, 1] @@ -91,6 +89,12 @@ color: WHITE font_size: 0.45*self.size[1] +: + font_size: self.size[1]/10 + halign: 'center' + valign: 'center' + multiline: True + font_size: 0.2*self.size[1] @@ -478,7 +482,7 @@ StyledButton: text: 'Configure AIs' on_press: root.configure_ais() - size_hint: 0.45,1 + size_hint: 0.44,1 Label: size_hint: None,1 width: 3 @@ -657,21 +661,13 @@ input_property: 'RU' id: rules_spinner Label: - ScaledLightLabel: - font_size: self.size[1]/8 + LightHelpLabel: text: "Use x:y (e.g. 19:9) to play on a non-square board." size_hint: 1,2 - halign: 'center' - valign: 'center' - multiline: True text_size: self.width-6, None id: info - ScaledLightLabel: + LightHelpLabel: text: "Note that handicaps above 9 are not supported on non-square boards." - font_size: self.size[1]/8 - halign: 'center' - valign: 'center' - multiline: True text_size: self.width-6, None id: info StyledButton: diff --git a/katrain.py b/katrain.py index 88a84d7..e9f3e2d 100644 --- a/katrain.py +++ b/katrain.py @@ -193,7 +193,7 @@ class KaTrainGui(BoxLayout): def _do_config_popup(self): config_popup = Popup(title="Edit Settings", size_hint=(0.9, 0.9)) - popup_contents = ConfigPopup(self, config_popup, dict(self._config), ignore_cats=("board_ui")) + popup_contents = ConfigPopup(self, config_popup, dict(self._config), ignore_cats=("board_ui","ai")) config_popup.add_widget(popup_contents) config_popup.open() diff --git a/selfplay.py b/selfplay.py index 4602cb8..5851246 100644 --- a/selfplay.py +++ b/selfplay.py @@ -45,7 +45,7 @@ class AI: "pick_n": 10, "pick_frac": 0.2, "local_stddev": 10, - "line_weight": 0.1, + "line_weight": 10, "pick_override": 0.95, } IGNORE_SETTINGS_IN_TAG = {"threads", "enable_ownership", "katago"} # katago for switching from/to bs version @@ -133,8 +133,8 @@ test_ais = [ AI("P+Pick", {"pick_frac": 0.5, "pick_n": 0}), AI("P+Influence", {"pick_frac": 0.2, "pick_n": 20}), AI("P+Territory", {"pick_frac": 0.2, "pick_n": 20}), - AI("P+Influence", {"pick_frac": 0.33, "line_weight": 0.05}), - AI("P+Territory", {"pick_frac": 0.33, "line_weight": 0.05}), + AI("P+Influence", {"pick_frac": 0.33, "line_weight": 20}), + AI("P+Territory", {"pick_frac": 0.33, "line_weight": 20}), AI("P+Pick", {"pick_frac": 0.0, "pick_n": 1}), AI("P+Tenuki", {"local_stddev": 20}), AI("P+Tenuki", {"local_stddev": 10}), @@ -145,6 +145,17 @@ test_ais = [ AI("P+Local", {"local_stddev": 1, "pick_frac": 0.0, "pick_n": 20}), ] +test_ais = [ + AI("Policy", {}), + AI("P+Weighted", {'pick_override':1.0}), + AI("P+Noise", {"noise_strength": 0.6}), + AI("P+Noise", {"noise_strength": 0.7}), + AI("P+Noise", {"noise_strength": 0.8}), + AI("P+Noise", {"noise_strength": 0.9}), +] + + + # test_ais = [ # AI("Policy", {}), # AI("P+Noise", {"noise_strength": 0.4}),