From db37db819c72a425f0fc63e87aa9b6109b668d13 Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Sun, 12 Jan 2025 08:51:35 -0500 Subject: [PATCH 01/12] make minimal processing work again for my detachable terminal emulator --- terminal.d | 65 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/terminal.d b/terminal.d index 845f542..c1613d9 100644 --- a/terminal.d +++ b/terminal.d @@ -559,7 +559,7 @@ enum ConsoleOutputType { cellular = 1, /// or do you want access to the terminal screen as a grid of characters? //truncatedCellular = 3, /// cellular, but instead of wrapping output to the next line automatically, it will truncate at the edges - minimalProcessing = 255, /// do the least possible work, skips most construction and desturction tasks. Only use if you know what you're doing here + minimalProcessing = 255, /// do the least possible work, skips most construction and destruction tasks, does not query terminal in any way in favor of making assumptions about it. Only use if you know what you're doing here } alias ConsoleOutputMode = ConsoleOutputType; @@ -719,7 +719,7 @@ struct Terminal { return false; // we're not writing to a terminal at all! - if(!usingDirectEmulator) + if(!usingDirectEmulator && type != ConsoleOutputType.minimalProcessing) if(!stdoutIsTerminal || !stdinIsTerminal) return false; @@ -728,7 +728,7 @@ struct Terminal { version(TerminalDirectToEmulator) auto term = "xterm"; else - auto term = environment.get("TERM"); + auto term = type == ConsoleOutputType.minimalProcessing ? "xterm" : environment.get("TERM"); foreach(t; terms) if(indexOf(term, t) != -1) @@ -900,7 +900,7 @@ struct Terminal { // Looks up a termcap item and tries to execute it. Returns false on failure bool doTermcap(T...)(string key, T t) { - if(!usingDirectEmulator && !stdoutIsTerminal) + if(!usingDirectEmulator && type != ConsoleOutputType.minimalProcessing && !stdoutIsTerminal) return false; import std.conv; @@ -1041,6 +1041,7 @@ struct Terminal { private bool tcapsRequested; uint tcaps() const { + if(type != ConsoleOutputType.minimalProcessing) if(!tcapsRequested) { Terminal* mutable = cast(Terminal*) &this; version(Posix) @@ -1453,7 +1454,7 @@ struct Terminal { this.type = type; if(type == ConsoleOutputType.minimalProcessing) { - readTermcap(); + readTermcap("xterm"); _suppressDestruction = true; return; } @@ -1468,6 +1469,7 @@ struct Terminal { goCellular(); } + if(type != ConsoleOutputType.minimalProcessing) if(terminalInFamily("xterm", "rxvt", "screen", "tmux")) { writeStringRaw("\033[22;0t"); // save window title on a stack (support seems spotty, but it doesn't hurt to have it) } @@ -1475,7 +1477,7 @@ struct Terminal { } private void goCellular() { - if(!usingDirectEmulator && !Terminal.stdoutIsTerminal) + if(!usingDirectEmulator && !Terminal.stdoutIsTerminal && type != ConsoleOutputType.minimalProcessing) throw new Exception("Cannot go to cellular mode with redirected output"); if(UseVtSequences) { @@ -1737,7 +1739,7 @@ http://msdn.microsoft.com/en-us/library/windows/desktop/ms683193%28v=vs.85%29.as /// Changes the current color. See enum [Color] for the values and note colors can be [arsd.docs.general_concepts#bitmasks|bitwise-or] combined with [Bright]. void color(int foreground, int background, ForceOption force = ForceOption.automatic, bool reverseVideo = false) { - if(!usingDirectEmulator && !stdoutIsTerminal) + if(!usingDirectEmulator && !stdoutIsTerminal && type != ConsoleOutputType.minimalProcessing) return; if(force != ForceOption.neverSend) { if(UseVtSequences) { @@ -1967,7 +1969,7 @@ http://msdn.microsoft.com/en-us/library/windows/desktop/ms683193%28v=vs.85%29.as /// Returns the terminal to normal output colors void reset() { - if(!usingDirectEmulator && stdoutIsTerminal) { + if(!usingDirectEmulator && stdoutIsTerminal && type != ConsoleOutputType.minimalProcessing) { if(UseVtSequences) writeStringRaw("\033[0m"); else version(Win32Console) if(UseWin32Console) { @@ -2200,7 +2202,10 @@ http://msdn.microsoft.com/en-us/library/windows/desktop/ms683193%28v=vs.85%29.as } private int[] getSizeInternal() { - if(!usingDirectEmulator && !stdoutIsTerminal) + if(getSizeOverride) + return getSizeOverride(); + + if(!usingDirectEmulator && !stdoutIsTerminal && type != ConsoleOutputType.minimalProcessing) throw new Exception("unable to get size of non-terminal"); version(Windows) { CONSOLE_SCREEN_BUFFER_INFO info; @@ -2213,11 +2218,9 @@ http://msdn.microsoft.com/en-us/library/windows/desktop/ms683193%28v=vs.85%29.as return [cols, rows]; } else { - if(getSizeOverride is null) { - winsize w; - ioctl(0, TIOCGWINSZ, &w); - return [w.ws_col, w.ws_row]; - } else return getSizeOverride(); + winsize w; + ioctl(0, TIOCGWINSZ, &w); + return [w.ws_col, w.ws_row]; } } @@ -2315,6 +2318,34 @@ http://msdn.microsoft.com/en-us/library/windows/desktop/ms683193%28v=vs.85%29.as if(s.length == 0) return; + if(type == ConsoleOutputType.minimalProcessing) { + // need to still try to track a little, even if we can't + // talk to the terminal in minimal processing mode + auto height = this.height; + foreach(dchar ch; s) { + switch(ch) { + case '\n': + _cursorX = 0; + _cursorY++; + break; + case '\t': + int diff = 8 - (_cursorX % 8); + if(diff == 0) + diff = 8; + _cursorX += diff; + break; + default: + _cursorX++; + } + + if(_wrapAround && _cursorX > width) { + _cursorX = 0; + _cursorY++; + } + if(_cursorY == height) + _cursorY--; + } + } version(TerminalDirectToEmulator) { // this breaks up extremely long output a little as an aid to the @@ -2478,7 +2509,7 @@ http://msdn.microsoft.com/en-us/library/windows/desktop/ms683193%28v=vs.85%29.as On November 7, 2023 (dub v11.3), this function started returning stdin.readln in the event that the instance is not connected to a terminal. +/ string getline(string prompt = null, dchar echoChar = dchar.init, string prefilledData = null) { - if(!usingDirectEmulator) + if(!usingDirectEmulator && type != ConsoleOutputType.minimalProcessing) if(!stdoutIsTerminal || !stdinIsTerminal) { import std.stdio; import std.string; @@ -2532,6 +2563,8 @@ http://msdn.microsoft.com/en-us/library/windows/desktop/ms683193%28v=vs.85%29.as Added January 8, 2023 +/ void updateCursorPosition() { + if(type == ConsoleOutputType.minimalProcessing) + return; auto terminal = &this; terminal.flush(); @@ -2560,7 +2593,7 @@ http://msdn.microsoft.com/en-us/library/windows/desktop/ms683193%28v=vs.85%29.as } } private void updateCursorPosition_impl() { - if(!usingDirectEmulator) + if(!usingDirectEmulator && type != ConsoleOutputType.minimalProcessing) if(!stdinIsTerminal || !stdoutIsTerminal) throw new Exception("cannot update cursor position on non-terminal"); auto terminal = &this; From e592a3a0acd488e25f4b5e73cdc0309e63873a53 Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Sat, 8 Feb 2025 15:44:49 -0500 Subject: [PATCH 02/12] update upstream and 64 bit --- libssh2.dll | Bin 117760 -> 525312 bytes libssh2.lib | Bin 22528 -> 35648 bytes 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 libssh2.dll mode change 100644 => 100755 libssh2.lib diff --git a/libssh2.dll b/libssh2.dll old mode 100644 new mode 100755 index 5a1536241038639375bc50418d3b20219c843b26..db4ae712ad36ec0291a7cd81e7934722355610a8 GIT binary patch literal 525312 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 z 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�YsOvLt0? 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 XQAn#zfO8cncb<1w>Iyl%DM!M8* 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°x-R5Dua+&adJ5(f$;M;AiF7JX$oR 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 Gf&T}WgN@k$ literal 117760 zcmeFadtg-6wLdU$00PMax&*c-@MtzF+jct8TdA#%R%ZuPIug-caDM~ zJg3}$u%nruUv#YD=jY~gke>_x^?M4nVf85Fx7p^|vu*n}3@^0e_Sv#d&9mp(Y>VwS zTU5qwz6xP4!prfb5QVdBwj6rHpY`NOLL&ZL?EnAwzkq>7dcU%Gh26_PM*dqj*}d^D-S1LQ zP?jOO`5mK7>|AZL#df$Gw9lP(Ic_{o#9e+r8y~)cnI?U3EqDHSW0K zY5zHfO%FO_UCxVaMK+sf!`+A&-J0g#8}Cw2RW{1jE)ZA9)|!^;b;ISah*Rg z&A%IMY5uno{#_x|GuKe}8u>kpGS3}4M#E6|iLqz%P3PHlmE{Z|Cns`C+Vu+V;F0s0M{-v_JdQM2Ma@HHWsVbMYz!iT{J@J@o1XXjm?`fmOt^4-@ z(V==_Lk;M{=)6ms%DYUIzFI5WP##0^Uez!RrIjjr-?%{Ry#>(M4WokcSDKcJpPE^% z;ogPu26ccCP|C<8gfu-g=#8#OVoq^L^Si`q^iLlGHsVHfdRR9i;(m(Bt2bJF`lW7t zz<6DEgp8I#y~>TwI?!u(#Mm9%QK%n{A5?cQHB^@fGLoE4OB%N`y?OOIS0r|Gp)GN< zyW4N%sV5}-hL)QQIx)z$WY9|wJ-4kQFFHx7T8XZ`XPhVO=ow~E> zCKz*k@vi7PV`V`&Bu)<6ZH|=%=nKkwHr@zW!r})b>!=&_Yz!j-^;GNLh4uPeCos*l zbXj5i#prb1KN#u;zQV@JLa{3VitxJ}>R_y^xFIBd2yE#7f!GeT>WNoSJ!^*g#%w)| zP+yil1SSW88moLfYRY0@F&XfoL$(NL=w3{0D7thBqdG-893c9sb7_})6V>jd?Tw@F zSEgkNWk7np?l06A73eM^q_BQdQA7_E#9kPO!FIe5Tj#ZDb;Ih74IzDw)7Y)$@*ow) zF0rYTl_BPb1~G{ta5pVoLWA9H8)x_nja3B+`t^lG3vgwq{Ho$r!7GxQZ6T2$ETVbh zfTC%jC?+K>=piJn8;n z{W5ohvD}Se@uM}DzPw<**6P-)e44-T=3FMRzSg#i@#fh;4{7b}OYoLZrbQaq-Jlgo;8F*&~OW#xq=g zF!rJmnelD+Zo4;nfxgC7-qn|zc%+ysZ1W;k3xY$y_RIvJ&dGs<^GiyOZJ|OowWmqn zwzP3O$*^PSg;=E)@-ga(wK|RH7>FH=N29Ti#1pj-YK^U>l(2XO1PpA2#pOpp(NSyf(R7NOuYW7hw zk=n<6h&eInY%WC)!Bj2?wn@rzqNKwS(X28hm3K7(hUU^{TUgAQW49#&5TF-}dEA^= z@1|7AAJiXDr0ZJGI{`QS_`=CRAt6hw1Am6ad-z2osr>ceBQF)wh-)LUEd#G0vpQu& z9cC5aDJ@XcY%}ubVOqmHPJQwZYm2EM_n$%p zR2UoDqfXVw$8HYUq9+)t*HDM+#l>5>ufXfmCbGaDwzkw3 z9j85C1Z}ZtX?YhWfVQ>g*whJ-cPCO+BxvJ*Lw9Cy9`*F@j$-7!%2-vF=r{wRkhmY} zF3^$epi1z+Eyh{1)J9eYvJ+e))F94-t^lz`fKO3s*I;yP4Pw_yhIq>!5Dq|Y+z!~M zDAyx3)F9y!zm!=xRklJ4D%pxdJ*#bPl}$Z8Zm3gY&lZ7VjOe5WarX(-mXp%-q3B;? z#-8Y@`utFLpwtdRb|(V!Lg9u6sE_^-euE z*+Bu>Q;ymgn5`DXhV1GI%^;5{1l$f6b<+VFk-25{cqMuzetDi1bx*t(DSDtb+Xl!Z zA@N)Em8bJ$$9|%I{3Sbt86utUKM~Uq5l@nMh%sI#E$$kOPTwj)iRcpK8ILgHh_ znX@ubsNRG`)mi=`gb;FfWrxI0nW*nX&tgMIqbH)Inim@~qMpia(Y(G(sKiWg;01cn ztM8n)z!&Q}U}t~;s{Iav2Py?bDTGx-TuLwpYEznpj|2wK>X&0smn1u=tAws5o$J5| zPXcM!Lt!x=LJvb=;Y#PO$^yu5llY4DyPz(B$MpqXy~(YAo(S7Ja{{b3ei2(&0#-f^ zYJ?}w8e)sDUU_I0h|Aj`?i>$f$$1PMLwx2ZwWLtFUM1PkAm-mBsgLGelVQ5iHNUIb z2j)|Dp`H-aAG#Fo25q%?kw|$KvqQgaHV2KW3n!WUz!f+vm_*N&#J#dK2*h z$W4^xrx@U5Wk1yo`d`ivXf35pOPL9HMg@w_R)z@3uNuTJk%i_87NkB@PpCoeuL!%W zY*~peBoc2Vf(0S*UG$Blp)-CkS`-#ByoP}$F%uaieMWBw#QFd*vXAE?bPmIL3zb8S ztR?!&yR=}5i5lVv&@aY=haf+t!uZ)RVxSM6{|eB04b>016u8 z9BARB90m(ye&n#Bt7F35ptEBL1Dw8eB{W8Ucd7;Yol#I&Rmoaj2bf zgy~lH%ft^OC$YhW5+SkoMzo?5m!d|WZp>I-7+n++Um}|0)W0V-_&Dd|loJF*n*4c* z1qJouAuCgKA{9G1B%Zfo)W1i>f29kkugU3+$4BzY)1+BhP=qNfDZmhZlV;phSnmnm zR4A6GW7SU+^X=N5RHjMqmQx!GK#X_2oG@a~FMAc^rLXaN;yBZj^z}Gzhp-= z6c zR5$d0YJqFi8Em}~^%k1-))i=rD`Z$(Jlzb`&N2hbYYlE7(IJQbx7@5VY-}b}P_u;^ zV@gUQx8jSEB6+RIidlt2w?GWDJ7704JmXH!m%C2$qpJD zVm~=bS!%tZ7D3-M+uclq6BfV2_?k0tfl`B(A%ZWvek7hjrg_S8O6#2npk&Q*!lgDG zo;WQ66Fi6^o%_-Z6GXNnNsQRhhCHFfgG2%i%0obYSlrAUSwsS$K)Fk{`u4w#Zq*b2 z4Zzp)I_0ooKG)xHPX_5s2F+q{^W=x`WNZ2HG+s4#4>q^zDJVaxKWoUr}Uhkk@CZ4BXV9lGB zV#!=8D3L>KpOKPc6WJoIV-v_5#zKWbljI}5L=!THu^bX{I3&usQD5Rg!Y~OwNJD!= zge2mG^zhGV?m*MHtQi(GP$y+ub|U5 zYpI%zr0D6hpo>tRoVIndvw%DCVnzeMfFTDHNWeQS;Nzg2kI6W|>=kPrG!;npovdu3j96r3|0~mTN{9F^)n#f5_o16m(7~@PU9P|@)Curm zx6O_`fW>36^9_s<3*-Su0#QSbYsvctLBg9+-fF=|XtqKF9 zZ#TigC~E)$DbwnsV(LV#Y9Ew@ZS zwjKGNIwmEvmBpy0`O}D4Kcciru}mMn22vl(-_VsHe z=I@VptsA&`3WQZOUnyJ-02@S!Sut}$B1Wn@tVCHrh)MUJ_KOjh^beko0_87O*7-aM z=z5U24imh?mv^%M3Bt%QV7M}RqfCFUjiSI&y+2d5kxO0Zz9i7&@ z8L??5nK}z4erlDt9|2+(Pka+XU=F>`r!R7WMW(%^)eR;6!-%$3?p*EGcR~ZiJ7BZL z)(qRWlmcK+4NO%aO{1j@>Q}uo9dV>R*JG3cpCjO_4}p&yFNB11I@z&?U}3Tce6WS= zD5YAoI#;wXEUJMf)+5QLkycod8Ky2$Gd=OY95oE6ASWzM;~s_w#%tTUYMYEDVAa#x z)>V-nxu$;)>`qq`NP8N@gV!*DEN$W1qp<``LGEhUHbaxD(rbb@z zevVK`JPIfh9bY1h72A&(B=7~bN5sUd-Z2R-1(8xKX27^<&bm{S=ZNMh_RXugE9SzN z*S#ky`-qgkLbA5DM*Nq|K?2XdwnF#&^!XLC83GF&l%=_jG1!3KNf>TWf z`~2pyv9I<-v%%Vp+hc2sZ7t&f7NVAVYPKN?!cKdzkchnzvw-LBZEf3@Zggb`$kuBK z6(k79Ne$;Z8KDP?XLL}(RXG|z^+3tU2xBuPvnEuIGH7X9H)=YEd)85av}6Z$9sff! z;*hGCg}D1^7fHsa3t9*+`tO;&}P2=}QRc^Nr$hVraHG3Un; z?R{FJWz3$tcBN-hDWGV)%$aK=CU%=Az7xM7Tb&F+x?%2*U`VIEq`#@%u?d+Hv$0j; zO8kgG>CBo<3t{wQ+9DS;$bv+*w?WxLnhH2Jto`sV6wo^E#jj`sG^BSMo9We@&2Fc3 zUKUSQ2B_HKu(uNz)s9HNGx=pMpC5UhCr3A4o6P+W# zGwtzM+=Ex+UC&kkFCIS__5tcp#1nrG5B+73f(gGx4{Kl`p7xSbh5U)?sm)&Pjz>^J z>v$BuPKlTRQSdnZ%0zzcJLWs3!fU}>VZsmHdt*KboS)g_r=s=WK0e%-T#-oVnwq@$*U!u>=xfpz<4E2P>Q+Nk9 z8hA-gS~|}$KSnGT)g0c=;UW${&EaAW|C+-ksr<1WRR}{c8?+VHh*V%c8CcHDv39v> z9yB(aKw{1r1My_?#8jn%z=?>TUCHGvGr7qYCn<|L8P)N~tdqG+9h;T+N6^)fILHYu z`;YIC&OezLNfF#ScuYIN*~Mn@~{60%Vm`$JR% zH1^k)aIZ{wSum#OLpj*bet}6#nzb>6;AiybOmy~}2D1bNN^;AkyhZ2{0wjUKZwW_)g2LT2}mYm0`A4|@d>)4XF}dRLY?{w z!@ihU6!p_Xyp1%N^=59KYMWXR5kHsJ(W?DI)HJDWZM7{bFt>0at`MszrHHl_VQ{cw#r!m| zO+19ib&P%%>n}<38|F%Vkx$M?&fmD)_3A^3CVOXYkawnz^kr|Ih?e7T zL?`QiO3Z=EzAtg9t4YyHp9#;%R_!VZV6sbeh%Nedi_oq8W7_IF;UA<%VZ- z%|!wRhW*N3G?s9-nx1Dt<4!u;3MHDjb&7pluLTjAJ(R4D=wJV$XLb$ zhDhPzT9}Kuj<-*fb+9~t4n;#^HD`f&fC@?VlS5J=PVfNo9L(8?v-d#(=W5P0t5N2W5fjsK6*wL( z0Pp0RwnXHZ88SHn^A9go4yrkcz21o*UF8vAi=nqmmeg)tWc2V#&MC!$l zA7rcp?msmxk*tRL>dgvs$$<_dkgid0EI_5~AK^0BKhVf9SHRoB9Tr^!)Q&H5QkK5+kKeW1hEPeh{`C0Kf^@gYDk@~^9RIQov zljTixJgClCUMr?@9+xF}{^$K$$WZXY{aBoSdH4TA|9W7vIBx%boT@dmfBzI;Ltj_l zg5%bQ{U7Y5sF?p@IDq3ZTj}OZ*X*RUN3YQ5)P^JMZx|{!#H`D}H>QqL0ea8WZ%$WrZz|^$!o8I@-W@|>F+E*QeHn9&RskQVITe|v3X9*;^Ti@JRzul(ZIL!suPWvt z{Ac3_eoTuV;zucc@>zJY{5p2h(X~%A!WqYO=0Z+{fsS-$Me=qWXR?u$}))-Eb zuDMN#z+q_FdR-Bk#G2yXi_Faln*j|!0s?5Shl+GQ*sGM2+%W&1p?It3_GgQX9+q5Pb#=b+t_ zP$VQK`JlwW@@`zfKBW-j$s9BZJAhmzn1%5`d$E3B=6W2<-U3>ZLvVwWyrj)*jRO#? zBuTZ#A-!=RRKG9`r`g@ueWs-#V*9}$=hIF$a+YoFLQ}v;;_70XvC^5S8>}}jFjhH3 z;waO;4`~b3k99wWVi=mxD@#Nl0gScEt}Ue)kc=UVUGykB)VrE(q6pP~CnJq|@h~Nm zURC>33XwlBM={gFj&g9jUG)ez+?PfDe4CBa#+>vUWUb-?%+zUg5I)drU+iLAbRwJ` zUE)VrWMcd!{xCEN9vY;CgqM{^ZXILHL+sOXM&cOtVW2@PI+jk@0D#5rb1cr`IPAgM zr=?s&rq;*fQI$C!IMTC^1cHArN;lx_7wQY+^nt#nKzXDMXA%7SMGaibu*~fWiE|NR z70F$GFurGPfie9M;*IDbVBd|j0BJJ^Rtwsl5weIK(T3WCcUUi)ePmsLVL~ii02-y$ zYw@9;rm0;#Of|qG4^s+b5?^lk(eIi-1_ui&8~KZ&d66R0rK*uwcWziLrp(<=O&xR$unTTbM(FSJ z`>?nW@7N9McIw@Zqy`s6?9GYO5J~0?iG61X+^G&H`~!e!$WRAE!akRna)7sDW@+}6 z8E+{DH{})~`-+&HQ*#8 z5s)8e=LDbNN`l5p}9oE$-doySA($dwErK% zzke@`UrAdDg>#ssU`i&}t}5Exsq)fK0sRz-y*QN!qS+A=-3Z~F%ntVq)wlLUrm`K9 z%6^U%rZUyH`V))HP~v{X>*_utvkN4ZiKa`bd$dM6g&kckV9=T*!r7+srdJZ2DJa0L zqRWhuB$%eZ0O~(3{n2@nOzL~_80yQdAvm0gr9^$|_e09%7y%r8OjF)>BC+kc4dQ(o zkL|P!Kj8SFLA-`nBB|s37fQ?ljbRHEhL2BpxaKv1gdy68L19bDKSny;WKx$Yj|DgSGOo?Xc2^I(t^>TB=7@r|TFn%EH+Gt*_ItepYtZOyR zl&)B7t1X%x>rxuGkC+~JZCOTAJ|%ukc@0JCYEV%L4mCkL%hK$ic`y9Fy~e7mjaAFU z&n1)MIAma%oQpFS^CJW{!vj6Y{(I^J9B!a3XzTl5r@3>6-wgw;wtfI_);!GomtoH) z<&&JHkcFM4;EDkQ0HMuBzD06a{xMEspusZr=?_u?c#|#Kt8c##r0D1vLWEY=bHWdY z5vW|W*K_B?sAILOa+_xZ7AUrd_k%_cc-Cg`!V_L-ogD-gQ6gB?zmHPhLdr(};pV9@ zf>NZQ$i0XRkvoHbKz#NQ8YNpU3?(ISd5oT}2qe=sRr@6@d9YaqJ(Ovw)&v^%P>rF3 z;Lth@1P#^jYk+B;{^P)ZLquNqAX7G@}^dvKS%JAw&Voh5#l zXNM2QW9Y8X5p2#1!RStJcjL|2ObJRG{dm{gy&{T8bS9ZYLzf5?NH>I2nos6DGP|*v z%9Cu(%0}mhXccJek&d=9hd7h#rfjeSvG#d3^XO&uI8(lXc=a@Jpz~Roud;Ud-bbM)u+u_#rN#`8gux z2ISQ>Vj{|DF&=|l4pNXqJ{Y)5!;QFP$EViVWDO?NS(rav9ucyeFWlTlCoRY zxFJ;|mLUKVy|nd>i48eD@!Js8pP(87VeuOJV?05qVQm9emCxbWQ48KDyfxT@C4J6w!#>cLmekgOe)%s*^#xOjK z(urVdWbYirdwt@b0X!Bq!^hpfn5yEDeG1UelyD%FaW+b4sNjE&Lb`-XLU;-qKPa^j zOhz4dA$@d7YDnW0eFL=(k3jqyPgB@%<`pHr-Qz#wIG$J0OT*7&tORQg@Gj2LXyP@R_bZq;)dzhz4>^Fh?AY zpg8)Y4w;kC@%$fVStL+WzDLg`$Koj%LaoWEHMz8=kT{eL5fGd%a&zceAq;+>WyV*D z&+y)CK#PPf4R5L%%q|<+&@4SS;%T&0h^@$Dv`ohe3U6e4YMCY8=D1nnm+~3w%Dpf4 zmt4mS+lFx9BnJoO#GOdNR_hs(}CgIfcT zwTQF2B)v;<6<}Ef5L$3L`{#S9NfuJr+2@^aR_-v8layk>1u=Dg3am>2Rwn76e=tyE zj}|93Yyz&3v-WbTjZF8^$FY~6tM~M}Q6zS4&CwA|po1Y2jA%>31xrJTCi1d^`}pid zR12|yr(Ka$HCd@496>()>_SR(qvprmARb3mNDI~q10ZUFt7E}hCnFfj6V?iDEwGFc ze6@*SB~@5OVN$W+DI+R?BdB5aV6E~1GK$9>)>`3ygdp~TjI)s$%Lk}ru$3Sd%L8~} z@Pgu2nJF1)1?k!PauLAOrqB{sT%D?GK0+Cl%rGliEi1VIuMk;@`B&;yu6n8bF>_5v zAITVbte2c51=J+Jah9NNpn1KJ*(T zOz0t_PjDG1Sr1YnEqJ-nQX{fCV~uz(iwe|?q~~lcc%|5il-Q24OqwHlzEaXN+;hn0 zj_XrGxISgFveQKPp>JF8Isva9yfP-}=9J~=1~uEvm5w6h5D~JoZ)|s!6D2})0)p~} zIj<|xbhX6nSiIv%#vyXyy@RGTj5lP=B6!I1{zm#fnFt(XkA@bC!vF?;GYh=+4dNLp z_CqSBzXbZ{J7-F)B6THPph4Wl4tVaqGZR5?bACu{$*6&Rhnw>ifu1&qf8&fr`W?gw zJe`rkaQ#figUB1ieO$1#ZB0RuIs-YS z#w0c)dm`vl=sGT(f8e(Q#pa^7`>857)!HDg;Nr!)pSBLi8EP@&0vzXtNP`YR0@J6 z0T_-aah$vFlxDlKi4Y~6RL81$RL3d^?l1pAg>Pr=MB)sF3)Yt zNfG5J3`!p9o&N!yjnegl}N!W z_h5(FgOZTAoa1B9RJ4*C9$vy3P|i_qxS|p zL0$Lq*!&#%Gsfl~E}lVM7@Ip0Cp#WXQ`bVKE&~2*sp}TXV)kzYb=9CkNx0`y>uLTt z5w8|?fqTZ{bp(Hax(*(uI7wX(a1Zt)CWAlT<_sCsg^FH5+{hlJsEc~Q)b$VoP|S#| zn7Rf>QkN(GAdZsE@DCCVQ6ZCt4g$tBeK3)MhGeZ44ZSfUkKVDD+N{L^Je>II*iY@s zHJVI`wYnjRFwuXL2x9gTrq}@e`lU>W;D2XoaFQJS3dVF+I9ur+Hg!l|} z2_(_Pt=ATSygZ4Henh}!nh6Z1J~RDfy_WRG$)nO~E%_3rX`L-;BkFmQ>%mEV7!y#> zW3ruMSiqBZWns?2igMi{LhY<%umVMGVmZH7C4;m0^(ua? zNd~L0^G4ti< z2c{kB8?PV2H6qsCJfBlF@2#ex0ax%H}iVpf70DY!HxgCyFY;nIkLMrI>_UY>Mr?X zP=9xPeSc@A+WO}HT6J6fy&4WpG`KE|EV(AOfgEW6oBI3x)bP^Uj+8x&@4z>V@6#wO zHx5fcJ7Om(8$6Jw1KS6;*|DG4T40Oj9o&``y*1W~)7YxMhN#IARPRU+4rt>G8e|&n zUheou-0{v)V_chR?j*B*7d#-Tg>lrvWO_jx9*n;Fc)EHTdl!+_ViV6~Py{~M{*87k z53S6hJrBOYg3i*8+)|rRc{G~SHmkB!&E;JNx=apxZp;M(#03YVb3mUjPkYr-=dOHh z)df^TV8nj#1igFOc1N-jC;Crmn{{z%^u*>;WXPyO-OBffHewq?Uc`lswju7|<}wFJW@NA_HWD#fTxga{$m5%SF_rv2MB7-Z%Mc@znA_$@%t7Frf(E)v|Jj=@3>s+zs>LSQf+-R zzgu;Keq#Nwmtup_ooK?snQuis~Z$gBMvSH6y3$qb;IJP95;{=*Dvnm zIFS*zU);)Z`!eG8it9M8CnN4H(SW$bVyEMM#KJ3Nw^p}HYuq7bA=B@G-C=VhF4vP zTx~`=IPw9ix=eY%jQl&CZcQx{)}1otIWztpj%Tf?OzANrw{axtJIFa`M*fB)NqIq} zk8Jh;=^jMFT*N2WNfAhM6v;<2w!^K8ytQW1#ROgm<;AJ<=%#GmUYS%ULgKj=X1F0> z7bZZIhB^2}(}P^c9dMaWf>b|>xgl*LV!>%Z7WwdsNjWYcoXx2jqVp~gJMsuF{og_+|O3{PyiOcNP zk+1jqJS=NPE6ZOvW$P_v5VjLCbtd?`^qnBOKQN4t2$}f?$fN4c0aOh%On{v+Wn{!L zg1!l&6<*XKahlAHlal(KTaKG|7S`X2l*ubDiyhk> z{{D!=Kj82WI{ZTp*qi(=$96|IoRi3sY1+biKp~TrL9Be}BB)^?08*aLYJriUr8awU zaimW;`zYQO>-NTQL1J_&B*;~#z=~_&lE`kb;IFVufk<;4=$pVqg7gnr%DEi_v2|r+ zmucLG$WmFTj0>r$Liyqce}-si+!sQgM^gp264BUj^=Tun&=doJtwHYgaq$aM#eHHr zjRV*>ESl4$iHx}PFiJlzOH&+|9^xJm#6EG5MuoI^QJOBz<{xT%2&JR4G{tf0XEI8c z6oSYg+r#4Td{-oOc`MNww>^l`7s%2S$E8T%ommUm@$I_*V>bUd(N)MgH{iZlB zeQ~OEenkA}Ee3r6_kD12FE!p}6{q>+_p&&}adG2Q1bC=W{7PB8ANytL;zW|%xVVD~gFD938L^eltih~#vRA6#}zF`+4A!Elz==3r34OdIi z+J@cuO_xpSic-L`{(=)2n1UcCaUYJn_!TmK8oUq3cs6`NlX!7_`AVA?RG##^NyALc zDedh-wTMZ~DTA03(Ldo5O252XgJNUE8I(|o0i=Yx%kBQ5r>G@&<`Dh*>v|WpYZFnQ}%t1&j@Fh&=knaFE6u{lG6( zf>mrJAn$&~T5OOm)`hrfr z{l>oWm1_o9<#Y!P+=Sbm3*WLqzR}1k{}Rsd$V+CGC#f&+PTU40W)KbT(u<7o*W%w@`1f1<+m3(l;ooQYH)e&+dpiD|i+|?y zP5MoYt_Sla{a%4Ofp|KT)Yw~&YC&ZUVRG=@09P;~CJ@>{)aK=NSYMGir3csbPZmS3 z!=R zS9ervmv0<~@Sug#$LIj6seCQ^E%shL9~%XJuTn#mz1NVW#&G{1S4o@;IORpysV)>{ zG`DmK5N1PBAPmY15SE2h-FO>(xEKFEGXH&wC;j`}{0Dr~QUvR*2J8ret;u4Q>EseD z9vwmcwj*+oi6}Dy)<1a>FP*iu1~#pqt?w_x=%rm$;m(SIg%+qK-hy&~;}P&6^J)n? z9+0SY#QGea_ONz$52bzH-W7GvS{0;VGR(P>}Bj8j&erW9(x z;0MO}!kENkOk$5+5dXLzD1jOfspn0qZoGmqV@8oD_ES^=PugioM^AUnMSE@Qj~Iwq zF+q=0yUPBJTxD6`uN&w*Xd=EBu_4heYgm5-o1nIp--XL`vu#`!L_DTX+C?*-qE2+T zpG4U)xfB>rQ5UW9vht9)2c==gO~HAR2`8Y2+dNjKBF~Hw%dqIlM5!FV0?_XpF~bK^ z!!;X=W&g{BkuUoX3kpWo*O@b`%yT;&yKJ*&c<%Te`ZsH(Cq9IyeiFGVH|Lrz^KSwx zAnY+oKWNBp>nlJCxip6jGo_JJT$l!PW1r=s-Xa{p9-}$~3;Mp$U)A3wGl7(Mopv6v zqNr=un5eUQuKM?BhvRRkF5G`!A@xfZA*-d= zeT*$GkwP)gclauYiq$x;N6d@PKR@IzCfukeGPEpIj53ih>mVv4Kl+GHUwCmgSAn-- zKcRE&1eqhN%nxg5mHNYrz7~(_I*cT2K2Lj8JXVQyXnj2C3)= zy|Xcf;F&P?2;@cFsO&Ewc2*PO2R-p~IKwc+ixza#xtf=7Nmb$|`zA}?zgoXAqwLQ! z%YIG-fxFp*g(#>6i~7!$oq+Akaxa0YULC9K0x-Q#ac+Q8FIIiX2xQD;*&tBV0*Ks6 zpgh9eBfuBjsVw}-I+0+0@P*`znya|MXnj|6G~Lg1I;zxzIFZT6sr$}I;7TxJBUqox z#ij|=9?nOgTp5)sWw48NwGi6S6=Yv5swVW;YjwqPbr8fhm3pRfHL>$yRPkqA34+S? zfe2m(SbuZj+Y|Ci0`M@L?;qMnAiy=eh@r5PZ;`z7Jpol9B(69C>1qiL?!jnYL_Fi5 zDxF$R(-Lyn1|g(~2?5a4`u<|*fEn_S&Yxi>@HJ?00pg^C7h0kpAmL9-0HObZYWyYXpX$6s zoJtWU7aA9eTCau2GZ~M-%!Oh*BiFqJy}`X{rT}fXD&z86oL~Ys;)<8)A)SE_DYpZ+ z2`M$*c+nTQb*>8fsdwfCwYdF_=)}&DeP+EKABO14 zifzkke?#40-c`N_lm1=Xdr8($?TYQRTM>Upgsjr;iGN5h>%2Zs{9S~^HGigFwG<`d zE$fqV%T-c>PsSWTr`=USpZ56wJ8}`8=r}_zHG)7=}Xk6S^l7>=8&Y! z@;wpp2zp?RT6``c<_|=oa>V60%`bTM?_y8->c6l(bkY|@6&feq^Bf0F9-&&jUC2SS@g9-@)!3PhK!Z;y&4>_ zy9!GfDJ~0?WoR92j_;q1qeyGP!s2yh5k8THr1MhwPc?7=K7Se5Sh?3K_){+ECDA~L zt{Wa@uhJJ4CRSj+k@uladk0&QYt!q+X@~S%ixWYtVEU~Kn%49uoEJJ?aNxwuU~F41 zJ@I9z{>p7F^U-5;w-^hLVzNs>K!zacL&`1ygE`-8iI}3knWMAp8BlfU(M(M_|L=o5D| zfPNL4`j0u^;g&)tX2L=kZX}_1FG_CgjZMltunTzw*KZc2CZ@^ni4#&u|eO^wi85 z4fz{;-$lGx1D8+VmVl2F(oTU(IKQHzg_%XU1egB=%iDB$b3HO+{UyYL>Um+ET%=cG zpui^bo~>NC(*^N$6%v!!;V%>4#`RhtV@$YE6N#Jdq8a{uq#PM53EXTM?Xg~lxjQ6Y z14c|Cg-^1uyp4!Y5eaQT9}xTaoWGkt%=gJsR#@mHbO>hV$cLsK;X2{JOyz>9Iyt=! z28!uOFAHPK;&aY{!egUjQ26tPigw8u!kT9OBHcUEq|6-# zJ+JTg9z!o!0O4p4(Tn!fAVxe*H5Z8cWJMO$EPLA=ky4gVOf+B_Ek1;DV1rW?6ZIE} zrjaGTWtPN=C+OAZ)3`{zFWL$x%lH7wQDPl)Z^4Cr3?^*Cdvd%w=}+bkE~J>5)+A&uBamw znlifNuo(fqMKx;2IH&OxHQe2P z5fzix4FU~TYoHAQv2}pw3k>==G@4s(%&$Dq(k{0(*&s9B1WAum{*;wP1hUa$22Z-p zeBvr#-9oiRuhM>mOOO5DBp{`ewrL@V@c`|*_3_{rx=)$DiY8Z_Q08(*OG|To2JJBu z|FAmhjW`Ui7K5qqkwBjoFM-OKh!^8GB+de`BJ?^I1@H{NAQ3O+*vk-sV-7Np6*&u$ zSaiu((0D1{ahwCXH&nnP=r|J~6sbHeZS-;)Tz-wGWNWfsV>i*i41b6)qsdF6i|j-n zp%97e6pqmUSbsqVG5L#e$q5#lgcWESML17SW)t%Cz^hBpeFO(QYyE<+GJset!d#o9 z1zhqF?rozQV0rQ1!`D|>Qi_WKdZ^i(#@AFt9D^@6A~W$d{My&!Yagc_gRj>RZQ<*` z5FUxICkTVb;A_NvCdc5b|G4;q8ZgLpkHpu)Q4RbL@bx0r^}+|xN6=T_tH;6DUPNZ% zYZuEO0>(C@Lriu+E8*=%@=N$W;oU*rEpA?L_K1$`x+&Bw2P7+_>n@57z}a1j3oxD!$g zA`erPW`|y7I^#7ho%RA|cu|D`N-;kIG#>Q97q7M+x6MP0yS4RXez!yf(&>AS&<7!e z=HZeD@;1*eTMk8U&9JTxVHq$M^K3TQzS*W!&Gy(9hQxLJw!Yiew(V@C?T7c;*1vn| z{O=x(gta+N@h4Dxljb0CG=fqjR0Pi=ws*a-O%!ajV`VG68>{*0+E|^nvEE^U#swID z-W;fRB>^|Okfl{SabZ<8bn2*6!_8ybTxY5bb*MVx!(>{Oe?RM|A@i$try?zF! zD|vQ!m}E=KW!QAwy9vA7{^72_WNq|S^v%F=4YJTUUCzp&z8zI}{l!TMMP@=)MnVoH zhNG<2}RIG?v#m4504_ALK}dy(442UFvg zHfrLV&RIU`4O^!;X|-;MkM4DdO=GhwDGjEPgC z6Jo*<&DjE-$F_Y7mRk75;uF8bTibWVF4{sKrT9AEV|X@uMIIYiT-&$MJEixV>H8_Y zK=kp_73uU&=|!*0@&$M{7m1gxbb2@MD=N;^XW)v9DGyp1E~wdyuWF3n2^oR;!%Juc zS>w|Id$BA29->L5hu+zR6kNoDYekld$0>KlgvR{f5+6chV0n(xWQ@UX!y;0aTw*)N z`wsO??W$r#W=ws|QAEFD3{{HnPv?ky5BNB6bYz>@}P7;rpSqdo&mKkM+S}K0T zS;#sva`2`66FrY(2f^=NdxhQG*t-Yj1yeSd{En|&<7N%IP)-z6cd#bIelZ+GaW5UA zt^sU(Cbb}s-ve!l!mMpa9Er<}*jFdC+=LVEA~&5bkLM#(E&M!&DaQgx2%j|U>`D zIUg1BeF`C^med8ffZc->X@e0HsY-Lf>r+}O16-vhN&gUX5>R#_PWX`x1A&!SwkSs! zmxALzJ8q!bL7)}UYlB#clm>lBY)2&QdKlDvWw%-7c3zQ^VHmR;F5}3F&Wa61qo*mg zn`E0mkr`lT5xrbqnq~N-t-L|U#18+pY)ID=h(}Ws2ktk?p%x3M@NY&GX8!pxq9p&k zy&WO&kHrgM6t~!gNb#(hGJ<~|MsuvD|U?TY?B9k$r-$E)G@{x;9`!rXH zCEQv8sDZybDxEW$z#Y6jiRqN?y{y2TBtN^CB2FnEMy(&^hds%Cy^dFo_?`N@f_EIGwJr|M4o!N==Ek%veT#nHywv0SUuMSt5D>>2dK5l;DKy z;@FTEw|x#3U`8K;#ga);*iop@Ee5;r$QGaA5mCrtL?1BnR|DskK@QuzXivrgrP>BL zU{Lf@Vo;~k8tJm`bmd~4BtHdaIU3I1p3z79a{lr3nmi28b(e`b3`l0;xa@TJ3VXL zQAa>iheZ=7V2?O`lS~!d1w|0?WU)8ncLRsp4m)N$UW#>3b-YSG29B5OwM9d6=}K-7 zxu&k!j0-1ou{-fF-A0LvUax)lAq1|4LFJ*JAh0no7Cy)BL?ACDx*UKNTTd-;8hnz& z=mKVzM>#yi*ULYEFpSQz9Tn5M!L63}XKI2=^`Df6%Lr=R5{&r*?)#qhjTke1J~kF| zjn`=;;f@krMk_uzuWrZ65)(V5325sw+>Y@)@{VJmJ=f~vB+v_-3^eF$V=xD6Ng8^{ z4R2G@1~G*Z!^MPHoWhtjl)9j>L41K_K0#na$I{7ADSng!nrLuq!WC?wwss%^zcqM1 z@j40~J9y7hb=Cl3v4z`ysum_{PrwLZorcju=Scrc84qX(+R@6x+yT|Gj7-(WZ{${h9n$p2Tof3*GVg5nn0q!X7xQToywgXMGXt z&zRq!zk11(Ti(?<2{I2$U!iZ<54&CYi{=bxUK^s-^>18sAU5P_Y4U7tTl@=~7wgzr zcwjm-)M`CQZk^*IMA^G}FAfKM^m4cGG@i4 zi2yz}|2xFN$6?L^k~4Mvl{;6Smk5k;Y{Q)ZlmaQ-KdmQGJI?WHtZy9W5tVPQ%7-)L z9$5G5MEM(idF1GVrz5d+jJ}`%wZvc4>jXYNxUila1qU&<{n(h+LFx3WIR71;&5DQ^ z%fkW-2Za=U06z6a=ptCzko{%ixwn5LUY25Ol<*QelC>fqpLT?m==4Zp4%|M`(TMSS z-$b3h7#ST8tz03m5Q%cLDbPrHSGsoMTgJ94qt;tIo5{yuf9y!kia;We1y59r4WSBG z>Pl3#lqCW=z-GcZ9yCE0k%?uLr>=k6d;0EJ-&ka28w;d$0Z;I8(VKi) zqloX(8waB&L>7kXffsyhYLNh%=a$&&CNz$e0(xJVBY zx86z8gf9h(zl1SLU6;m4`e=(p{qLPbh}*^x)x77q4c}yuRMrT9U<~-{t%NNS$904B z)#;lCQ!!Si<-Ktt8JBjvFdWg`vaMA8f7H7-1_1QM`M4ossd1$0D;F$_Jb$f^Q0=^vwh74 z&`Qu*9NP25V~9*tAMX7THQ*OG{``VgUD4O2EGIyEdskRvcmp!<7@pn7D0|`->L%~) zHz29Is@mQ=7Xfgq=eDOU{Qd*b5z!I%eol}|l5})ZbkJ;!y0GDq60ng^H zP$E2roO1`25Ooi9;O0|1g|V;lJn=J8>+jo;pe^c$#}sK8oAkzhxWqXi_0;dg{QXYy zjQhTDuKWZEd!ip`TdzMg(~HrvY+s%#*DQ9JzK}j-+doRaJI-@1>l5!is08?@`WwgnNNY zI6dn367#d4aboho6hy2-{vhnnIM+hupmXKlB`VbmOf;U`e0gF+KQkPBKjB>rqLUHO zQcXbslcG)h1v7Wwve*$^ELCC2o3&QsAb(Q0u3f)2yY)Ozd@{mqYjY7Ahfs5EVgv1y zV53^>e9~-zBGN6uxy>d9*ptL-Vk`azOB+)f--2>d#)JH4!*Q5N{wNL!lkc+LBMu-4 zysd5_yg}OIDlg=+FD~x&;fa|GMveLeFJwa6O>XTwUg1R%41$y`B)}kyd}_|Y;BMiZEHq@%+o5}nyfc1c^FH-6n|JchZQl1E zv3Y;}u+95D#M^RGfA%bgGh0X8^$*#+FW}!YAg&(I9@J^G z=Vj&n@BKMaRXOwWvU74>W5!C2iu6Z(M>xzMT)__fE_}GeTGZZxU4FO@clzBGc6F() z7U_!$63+8y1idRlFbaIn@w&bp7nb8t$k<93lsS0hcF7yeV@HRhHJxK;y3{jcNB z(K**Xv(~Ooi5)!}E$y6}HM2HL9S4mfdP?V9$IMzs6pkpjrCU}tdBPh=hUYStz2t4^ zgXW;Q#I2M~`Yo`U08KAbK}3I`0>Vl3Km>%BI*&K)bDU>7xc00~u=T+JaZ0AkNr>z% zG|6HZXq|kh-bf$gA%}f?Pm|zc<#{jVk^I z^y)#Lz_FQ3ZG{r-;(-U{1Y^trBQgNExpiK{(#jvKG4AW!%rVG zi5*k1bYhYIepqMA+mg+Ew_5omm&hAi#WiNErM%+_{K@@Q3=#ZC^nfcbK!@wqZ%e~| z$}Eb5p35xo(#C`IryOB0(86x3`)5bQ?Au6k(QU_`_Dw(uobX#bn_sTn7L8z3^Q{iP zljly}d1S_!@0zwVwhh{dQ(H6~e{tOue47^bY>0*c30K?FEwJv&uU4clA2=4` z|Kts+!qJ6!<2R+4q1`k>Onjg!Y;a{#B^F8z;@lJl;H6us+BpECD4o-)seL8F>q+xxFY$$VlmBA`?oj%8_?`w4kTL7>2%E;t6of^^|a1f`^>p^^*j=-`JJ^{Gv{Wh z#Uxr?omGyRvmN-dJfL~Nc#MNz##GKJ z^4#%#dS_wlRH^{FH0NQz+S6WzB#y)EsQ|_smX5Pq_=dAK)a^^L|Vr)X_b7 zYtBbdsbZx5h~A;w4~d7VwMN;)Z-Jlc*OP#(U;%j&Fhx381D?uaD%fClZO`7!uBGKQ z-SD&qr;vw12DaEG_)cgIAXBeq9>bp83DkM!u`-dH3QreDsAC*oAwH8~i^rk1C-Ud9X>RR}pWF};Qfr%O+H0@9_S$Q&-CERaj~8u542A4uGl=5fF7reyW!DWY z$~vV{U-J-x?D#j}iaabOfa!6j6@V+eQn84I5Lld&t}W)usgV63Frr-6_wVrDI-b|a zKE+{+e1pScdlBU*iA(~4MNp)Rz*B%i5V%B!!5{>F_dqTJ-63Ls<0mNh7R%U>MX6pM z(DWR=gw!7`x&-$9wnp>bd>Kazc{6HiE4AH~OtvHwF?5j>6tZa2Pl$ z_r!OisiV4JyDZ$}Xv9Od>&+-yF$P53zF5609ew~+wqrCL+@7GI% zAHK=&3oKT7eS?38lhvWBXIK0TIR0yCaOHkKKoV@b-;$1xb$uNA|76mauxRPa$-s@2 zP_e*o=C_%CZ(e-oNbmmS7m6>99bwZ|c8|nKu&8Jfb3`X_O5}df%K0pIq^kB0BA%Lo zP*Y+~sr{G)*OmHOy%4kgBj;=B1N+Hn%_*hdmL~GPYC7ZnWx3W8V<}FCjZh z4pAdfgi1TnBCds}r2qJ#kaZw$aVaFljnk#}rJ6DzDNT}FNTTs28h@@+H(EjlS*g8T zOPEB8-X8i)iV4{TLkqcda3Ozs*)+#3q{4}wQ`*K}ev7%+zOGctf6__H0EHfx3q39> z6K(tVsLcZ{lIBh)4PUDVB;de9KvI}T39J3`9di@#x!NZoPe_V-KS>mQliF?wc#=01 zyER`H`yoV&X&1A?08j=Z2f?i~SiXwnW-VY1Qj)4G*7;&xaenM7YfcFmuh<@HYW2*s z-}xqq7~e(l_YXwpxp6I3JJ7&1MH%{$^1JEu<1Nl;v}fYP2M*(G+~_*QiJ}%^s$qMM z9>UWbPnevu_eLO)7YjDbxOaJl{K7B9-(E%(7C&!#9r1v{ANz3#w1heLFMk4~5N^6D z_>>9c^4SxhO7;uCQl^B0=(Jb;QaCcJ@}n}&7Rl<69aS#bOT>;)$jBw`b<9?<*}9w? zx9!BDL(^AJj$NFrpW5mV;ju7LKgB-qTUuQ|#nmo18l#VE^d2*?JIybZs$kKBeU+LpI>dZucBJ@{IOcx17Ov}4G43qd;4L)7~kXB zc|{dUOfKZqBYOikZa+wU&8W1S!1`!TL;8g%0)2jFS0xXbpkE_5o49>mI15}lFMUC< zgTcg&KA_TC+mA7&cP&*RPNIR1ej!ya%Ll*XGvEvCS_+Zvp;@Q+v>-fOCIVh*=ByH*R`UsyLU{D7Qv#Vp zvr7aS$t#LU*q=8-@G+}ofc~?w8?dYDi&s2gEjlDF0~9S*|-We`PPGDAuv&sx@N^4aCftDho~m+@uItu_Hx{VWcsaw%i|lvO820`$Gm z>DCvtp1!M?+gTT%Cp60$8ZmZh9B>>Yi^hs=UEMEX|LTfF{bU2Jc(D5MNV+yQ&^IA+ z@H?i+Yn&p-L=N3S$Q#XevxL-FYX?S8$T}Hv%Ev5d6dIhyvE;wI#AO(OB3aAX4|>g?8R zC;mpyEMT6PovJT0EVnG5WjoFS>LW|oZn3XL(JvDca}U_jNlv->6;2rj=}s@v{~`q=_l}VH2A)4c zIv%?dy8Q&%elb?iDWm5y@)@Tt=8{=NI2gu>e zm{Y>`YfA)%(nP0ZXQ+Oe`|m#KVlUW!2MCQsW%lU{+iyH4Y4MycX;Yn2jj(v(k!O=G zWPj;$w?V;2b)~mR1@<4mBBkki zX?)}!f#E>dUOcEM8JLmXMD<O>K?Z}~M$01K~lWxA)u=*!*W%eDA2Y2gEr zha6~^kUrZ)Q49Si@S7eI358QO+CT9%zWh~%bdGQzw*n_hF0s>*L=<-w3L%PvS*E}i z`x}Cdln)8cZ-2$Sd;44Lg}f%YqO4QU;PrZ+2ZpNMs{+o1*Lx6g9$>fOq_fda}MbZ?$Jjx8PALu0e!JqtKfrp`23{;;KQPrB+nLFFr&%PxLG+J$;=YzsD?0eK|S_OkBGIEPy?+gYG^TLP9byVF^Hu z7&OO={LtuU%f`xsPcLuK194(a-DH1>p#z#A;b8l2nyTx087e>HL)?IO=G|8xD8*jr{+tjMnpvYiEc8gVD?oLal{e#xW$mfIB$L7$@kj)!~;Rgu0m^sD`44(jo z2`%<>XJlZ|b#sedk%8c`;UEAX@xy4$2eo%Ur|)U&-FTG|WBq4&!6lI3ps^oo8w_Z0 z^AjrpMQZV{;G8rFoO1wYVvGH`EI8w38Q)^xQv^qCMD>h(ggz+x=n$Z?{Ak-_Vl!ZT zV2RuDml0fg2;nc)xjXZ=H}lrxyd^Kq_{UjPRPjRP9yW&V*q-#w3&*#Q@@`LbK25>S z5e8Q5{=}xO1gLC$t1fErH~e2psgB6;q}a@D-9;QF&Ds%)?B!}lWlq;bsIm+#7LoJnTnDS^uyTW6Y<)>2!2 zk)zsLsovi7Mail{)ya_o!jT(B4Js~dveCJ9fhZT(fnVlJ2d3V8kPXs3*?{iOE{W1a zQn``7^exte{hLOs*rL@>SR&QCV$1imdTVEHYjg+W0%}Qhc4Y`d$`jGZQp9uZUlbKP zvdMT_EzV!ruj9?=qpVGm@5bXI0te%L^in2Qu;W1raiPL0RKzKT>pNGta0T1%B8vzu z*Yg`}{}%P86_mDZ($x8ue&FLxI7olqs`8CDPkDxjw&PP)6to?mzUrj5<7LsYZO6yp zpyl|eV25ZKadf<5RNK>HWA`)=|Cpv)#Byg$|SmXo(sVCxh0zc?7*?&o3hCsR* z#Mb_BvL?^rJG6kiO^}H;2>Ljcu*=EzEwVKWGd7fUF^i6F-vrE>74DW$ zJY*b+(S|!B{4$P420IQCcB6K(88zK}yXTut+ElINgD_D~+`@|?kOCo();w=_mOdL7 zX6Unh4iqdSNvwN=?NgxE+>umc$_OeM%SbvkGm^&0_`y99BPn>(6(ZmC7p@rVjvsR@ z#f+i$rxB@T!);`+eKjL8rxiC{LbV1V=wfAC0nJWT>l6`-y-8_;5aiv7nzBT5Iah_7 zkCH@lDfiOyk+`gwyA5T=Vy;`7xNL+eOVGew9|WuTd+TuHYjn=|GOZjultu(^O46$2 zeP$@Rmk>cyx`p)yRmjK)Zju4ls>`Wn>vS1N91W;Xzm(946p2)4;pnO2-)UTA;k^$1 zZ*%BhGH1rA8Ck*h--0kRPURqJ>nM@p0N`Al;;Sg=4+$njZ3GS`UE%ESm~r?g)J@Km`^2SX^G%Yz*_{gMM-Sml;0=Pi#Ew2d(e>(IAAx4;E^q5=VfL zSNTJzQ55nzM5t+hD!1__863@l#v8lNv^c#*ipmHzQoa2I6X{T)=KMj$A=F4VBh;KM z0*nh#WD3aay^WfNKx!Z`@{E9tHt8|IVMf015TDJ$;kEWFnx%F}rn!>Rp!CO|%xw&+ znBvIICgxrf(|fL~I(ps4RBL=(Uq#7n`mvzzkTs!Aum=y24;by$qa1f!0sM zj@n=~!i*SjvcF#4YiD|*AhsmEMXKUDOfu?-S3J}#$ic%t)7oD=k&A~a1(C*jz7NR9 zx&PQi_f7x}1|pfw4UmX;UosNVHmOHvRIR5^dt326J~By4Vm_=JR8cO%Cp&eB8(d@8 z#f@vhcJW#jnJu|Ny5C9j9YMiPSs5j@QnNaWL`Y^fZVk>`hT#0Vx22VnO$%h6G%fId z9Hvg0pM$A26b{97Y#kO;4-14~YN?6t{Trp5dW7wodYHgPS@u!N+#Yi43AT$Zy3ED5 z{T)qJg+sbsS4#rrtJ2LGzS{q|0@J&mK*%%LzKfR(!9U5^hsRXQ?Uk}O;fO*QYYDLM zu_sLSzRS=iWc#hsK!aSzn$+LY&Hi9;i#IC|RUVN_iybK_a##wZZSy%=W(4Hr-=&2iv*Y-IHui zCl+9pSQp=sZ|0Y(+M;0mkJPXcaplbDy0+tIM?W8b%M+a#e=9%ssj8QP@mGjln(~}= zw)jNekst5QSJ%Y7n+UIZHyD4C-)_&@)tA(1c;9uBy=-o*LNbdqP3E)D%4QZO-8Wxy zwrS3@B&P;y#h;oR9X~hr*{YXTUM;m=naS9924Nv7EGKMK)w?TabbGF(jLJ0cY@7S5 zH;&xUfI+{1<|TDB9;20DM=^sDgv^beJU2EW*^pQD>y-uFp0oN+a16jr5dKKcwzix1 zH=4J!*e7<1fFOVNe?+ASRZ!Ov)@%#alLK@Y2V20L}F2& zQuBJLJ9)48QmlNjV^30R5ew{*ACr z^otzHH`eZp?VFt-wI30~NbXiEf0oK(V=IrP*2}9B>_(~1r4 zpPNJhb*9|we@3CFI4k0f?H5YfGe)rz9uxD2|^*+Q0V1+Q{2IC}`xn1T}&@Bdrul!P{(th9;$ zJR znuJcTY#UEbt_r$kH@~dE$LUpls;_qMUwFs*eYW4MTLe+2bN)`};D1MSWT#~Mr(C2d z`ex0U)^{Z7yk_e+70)(>A`7WBB7NUt=NkY`SruW&rj$ZeQ;eW`H+Xo+8TeH*)<9MnSNoW4EpMlc&fC!7#8K{}Vi$HTo%CnE<$mUJCV|)ltFAxZg`NE* z`~g9G#_7OTl6bI6965q$Id+tVOFW=>Q7$Pvft2J)k)9UGA!JDJUP;!Cpe@q_uAz=y-yvB$RiV%#VS z6y=gPe$Y31dqTi!TT|`fQl2$jtT^Jvv26libwhk>8CXci2oc7Hr46@iasT3F!H&ZQ zY2w*4Si9fMnSC;6KD)hlg7?`(QtlbKc8|=KEX%i>c{8CR0GEmoC!719{kb$4$v_gb zj^W&yyg291(!Ua-G?SloB-zp9sN=}XjC&#BWN3;QbFzFlY3v$v|x-GuIE;Pw}@i~6{XDd1| zRC#-~R2P*{tUUeMZa|_J+NEtB2iB?T>T@6gp}@UXqvJXNgn%;KPx+~%f<=V!~-vySsnN9 zGEUtY@onU)V{lz-z0R8K=;v4qX&8lxB*8gnuOmqa4LHfs9Y-BGVuK!~HT&sdjGq_N z4W?8xuS@xn`<;3H*GIvTmci^!{1_+YtPy#m+*jrY_gtoFpVcNZhO|t-nPf+-z7~HT z4S&QhCGJY`N`FaF;!s<8yG!sj?#7iSF6Ckd_p2;%X<7D*yH3ipUy~A- zPLgSQ(atyC@Dv^4--rAQQ0uAuo5a5h_?JT-x}UH9a$LDuPOd>?YIkh5aM`WrmYS%6JU|23YZrTa;*+A#l1M(;TPZ z(*HS|tH%7f-+Co%pM`P=niLC_aaw<{8OOKRXX^fg${`N^t3wW1x!?1%--Gv$#g!?= z;_iO|ZoWJe`2>?Qgd-J=*NPmA>Ju_my^?LFDZja+E8OzTlvh1PL2O1DpIuLd^aDnO zEdRuE{n#ysS0bJlnSvYr>6c~XiL2FF8pN?R`#=mrto0|>`4Wq<0`aHn%Byd|*G}D} zB7Qh>jP#ork*b?7l%A>!$r!Vryb1!9* zn|Wo4Q5-q^0JHL2A^Tr`q@=8riN9b~1mm+Ydwb^WY=T?Q0-AIA_gVg3%)bWyHS=#V z|E}fVCg)#vH0<5mi>EgCE)@xP`l~UJXiyU6dr@x-Y~9Hu@r_t0PM=whP~q}Z6+3>Z zpg3ZOL*80mqxkpce4M!4o&IQaFY-voPiZMAX06{8niqLknw#Hj|5bfYiN)m zkCX_bW3A)319AMJb)%5mAB@`lSOxN9mdu*&kIr78Vrwj6FCnfL`6le&>^9FAj3 zrm0EH$>Xff1AM76Bff1pWqEMUx)R<)F zev)Tmg}8}5*=pdRQZ$(CJS?%Td72wzQW+8^cQNtgK9rkV#?GL!@6V0Z(UM!XXy}pT z+_E3aaLfR?)GBix4-XURilZOVdZXH~b^z_iMBg2Fp9VV=Qn6QCi z!fqcXZ0j&#PY)B;HB8v9VZ!8&>7nhIF-+K946&i<9vLQV>o8&ah6#Ihn6SOWgdH6w zY+#r$9}@Ra_{xU~n>6!tNg?Obk4S!Y4L2L&MA_RxYhIC+`#0 zQL{bu0k{^bcpr8Z7;eSnQ!Hy&V{$1kSQa$fK_^iO67zxhwn^mlToEl2)xIt)KFv4t zqE&a*keVq#&tyBM=@~_pD^KD?F-i*iwh^bB~&+toqi&cj0 zvcEViEP7(3hvL~+IWJSX$swFE)v2mTX{$ozWpiDwvyDxGzlQBg`&>pik27V4TYKQv z?p?NjFeM3lH2Hn8x@4#L(Gk{TpQd)}NL#U`?))PZ^9zJNFqIFHVmh1nGNp{jlrkcAp`Ob= zA*n?G#fnR$b5Y7gPm0VifCYy_QJBfkj-W8#mSpEulupa!zhq~%d?dFC6KH825w;t3 zpS6rx;|o?H3pImpU!rp%DdPQs*o7gErFRvCA_BUL!n2e#FEm@OQl|sHys`Z)h;maz zt|njWJFa7aMfVCSi#5p=D!-F9SDq1hB|TC6e3;Ndk&b+`KY;B;@RLM+e;*J4wpFTSJ8&WUXocmf{*O?Zli zmHA!^F2oo(%nq5jc+jJ|D%Y(MZ3}y3cif{SAwnf10)OvK$$Acwe@>g1djLe_Eet)n zh-}hG5d=>EajkSBUzzZKa5Ib`aysQB65i`(aAN!LF^YhM0 zp(R^?59iQxK!Y0K;HQP^FEiE8%2W?dWEtkC%GemGQrBP;235&g%-`H(cVsGjkqX%h zG1a;9v7=w`=(jYN>P|+u@}UK|^&t^m!}d+zRhZSU^59Mq7+CKHO)s(3wfdvZIoo@6 zzhApfAqm?b9CDj3=WJyt4Q(&<VU2a^C(|EGGeA8LNVzH@@bA`FNYf=Mr@BR)v2*Kss9e|s)#dtyA5)BI zIu`qPs$}{TqCJPnZDNxh*IjwV45rJN?Tbk_s;>iobn)|;;wKjvaFGMgu*H8`NfrkN-{PfRRUmWE60D04wvQVKe|f`gt$RuJ|6zas zL0GxmuD*9lj-&U8~jc?TdGm~4p+^{Of@fNs>!sH`rsyP%W|@z2>PL%K{QXi zGai>=&c%u}oY*9K=R~Jy%o3YQ^j$@d8&8w$zWBDOgn6RpGeudVs1BvK=v7J1eJR;3 z=2WMqByp-!QpjI-=QMfC49iUY|A0UDYx|XyPt6W4WzJ(>cl&q08SDQHza`cpmbUJg zGW2AK>BMuSdAg(>4$BW7bZgq1i)FVyVW9ADG3)(@{M+Fd6Dy>$kL4E^WGegL;NLF) z_`euG=Lr-#euiuE=Kpq^Jcxd?{IgA{V-Pv1zGH#E@c3g29$Qk;(>Rl+NnavqdKJEnh)-#@qGKa`(O`NN7yc0Ts9Tg@ z^5E}>u=Os4~{D8irRc+J85`0IJeK!d#c<8Szqz73p`_wLA~ zb=s%<30z+zZEQxGH_2LoeTl;4O4-CbF>L37IT^b3{si~Fcl(bO z(!8+!q$E@aQbqQ^8$=~=Y|!mHR!H;0_II6v>Ps|?=7sIfOrBEvTW+2*;w#?O^E_FQ zX`h}iLT14rCt%%I1SzA3w>u zk$+q4JN{LB$kAIT@lvBm{*(}hsN?Zm=0j1(rEQ7MS>#X8WGN;unyipy=`8|Dl4FV* zw2M}Ve;TxQodT3u8tPkYHHS(C2-)?!XR=hRj0fV&dO&G0Nvifko6++)rdaYYkm6iL z!57YL%9S_!I?_ z31PV`GJ~3NVXe*3>LOa5><@{s!byJrTP`P2dT04aaP85cDu@mFlgnN0SBSDUEFfOUqc}zt5>|R&cjv$1k zYOWMmvruQpxEeGI(o@4JFkc1`pUTA-257|#ZO8r5~3FHv`Wde!yS zToIuumupHEYenhJ9w4N%$$ze5wUp){p(BSB*(D!HUH&}d52H@3fIT!MKNf3BuUaGG zO22*d9BH#q>T%o{7FNc(SWTFJ8kAnllTK-|B$Yzi^`9E?xv3t zYbJ$|sX0{Y$DPylk*KUs^SN*71R+eB8KZHhAbS1e$n8HA+O&U{9E7b!{(Y6Z-(rKa$ne31t2aC(??+nTgR_s5$FFoYA(J0ECNY(iuepvQcnGC9&GzYoYPM=I zm=M-80RI=bYX`bLyVJD;(zl%tQC513JWUUiXcLKAnL`F5{S+9o=V+!uJx;1=8rrYk zO>oyBa7q_*6Xdr0`8AN|$NnXR=~R z{`guyLre;hzqMyZd_ulB$+4i=Im- zeKu0`Q<{}q++i!XxP&$!mm1@1k1kqyu6iY6?cEcZMggs_=a%qOEx~1$Yy@S26_T;f zrAt_OGtt$I3E`L3K7{}#xn#{aJ_GhB{VYn>oX%&l{Q>R6HBYi;BA=!9Vf`#i)||&@ zx%~(IoRq9NpU=tmZ}f9YvgTqwr`pfx=d@%^EuS;&&H7oLtZC$Pmi+*q$;%crSx4+U zH6~`xPJs+7uwD#S#S6edvTD22ltL)RGzJxJdx1R`ycv#&S8;50?c++^C%!HI|YK!IzD{MyNq-Rx#Z9x_F) zA6%rc>WFL{p*hCR=Tg1+i_Q2muXWG#Ljvr8?p58EU_979 z=R=hU{E=yt5#q*@wfzMv7e$syiLY~B-PGpb^%Eshx6noOFP0KqN^v61qmKp|rwk@X zN#PO(YvF-9&KoF#d@n;^BVDwtSj-T_QMx%kqUBb?)o9$oq${p**856B5O{mMD@sTcxXI}ZQPVM=O zh*mttQ!S<08A*aALLg7faiS;72q#u_jzUY3wAg+Qrx>mgz14sz=^(YT?R~uXCgYVyMgGCac=HN5Y37Da(ls`0$gFztRLft zr!-d{n7*hq9K2opfBT`6_zexX*utd7TG8--NGXX$$Q5$<0|_qJ>a#~VD%UQNMY~)Q z!XRRD5JU@3iENfJi{Ag&$prx%xfbEHX9wIew4@G>)c&*i8d;6PIy#Tiq8g z_VOd%DrZg5@?bx)l1QmYiD7$lTpOE_<}mO6bR=ZrZYNIncvjC=Tk%x=Y|6zOV1xW* zvgFmzx9aCluMfpe%}MRgrq(&^h6Zo!Zjs`WwK%p|y)Y6{F}B72D-70A@RUTBnVL^E zP-VKnsS@%mG2(65e($Eiy~J@k1l-tl@wEdZSC&P#3W8n_+dU)`s8k5xI@!!>7OAFO zJDSCMIsHG~NtFX)>r(tlFyX*U1ZRR`X-cNyR0%|dksj*m`!^~cwX!gBSUx%sPQ#If z5Tr9bGBJK4;`@;yuo(hVZK)j2QpaUkur!Ozmjxl&Wt)z;e0x_SE^9q9=mPQ^ikhNC zT%>G0VZCZpNH58Dgh`ZsR0VR$KN2V3h{O-fB_&7^U;RDF`cmu}BZ|(_ z#J3snskp8wrK{tzrj)-_ye#u3T37kAb{bzR@Ow2Lvb>Ds0DEe|Erksi?EW%z3B9JtPA-GyL4V$*K+q2R`ZH~d9u zS36L49=Y%^dj%3ZG+UibyMt{GJ&V~YmuYj$EKFSX?rH*|#C1jX4L3>x-M%A9s*j=>WG3$+u zz`PvoS@Xt4dWG_>R$bAwlGv!W4>+GReO&-^Jp1mPL}hn=GWJR}&!gES}OgiYBD$u98q$+03&iR)U#1 zQ<>0loOTXjc}d?$6>3H!x8lHiSJ9Ko%4yN8XA^U-3by}*%%WPYn_5*jZB>=)(PYjv zLY(79Qu2Xul+04UD4sqL{bomc&8)n2B$-Cm>2*_AKaZEK^s1?;I&|8?ExaOK`0XE} zf)SDw)6=<`F5@Ecj07icwqIqG9|axXi`B= z)z6Y%aa^`KNUQAX`?J;E_s3k6>T$!q9)nN#i(Zj)Imbkq6&Tbv&W5-{_7r-?0W10~ zhhDJfA(ZujnR`XcRU(>Kxs(jafVrR|H|DF&_C*>ab}}c#*Wn~?JUN=}ax|A1>B0e! z#8nm!+eK0zA@Cp3B;gzL2wj=XcD{j^`>=JyR~}&2X|al|hAU;*%MQAoSlf^4s^Ztt z)8f4_fWOj?crPZGvyitk0)@3n_7O3UY@LpwzMfzWUeZ`pq1%g1Ue(E>JYqNn?6Z)c z;9%$6Cs_a~?>?Dt<9F&@>ug=dPEnSoyOwIincbemH>#O4*4@N9`a$CM`4Wvt$CsJ zXY3P;r3b`bTMrk*?$p`96FnFN^||IAw^}=I{6Ip?#zU}vJDTnI&QrJ^v&{8RNbQG3 z5B{QniYl-nkZdSTEG$mpXqrE<1ix&cNhRRld>fcpKCup1bhz77!2Q3h!;(17xWuO^ z5|@?OKOxbO-G!wZB(e#`q_>E;60(1JKngpW*QuXG#P3w;C1ih<qxc; zUNfy?(NS$3C<^LzbFz%9zEXfRsj>H##E_DYebgFjk$o#Zs-eVlXe<7MOT8)Bf3yAa zNiOO(93}HPxa1}pC)Kea_QKgBV%x>XpaR0;L@TmKOEg*)z2Nz7;W6JXrk`)&O>XZM zG|7E|%VbXA80jM)IO8O^;d#Mttv|TMAMd>;*uIEQq1BFy3dXA zbv(Gf)*qgErYLPuw|$XW#je zsVdpF*k4{PkYv`3a* zu|&|NK)h>Ad|d>0+1KHtzbjF@H`s9}_>DiMf_|`Fmkui7hZ40t_Gp3oh*jHz&Ilq& z#P$+e6)RdXYTGM}yWSrIPnd4mZMW12z3uMC(>ck#-I{$b@LRDSt8o{KCOQV-60sh5 z<0LNMi@%?@s;p|qib5@_Z%HWJWS?M4kqmOUBM%nwwD*X~a~hffc3boKHCUC1XBqNfV(X5fC304y)YMctq6e z;o2{u33P%ZOC{=-iCTcRuUqDcof+woeqr-zeKbQWnyt~vX4URB`x8AO`y|0zZBMr+ zkgn~~y{F~rRm;uJ1kp#qi&>1xDoj@S_AdohwR^3`F4+~Wi|7)5U4)xQnFN=~*2679 zQn;H;Cub&Hg<;Q31G-LmtCme~+#CH&Moq*X(=z%AkuM@YcK1qYfXYOg`DQ1xQ5t2^ z%3w{_a*J#2UO-qLS*}bbY}dah*=4sW*e>mWZdHtm{N zy)vL*fJg0&*j~rKsgphaL0+^Wvjerb+#WZixC7OuwN84vS~XIOwPTRMVy8P3J^g3K zy+ZMjlPw*48UjOVO6c;o31N+kry=5ml0|bu>EHf7k`&{SrdB@3n6s~Ovb&1|BQNOs zK<*9k$8Yc#SmRIY!ZUpQ;D9Ju(TR1RfPVD`e?H1Aw2=66J|sKUuQ%H>S7fLNl8Zlc zGuVc+Z|14;V<6&_T`;tnf8GZiH9om#EBW~C#Oofzt-Q#gD@6SgXS?jL-^?u%7Axc! zR(iEYbbGj$+Ls=YSbvvP@whyz(S!NyuYxvLUain~vDpjT6BM13q**K22`vrV7i$Q& z56GO%C8QLgWU9b3x3m#pspkc2y#R{fua~3zHXwj~bQ{0fctNN-!la|y_zlt$HptXX z0tKMBRJ`zJ7isHUN#4-vkaUJ(OQ2X$a7qhB!Fl#ksa?0tZpxMi)n*i&zgj*BagKsB zNDmEFaH@tVIv3Y^(aL!L=;(M?&1rvgP#KYB(h|D)i-Ut7ae`|G1!v|a__@+kk^xHvKzb$&2^yBi(s3|Wakqi&yDA8{RG!H|9-Iy-Yncmm8*y?claj9PHHV%#Y z*bbK@*$$s3FiM9@u>6^F<;|X;a1ZJ5!RbtgOM|4t1#;=|3*O1?@GdEgzuXSrh51H~ zbmDaQ8Fb3f4hNI&-FI$Ri$*&>sDKPdp#O}vK(rTDo!D0ox@AC@wN~Biq2aRyK&x)q z(C}p@e9h4CH5%U8&JR(!yG0siVueEtjg>I@vpVnRIW$(n;bc^!3y5rOe7oNe?axe5%)LoX`!4wYxv~!fU};? zF5$)YiJsu>Ykz+1gmk6-{_p8yk&uvP)H-DWH~o(Bz7XHGSE_+c8xNb3zVL}FA( zo>;~Y(psw4zlOJ9E$44zfu=~i5HAKRbMn&S?_nzAjLrMydzad%#sQxIfnoj8BEbT~a5M+QBB0$Inlpfy0%Ob@aNrK!zC3nsM{hHEc zF~?`~V?h)V+y}E?D#m<8d3L9?Qb(<}7wKYNdW*no_Mj#g3U-854{OJwDP;>vOs<}m zmWj!g+j}W3oU%Oj)#|`;@X#HS&J0}o?xcCXR z|17?9sOEevV?aHHV*(=}3yp{gj0}3yi2T^sj0sF(f#42V-e@$xLkiShBdciFM+{)l zJ18$9%^(99#R_5eMc3wbgsIz*hWO5ht7}6X1DHjJC9%%rgAHIZ#q~vUi%Tf@8A(~> zthN0a0~n6_3}XQE6D`3dT}~bun4|%^k~@cSx9P=6%|iV*t~q zpBV#~SM@Vv0P~!FW(;7q>1W0O<`?>zF@U+BPsae}4vqN-1~5lI#sEg;4RM$%@`e?} zHqZJdrhLeEwIv9!x@Bq@pWTvgeKi;1@n`l6qJkYZPsin; ztfAHm4|iE&@gu?#!}jL~Wo0xxaTPHXzjZ#pEapO6BfLBj<$=D5@5uGM%4X-jJwo(s zV>zpv#BbD7YO*g% zN|8ih zv1H9i?yn`eYSOCKmaIG%ec>3C3dMGQCA?D|SBM8ng+v$aoCR`pI0D==qKX(Co|OlN z$kT1$XBc_P4QuJuMQ?unQzL6lNTi>G+zfVMzUQ1!dzwv$1B~HYtx)=WU|s@!lp%AMSGv za{AKy4wqG0v7;5wa-HIWK;<4;j^jmU&D9-yg6&6W&DJS+Pr224;l|_g60GlW)n%u6 zcVOfZ?`NUT_9$o_s<0MdBR@iH4jmJ}O}9_%^q0gz=n;FoWHwp3sK;7+n2}_4Ct`T_0^VQ;<2LPm zN+^dr)TGkdgJ{4nNulP}P>0nxs%`WsR|$+Rv2(xopC~^r`Oi@hEPY0%VeA|Ko`PZ& zN|u^Xw7#B(V&l?pDa}NU9=lS@M6OgVu-ce#kJ8mL9!*eYdnq$E;n=I05f7xYxUA525s4sNP~r?!Nj@KjUH^Z2wp#3ZCXEt~D%uq}|MWg0LXkQSh? z-Umyr=#OtJB^%<*$)E@LZf>M7Z}&VD*q=!@zS@K}%BgCzr2Aq&BhuQWt@3>)(J3`< zob?&shE5-EeJ3$Nzsj!5WH%8cB#Lrw$dN1>dG8V^3BY}c1$z^B77>h&Jb2S~YLBno z=h@hJaKolzLItG{c_^q_MYKfi{s!-ki>twMaJ^h8@7g{hfNH2O2YCwC55HWicTr8;{8Nt ziGS}2!YPhq!kPHds9_ARuxn_XQ1*D-(AsP$%SAWz)7en;kZ$NHPH5bcL710WqNtvFfU}*t8MJm^OS3&q8?PqV zpN>Cu=r;ftElT7JJ#3J(77bd!Q%(Um@K*vR0bE3*?suZ#Cj>06eC`T6=>!>m50XZ)2h z0n;fGvr};fa2Z42>B$#~ivLKO|97!&>*(SeV-ahUEfw^?@K*fKd5N`$8EfOYq|6gN z;b9;4NY~-fuy8AxaQmemC6#5%{E{Thaae@ngFUaKYU|qhrI~F1rfT~iWxCCh5J(#6>{BO6Iq0MUOuwf9!#IX; zZIRYXo%Z`@3)dw7P=uQ|D;ITZ2y+~MtE z`<;HF!IG+-(H6|DPM1Mk0``x)*ynwp`ySsURG80+a!!yxOPi4lHh?`v=I}4&GV(J zoSpHl!e@{qT>GN3?EJ6F>G-w{VznRah|%g)=gp1@zjfy<3b{1CHo$KFtpqZK3v`=g zrb((6Cxo(4YD#ua<;l5?^p=Mu5=#U#EG#{SWo?q|)*7F8lcZ)@o?KwZ-}0?E!OE}7 z<7(v{zW8<@0W05%rw5`JZp^i&s5%D!Jj<0jk z65*cYCi#gju{uRd#!RDmtBal1H6Dt{T#8(JunEfKJ`zQ5KkHcO9)!;5iLwGU9Cc1P zZDle*Y)o`&!rDU#2O9YdZoxgl?ZBMs6uiSRP^jr!Y(jdAHb(0=wcrmEdDPGV)AnM+HWbf;<9EGOk{BalU4yIP^AnxzFmR7BKs!`w5sV^RqQ*~CP~ELk9VEt-41i^^za?;3dl!}My*pk zry0$}d7@uQZ;{$jvXuW)>rQoQV`z{4a@KmG6B|t%B?~l}X>Ur=K)KTL2I(U7 zXqlE97$nwyX`bMq)aiE8)XgfYNHpgwKG&)r%&2U4cYjc~< zM3*f*K4+?rVW=a4Jg#L?+wscS0=IyFUS#BU0s61QV^c0egbzB{q)?>|10y~=84RX= zBv%K+zF6<1eMB?|N3iYF9^8a@pCv6bd`u52dNO1L zX$`nNC^7Pv#jm{vO30EHdni@E4tCx~8cT*bw+jO(q~u~A zkbwAu3o?ds>}YO3x$i?eJyP)_51! zHn9GKE6jr~9fswO^pHJGojI$m((zEp6dc0Sram8Ua)F5L7 z5&vvhch`RCu`l@-sZ)kFceGzEj4*89H%G!;Duh(dj9e)={|lqS9bWczgA!SV;kId0 z(Vqoy`Xrrd21V~zu_XfVE|{|k8C=LzEyQKfI@Rd|{SL5cj`kNw~Wp2T{ z#}WH2L|n|ltp!CXVP&3_a9fWxLWPIuMRI?FCHHfl8($Ofa67EJ;^GoI@t#PtXiosr z!!QrR`(2;U8j_4A4gc8$on>+%g~%D_2%uFo9i?h5{#K3Ka2* zi_Y#+zy;iCj=gxZTr|VQtCTTKBW0UDcIw93G?%BI#I-TO=DM7G(dTnZiRR7W^L|rk z{KLG}XYhG7pOHfj1ozICmb+Rx)cVE`4mN@P`0S3I?j$$UeT)6|LCM3pU~yl{*=7T| zAJ?8vzNrr8F3@}>4m)*X@jzmps_vU2+ zwo6SYc3%r~r)zrL?c@?s1=q~6Gu%weolL(Rlxe115>w40uC=TQ2OlP{5>3pT^qqm; zv;qxXvi1nv;wYyMY77BG5SfBEI0Y{pR4`&G?wS)NNH`Vm&cR)G?a@S@)yVgeC5sbz zjv1^w0+fC*`JKAm&gXFd$Ju-2xO`tb*;+IS12xq>GGfe6JOzHcEl%DZNkX!yR_n~)=m9hiQ zUF6Pv=reyHK&z*Llf-$R+=qVe?QTOp{yy}f?GYDpL-Ch6&Qe+=HOq$LP@H`>Q`K*B zT1EfKl9S_CAMt0&3K($JW22QyhVsn)MgHpcJ+b2$8&>Qv{0eb3gx=_+qtX&Re3|j8 zPe0gC-R8FN$&Wiv1_PqQI=Y?_fAg(e2n02Y$I+a2a<-#X>lb3lH1-*F_cOS$rJy!! z*Jf(XZ7f7Wd-bpjJL;B~hNqYN(o;C*>d4G0qwD+{w$DU!NQ+=2VU}cK-&di{ZZLjKV%{d4$9ZuHnQq|uPbT8V5=%<82R2zBXI0^>%c^v1+ru>~U6HpWE_&Opa z3Tv;|S}G!G<9r!H z75;0DRIPfQ&d%_oVnWW`AE2R$`bfsj1rv6eE zOML{TD-9Is3q$q+`Nlk1)1+g&LiQd)96+R}X1P)Ds7FHf&oupHH}J8LeYb{ePS$S4 zKsjAWp<*r`wqMtE(^M?#>G>)VaB1QTTJjcYy4y-@^5H{VoJ*MeWmY>H28M zt_BM*b5YmVH6&^eBC98AUqv4$c;uM7qB~K02uJ{7U#QiatbLldE;N-rsoH%a>|52W zoM}}VFwGr=_8~C!WC60OOO3<=`EGT{*CA`Ak-y@sRN$l*k{U91(^(6iu3E4+*qM~N z(Q7J2Jgcka_%>~EI20|yyo@#=aSLdJ1@1YfE4o}ETM|0&7iK|ZZmp(!S(zBD+U>K1 zVsrtdFkb4yxZr85^rSL zf?kAd0o(}LXVKzzTAW3JshFxfh})>KTyb0S$e)QfOKJg(CA9#S>=eG>E~#sGvz`{$ z@GX%tMC`D=mn~W&bqCu~J7ei5dF79OJ~OgekdD@7+z^-#Fbye56e4WL&X$#=Xy#b> zW+d($v;UvFsa0(t)w_~-r+mntRI>RJ#g^#UbX#PVlg*v`<=2_dxLdl66$=`seLUHJ zh6g6=A(&|r%3rFpI`cLw^VYx{Y6fCwXTn0x8+L}B3wh^i;3@nVekOcOG%w|ZFi{jo zHkc)!?NeCkL=LN<$`OT*qs?iBGIO;#UzBfgC=uC9-jIDM-+YNt$v3jESMwU*H8s^K z%`()bZ^4e6fLACgy+y!cQ;jF~S8RDZly#C)77S_mObJt%pd|w`{SrMFY#$Q1MKvSA z@@Hz2H+!1qLt2FuLE@+m1}74lYIfv(RF)Kgi<@A_mkCcQ%3SK|oJ3qGd7or&j+85b zeQk*VWi&Qtu=JEUYDLHGMKJ5_wEHgT1_3+uvIRVCgNA3*|(}{`^>KqcoKFo1CJW?8j(xP8BnT zuR>@@tJv&RF~+Il=X6nei{#QOULBLI!YQiBZpu`_l3tosEqJcwQZR_BbCwnzY(GQP zUcPD$iMr|-W(y`yAyB4HZh!ujY2Ckl-n8zsRBdT?lMUoI*G;sStZ%#qQiA_S^ zT2O;i&=;J7dZ{^+M@u=4QYsICsOk3!c+neB>ag0e*VAfCAqppE1$~x|9%)HBTIe(L zzQ&R>;R~8*D^Ms~-m--xsX$Yc{i^^qqUzAZHQrg%K?U1{{*9guv!=^-T6H`n-&I3sRqo`YqBwPET(Ua!4=W=3_|!#c{fk7g2VwTQI>=JgD7+kkt;K z_k`pZ{2ZDj&D_{q%KIy2-tkeL1jr$oB(4^={2FHn!(k(j3?XMbm#9l)ucS3vmIYXpf#( znKoS*PEW<~9lmZpYf@MM@<&sWHw2tM`fYrhw8j&yf z-D&5`rd&WTb|(;FJ}zrE`G&@7ZIojvs~;NcvVTk2|Ik<=7X@LPq9xez1HKHhg~#6zPQCXL;Ib10b$>rP`nTYo=cEs6E_@RL3Lz5Xsf zp==o2$&pDgX*nG+)zl}e7Lh~-&1iQ)PPsGM2EJtm^M&l6E2WjC)=TX$CY);NTkHn> z;|;9E(ahsgIY+^Gw%BLV;0Y~CS>$E` z_jrrlVX~NdCDz<;X1=8_4IJL)V8uqbY_ZE+ zxU_2^rqak`Bu3dXA`_F)mJ8A>uZTjQj_ef>Y3m!)X{(%AfUU&mieOZ1w1iMbHdl4X zJ_pnzIv)uqXBLFe4vNi{<<+YUD0!$3~Q5=+ctehbWGbe>DU>;j`}p1(^i?jo(46Dbii)ORg+-q&+O!+%Ce%w*7&> zqi3Hgcs|a0>-?egsF9|+|7+Z2m z%B5g;y_V@)CK{IxWY?1E>SihSy>o^X1n-rQ?t#=PEKaM=Ge0(7aXn>AMT}M z`+XGe18Ce(Y$p~RPOLpLUAJ>$SEAj5&z_4?Lk=Hd2CqAK{P>tH8Sdx(S?WOz7p*X6 zJ}ul$IDFC*b$%B09`{Ph$*Sanqw^wdv+|0XIN4AH9}C-``)~SJ4w#o({p{0>3OCWe znR5)Xz-4}|+;ihvzt@-N**YKjDmZsL%cP0@FzNKfqxw9e&%^qZi@eekC>;zfIf@#S**_z zeNNW&lk{1x&oX_M>T`-d_iM_1`fSjrXr`;i+||PcXZi2$>G;Y2=7wYp$ zo=``6TnPoW<~_J|%IxCVKiK1-hGSIhI_89bNXJT9U?W3JSn z)2HcA!BqX3I7NTXo6OHWw-j8(k5%h=aK8Tf9$d&TO!2|1<-6lmHbzqg_rH*bXTm(s z0}}b*m3*ZNLOccFRKa|Wh0hgS<-E1}7JjYElWMz~Zzd&=`L+~qiP;7Hd~ZMKvBum3 z9_2f7C1c0l3%A`PW2)6}OD+cqr3MMdMj0fqF8}`;35P(!|5?)kGO8K|latQ@DjbwKv40~-^8jtJTMUNty*4KVh=E3f*d@HpAmO;3#IbD2Ju z>odwTJ7ple&MGe%-4!dbW|tT9UR3$wdv9C&c?-E{D&vt!o(C5uO4TR~5w`$1k`n*e@)AV^i&v2xTQIsCH zmG{e8L8QkO!Hgc<0N;7Aod?@~1(jXZi+9F9>9H+LF(Q{PWf=Yh0Vw4wUnTGN@_sot ziS4}lffCA+!P(R#H}nf5w?*aKRTv$g6{cV-g^_l>GK85^tb>JTR0d3SYz*+K3_n0 zBK9XRBwyr@Q~YZyuAE*K{acG^+c5E?BV8WaJohjEkU&@s)DU2<>^zRS> zrZ)yK+m01Y=Zya&a_Mz|dRgvR`}^*Vf0&N?!Jts<VkQeOu5pOy8vEKVQ^mr?e)lJtDTl1GhM}nL`f)+e@6|aD+_<5uX z1aX2wyI8vEa?pBP#3#`n9`u$em($f;p|su`zxZbIcv!2-uYH)@WQ&eL==3wW!~|*#NBX)ns>T!kdsLNcW)r0|;;IGPjmfNcP_T z)4Dz(ZHP{Fb5uC-=(~>eon|#2w(>02!Uvl;tq&-dU%u12#>Oe(yX2zX5Vx!yY&ra4 zb=&)aV<)HOm`cF~5otKzLpo9)*5@Po+^o;Xc$)DI=2^EiTMaY3yTif9XBGz^zx;o- z_bu>o71jTfHncnn1Z<^1kqb7oK$G5mzwYiPO_Mflnxskk!op^=dpFs3v%BnW(xw)S zP!QSz1q-5}mWPT6S`ZLxHoJk@#*Mv4|r(-t2}n@h{Z%j$j$_*weeI2i za80=H2E;TLBbPOfK(f2Ayf}1& zi!AZp7jb(o%3us__~6p>UfnyeYwwHPp6neM!4ui0B0YLy_a^Z2$cFP?MQsn`aTyt8 z(sMfPN=p0w%gg3+w+YKC-k}$&@39Nj57^=*54HZG?*5;kDSHD?6pp;;@xo#6@4Sf| zusDcgSJF>@H(K2mkWlb3Rb@BQa4<&IwD9PR>fQ*!KuK^pUH00R*+WS|PO zL6!vGG|g9wm;7Wdg#Qrz`qL2`aFJGF3|7yNSK==r{3UYEBgk*3eEL-`e{b~zpt84m z8-Di{AjsV}lloa=qoh&VDA?;F)x-o|b!lp9)n$M)M=-zX1L7kL2#f<9*nu;ncLzTN zqK^^W31}*-rrry+ZqZMwpoM*pp9MB()v)`ss0wRTS|vWpIee1;Cav6CJ)8el`0pM3 zH!UCbR!`)=xz1GcnX8)mVQ)2c&E9H~9<|{A{h!=}6>K?R7QhZT6)+C)*9R)t=KCtx z1%Mo2IiMAAD}a7FC$QnWj$p%Bf(&oO^O5+R0KixuRsg#I&mpjt0i*$VJ7gH!EyLFU zJ`WfKtOncwz_$1B0^pAv&W0Zu%Z48XJO;>s{;olAXz#70hz~z8z0XG7+0`3Dm3b-6}pU3B0fH8QU0&oJF09}9{KpLDsr>XGRj}zdRj~GGuNqAkSR$HCsc|WmNvG9VA(`%#kb(4MDy8;DQ&KXW z9Vnn&A~TSVOX-Z1)e9m`r_rIFJD}zZ)v^}~qtnZ)1x{=rD+)*nRMa2Mq8zV50t#{o zA4z&ze>9cK#OQlwpde)uQoq`t$qnJV;3ub5rsJnG1;M%+7j%=oX-;+^r<&!oIz?$w zUn-d|NXa-y2Lb#nN=JKAs#M5GoRw%nmGaqWOqCLuoTL#EvdUoGu+J^W%R`WU45h8G zUpleAD8!wT;?Y7BG@7(N&?}@q(3;Kb6u5<go5@9ULl$nq_DYrd zZb@b!6_BE$7xvmR@kQ^9D{3XeO%VXXu2{e zxhN{=4}m?lpt-ANLH(TOhMI=9w)xGCH8x5uvQMjRHWC@vZ^5sw1b!(G%}%L7*r;qS zQ^=66#4?$cNhIZ^d@QG`X=GaYDmTt7;ziwhg{)e(({x?7ua@de3H>(Z%-bz^7TL@? zCPZdV&1W;|yefLsq_N+=66`T0J&;O4iupn`#|NC=i_@#~rOY7V-*!{=%Cge?y;kH6u5(I*z_tW%>tfi8^gih3`XU zhoo34lZSU$=u1NFwV59D8{3+szG&XS>cJoY3o$i0sK&t{)zY8r?JGzKWx)uycmFOgKTC!g=LM+{+zX7^}b6&%S^fLD$_Zyh&7aK?aB(icV9 zrgi}lKcZS8Yf`p|CN79PnI6ongy2^7K{7)3AVZp+l4*%r0gWoafYO;BjiUBjp3SPN z0Q4=LN%J}Rt}j$nQGx)<>jusU;Wo0W?kicT&{Sj|Hb(U4GzvbPza`hbyYE_s0mz@pCHZOg{k56yV5Za1j17 zWJowl860cdrvqoM1*crwKMkCynzz}#HL*et>kK^m?8dX*J+bhuKXiUktJVDdf3^Nyp9?Go@;^t`)Rx~Sv+Z@h5&`0O>;^!HA1wa$Cs z+RDEaQinb@`INQxP3JV#x}ORB?i;ISOg`%3vDZzz@W!{s-+0B{kDa|I)6((N*Uo(U z?^iE9ZnE#{=Cyykdd2T2{rt4a*M4|N)ui0zXRW{O);`hlyDq4x8d<>j9`#N?VOsoB(!rF^+LJqm{}J4DkbdB1%bc*rYN3Q4g3 zxXV(Os!T$&*JwzguNL|;aa!~h=gn>F?1IepncvW{ti3DJKr*!uFllS~oelfS zUr^srQrav_dBr8oyoR;~?Ii_^+QjpV3nPC~8qQb-`ocq5e2hr?Frsxjv?tGmtbCz$118IUpBOP~w3sA0dd{rF!#HKYU`20l%?zQA-PN3y)*yR3y$%D+T9z zGr44;uU{r-$m`_nlKKi6p7~ra; z&yp15%G34$%2+Ar&qRu?0xaQ$62{oyxuK$JBGL(Veu-5{m$0fm_j3tHRS7j|@ZEn2)}>9Vt;Ju!q1 zdi#KooF*oxt zFY_@!3or#07uQ8^mX2X#StZ^%8^^|D1$Y=coE^a?up`+~>}V`Qj$y~LPoZZgu}`z( z*kpEm5rq@jiEIixiG7Bh%p`USJC%KwO=Z>WG&YS*XQ#6>*qLkwt6{ZlCX<k+i*U~CJ*S(u9`n#GKHMYB2>=dtQo5c)`;c+x+s`FeN%w6nS7AZ^`| zrPemt8nBx&z=N3Cfu2+{#fq3OEky~LP~tI z=-^tyWB-ikH|cz#Uj|VvIcP zs}N15;kv_*(IUSEbfmNjN=mC+C?#K$@y5)M3b}!F489^C?u^z6F>Ng%DwOoNH)5p; zY(D70WJ?TL*Ee(;*7wDA3Q{6;j-v#t@}+e)=xSCS7gf>&Kfq8{9_s33fujF~fjrZm zd5E7`oa&;We< zC`G?-)^P~`HaycgK^%%>58#>nld*uEc%FpMO2BR%=MX%9fahcIN%c**x}xe+_@w$I zJRgluinGdirn1%_T?7oPO4`3?nl;qc9AZ-?%J)`a(bHH(qA)qP*bbt#C)VKFT1+p` zS9yk)3|z9**1cQty%b06Okl}LI>2yP1?$|Dao|JrCDF2$)pghyW5(W?HV1IqPIcx7 zdh$cqjE5^_u`|Z#Hkyr|)i>8P2bE++ahB59hFQR%Y!=nFbjp@9$nS?gV+}u=d!r8G zYmvEn+8;YiKbv7`x4!LV8Tm#lK(}a5MeGrlsX^mGtV=}?l}9w^DMRK_J|9@nVMSsT zS|++hJm_azOjMz5x}bq?(&u)6pQx=AHG=6vBq9b*@Fm&{Lq|!*h9PZ>mGWSXF#dP- zA!>|MV;4kIG@*kRlWn6v#3nCqqp?~phbY*Zq3z9S#@H%H+Qy2Cj{T0F2-f~V_z+Thpg$5V z6mmGaK^}$4LrI^a5>cgza{xXmemJNatZHA&@>z^op4ENxrj-`#?Hi9DQ7fmv`)>yo zBl#X|yGfkMo`HfE!K0Ge56wSTC_|3|KeB&q-+Qm3w={ptK7%8;^|g{Fga;5H?$vb#i8CO1U(XuX#YyJ6vsL~iI5l!U`xbJ zXzN?lV`Q5#m0q}9x{9L=-&~jNt1;P&@|wdlsD)#Mjpm!;upgy$E~40Ee-e9T7}laT z&C}FGn1c;NJ%Y}@P~hi?Sk*z`B9Nk6lKuiFt%IUpQl@qwPrdXn@I}iOg9xfD>O0Xd z5FQ`I)cE>_`3Iy=bPmjeQ7u0>b#P^p`fes2wK|wO1b!Y%vEsG~y%cS-%*Vnd=Y%UB=bHwEZA$!W(pvDPbOLu#m>PXPzKCJI|xsLgI?92|n#QXXOBu)yJqYCe=nP9~S5_}nix$x!nyOj|-c znCZN&R9W%f3t1&|^F`|zsfW%IlZjx)I&T(F;>*9X`-(>%uJ=V82Y{rWAy|DWimu6? ziRiwyE#>AI93zImEo$x5bxTXNR17+^qS!0a)~Gl~HJGF&K$F&X(d~kaNEfPVq!a(t zHgjBv4Pl(;jOB*1wDCZ}9C%_B;)YeqMF$G>ij}2IG{2Isz^oV;KDohUtlZc(S8Wu+ zAUrPMCTu10F3`^~!xrPn1yQiB(ShNIYDM!IIvGgkwem4|Ff(vOGu=x^;}}1$Ng*A| zLL67@onU`S-%v}dm{*cCClKwnRzOn|`b-i zXHBP7zW!5pMO_ly_W=?BI*durlm?55F6G0WOKwf3zb9#I>q%1cY`W)*pV7|`rDIsP z7y9@H`KnB=*e5e|h{la}2%Qg}rml9w`@vZieO*qIFLBptX7ia%oNqPtz@TeE#eOv3 ztF&5xqHLB=6v!PZ8sB`v)XVxdyEu&D1Xj%Lev?vbii+CIS5_AL)M4I#r z{Nnv#bY*`?mJRR&oWz^X%phiym;Jhqh_w`L%aH zI(5IU8t1gFuPc<3k)T>ygYKf1%1of2LGrZHvucnQ`@q=br(4Uf^GD%`{VLwh&aV2d zMV(ZKZvUtq)TO!&*IM0GRAz2{>+F_BDpN+L6d~mrqbnIEb#qNzI(Dg%OFEjnh!`)_ z(O5rQ-wfy9+v#XC_PSx!<7s|8mQfjwW+)9=t)3*s>C2Y!OGYS~tPYK1{L)61pi#ap zCHg_N7VCs@##1*E5xz5sW0u;4S;7yu0K~t(fv6*)ZtU6fP#zxXOfz2}HRtmK)Dh4v zp(5qvZRL?Vb7oU#V;4OL)iwKwk3|xnK(WxX-C+Jq)*K2}OuX}|#I ziweU~(-7ib0QXAd>J(mOJQ#giFyA`bJ1G1@eQnS!-H+Rs3_BKB>6kJ%`az|l0HU>$_=`70+A zu`0k!g0L8^0`v_vezMCt?_2ygQAipcOXK}1@@wdvzL@Jse)=3Q)-s~ubbd_b2Uda8 zPEnr%`Ay_S>3)CyV07K6mi&8o+r~7@L;~?(Z4*tGG^9knl~+@4#ce8wTSQZP2ana8 zJ|N%o)s}bDiAg%SHdD}{RY$vE7~yHWO@_4*Syu|L_h7$L%;pEO8KV7WbI2{gHk00U z*78MdG79K#o*4xUz8bB3K}!wRjI)vD+l#ifWVE267RT037r?CY4mD-W-PaNn%i4`z zoI#AR6u~TCPPZ-Ce1&0cKlj2c2z)b%JDUrVcn_C!!aUW$ON;TluXNfYBSad-c)uq~ z=Lu;gPUi_p?+iJV97WJHo6#81TvqMivmsdP*#)9ww%Ky7y66xBEzLE*Szm{0{u0X4 zF*V|h7}Ce0E;wp2HU%&oGISo)jHL*r;wR5|S!j!R&)4LoNS`dYhU#(sFg4liTjRL4 z7KeaukfNiurkH1tiHH9!nM23y8q5nx|YhR978NJtQhuEuz`Shoy0TosU` z9K(G6%l&FrV)m=Goo0Ty79XfBkY7&*M^tK(6wb$KA-vyWT^?)wRt~FJ*LmNRLo<5E z%CkU}%CNi-yDW-W8RY>XQ^(8oRk>o)G&1nh1ZNnFYAS9Sw+BxL=STSR6;diC_wUd{ ztg$~!u6r&QEDo(#*Z03Aa?$pb_sqA%VhFWJf_R`mN~qcc(;V^ zquc`E4B;1@C!upBbbh1~z<($aKXbK@f9p5h;!}rPhlo^1=j_hIp1iR7gKSO9RsEsi zN8UOAE0o^gUp^SK*&=Z@n_rICax%+tjECZuV)0Mk9rooNY6_uMH4;yymWvn2vhg0y z*Hru_u>RoEF6&q0nXVe6FFW;5@%@t?O&&kR=dS@G{bdW@VYq{3ihd7^$lqbfC%R24 z&IRjtywG+M$-Rd+_``mHn~Vme+9S4DKz| z2$lT)&z(X4yYCEI(rJ%4?6nvo@W+~GHP$Z^-!5kj^hWnw9+_s-#~=dGpdG;L>LXvV z87|YW#x96v7bn$KZ3zm9urD97D2;o2EGf@wt3{Qvft!U_RnORaM6Hvbouc4#eV(%E ziOp~9Xl-l}Jlr*=6Y<;yS}+ym##c1qK8Pj!PKbI&Q<=b=J1!58FI`Bmrz#_~^XGQ5 z>Eqz$#j>#LGw2B+J;s)g!~Bts^=DZ-J;nO48@B6^1a@l}d-jlozPI|qAqlL=^6ZsE z66A)ncMeJLI3o5tDkJ%{Ueg&wl}>=Llg4RrRJ>bDR5{sRdMacfS7jWnqOnE7qGKZT z;-b!90I2ca9UDOdSF%4;Mh4RS=}d6Q zTg^+}hI*i6Sp5>&Q!69-(*o@SZ(jD_{g5y^6dmpci;YTk6__um!LOAg=@7MZmcjIN-nix1e(; z@P33ez{vfm{{ehH2;Lt9?&By6*a^H50DB#62J8f6e}_*1+l4ZKc0f0v3cPHkwBI8Q zPI1Y3&<@xJsJaq)fSvUfY!9G&Rt4Jzka4NpCP39}+^e>fL{Rq1UTj~&;Tp} zd>*hFa0lRNz#9Pecm+Ed5C$v-jiv&EfKI>)z%bw| zfI9&{1H1`1%}d!N&Kz5l`O^jS(;^V7VliVN0?^?HoykO zEhc>W5r+i$C3i5!{6av15z$gDuNoAi^U1b236pIEM?SDWj60u-vuM64Nun65K&O~+ zaRCu4Fp{yO}+#zk*(c=HkzznngpSy%hD%@rj#3!GEKh`?Jb1;x?k&Tkn+=u1Qx7plU{5$}VLFs(gm1Ub3K zUk0CB;e=XH&Ld{gkfaS(gtfdutWiNbM6rcwB(^3s-o#e zWSUcAIaU*?sHyv+NRhgUL^9-~jEFUp7MOUuXjG%gg5z$Tm8N=$Qu;6*Rf06Q9J49h z7ZpK>J)IdbNA$Qv!uvKCXYO_}>@Z0Q_glo5w5B6N|6$p=pR zX(m=*W)|lpK(1I4gwIoP-k}(m`bQsa#TiBRfQ}bN$_b0o`&UBAiUd!orPC%SQ8b>7 zlyb#!lM0sBqp0Tk%OU4g)ijr!ETve79dR^z!1B~`vLXSF5|w_YU=&XUTnJSxJ4z|7 z9iavsNElUEi`59_qw#MlJpV?cQ;#JWl?cBvQgl>tbT*9?@*m?7+94%-Y^~p*A_D7L z97EgYDT_#^a&#?XFT89K!(NstXV~*{-0APQVde6lpZ^afP{pe10P?Y{YAOCk4Z~iF zXyu50ccl2NJRf%<0$Kp~0$v4d24n#YcP-8ZOa-I>n*c;-`EW(mS^zy?k2~CM0c--$ z_d48pvJ{X7TmskvxEDZq^rtcIIQ}90m33_&h0^}>^FJ+t3fywS2!@MmqL>9@S!L4k z_vZNCUH1s$BNW~!`BB2F`%{u`LxR(6wemFWI0u6I!D)-Snrgh$=ujXoqNG4?aN3ZX zpB4@sdALGv7xeewUL_Dn=Y!L*L+{VS@$Qf2Yx*xDAuW+dH`yUQ+YX*#9L?sSkw&Z-;ts(_0)Jf&Y-}Q ztbNG9E)4&pNY6#WiPi{^0z2A8+yrbz?Idj3Xxa9Sdo%44g0ra?!U zx$jz(nMFJ)GmXZfxH4174PQ$7qU=|UHhP(*Qa(&RT0T*pBj@B*@_F*5@@?|n@&odV z@(1!P+e%x`w#s&=?Z>vC*j}^!-uAI=y#00iUVEeS8K>-Ob-COr_XX}7+-p3?d+WUy zdnfzczJb6sfd>P}D*?q89u6}JXYNstB!5l5NB&r@vhA?l=(xx68%MwMo6b+1Q(Q6E zgRZw--*o@b-Q=nA)_T9~-R`~D_lj@Of4l#8NlEDZzG?o8{qOsm15X4RmE(d#!4HE& zp`V0m!?#ip4e>C>PC#46+t%3LuzBo$$E}WW&Nhm-jed)R*x0``_?aC|^;2t{fgbHaH_#AM6gk7(6cY65S}?4*u~mK|V)* z(|)4!ht9BTt?OH^zqo?#KfC99Uh)k2w)-aeyZnFghXOyu#YVQ^^}%C8=Y(?Mhe!t9 zJgm=dkl&VnWq-NV!zz}S;taG)=_Y*cC2*_JJvZaacp#Ka%^_o=6KHWA|$!Ud86}D z=dYc6obNe5aDIfKW2Ng**96yk*DjaGy~{n>bF#V!_aSeKZ;S6`-#Gtz zzZB>R6at0N=h1(chQ1aW9}a};!aobY6y6j5klHbfySwl)UOrj=ru<#`Y54{Dukvo& zefAIS6CG|x&~dh7tK%o=&$k_iIfKp$*BP#Pu9dEwYn|&o*GX=VJLkUD{kr?>o-@4f zd(T2|uJ5!eSvMg?Q6ChZMWL)vpr!u(J|h6yYoJbgV&v>xMsP&=k|CW z^gQ8t!xQke`C`6}zBT>}{Tux=1KvP=V13}@z&Pb-mJ$~Pv{xN}Ppf9H=&B4LY>0vc| ze)#Dy+sY8*rSX56{H%Pmtl)aAGu^klzwdd>^OWZW&+DFm zcZ2s4@2}8<-Tp29-}+C46x##Iz{P=E0}lnB54;(Wl!eMU${OWzB@tR5x;69&!rZgN zXN6PY%_PH}*bl--OuiT`{Ia|SmZ#fxt!=Aq#8zvcYwxvRVZY9PgZ*!Ix1-DP4abii zuR6v$k9JOSc012^zU4gA6?Lt4E%tl?vb+Lgr`qfAHhahVCi?I2zv6ETJQt``yvkDL z^UBwh-_rOU(duLJa{HzB*X(m0Es$duB)Qzt4f}JrbEWeE=TDt4I;&jAxxVDO-Srvw zD)$xcYuvZFx4Q3g-|K$Bz0Lio`$_i>_fB`h^BvDpuP3-HcyI8H;J8pQ)E>G#bY1Ah zP;>Z;;d`ikd$jqt4e}kbePHXcueBfU7(zX3oF6(@xK_EJa{Ivd3hyi4w!l9EdF2V^ z_TZht2ZJNQ8$#a>y%Rb*JTLqNDBD|5Pf9(ynwV z-wW*u9YMU}giakk#>h{|Gi@I@FL2r1^WCcZG57oKv%OWmvwdrPJA60!f9C(Ye_KFS z^2&OQk~ftjgLec^frVod{_YXVx64c9sGOFsl2e$EesBAX{SNzc_EQ~O9D5u#wE0`E zhhW=xx?XUNxbAk3_tauUd;^yKY;T3{T;KP7XDb_(zr&_K8~kjD$=Ejn&ApD}Tq`kq zo#p)!dN<^2^=#ZRQa>=MsQ9j8rl;2U8p*|AY6csZw>z_{8;$4@INsh zRPcG{)ACf=A!|@N;!=&?T&|TTJ)fIK03oGpNEcFa|c6#3N zZ1MgYJ@&TuJ@1FO8gHC$g6~-0WZ!3eQ+;RnWX#%%Z`R;>+9!G!u92WgG-!9)DeS3U=_kH9W<3H4Ylz*cC1i$1z z%|F9$_j~;z|7`y}f4hINf4RTM-{(*J3;s3Gl#5{*ukv5(|Azl&|E>P5{(Jln_#gH^ z>3`Y(ntzx7kN$W4ANr3BGzR7e76z6C&JM%^D+1>RR>SsO9Jnm7IdFa8=D=-%djs18 zj|X-HUJQ%`_Q1kbDaR}Gpm~dxP9M zysf;eOb&h~I5l`iP!76-!QkxR{9p&hTz9ZHm;d*4=RpKQOtewTf$<0!{O#|aJz`a5>nbE8X9B z|HJ(We3prx6FidVG|vo=-Q)FyFw4xt9JAO%=f}uTm|(B6j|BGw-wRfTCWod#B2z=t zLrSPFG&?jm)Dr3r#Y26eR45x-7rF$q+osUw&@G|cLR&+3h3*aQ2<;3#A9^|TYG_aB zz0e1tk6^bah9`%ogr)G*uotsQ9qjnr@bYjsB-#giJ{(>bz9hUcyeWKh_!h`@E6H>i zd%pNsF306QIVET1)$&?M^b&cayh*-R-eliwzuvyZevAD!dtIOfb4OQTX&@fx3#0?@1NdJ%j{1<%t$}Ru^ diff --git a/libssh2.lib b/libssh2.lib old mode 100644 new mode 100755 index 36af1d17b64bbb7354e69dcd0ed5205a3e88d2df..c348a30ef0533f3ff08b5a0eeba0023c1833874f GIT binary patch literal 35648 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 From 08a584f7f09cb164a3e951a01f3aa96b31ab7993 Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Sat, 8 Feb 2025 15:45:11 -0500 Subject: [PATCH 03/12] ancient --- audio.d | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/audio.d b/audio.d index b053100..2e70c08 100644 --- a/audio.d +++ b/audio.d @@ -67,7 +67,7 @@ class Audio{ active = false; return; } - if(Mix_OpenAudio(22050, AUDIO_S16SYS, 2, 4096/2 /* the /2 is new */) != 0){ + if(1) { // if(Mix_OpenAudio(22050, AUDIO_S16SYS, 2, 4096/2 /* the /2 is new */) != 0){ active = false; //throw new Error; error = true; audioIsLoaded = false; From 01cc666976e1e72549835c0bfcd995195673fc91 Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Sat, 8 Feb 2025 15:45:30 -0500 Subject: [PATCH 04/12] safer by default annotations --- com.d | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/com.d b/com.d index a1d10da..fdfd423 100644 --- a/com.d +++ b/com.d @@ -1159,7 +1159,7 @@ extern (D) void ObjectDestroyed() } -char[] oleCharsToString(char[] buffer, OLECHAR* chars) { +char[] oleCharsToString(char[] buffer, OLECHAR* chars) @system { auto c = cast(wchar*) chars; auto orig = c; @@ -1470,7 +1470,7 @@ BOOL SetKeyAndValue(LPCSTR pszKey, LPCSTR pszSubkey, LPCSTR pszValue) return result; } -void unicode2ansi(char *s) +void unicode2ansi(char *s) @system { wchar *w; From 34481024a6435334ebaa23cb881d920bb4b587d3 Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Sat, 8 Feb 2025 15:45:51 -0500 Subject: [PATCH 05/12] 64 bit compat --- terminalemulator.d | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terminalemulator.d b/terminalemulator.d index 35cab08..8d40967 100644 --- a/terminalemulator.d +++ b/terminalemulator.d @@ -3544,7 +3544,7 @@ version(use_libssh2) { throw new Exception("fingerprint"); import std.string : toStringz; - if(auto err = libssh2_userauth_publickey_fromfile_ex(session, username.ptr, username.length, toStringz(keyFile ~ ".pub"), toStringz(keyFile), null)) + if(auto err = libssh2_userauth_publickey_fromfile_ex(session, username.ptr, cast(int) username.length, toStringz(keyFile ~ ".pub"), toStringz(keyFile), null)) throw new Exception("auth"); From ea09f6530a65065a0cf8b92896c965eb2fffd3cb Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Sat, 8 Feb 2025 15:46:18 -0500 Subject: [PATCH 06/12] just for with expressions --- dom.d | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/dom.d b/dom.d index 6313d0d..74514dc 100644 --- a/dom.d +++ b/dom.d @@ -2308,6 +2308,7 @@ class Element : DomParent { // do nothing, this is primarily a virtual hook // for links and forms void setValue(string field, string value) { } + void setValue(string field, string[] value) { } // this is a thing so i can remove observer support if it gets slow @@ -3351,6 +3352,15 @@ class Element : DomParent { return stealChildren(d.root); } + /++ + Returns `this` for use inside `with` expressions. + + History: + Added December 20, 2024 + +/ + inout(Element) self() inout pure @nogc nothrow @safe scope return { + return this; + } /++ Inserts a child under this element after the element `where`. @@ -5750,6 +5760,10 @@ class Link : Element { updateQueryString(vars); } + override void setValue(string name, string[] variable) { + assert(0, "not implemented FIXME"); + } + /// Removes the given variable from the query string void removeValue(string name) { auto vars = variablesHash(); @@ -5821,6 +5835,10 @@ class Form : Element { setValue(field, value, true); } + override void setValue(string name, string[] variable) { + assert(0, "not implemented FIXME"); + } + // FIXME: doesn't handle arrays; multiple fields can have the same name /// Set's the form field's value. For input boxes, this sets the value attribute. For From 1c13f6fa53250b938108b8c1586272c302f84577 Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Sat, 8 Feb 2025 15:46:41 -0500 Subject: [PATCH 07/12] stdout is techncially right check hre --- terminal.d | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terminal.d b/terminal.d index c1613d9..59aefb2 100644 --- a/terminal.d +++ b/terminal.d @@ -2219,7 +2219,7 @@ http://msdn.microsoft.com/en-us/library/windows/desktop/ms683193%28v=vs.85%29.as return [cols, rows]; } else { winsize w; - ioctl(0, TIOCGWINSZ, &w); + ioctl(1, TIOCGWINSZ, &w); return [w.ws_col, w.ws_row]; } } From 16f17911f62ac75fbb9556cb5ac6e6a459957fa1 Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Sat, 8 Feb 2025 15:47:01 -0500 Subject: [PATCH 08/12] irrelevant --- cgi.d | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cgi.d b/cgi.d index 5cb3a87..0af9f25 100644 --- a/cgi.d +++ b/cgi.d @@ -6929,12 +6929,14 @@ version(cgi_with_websocket) { return true; } - if(bfr.sourceClosed) + if(bfr.sourceClosed) { return false; + } bfr.popFront(0); - if(bfr.sourceClosed) + if(bfr.sourceClosed) { return false; + } goto top; } From 6d4683d4ce662e0873d4481f6b6c2e498335410c Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Sat, 8 Feb 2025 15:47:50 -0500 Subject: [PATCH 09/12] support for minigui --- simpledisplay.d | 4 ++-- textlayouter.d | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/simpledisplay.d b/simpledisplay.d index 7a678a6..bacbc3e 100644 --- a/simpledisplay.d +++ b/simpledisplay.d @@ -813,8 +813,6 @@ interface->SetProgressValue(hwnd, 40, 100); +/ module arsd.simpledisplay; -import arsd.core; - // FIXME: tetris demo // FIXME: space invaders demo // FIXME: asteroids demo @@ -1162,6 +1160,8 @@ unittest { // FIXME: space invaders demo // FIXME: asteroids demo +import arsd.core; + version(OSX) version(DigitalMars) version=OSXCocoa; version(Emscripten) { diff --git a/textlayouter.d b/textlayouter.d index bc51f50..219a1f2 100644 --- a/textlayouter.d +++ b/textlayouter.d @@ -24,6 +24,9 @@ +/ module arsd.textlayouter; +// see: https://harfbuzz.github.io/a-simple-shaping-example.html + + // FIXME: unicode private use area could be delegated out but it might also be used by something else. // just really want an encoding scheme for replaced elements that punt it outside.. @@ -347,6 +350,15 @@ public struct Selection { return this; } + /++ + Gets the current user coordinate, the point where they explicitly want the caret to be near. + + History: + Added January 24, 2025 + +/ + Point getUserCoordinate() { + return impl.virtualFocusPosition; + } /+ Moving the internal position +/ From a3728bdc37c481ec794819b85e57710bedfd263a Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Sat, 8 Feb 2025 15:48:25 -0500 Subject: [PATCH 10/12] lots of good new stuff --- minigui.d | 1008 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 653 insertions(+), 355 deletions(-) diff --git a/minigui.d b/minigui.d index b0d3f38..366596f 100644 --- a/minigui.d +++ b/minigui.d @@ -329,6 +329,16 @@ the virtual functions remain as the default calculated values. then the reads go $(H4 custom widgets - how to write your own) + See some example programs: https://github.com/adamdruppe/minigui-samples + + When you can't build your application out of existing widgets, you'll want to make your own. The general pattern is to subclass [Widget], write a constructor that takes a `Widget` parent argument you pass to `super`, then set some values, override methods you want to customize, and maybe add child widgets and events as appropriate. You might also be able to subclass an existing other Widget and customize that way. + + To get more specific, let's consider a few illustrative examples, then we'll come back to some principles. + + $(H5 Custom Widget Examples) + + $(H5 More notes) + See [Widget]. If you override [Widget.recomputeChildLayout], don't forget to call `registerMovement()` at the top of it, then call recomputeChildLayout of all its children too! @@ -446,6 +456,30 @@ the virtual functions remain as the default calculated values. then the reads go More to come. + Widget_tree_notes: + minigui doesn't really formalize these distinctions, but in practice, there are multiple types of widgets: + + $(LIST + * Containers - a widget that holds other widgets directly, generally [Layout]s. [WidgetContainer] is an attempt to formalize this but is nothing really special. + + * Reparenting containers - a widget that holds other widgets inside a different one of their parents. [MainWindow] is an example - any time you try to add a child to the main window, it actually goes to a special container one layer deeper. [ScrollMessageWidget] also works this way. + + --- + auto child = new Widget(mainWindow); + assert(child.parent is mainWindow); // fails, its actual parent is mainWindow's inner container instead. + --- + + * Limiting containers - a widget that can only hold children of a particular type. See [TabWidget], which can only hold [TabWidgetPage]s. + + * Simple controls - a widget that cannot have children, but instead does a specific job. + + * Compound controls - a widget that is comprised of children internally to help it do a specific job, but externally acts like a simple control that does not allow any more children. Ideally, this is encapsulated, but in practice, it leaks right now. + ) + + In practice, all of these are [Widget]s right now, but this violates the OOP principles of substitutability since some operations are not actually valid on all subclasses. + + Future breaking changes might be related to making this more structured but im not sure it is that important to actually break stuff over. + My_UI_Guidelines: Note that the Linux custom widgets generally aim to be efficient on remote X network connections. @@ -464,6 +498,20 @@ the virtual functions remain as the default calculated values. then the reads go I want to do some newer ideas that might not be easy to keep working fully on Windows, like adding a menu search feature and scrollbar custom marks and typing in numbers. I might make them a default part of the widget with custom, and let you provide them through a menu or something elsewhere. History: + In January 2025 (dub v12.0), minigui got a few more breaking changes: + + $(LIST + * `defaultEventHandler_*` functions take more specific objects. So if you see errors like: + + --- + Error: function `void arsd.minigui.EditableTextWidget.defaultEventHandler_focusin(Event foe)` does not override any function, did you mean to override `void arsd.minigui.Widget.defaultEventHandler_focusin(arsd.minigui.FocusInEvent event)`? + --- + + Go to the file+line number from the error message and change `Event` to `FocusInEvent` (or whatever one it tells you in the "did you mean" part of the error) and recompile. No other changes should be necessary to be compatible with this change. + + * Most event classes, except those explicitly used as a base class, are now marked `final`. If you depended on this subclassing, let me know and I'll see what I can do, but I expect there's little use of it. I now recommend all event classes the `final` unless you are specifically planning on extending it. + ) + Minigui had mostly additive changes or bug fixes since its inception until May 2021. In May 2021 (dub v10.0), minigui got an overhaul. If it was versioned independently, I'd @@ -761,6 +809,21 @@ version(Windows) { +/ class Widget : ReflectableProperties { + private int toolbarIconSize() { + return scaleWithDpi(24); + } + + + /++ + Returns the current size of the widget. + + History: + Added January 3, 2025 + +/ + final Size size() const { + return Size(width, height); + } + private bool willDraw() { return true; } @@ -1173,12 +1236,24 @@ class Widget : ReflectableProperties { History: Added May 10, 2021 + + Examples: + + --- + addEventListener((MouseUpEvent ev) { + if(ev.button == MouseButton.left) { + // the first arg is the state to modify, the second arg is what to set it to + setDynamicState(DynamicState.depressed, false); + } + }); + --- + +/ enum DynamicState : ulong { focus = (1 << 0), /// the widget currently has the keyboard focus hover = (1 << 1), /// the mouse is currently hovering over the widget (may not always be updated) - valid = (1 << 2), /// the widget's content has been validated and it passed (do not set if not validation has been performed!) - invalid = (1 << 3), /// the widget's content has been validated and it failed (do not set if not validation has been performed!) + valid = (1 << 2), /// the widget's content has been validated and it passed (do not set if no validation has been performed!) + invalid = (1 << 3), /// the widget's content has been validated and it failed (do not set if no validation has been performed!) checked = (1 << 4), /// the widget is toggleable and currently toggled on selected = (1 << 5), /// the widget represents one option of many and is currently selected, but is not necessarily focused nor checked. disabled = (1 << 6), /// the widget is currently unable to perform its designated task @@ -1566,29 +1641,33 @@ class Widget : ReflectableProperties { just want to change the default behavior of an existing event type in a subclass, you override the function (and optionally call `super.method_name`) like normal. + History: + Some of the events changed to take specific subclasses instead of generic `Event` + on January 3, 2025. + +/ protected EventHandler[string] defaultEventHandlers; /// ditto void setupDefaultEventHandlers() { - defaultEventHandlers["click"] = (Widget t, Event event) { t.defaultEventHandler_click(cast(ClickEvent) event); }; - defaultEventHandlers["dblclick"] = (Widget t, Event event) { t.defaultEventHandler_dblclick(cast(DoubleClickEvent) event); }; - defaultEventHandlers["keydown"] = (Widget t, Event event) { t.defaultEventHandler_keydown(cast(KeyDownEvent) event); }; - defaultEventHandlers["keyup"] = (Widget t, Event event) { t.defaultEventHandler_keyup(cast(KeyUpEvent) event); }; - defaultEventHandlers["mouseover"] = (Widget t, Event event) { t.defaultEventHandler_mouseover(cast(MouseOverEvent) event); }; - defaultEventHandlers["mouseout"] = (Widget t, Event event) { t.defaultEventHandler_mouseout(cast(MouseOutEvent) event); }; - defaultEventHandlers["mousedown"] = (Widget t, Event event) { t.defaultEventHandler_mousedown(cast(MouseDownEvent) event); }; - defaultEventHandlers["mouseup"] = (Widget t, Event event) { t.defaultEventHandler_mouseup(cast(MouseUpEvent) event); }; - defaultEventHandlers["mouseenter"] = (Widget t, Event event) { t.defaultEventHandler_mouseenter(cast(MouseEnterEvent) event); }; - defaultEventHandlers["mouseleave"] = (Widget t, Event event) { t.defaultEventHandler_mouseleave(cast(MouseLeaveEvent) event); }; - defaultEventHandlers["mousemove"] = (Widget t, Event event) { t.defaultEventHandler_mousemove(cast(MouseMoveEvent) event); }; - defaultEventHandlers["char"] = (Widget t, Event event) { t.defaultEventHandler_char(cast(CharEvent) event); }; - defaultEventHandlers["triggered"] = (Widget t, Event event) { t.defaultEventHandler_triggered(event); }; - defaultEventHandlers["change"] = (Widget t, Event event) { t.defaultEventHandler_change(event); }; - defaultEventHandlers["focus"] = (Widget t, Event event) { t.defaultEventHandler_focus(event); }; - defaultEventHandlers["blur"] = (Widget t, Event event) { t.defaultEventHandler_blur(event); }; - defaultEventHandlers["focusin"] = (Widget t, Event event) { t.defaultEventHandler_focusin(event); }; - defaultEventHandlers["focusout"] = (Widget t, Event event) { t.defaultEventHandler_focusout(event); }; + defaultEventHandlers["click"] = (Widget t, Event event) { if(auto e = cast(ClickEvent) event) t.defaultEventHandler_click(e); }; + defaultEventHandlers["dblclick"] = (Widget t, Event event) { if(auto e = cast(DoubleClickEvent) event) t.defaultEventHandler_dblclick(e); }; + defaultEventHandlers["keydown"] = (Widget t, Event event) { if(auto e = cast(KeyDownEvent) event) t.defaultEventHandler_keydown(e); }; + defaultEventHandlers["keyup"] = (Widget t, Event event) { if(auto e = cast(KeyUpEvent) event) t.defaultEventHandler_keyup(e); }; + defaultEventHandlers["mouseover"] = (Widget t, Event event) { if(auto e = cast(MouseOverEvent) event) t.defaultEventHandler_mouseover(e); }; + defaultEventHandlers["mouseout"] = (Widget t, Event event) { if(auto e = cast(MouseOutEvent) event) t.defaultEventHandler_mouseout(e); }; + defaultEventHandlers["mousedown"] = (Widget t, Event event) { if(auto e = cast(MouseDownEvent) event) t.defaultEventHandler_mousedown(e); }; + defaultEventHandlers["mouseup"] = (Widget t, Event event) { if(auto e = cast(MouseUpEvent) event) t.defaultEventHandler_mouseup(e); }; + defaultEventHandlers["mouseenter"] = (Widget t, Event event) { if(auto e = cast(MouseEnterEvent) event) t.defaultEventHandler_mouseenter(e); }; + defaultEventHandlers["mouseleave"] = (Widget t, Event event) { if(auto e = cast(MouseLeaveEvent) event) t.defaultEventHandler_mouseleave(e); }; + defaultEventHandlers["mousemove"] = (Widget t, Event event) { if(auto e = cast(MouseMoveEvent) event) t.defaultEventHandler_mousemove(e); }; + defaultEventHandlers["char"] = (Widget t, Event event) { if(auto e = cast(CharEvent) event) t.defaultEventHandler_char(e); }; + defaultEventHandlers["triggered"] = (Widget t, Event event) { if(auto e = cast(Event) event) t.defaultEventHandler_triggered(e); }; + defaultEventHandlers["change"] = (Widget t, Event event) { if(auto e = cast(ChangeEventBase) event) t.defaultEventHandler_change(e); }; + defaultEventHandlers["focus"] = (Widget t, Event event) { if(auto e = cast(FocusEvent) event) t.defaultEventHandler_focus(e); }; + defaultEventHandlers["blur"] = (Widget t, Event event) { if(auto e = cast(BlurEvent) event) t.defaultEventHandler_blur(e); }; + defaultEventHandlers["focusin"] = (Widget t, Event event) { if(auto e = cast(FocusInEvent) event) t.defaultEventHandler_focusin(e); }; + defaultEventHandlers["focusout"] = (Widget t, Event event) { if(auto e = cast(FocusOutEvent) event) t.defaultEventHandler_focusout(e); }; } /// ditto @@ -1626,15 +1705,15 @@ class Widget : ReflectableProperties { /// ditto void defaultEventHandler_triggered(Event event) {} /// ditto - void defaultEventHandler_change(Event event) {} + void defaultEventHandler_change(ChangeEventBase event) {} /// ditto - void defaultEventHandler_focus(Event event) {} + void defaultEventHandler_focus(FocusEvent event) {} /// ditto - void defaultEventHandler_blur(Event event) {} + void defaultEventHandler_blur(BlurEvent event) {} /// ditto - void defaultEventHandler_focusin(Event event) {} + void defaultEventHandler_focusin(FocusInEvent event) {} /// ditto - void defaultEventHandler_focusout(Event event) {} + void defaultEventHandler_focusout(FocusOutEvent event) {} /++ [Event]s use a Javascript-esque model. See more details on the [Event] page. @@ -2110,7 +2189,7 @@ class Widget : ReflectableProperties { History: Added July 2, 2021 (v10.2) +/ - protected void addScrollPosition(ref int x, ref int y) {}; + protected void addScrollPosition(ref int x, ref int y) {} /++ Responsible for actually painting the widget to the screen. The clip rectangle and coordinate translation in the [WidgetPainter] are pre-configured so you can draw independently. @@ -2730,19 +2809,33 @@ abstract class ComboboxBase : Widget { } /++ - This event is fired when the selection changes. Note it inherits - from ChangeEvent!string, meaning you can use that as well, and it also - fills in [Event.intValue]. + This event is fired when the selection changes. Both [Event.stringValue] and + [Event.intValue] are filled in - `stringValue` is the text in the selection + and `intValue` is the index of the selection. If the combo box allows multiple + selection, these values will include only one of the selected items - for those, + you should loop through the values and check their selected flag instead. + + (I know that sucks, but it is how it is right now.) + + History: + It originally inherited from `ChangeEvent!String`, but now does from [ChangeEventBase] as of January 3, 2025. + This shouldn't break anything if you used it through either its own name `SelectionChangedEvent` or through the + base `Event`, only if you specifically used `ChangeEvent!string` - those handlers may now get `null` or fail to + be called. If you did do this, just change it to generic `Event`, as `stringValue` and `intValue` are already there. +/ - static class SelectionChangedEvent : ChangeEvent!string { + static final class SelectionChangedEvent : ChangeEventBase { this(Widget target, int iv, string sv) { - super(target, &stringValue); + super(target); this.iv = iv; this.sv = sv; } immutable int iv; immutable string sv; + deprecated("Use stringValue or intValue instead") @property string value() { + return sv; + } + override @property string stringValue() { return sv; } override @property int intValue() { return iv; } } @@ -7075,7 +7168,7 @@ class HorizontalScrollbar : ScrollbarBase { override int minWidth() { return scaleWithDpi(48); } } -class ScrollToPositionEvent : Event { +final class ScrollToPositionEvent : Event { enum EventString = "scrolltoposition"; this(Widget target, int value) { @@ -9436,8 +9529,10 @@ class Window : Widget { /++ History: Added January 12, 2022 + + Made `final` on January 3, 2025 +/ -class DpiChangedEvent : Event { +final class DpiChangedEvent : Event { enum EventString = "dpichanged"; this(Widget target) { @@ -10067,8 +10162,10 @@ class TableView : Widget { History: Added November 27, 2021 (dub v10.4) + + Made `final` on January 3, 2025 +/ -class HeaderClickedEvent : Event { +final class HeaderClickedEvent : Event { enum EventString = "HeaderClicked"; this(Widget target, int columnIndex) { this.columnIndex = columnIndex; @@ -10443,6 +10540,10 @@ private void autoExceptionHandler(Exception e) { messageBox(e.msg); } +void callAsIfClickedFromMenu(alias fn)(auto ref __traits(parent, fn) _this, Window window) { + makeAutomaticHandler!(fn)(window, &__traits(child, _this, fn))(); +} + private void delegate() makeAutomaticHandler(alias fn, T)(Window window, T t) { static if(is(T : void delegate())) { return () { @@ -11085,8 +11186,6 @@ class ToolBar : Widget { } } -enum toolbarIconSize = 24; - /// An implementation helper for [ToolBar]. Generally, you shouldn't create these yourself and instead just pass [Action]s to [ToolBar]'s constructor and let it create the buttons for you. class ToolButton : Button { /// @@ -11114,101 +11213,114 @@ class ToolButton : Button { painter.drawThemed(delegate Rectangle (const Rectangle bounds) { painter.outlineColor = Color.black; - // I want to get from 16 to 24. that's * 3 / 2 - static assert(toolbarIconSize >= 16); - enum multiplier = toolbarIconSize / 8; - enum divisor = 2 + ((toolbarIconSize % 8) ? 1 : 0); + immutable multiplier = toolbarIconSize / 4; + immutable divisor = 16 / 4; + + int ScaledNumber(int n) { + // return n * multiplier / divisor; + auto s = n * multiplier; + auto it = s / divisor; + auto rem = s % divisor; + if(rem && n >= 8) // cuz the original used 0 .. 16 and we want to try to stay centered so things in the bottom half tend to be added a it + it++; + return it; + } + + arsd.color.Point Point(int x, int y) { + return arsd.color.Point(ScaledNumber(x), ScaledNumber(y)); + } + switch(action.iconId) { case GenericIcons.New: painter.fillColor = Color.white; painter.drawPolygon( - Point(3, 2) * multiplier / divisor, Point(3, 13) * multiplier / divisor, Point(12, 13) * multiplier / divisor, Point(12, 6) * multiplier / divisor, - Point(8, 2) * multiplier / divisor, Point(8, 6) * multiplier / divisor, Point(12, 6) * multiplier / divisor, Point(8, 2) * multiplier / divisor, - Point(3, 2) * multiplier / divisor, Point(3, 13) * multiplier / divisor + Point(3, 2), Point(3, 13), Point(12, 13), Point(12, 6), + Point(8, 2), Point(8, 6), Point(12, 6), Point(8, 2), + Point(3, 2), Point(3, 13) ); break; case GenericIcons.Save: painter.fillColor = Color.white; painter.outlineColor = Color.black; - painter.drawRectangle(Point(2, 2) * multiplier / divisor, Point(13, 13) * multiplier / divisor); + painter.drawRectangle(Point(2, 2), Point(13, 13)); // the label - painter.drawRectangle(Point(4, 8) * multiplier / divisor, Point(11, 13) * multiplier / divisor); + painter.drawRectangle(Point(4, 8), Point(11, 13)); // the slider painter.fillColor = Color.black; painter.outlineColor = Color.black; - painter.drawRectangle(Point(4, 3) * multiplier / divisor, Point(10, 6) * multiplier / divisor); + painter.drawRectangle(Point(4, 3), Point(10, 6)); painter.fillColor = Color.white; painter.outlineColor = Color.white; // the disc window - painter.drawRectangle(Point(5, 3) * multiplier / divisor, Point(6, 5) * multiplier / divisor); + painter.drawRectangle(Point(5, 3), Point(6, 5)); break; case GenericIcons.Open: painter.fillColor = Color.white; painter.drawPolygon( - Point(4, 4) * multiplier / divisor, Point(4, 12) * multiplier / divisor, Point(13, 12) * multiplier / divisor, Point(13, 3) * multiplier / divisor, - Point(9, 3) * multiplier / divisor, Point(9, 4) * multiplier / divisor, Point(4, 4) * multiplier / divisor); + Point(4, 4), Point(4, 12), Point(13, 12), Point(13, 3), + Point(9, 3), Point(9, 4), Point(4, 4)); painter.drawPolygon( - Point(2, 6) * multiplier / divisor, Point(11, 6) * multiplier / divisor, - Point(12, 12) * multiplier / divisor, Point(4, 12) * multiplier / divisor, - Point(2, 6) * multiplier / divisor); - //painter.drawLine(Point(9, 6) * multiplier / divisor, Point(13, 7) * multiplier / divisor); + Point(2, 6), Point(11, 6), + Point(12, 12), Point(4, 12), + Point(2, 6)); + //painter.drawLine(Point(9, 6), Point(13, 7)); break; case GenericIcons.Copy: painter.fillColor = Color.white; - painter.drawRectangle(Point(3, 2) * multiplier / divisor, Point(9, 10) * multiplier / divisor); - painter.drawRectangle(Point(6, 5) * multiplier / divisor, Point(12, 13) * multiplier / divisor); + painter.drawRectangle(Point(3, 2), Point(9, 10)); + painter.drawRectangle(Point(6, 5), Point(12, 13)); break; case GenericIcons.Cut: painter.fillColor = Color.transparent; painter.outlineColor = getComputedStyle.foregroundColor(); - painter.drawLine(Point(3, 2) * multiplier / divisor, Point(10, 9) * multiplier / divisor); - painter.drawLine(Point(4, 9) * multiplier / divisor, Point(11, 2) * multiplier / divisor); - painter.drawRectangle(Point(3, 9) * multiplier / divisor, Point(5, 13) * multiplier / divisor); - painter.drawRectangle(Point(9, 9) * multiplier / divisor, Point(11, 12) * multiplier / divisor); + painter.drawLine(Point(3, 2), Point(10, 9)); + painter.drawLine(Point(4, 9), Point(11, 2)); + painter.drawRectangle(Point(3, 9), Point(5, 13)); + painter.drawRectangle(Point(9, 9), Point(11, 12)); break; case GenericIcons.Paste: painter.fillColor = Color.white; - painter.drawRectangle(Point(2, 3) * multiplier / divisor, Point(11, 11) * multiplier / divisor); - painter.drawRectangle(Point(6, 8) * multiplier / divisor, Point(13, 13) * multiplier / divisor); - painter.drawLine(Point(6, 2) * multiplier / divisor, Point(4, 5) * multiplier / divisor); - painter.drawLine(Point(6, 2) * multiplier / divisor, Point(9, 5) * multiplier / divisor); + painter.drawRectangle(Point(2, 3), Point(11, 11)); + painter.drawRectangle(Point(6, 8), Point(13, 13)); + painter.drawLine(Point(6, 2), Point(4, 5)); + painter.drawLine(Point(6, 2), Point(9, 5)); painter.fillColor = Color.black; - painter.drawRectangle(Point(4, 5) * multiplier / divisor, Point(9, 6) * multiplier / divisor); + painter.drawRectangle(Point(4, 5), Point(9, 6)); break; case GenericIcons.Help: painter.outlineColor = getComputedStyle.foregroundColor(); - painter.drawText(Point(0, 0), "?", Point(width, height), TextAlignment.Center | TextAlignment.VerticalCenter); + painter.drawText(arsd.color.Point(0, 0), "?", arsd.color.Point(width, height), TextAlignment.Center | TextAlignment.VerticalCenter); break; case GenericIcons.Undo: painter.fillColor = Color.transparent; - painter.drawArc(Point(3, 4) * multiplier / divisor, 9 * multiplier / divisor, 9 * multiplier / divisor, 0, 360 * 64); + painter.drawArc(Point(3, 4), ScaledNumber(9), ScaledNumber(9), 0, 360 * 64); painter.outlineColor = Color.black; painter.fillColor = Color.black; painter.drawPolygon( - Point(4, 4) * multiplier / divisor, - Point(8, 2) * multiplier / divisor, - Point(8, 6) * multiplier / divisor, - Point(4, 4) * multiplier / divisor, + Point(4, 4), + Point(8, 2), + Point(8, 6), + Point(4, 4), ); break; case GenericIcons.Redo: painter.fillColor = Color.transparent; - painter.drawArc(Point(3, 4) * multiplier / divisor, 9 * multiplier / divisor, 9 * multiplier / divisor, 0, 360 * 64); + painter.drawArc(Point(3, 4), ScaledNumber(9), ScaledNumber(9), 0, 360 * 64); painter.outlineColor = Color.black; painter.fillColor = Color.black; painter.drawPolygon( - Point(10, 4) * multiplier / divisor, - Point(6, 2) * multiplier / divisor, - Point(6, 6) * multiplier / divisor, - Point(10, 4) * multiplier / divisor, + Point(10, 4), + Point(6, 2), + Point(6, 6), + Point(10, 4), ); break; default: painter.outlineColor = getComputedStyle.foregroundColor; - painter.drawText(Point(0, 0), action.label, Point(width, height), TextAlignment.Center | TextAlignment.VerticalCenter); + painter.drawText(arsd.color.Point(0, 0), action.label, arsd.color.Point(width, height), TextAlignment.Center | TextAlignment.VerticalCenter); } return bounds; }); @@ -12321,11 +12433,11 @@ class MouseActivatedWidget : Widget { }); } - override void defaultEventHandler_focus(Event ev) { + override void defaultEventHandler_focus(FocusEvent ev) { super.defaultEventHandler_focus(ev); this.redraw(); } - override void defaultEventHandler_blur(Event ev) { + override void defaultEventHandler_blur(BlurEvent ev) { super.defaultEventHandler_blur(ev); setDynamicState(DynamicState.depressed, false); this.redraw(); @@ -12776,6 +12888,38 @@ class Button : MouseActivatedWidget { private Sprite sprite; private int displayFlags; + protected bool needsOwnerDraw() { + return &this.paint !is &Button.paint || &this.useStyleProperties !is &Button.useStyleProperties || &this.paintContent !is &Button.paintContent; + } + + version(win32_widgets) + override int handleWmDrawItem(DRAWITEMSTRUCT* dis) { + auto itemId = dis.itemID; + auto hdc = dis.hDC; + auto rect = dis.rcItem; + switch(dis.itemAction) { + // skipping setDynamicState because i don't want to queue the redraw unnecessarily + case ODA_SELECT: + dynamicState_ &= ~DynamicState.depressed; + if(dis.itemState & ODS_SELECTED) + dynamicState_ |= DynamicState.depressed; + goto case; + case ODA_FOCUS: + dynamicState_ &= ~DynamicState.focus; + if(dis.itemState & ODS_FOCUS) + dynamicState_ |= DynamicState.focus; + goto case; + case ODA_DRAWENTIRE: + auto painter = WidgetPainter(this.simpleWindowWrappingHwnd.draw(true), this); + //painter.impl.hdc = hdc; + paint(painter); + break; + default: + } + return 1; + + } + /++ Creates a push button with the given label, which may be an image or some text. @@ -12788,17 +12932,27 @@ class Button : MouseActivatedWidget { The button with label and image will respect requests to show both on Windows as of March 28, 2022 iff you provide a manifest file to opt into common controls v6. +/ + this(string label, Widget parent) { + this(ImageLabel(label), parent); + } + + /// ditto this(ImageLabel label, Widget parent) { + bool needsImage; version(win32_widgets) { - // FIXME: use ideal button size instead - width = 50; - height = 30; super(parent); // BS_BITMAP is set when we want image only, so checking for exactly that combination enum imgFlags = ImageLabel.DisplayFlags.displayImage | ImageLabel.DisplayFlags.displayText; auto extraStyle = ((label.displayFlags & imgFlags) == ImageLabel.DisplayFlags.displayImage) ? BS_BITMAP : 0; + // could also do a virtual method needsOwnerDraw which default returns true and we control it here. typeid(this) == typeid(Button) for override check. + + if(needsOwnerDraw) { + extraStyle |= BS_OWNERDRAW; + needsImage = true; + } + // the transparent thing can mess up borders in other cases, so only going to keep it for bitmap things where it might matter createWin32Window(this, "button"w, label.label, BS_PUSHBUTTON | extraStyle, extraStyle == BS_BITMAP ? WS_EX_TRANSPARENT : 0 ); @@ -12810,24 +12964,19 @@ class Button : MouseActivatedWidget { this.label = label.label; } else version(custom_widgets) { - width = 50; - height = 30; super(parent); label.label.extractWindowsStyleLabel(this.label_, this.accelerator); - - if(label.image) { - this.sprite = Sprite.fromMemoryImage(parentWindow.win, label.image); - this.displayFlags = label.displayFlags; - } - - this.alignment = label.alignment; + needsImage = true; } - } - /// - this(string label, Widget parent) { - this(ImageLabel(label), parent); + + if(needsImage && label.image) { + this.sprite = Sprite.fromMemoryImage(parentWindow.win, label.image); + this.displayFlags = label.displayFlags; + } + + this.alignment = label.alignment; } override int minHeight() { return defaultLineHeight + 4; } @@ -12862,20 +13011,20 @@ class Button : MouseActivatedWidget { } mixin OverrideStyle!Style; - version(custom_widgets) - override void paint(WidgetPainter painter) { - painter.drawThemed(delegate Rectangle(const Rectangle bounds) { - if(sprite) { - sprite.drawAt( - painter, - bounds.upperLeft + Point((bounds.width - sprite.width) / 2, (bounds.height - sprite.height) / 2), - Point(0, 0) - ); - } else { - painter.drawText(bounds.upperLeft, label, bounds.lowerRight, alignment | TextAlignment.VerticalCenter); - } - return bounds; - }); + override Rectangle paintContent(WidgetPainter painter, const Rectangle bounds) { + if(sprite) { + sprite.drawAt( + painter, + bounds.upperLeft + Point((bounds.width - sprite.width) / 2, (bounds.height - sprite.height) / 2), + Point(0, 0) + ); + } else { + Point pos = bounds.upperLeft; + if(this.height == 16) + pos.y -= 2; // total hack omg + painter.drawText(pos, label, bounds.lowerRight, alignment | TextAlignment.VerticalCenter); + } + return bounds; } override int flexBasisWidth() { @@ -12903,6 +13052,41 @@ class Button : MouseActivatedWidget { } } +/++ + A button with a custom appearance, even on systems where there is a standard button. You can subclass it to override its style, paint, or paintContent functions, or you can modify its members for common changes. + + History: + Added January 14, 2024 ++/ +class CustomButton : Button { + this(ImageLabel label, Widget parent) { + super(label, parent); + } + + this(string label, Widget parent) { + super(label, parent); + } + + version(win32_widgets) + override protected void privatePaint(WidgetPainter painter, int lox, int loy, Rectangle containment, bool force, bool invalidate) { + // paint is driven by handleWmDrawItem instead of minigui's redraw events + if(hwnd) + InvalidateRect(hwnd, null, false); // get Windows to trigger the actual redraw + return; + } + + override void paint(WidgetPainter painter) { + // the parent does `if(hwnd) return;` because + // normally we don't want to draw on standard controls, + // but this is an exception if it is an owner drawn button + // (which is determined in the constructor by testing, + // at runtime, for the existence of an overridden paint + // member anyway, so this needed to trigger BS_OWNERDRAW) + // sdpyPrintDebugString("drawing"); + painter.drawThemed(&paintContent); + } +} + /++ A button with a consistent size, suitable for user commands like OK and CANCEL. +/ @@ -13233,7 +13417,7 @@ class TextDisplayHelper : Widget { return ctx; } - override void defaultEventHandler_blur(Event ev) { + override void defaultEventHandler_blur(BlurEvent ev) { super.defaultEventHandler_blur(ev); if(l.wasMutated()) { auto evt = new ChangeEvent!string(this, &this.content); @@ -13406,9 +13590,6 @@ class TextDisplayHelper : Widget { this.redraw(); }); - bool mouseDown; - bool mouseActuallyMoved; - this.addEventListener((scope ResizeEvent re) { // FIXME: I should add a method to give this client area width thing if(wordWrapEnabled_) @@ -13420,155 +13601,14 @@ class TextDisplayHelper : Widget { this.redraw(); }); - this.addEventListener((scope KeyDownEvent kde) { - switch(kde.key) { - case Key.Up, Key.Down, Key.Left, Key.Right: - case Key.Home, Key.End: - stateCheckpoint = true; - bool setPosition = false; - switch(kde.key) { - case Key.Up: l.selection.moveUp(); break; - case Key.Down: l.selection.moveDown(); break; - case Key.Left: l.selection.moveLeft(); setPosition = true; break; - case Key.Right: l.selection.moveRight(); setPosition = true; break; - case Key.Home: l.selection.moveToStartOfLine(); setPosition = true; break; - case Key.End: l.selection.moveToEndOfLine(); setPosition = true; break; - default: assert(0); - } + } - if(kde.shiftKey) - l.selection.setFocus(); - else - l.selection.setAnchor(); - - selectionChanged(); - - if(setPosition) - l.selection.setUserXCoordinate(); - scrollForCaret(); - redraw(); - break; - case Key.PageUp, Key.PageDown: - // FIXME - scrollForCaret(); - break; - case Key.Delete: - if(l.selection.isEmpty()) { - l.selection.setAnchor(); - l.selection.moveRight(); - l.selection.setFocus(); - } - deleteContentOfSelection(); - adjustScrollbarSizes(); - scrollForCaret(); - break; - case Key.Insert: - break; - case Key.A: - if(kde.ctrlKey) - selectAll(); - break; - case Key.F: - // find - break; - case Key.Z: - if(kde.ctrlKey) - undo(); - break; - case Key.R: - if(kde.ctrlKey) - redo(); - break; - case Key.X: - if(kde.ctrlKey) - cut(); - break; - case Key.C: - if(kde.ctrlKey) - copy(); - break; - case Key.V: - if(kde.ctrlKey) - paste(); - break; - case Key.F1: - with(l.selection()) { - moveToStartOfLine(); - setAnchor(); - moveToEndOfLine(); - moveToIncludeAdjacentEndOfLineMarker(); - setFocus(); - replaceContent(""); - } - - redraw(); - break; - /* - case Key.F2: - l.selection().changeStyle((old) => l.registerStyle(new MyTextStyle( - //(cast(MyTextStyle) old).font, - font2, - Color.red))); - redraw(); - break; - */ - case Key.Tab: - // we process the char event, so don't want to change focus on it, unless the user overrides that with ctrl - if(acceptsTabInput && !kde.ctrlKey) - kde.preventDefault(); - break; - default: - } - }); + private { + bool mouseDown; + bool mouseActuallyMoved; Point downAt; - static if(UsingSimpledisplayX11) - this.addEventListener((scope ClickEvent ce) { - if(ce.button == MouseButton.middle) { - parentWindow.win.getPrimarySelection((txt) { - doStateCheckpoint(); - - // import arsd.core; writeln(txt);writeln(l.selection.getContentString);writeln(preservedPrimaryText); - - if(txt == l.selection.getContentString && preservedPrimaryText.length) - l.selection.replaceContent(preservedPrimaryText); - else - l.selection.replaceContent(txt); - redraw(); - }); - } - }); - - this.addEventListener((scope DoubleClickEvent dce) { - if(dce.button == MouseButton.left) { - with(l.selection()) { - scope dg = delegate const(char)[] (scope return const(char)[] ch) { - if(ch == " " || ch == "\t" || ch == "\n" || ch == "\r") - return ch; - return null; - }; - find(dg, 1, true).moveToEnd.setAnchor; - find(dg, 1, false).moveTo.setFocus; - selectionChanged(); - redraw(); - } - } - }); - - this.addEventListener((scope MouseDownEvent ce) { - if(ce.button == MouseButton.left) { - downAt = Point(ce.clientX - this.paddingLeft, ce.clientY - this.paddingTop); - l.selection.moveTo(adjustForSingleLine(smw.position + downAt)); - l.selection.setAnchor(); - mouseDown = true; - mouseActuallyMoved = false; - parentWindow.captureMouse(this); - this.redraw(); - } - //writeln(ce.clientX, ", ", ce.clientY, " = ", l.offsetOfClick(Point(ce.clientX, ce.clientY))); - }); - Timer autoscrollTimer; int autoscrollDirection; int autoscrollAmount; @@ -13602,77 +13642,257 @@ class TextDisplayHelper : Widget { autoscrollAmount = 0; autoscrollDirection = 0; } + } - this.addEventListener((scope MouseMoveEvent ce) { - if(mouseDown) { - auto movedTo = Point(ce.clientX - this.paddingLeft, ce.clientY - this.paddingTop); + override void defaultEventHandler_mousemove(scope MouseMoveEvent ce) { + if(mouseDown) { + auto movedTo = Point(ce.clientX - this.paddingLeft, ce.clientY - this.paddingTop); - // FIXME: when scrolling i actually do want a timer. - // i also want a zone near the sides of the window where i can auto scroll + // FIXME: when scrolling i actually do want a timer. + // i also want a zone near the sides of the window where i can auto scroll - auto scrollMultiplier = scaleWithDpi(16); - auto scrollDivisor = scaleWithDpi(16); // if you go more than 64px up it will scroll faster + auto scrollMultiplier = scaleWithDpi(16); + auto scrollDivisor = scaleWithDpi(16); // if you go more than 64px up it will scroll faster - if(!singleLine && movedTo.y < 4) { - setAutoscrollTimer(0, scrollMultiplier * -(movedTo.y-4) / scrollDivisor); - } else - if(!singleLine && (movedTo.y + 6) > this.height) { - setAutoscrollTimer(1, scrollMultiplier * (movedTo.y + 6 - this.height) / scrollDivisor); - } else - if(movedTo.x < 4) { - setAutoscrollTimer(2, scrollMultiplier * -(movedTo.x-4) / scrollDivisor); - } else - if((movedTo.x + 6) > this.width) { - setAutoscrollTimer(3, scrollMultiplier * (movedTo.x + 6 - this.width) / scrollDivisor); - } else - stopAutoscrollTimer(); - - l.selection.moveTo(adjustForSingleLine(smw.position + movedTo)); - l.selection.setFocus(); - mouseActuallyMoved = true; - this.redraw(); - } - }); - - this.addEventListener((scope MouseUpEvent ce) { - // FIXME: assert primary selection - if(mouseDown && ce.button == MouseButton.left) { - stateCheckpoint = true; - //l.selection.moveTo(adjustForSingleLine(smw.position + Point(ce.clientX - this.paddingLeft, ce.clientY - this.paddingTop))); - //l.selection.setFocus(); - mouseDown = false; - parentWindow.releaseMouseCapture(); + if(!singleLine && movedTo.y < 4) { + setAutoscrollTimer(0, scrollMultiplier * -(movedTo.y-4) / scrollDivisor); + } else + if(!singleLine && (movedTo.y + 6) > this.height) { + setAutoscrollTimer(1, scrollMultiplier * (movedTo.y + 6 - this.height) / scrollDivisor); + } else + if(movedTo.x < 4) { + setAutoscrollTimer(2, scrollMultiplier * -(movedTo.x-4) / scrollDivisor); + } else + if((movedTo.x + 6) > this.width) { + setAutoscrollTimer(3, scrollMultiplier * (movedTo.x + 6 - this.width) / scrollDivisor); + } else stopAutoscrollTimer(); - this.redraw(); - if(mouseActuallyMoved) - selectionChanged(); + l.selection.moveTo(adjustForSingleLine(smw.position + movedTo)); + l.selection.setFocus(); + mouseActuallyMoved = true; + this.redraw(); + } + + super.defaultEventHandler_mousemove(ce); + } + + override void defaultEventHandler_mouseup(scope MouseUpEvent ce) { + // FIXME: assert primary selection + if(mouseDown && ce.button == MouseButton.left) { + stateCheckpoint = true; + //l.selection.moveTo(adjustForSingleLine(smw.position + Point(ce.clientX - this.paddingLeft, ce.clientY - this.paddingTop))); + //l.selection.setFocus(); + mouseDown = false; + parentWindow.releaseMouseCapture(); + stopAutoscrollTimer(); + this.redraw(); + + if(mouseActuallyMoved) + selectionChanged(); + } + //writeln(ce.clientX, ", ", ce.clientY, " = ", l.offsetOfClick(Point(ce.clientX, ce.clientY))); + + super.defaultEventHandler_mouseup(ce); + } + + static if(UsingSimpledisplayX11) + override void defaultEventHandler_click(scope ClickEvent ce) { + if(ce.button == MouseButton.middle) { + parentWindow.win.getPrimarySelection((txt) { + doStateCheckpoint(); + + // import arsd.core; writeln(txt);writeln(l.selection.getContentString);writeln(preservedPrimaryText); + + if(txt == l.selection.getContentString && preservedPrimaryText.length) + l.selection.replaceContent(preservedPrimaryText); + else + l.selection.replaceContent(txt); + redraw(); + }); + } + + super.defaultEventHandler_click(ce); + } + + override void defaultEventHandler_dblclick(scope DoubleClickEvent dce) { + if(dce.button == MouseButton.left) { + with(l.selection()) { + scope dg = delegate const(char)[] (scope return const(char)[] ch) { + if(ch == " " || ch == "\t" || ch == "\n" || ch == "\r") + return ch; + return null; + }; + find(dg, 1, true).moveToEnd.setAnchor; + find(dg, 1, false).moveTo.setFocus; + selectionChanged(); + redraw(); } - //writeln(ce.clientX, ", ", ce.clientY, " = ", l.offsetOfClick(Point(ce.clientX, ce.clientY))); - }); + } - this.addEventListener((scope CharEvent ce) { - if(readonly) - return; - if(ce.character < 32 && ce.character != '\t' && ce.character != '\n' && ce.character != '\b') - return; // skip the ctrl+x characters we don't care about as plain text + super.defaultEventHandler_dblclick(dce); + } - if(singleLine && ce.character == '\n') - return; - if(!acceptsTabInput && ce.character == '\t') - return; + override void defaultEventHandler_mousedown(scope MouseDownEvent ce) { + if(ce.button == MouseButton.left) { + downAt = Point(ce.clientX - this.paddingLeft, ce.clientY - this.paddingTop); + l.selection.moveTo(adjustForSingleLine(smw.position + downAt)); + if(ce.shiftKey) + l.selection.setFocus(); + else + l.selection.setAnchor(); + mouseDown = true; + mouseActuallyMoved = false; + parentWindow.captureMouse(this); + this.redraw(); + } + //writeln(ce.clientX, ", ", ce.clientY, " = ", l.offsetOfClick(Point(ce.clientX, ce.clientY))); - doStateCheckpoint(); + super.defaultEventHandler_mousedown(ce); + } - char[4] buffer; - import arsd.core; - auto stride = encodeUtf8(buffer, ce.character); - l.selection.replaceContent(buffer[0 .. stride]); - l.selection.setUserXCoordinate(); - adjustScrollbarSizes(); - scrollForCaret(); - redraw(); - }); + override void defaultEventHandler_char(scope CharEvent ce) { + super.defaultEventHandler_char(ce); + + if(readonly) + return; + if(ce.character < 32 && ce.character != '\t' && ce.character != '\n' && ce.character != '\b') + return; // skip the ctrl+x characters we don't care about as plain text + + if(singleLine && ce.character == '\n') + return; + if(!acceptsTabInput && ce.character == '\t') + return; + + doStateCheckpoint(); + + char[4] buffer; + import arsd.core; + auto stride = encodeUtf8(buffer, ce.character); + l.selection.replaceContent(buffer[0 .. stride]); + l.selection.setUserXCoordinate(); + adjustScrollbarSizes(); + scrollForCaret(); + redraw(); + + } + + override void defaultEventHandler_keydown(scope KeyDownEvent kde) { + switch(kde.key) { + case Key.Up, Key.Down, Key.Left, Key.Right: + case Key.Home, Key.End: + stateCheckpoint = true; + bool setPosition = false; + switch(kde.key) { + case Key.Up: l.selection.moveUp(); break; + case Key.Down: l.selection.moveDown(); break; + case Key.Left: l.selection.moveLeft(); setPosition = true; break; + case Key.Right: l.selection.moveRight(); setPosition = true; break; + case Key.Home: l.selection.moveToStartOfLine(); setPosition = true; break; + case Key.End: l.selection.moveToEndOfLine(); setPosition = true; break; + default: assert(0); + } + + if(kde.shiftKey) + l.selection.setFocus(); + else + l.selection.setAnchor(); + + selectionChanged(); + + if(setPosition) + l.selection.setUserXCoordinate(); + scrollForCaret(); + redraw(); + break; + case Key.PageUp, Key.PageDown: + // want to act like the user clicked on the caret again + // after the scroll operation completed, so it would remain at + // about the same place on the viewport + auto oldY = smw.vsb.position; + smw.defaultKeyboardListener(kde); + auto newY = smw.vsb.position; + with(l.selection) { + auto uc = getUserCoordinate(); + uc.y += newY - oldY; + moveTo(uc); + + if(kde.shiftKey) + setFocus(); + else + setAnchor(); + } + break; + case Key.Delete: + if(l.selection.isEmpty()) { + l.selection.setAnchor(); + l.selection.moveRight(); + l.selection.setFocus(); + } + deleteContentOfSelection(); + adjustScrollbarSizes(); + scrollForCaret(); + break; + case Key.Insert: + break; + case Key.A: + if(kde.ctrlKey) + selectAll(); + break; + case Key.F: + // find + break; + case Key.Z: + if(kde.ctrlKey) + undo(); + break; + case Key.R: + if(kde.ctrlKey) + redo(); + break; + case Key.X: + if(kde.ctrlKey) + cut(); + break; + case Key.C: + if(kde.ctrlKey) + copy(); + break; + case Key.V: + if(kde.ctrlKey) + paste(); + break; + case Key.F1: + with(l.selection()) { + moveToStartOfLine(); + setAnchor(); + moveToEndOfLine(); + moveToIncludeAdjacentEndOfLineMarker(); + setFocus(); + replaceContent(""); + } + + redraw(); + break; + /* + case Key.F2: + l.selection().changeStyle((old) => l.registerStyle(new MyTextStyle( + //(cast(MyTextStyle) old).font, + font2, + Color.red))); + redraw(); + break; + */ + case Key.Tab: + // we process the char event, so don't want to change focus on it, unless the user overrides that with ctrl + if(acceptsTabInput && !kde.ctrlKey) + kde.preventDefault(); + break; + default: + } + + if(!kde.defaultPrevented) + super.defaultEventHandler_keydown(kde); } // we want to delegate all the Widget.Style stuff up to the other class that the user can see @@ -13863,12 +14083,12 @@ abstract class EditableTextWidget : Widget { super.focus(); } - override void defaultEventHandler_focusout(Event foe) { + override void defaultEventHandler_focusout(FocusOutEvent foe) { if(tdh !is null && foe.target is tdh) tdh.redraw(); } - override void defaultEventHandler_focusin(Event foe) { + override void defaultEventHandler_focusin(FocusInEvent foe) { if(tdh !is null && foe.target is tdh) tdh.redraw(); } @@ -14088,7 +14308,7 @@ abstract class EditableTextWidget : Widget { version(win32_widgets) { private string lastContentBlur; - override void defaultEventHandler_blur(Event ev) { + override void defaultEventHandler_blur(BlurEvent ev) { super.defaultEventHandler_blur(ev); if(!useCustomWidget) @@ -15093,10 +15313,10 @@ enum EventType : string { ## Creating Your Own Events - To avoid clashing in the string namespace, your events should use your module and class name as the event string. The simple code `mixin Register;` in your Event subclass will do this for you. + To avoid clashing in the string namespace, your events should use your module and class name as the event string. The simple code `mixin Register;` in your Event subclass will do this for you. You should mark events `final` unless you specifically plan to use it as a shared base. Only `Widget` and final classes should actually be sent (and preferably, not even `Widget`), with few exceptions. --- - class MyEvent : Event { + final class MyEvent : Event { this(Widget target) { super(EventString, target); } mixin Register; // adds EventString and other reflection information } @@ -15582,9 +15802,14 @@ void emitCommand(string CommandString, WidgetType, Args...)(WidgetType w, Args a } /++ + Widgets emit `ResizeEvent`s any time they are resized. You check [Widget.width] and [Widget.height] upon receiving this event to know the new size. + If you need to know the old size, you need to store it yourself. + + History: + Made final on January 3, 2025 (dub v12.0) +/ -class ResizeEvent : Event { +final class ResizeEvent : Event { enum EventString = "resize"; this(Widget target) { super(EventString, target); } @@ -15599,8 +15824,10 @@ class ResizeEvent : Event { History: Added June 21, 2021 (dub v10.1) + + Made final on January 3, 2025 (dub v12.0) +/ -class ClosingEvent : Event { +final class ClosingEvent : Event { enum EventString = "closing"; this(Widget target) { super(EventString, target); } @@ -15610,7 +15837,7 @@ class ClosingEvent : Event { } /// ditto -class ClosedEvent : Event { +final class ClosedEvent : Event { enum EventString = "closed"; this(Widget target) { super(EventString, target); } @@ -15620,7 +15847,7 @@ class ClosedEvent : Event { } /// -class BlurEvent : Event { +final class BlurEvent : Event { enum EventString = "blur"; // FIXME: related target? @@ -15630,7 +15857,7 @@ class BlurEvent : Event { } /// -class FocusEvent : Event { +final class FocusEvent : Event { enum EventString = "focus"; // FIXME: related target? @@ -15645,7 +15872,7 @@ class FocusEvent : Event { History: Added July 3, 2021 +/ -class FocusInEvent : Event { +final class FocusInEvent : Event { enum EventString = "focusin"; // FIXME: related target? @@ -15655,7 +15882,7 @@ class FocusInEvent : Event { } /// ditto -class FocusOutEvent : Event { +final class FocusOutEvent : Event { enum EventString = "focusout"; // FIXME: related target? @@ -15665,7 +15892,7 @@ class FocusOutEvent : Event { } /// -class ScrollEvent : Event { +final class ScrollEvent : Event { enum EventString = "scroll"; this(Widget target) { super(EventString, target); } @@ -15678,7 +15905,7 @@ class ScrollEvent : Event { History: Added May 2, 2021. Previously, this was simply a "char" event and `character` as a member of the [Event] base class. +/ -class CharEvent : Event { +final class CharEvent : Event { enum EventString = "char"; this(Widget target, dchar ch) { character = ch; @@ -15727,7 +15954,7 @@ abstract class ChangeEventBase : Event { History: Added May 11, 2021. Prior to that, widgets would more likely just send `new Event("change")`. These typed ChangeEvents are still compatible with listeners subscribed to generic change events. +/ -class ChangeEvent(T) : ChangeEventBase { +final class ChangeEvent(T) : ChangeEventBase { this(Widget target, T delegate() getNewValue) { assert(getNewValue !is null); this.getNewValue = getNewValue; @@ -15809,7 +16036,7 @@ abstract class KeyEventBase : Event { History: Added May 2, 2021. Previously, it was only seen as the base [Event] class on "keydown" event listeners. +/ -class KeyDownEvent : KeyEventBase { +final class KeyDownEvent : KeyEventBase { enum EventString = "keydown"; this(Widget target) { super(EventString, target); } } @@ -15825,7 +16052,7 @@ class KeyDownEvent : KeyEventBase { History: Added May 2, 2021. Previously, it was only seen as the base [Event] class on "keyup" event listeners. +/ -class KeyUpEvent : KeyEventBase { +final class KeyUpEvent : KeyEventBase { enum EventString = "keyup"; this(Widget target) { super(EventString, target); } } @@ -15921,6 +16148,8 @@ abstract class MouseEventBase : Event { Important: MouseDownEvent, MouseUpEvent, ClickEvent, and DoubleClickEvent are all sent for all mouse buttons and for wheel movement! You should check the [MouseEventBase.button|button] property in most your handlers to get correct behavior. + + Use [MouseEventBase.isMouseWheel] to filter wheel events while keeping others. ) [MouseDownEvent] is sent when the user presses a mouse button. It is also sent on mouse wheel movement. @@ -15931,7 +16160,7 @@ abstract class MouseEventBase : Event { [ClickEvent] is sent when the user clicks on the widget. It may also be sent with keyboard control, though minigui prefers to send a "triggered" event in addition to a mouse click and instead of a simulated mouse click in cases like keyboard activation of a button. - [DoubleClickEvent] is sent when the user clicks twice on a thing quickly, immediately after the second MouseDownEvent. The sequence is: MouseDownEvent, MouseUpEvent, ClickEvent, MouseDownEvent, DoubleClickEvent, MouseUpEvent. The second ClickEvent is NOT sent. Note that this is differnet than Javascript! They would send down,up,click,down,up,click,dblclick. Minigui does it differently because this is the way the Windows OS reports it. + [DoubleClickEvent] is sent when the user clicks twice on a thing quickly, immediately after the second MouseDownEvent. The sequence is: MouseDownEvent, MouseUpEvent, ClickEvent, MouseDownEvent, DoubleClickEvent, MouseUpEvent. The second ClickEvent is NOT sent. Note that this is different than Javascript! They would send down,up,click,down,up,click,dblclick. Minigui does it differently because this is the way the Windows OS reports it. [MouseOverEvent] is sent then the mouse first goes over a widget. Please note that this participates in event propagation of children! Use [MouseEnterEvent] instead if you are only interested in a specific element's whole bounding box instead of the top-most element in any particular location. @@ -15954,49 +16183,49 @@ abstract class MouseEventBase : Event { History: Added May 2, 2021. Previously, it was only seen as the base [Event] class on event listeners. See the member [EventString] to see what the associated string is with these elements. +/ -class MouseUpEvent : MouseEventBase { +final class MouseUpEvent : MouseEventBase { enum EventString = "mouseup"; /// this(Widget target) { super(EventString, target); } } /// ditto -class MouseDownEvent : MouseEventBase { +final class MouseDownEvent : MouseEventBase { enum EventString = "mousedown"; /// this(Widget target) { super(EventString, target); } } /// ditto -class MouseMoveEvent : MouseEventBase { +final class MouseMoveEvent : MouseEventBase { enum EventString = "mousemove"; /// this(Widget target) { super(EventString, target); } } /// ditto -class ClickEvent : MouseEventBase { +final class ClickEvent : MouseEventBase { enum EventString = "click"; /// this(Widget target) { super(EventString, target); } } /// ditto -class DoubleClickEvent : MouseEventBase { +final class DoubleClickEvent : MouseEventBase { enum EventString = "dblclick"; /// this(Widget target) { super(EventString, target); } } /// ditto -class MouseOverEvent : Event { +final class MouseOverEvent : Event { enum EventString = "mouseover"; /// this(Widget target) { super(EventString, target); } } /// ditto -class MouseOutEvent : Event { +final class MouseOutEvent : Event { enum EventString = "mouseout"; /// this(Widget target) { super(EventString, target); } } /// ditto -class MouseEnterEvent : Event { +final class MouseEnterEvent : Event { enum EventString = "mouseenter"; /// this(Widget target) { super(EventString, target); } override bool propagates() const { return false; } } /// ditto -class MouseLeaveEvent : Event { +final class MouseLeaveEvent : Event { enum EventString = "mouseleave"; /// this(Widget target) { super(EventString, target); } @@ -16788,15 +17017,59 @@ class FilePicker : Dialog { } extern(C) static int comparator(scope const void* a, scope const void* b) { - // FIXME: make it a natural sort for numbers - // maybe put dot files at the end too. auto sa = *cast(string*) a; auto sb = *cast(string*) b; - for(int i = 0; i < sa.length; i++) { - if(i == sb.length) - return 1; - auto diff = sa[i] - sb[i]; + /+ + Goal here: + + Dot first. This puts `foo.d` before `foo2.d` + Then numbers , natural sort order (so 9 comes before 10) for positive numbers + Then letters, in order Aa, Bb, Cc + Then other symbols in ascii order + +/ + static int nextPiece(ref string whole) { + if(whole.length == 0) + return -1; + + enum specialZoneSize = 1; + + char current = whole[0]; + if(current >= '0' && current <= '9') { + int accumulator; + do { + whole = whole[1 .. $]; + accumulator *= 10; + accumulator += current - '0'; + current = whole.length ? whole[0] : 0; + } while (current >= '0' && current <= '9'); + + return accumulator + specialZoneSize + cast(int) char.max; // leave room for symbols + } else { + whole = whole[1 .. $]; + + if(current == '.') + return 0; // the special case to put it before numbers + + // anything above should be < specialZoneSize + + int letterZoneSize = 26 * 2; + int base = int.max - letterZoneSize - char.max; // leaves space at end for symbols too if we want them after chars + + if(current >= 'A' && current <= 'Z') + return base + (current - 'A') * 2; + if(current >= 'a' && current <= 'z') + return base + (current - 'a') * 2 + 1; + // return base + letterZoneSize + current; // would put symbols after numbers and letters + return specialZoneSize + current; // puts symbols before numbers and letters, but after the special zone + } + } + + while(sa.length || sb.length) { + auto pa = nextPiece(sa); + auto pb = nextPiece(sb); + + auto diff = pa - pb; if(diff) return diff; } @@ -16979,15 +17252,29 @@ class FilePicker : Dialog { }); currentDirectory = initialDirectory is null ? "." : initialDirectory; + + auto prefilledPath = FilePath(expandTilde(prefilledName)).makeAbsolute(FilePath(currentDirectory)); + currentDirectory = prefilledPath.directoryName; + prefilledName = prefilledPath.filename; loadFiles(currentDirectory, currentFilter); - filesOfType.addEventListener(delegate (ChangeEvent!string ce) { + filesOfType.addEventListener(delegate (FreeEntrySelection.SelectionChangedEvent ce) { currentFilter = FileNameFilter.fromString(ce.stringValue); currentNonTabFilter = currentFilter; loadFiles(currentDirectory, currentFilter); // lineEdit.focus(); // this causes a recursive crash..... }); + filesOfType.addEventListener(delegate(KeyDownEvent event) { + if(event.key == Key.Enter) { + currentFilter = FileNameFilter.fromString(filesOfType.content); + currentNonTabFilter = currentFilter; + loadFiles(currentDirectory, currentFilter); + event.stopPropagation(); + // FIXME: refocus on the line edit + } + }); + lineEdit.addEventListener((KeyDownEvent event) { if(event.key == Key.Tab && !event.ctrlKey && !event.shiftKey) { @@ -17025,16 +17312,25 @@ class FilePicker : Dialog { lineEdit.content = commonPrefix.commonPrefix; } else { // if there were no files, we don't really want to change the filter.. - sdpyPrintDebugString("no files"); + //sdpyPrintDebugString("no files"); } // FIXME: if that is a directory, add the slash? or even go inside? event.preventDefault(); } + else if(event.key == Key.Left && event.altKey) { + this.back(); + event.preventDefault(); + } + else if(event.key == Key.Right && event.altKey) { + this.forward(); + event.preventDefault(); + } }); - lineEdit.content = expandTilde(prefilledName); + + lineEdit.content = prefilledName; auto hl = new HorizontalLayout(60, this); auto cancelButton = new Button("Cancel", hl); @@ -17162,7 +17458,7 @@ struct separator {} deprecated("It was misspelled, use separator instead") alias seperator = separator; /// Program-wide keyboard shortcut to trigger the action /// Group: generating_from_code -struct accelerator { string keyString; } +struct accelerator { string keyString; } // FIXME: allow multiple aliases here /// tells which menu the action will be on /// Group: generating_from_code struct menu { string name; } @@ -17981,8 +18277,10 @@ final class DefaultVisualTheme : VisualTheme!DefaultVisualTheme { History: Moved from minigui_addons.webview to main minigui on November 27, 2021 (dub v10.4) + + Made `final` on January 3, 2025 +/ -class StateChanged(alias field) : Event { +final class StateChanged(alias field) : Event { enum EventString = __traits(identifier, __traits(parent, field)) ~ "." ~ __traits(identifier, field) ~ ":change"; override bool cancelable() const { return false; } this(Widget target, typeof(field) newValue) { From eb9abb180e30da064b6dde6c403f02cc5855cb7c Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Sat, 8 Feb 2025 15:48:46 -0500 Subject: [PATCH 11/12] notes about upcoming 12.0 changes --- README.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cdf5714..88450cf 100644 --- a/README.md +++ b/README.md @@ -22,12 +22,24 @@ This only lists changes that broke things and got a major version bump. I didn't Please note that I DO consider changes to build process to be a breaking change, but I do NOT consider symbol additions, changes to undocumented members, or the occasional non-fatal deprecation to be breaking changes. Undocumented members may be changed at any time, whereas additions and/or deprecations will be a minor version change. -## 12.0 +## 13.0 -Future release, likely May 2024 or later. +Future release, likely May 2026 or later. Nothing is planned for it at this time. +## 12.0 + +Released: January 2025 + +minigui's `defaultEventHandler_*` functions take more specific objects. So if you see errors like: + +``` +Error: function `void arsd.minigui.EditableTextWidget.defaultEventHandler_focusin(Event foe)` does not override any function, did you mean to override `void arsd.minigui.Widget.defaultEventHandler_focusin(arsd.minigui.FocusInEvent event)`? +``` + +Go to the file+line number from the error message and change `Event` to `FocusInEvent` (or whatever one it tells you in the "did you mean" part of the error) and recompile. No other changes should be necessary, however if you constructed your own `Event` object and dispatched it with the loosely typed `"focus"`, etc., strings, it may not trigger the default handlers anymore. To fix this, change any `new Event` to use the appropriate subclass, when available, like old `new Event("focus", widget);` changes to `new FocusEvent(widget)`. This only applies to ones that trigger default handlers present in `Widget` base class; your custom events still work the same way. + arsd.pixmappresenter, arsd.pixmappaint and arsd.pixmaprecorder were added. ## 11.0 From bdb7372488ac8339364e9b5f64894b20fa101f1c Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Sat, 8 Feb 2025 16:20:30 -0500 Subject: [PATCH 12/12] make it work again --- core.d | 65 +++++++++++++++++++++++++++++++++++++++++++++++++----- terminal.d | 2 +- 2 files changed, 61 insertions(+), 6 deletions(-) diff --git a/core.d b/core.d index cde30eb..f1f3bc4 100644 --- a/core.d +++ b/core.d @@ -271,6 +271,16 @@ auto ref T castTo(T, S)(auto ref S v) { /// alias typeCast = castTo; +/++ + Treats the memory of one variable as if it is the type of another variable. + + History: + Added January 20, 2025 ++/ +ref T reinterpretCast(T, V)(return ref V value) @system { + return *cast(T*)& value; +} + /++ Does math as a 64 bit number, but saturates at int.min and int.max when converting back to a 32 bit int. @@ -8040,6 +8050,9 @@ unittest { ================ +/ /++ + DO NOT USE THIS YET IT IS NOT FUNCTIONAL NOR STABLE + + The arsd.core logger works differently than many in that it works as a ring buffer of objects that are consumed (or missed; buffer overruns are possible) by a different thread instead of as strings written to some file. A library (or an application) defines a log source. They write to this source. @@ -8059,24 +8072,66 @@ unittest { Examples: --- - mixin LoggerOf!X mylogger; + auto logger = new shared LoggerOf!GenericEmbeddableInterpolatedSequence; - mylogger.log(i"$this heartbeat"); // creates an ad-hoc log message + mylogger.info(i"$this heartbeat"); --- History: Added May 27, 2024 -+/ -mixin template LoggerOf(T) { - void log(LogLevel l, T message) { + Not actually implemented until February 6, 2025, when it changed from mixin template to class. ++/ +class LoggerOf(T, size_t bufferSize = 16) { + private LoggedMessage!T[bufferSize] ring; + private uint writeBufferPosition; + + void log(LoggedMessage!T message) shared { + synchronized(this) { + auto unshared = cast() this; + unshared.ring[writeBufferPosition] = message; + unshared.writeBufferPosition += 1; + + // import std.stdio; std.stdio.writeln(message); + } + } + + void log(LogLevel level, T message, SourceLocation sourceLocation = SourceLocation(__FILE__, __LINE__)) shared { + log(LoggedMessage!T(LogLevel.Info, sourceLocation, 0, message)); + } + + void info(T message, SourceLocation sourceLocation = SourceLocation(__FILE__, __LINE__)) shared { + log(LogLevel.Info, message, sourceLocation); } } +struct SourceLocation { + string file; + size_t line; +} + +struct LoggedMessage(T) { + LogLevel level; + SourceLocation sourceLocation; + ulong timestamp; + T message; + + // process id? + // thread id? + // callstack? +} + +//mixin LoggerOf!GenericEmbeddableInterpolatedSequence GeisLogger; + enum LogLevel { Info } +unittest { + auto logger = new shared LoggerOf!GenericEmbeddableInterpolatedSequence; + logger.info(GenericEmbeddableInterpolatedSequence(i"hello world")); +} + /+ ===================== TRANSLATION FRAMEWORK diff --git a/terminal.d b/terminal.d index 59aefb2..3fabd14 100644 --- a/terminal.d +++ b/terminal.d @@ -710,9 +710,9 @@ struct Terminal { version(Posix) { private int fdOut; private int fdIn; - private int[] delegate() getSizeOverride; void delegate(in void[]) _writeDelegate; // used to override the unix write() system call, set it magically } + private int[] delegate() getSizeOverride; bool terminalInFamily(string[] terms...) { version(Win32Console) if(UseWin32Console)