From db8b8c93afe110a859a42fa7ba4411d82868bf79 Mon Sep 17 00:00:00 2001 From: DavidArthurCole Date: Mon, 1 Jan 2024 22:49:21 -0500 Subject: [PATCH 01/42] Remove enable automation, update go.mod --- LICENSE | 2 +- examples/counter/build-linux.sh | 38 ------------ examples/counter/build-macos.sh | 21 ------- examples/counter/build-windows.bat | 3 - examples/counter/counter.gif | Bin 178977 -> 0 bytes examples/counter/icons/icon-256.png | Bin 18444 -> 0 bytes examples/counter/icons/icon.icns | Bin 251776 -> 0 bytes examples/counter/icons/icon.png | Bin 56645 -> 0 bytes examples/counter/main.go | 89 ---------------------------- examples/counter/www/favicon.png | Bin 8696 -> 0 bytes examples/counter/www/index.html | 51 ---------------- examples/hello/main.go | 24 -------- examples/stopwatch/main.go | 56 ----------------- go.mod | 4 +- go.sum | 37 ++++++++++++ ui.go | 2 +- 16 files changed, 41 insertions(+), 286 deletions(-) delete mode 100755 examples/counter/build-linux.sh delete mode 100755 examples/counter/build-macos.sh delete mode 100644 examples/counter/build-windows.bat delete mode 100644 examples/counter/counter.gif delete mode 100644 examples/counter/icons/icon-256.png delete mode 100644 examples/counter/icons/icon.icns delete mode 100644 examples/counter/icons/icon.png delete mode 100644 examples/counter/main.go delete mode 100644 examples/counter/www/favicon.png delete mode 100644 examples/counter/www/index.html delete mode 100644 examples/hello/main.go delete mode 100644 examples/stopwatch/main.go diff --git a/LICENSE b/LICENSE index 79a518d..ed601e5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2018 Serge Zaitsev +Copyright (c) 2023 David Arthur Cole Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/examples/counter/build-linux.sh b/examples/counter/build-linux.sh deleted file mode 100755 index 6d6a619..0000000 --- a/examples/counter/build-linux.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh - -APP=lorca-example -APPDIR=${APP}_1.0.0 - -mkdir -p $APPDIR/usr/bin -mkdir -p $APPDIR/usr/share/applications -mkdir -p $APPDIR/usr/share/icons/hicolor/1024x1024/apps -mkdir -p $APPDIR/usr/share/icons/hicolor/256x256/apps -mkdir -p $APPDIR/DEBIAN - -go build -o $APPDIR/usr/bin/$APP - -cp icons/icon.png $APPDIR/usr/share/icons/hicolor/1024x1024/apps/${APP}.png -cp icons/icon.png $APPDIR/usr/share/icons/hicolor/256x256/apps/${APP}.png - -cat > $APPDIR/usr/share/applications/${APP}.desktop << EOF -[Desktop Entry] -Version=1.0 -Type=Application -Name=$APP -Exec=$APP -Icon=$APP -Terminal=false -StartupWMClass=Lorca -EOF - -cat > $APPDIR/DEBIAN/control << EOF -Package: ${APP} -Version: 1.0-0 -Section: base -Priority: optional -Architecture: amd64 -Maintainer: Serge Zaitsev -Description: Example for Lorca GUI toolkit -EOF - -dpkg-deb --build $APPDIR diff --git a/examples/counter/build-macos.sh b/examples/counter/build-macos.sh deleted file mode 100755 index 43f97f5..0000000 --- a/examples/counter/build-macos.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -APP="Example.app" -mkdir -p $APP/Contents/{MacOS,Resources} -go build -o $APP/Contents/MacOS/lorca-example -cat > $APP/Contents/Info.plist << EOF - - - - - CFBundleExecutable - lorca-example - CFBundleIconFile - icon.icns - CFBundleIdentifier - com.zserge.lorca.example - - -EOF -cp icons/icon.icns $APP/Contents/Resources/icon.icns -find $APP diff --git a/examples/counter/build-windows.bat b/examples/counter/build-windows.bat deleted file mode 100644 index 3522752..0000000 --- a/examples/counter/build-windows.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -go generate -go build -ldflags "-H windowsgui" -o lorca-example.exe diff --git a/examples/counter/counter.gif b/examples/counter/counter.gif deleted file mode 100644 index 2497ed50d5186afc028c33389c228d602cf94d6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178977 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 z zS~$)K9*$Pj_#=()z1M?vUU3)Sd}MJ^WDiXa31yU0PDy2zR$hrEmOUVG9aq``Mi_ne z-Pag3kEPRJfA1tD2_KR;REZ=IM##{dbQZMHMHO9?fC71Xv}Z&Tn3UUWEOlsGhb|S$ z!ig+C>Y|G*Mmp)FCdw3PiIzfoA{Rw?2i~Wl#`q~#pPoAEcb>{9s&`0O*TawSCD|RA zwO+O5d#~T9sT4l8W2#2#yGvNpu3Bz?|)HRfW{o(Wl+{Jmp`0Bi`r{|6g< zu<2%<42BjOX{DKaXF;t+qyUB&V))UbDIJRFOT6tyFN>INs%gKF@{4Jt0cTq2Ob(11 zWDzwYu>`2As*07Wr^e{QRiVaO}}keLaYWY$jhjxk#ZFoqXRzcB{XZ?NHQx>l$AS^)_Z zpc>Z~Y28u0B^`PjZyTCz5=;A48zS5Jo2A0FfS*OHn{GI z5!yl(D4CjyT#-Vz8$j1&^C6a~gp3<}BL`n{!FtWhY+*FxN;F7Hm7s8rNtvT9jS`4U zT*3`V>E$hZSq4MOM}~)#A9jv8m>B+SnZsmeGM$OcXiD>0HUygefS5W*KC&I7@Sj5f zxCN(eVGK(fLlv49&MJ6eb_=P(4pd=8tGOnM6{3)Z>X}6uxCBw5wAb%G z3EKR*C^2qPB(*$YAX=z~KstFG2}4Kmh|KNWasQ+~BdJJBiqey+ zbeMuHW+6$Z7@;w8h?aTB9~PoSg1Q&R_bV4nFI<#A(x~q?9@qAFJNJ) zSkNp`d%BQ#UX7_%++70Z*^zvb4WL!sU_>Oa7IOW$=g7P!G+M&%3a}*l`<6f4q+(6O9e?QpEXxW-2YW(Gr#*x@cxyUe2k$Y z@mDl$4pFqH*=#|o@KXVFwx|!uLHopU_Y|r@Bg;o$>ul?dH%Q(iVn$e(R zy#p=PFbT9?LZcCW#w1QiOBDt-x^|cZbhXk3Oe7@?ez*iM7@=G-kl4h)*rkat;fJqO zx5OvD17Z8PVPWF9rCtf7b{FfzYdZF^kflrlPg7a?j@D}%*%R)(rbz&_3jkS+Z7avN z#ZlVkp!DLZZU@PjkdAO}BVBG7^mG5?S+jcJ#X*IDNsTKUghGOWMt^)oIp(OxH|qHU(Lo_XlU zE3EYyz<_fqlER2de5DMNn8ckYQHZa!LC(uX@p7Nx20f>u&YCVadClE3Ona=cjI0)@ z`6G@}m-==XsffK*9jHA8N<)dF>MIEa#@ZCh%m%%n@Y43mR)T22TE1XP+$`2NKO-sg za0Vlgg4VHW*jZl6gNW6D=r-6xx|x79T1qUHNyJzTYM6LZ4lxMY?GJWN6k!7M`?m~n?QJfqHjkTbQdEr#NrP!P&h z1B#pCS7e`i@jNf4&N(gQcDsA%MowTd3gWsQRF((=r~>De-Vlwn=DzjJ9Y)$Eb^qcT zCSDigYBkv3GK;d6DXD#z7mk#+H?$0CkF(2p|9ds7nWJ05v$UsuhO?L9@Yl9>7}T1T zme)Pn-9Elwr}_BoH@@fb>GVt~f32d6IuQbh0_f>9p|Cw2zZBsJNL0CHsE(30AhP;` zal_St4*cJ^m8x!8qC#)=R&jO|Xf<&KSpRZzbbT)s7RrWKTXAzR2q~s`+lPXTmwiD-CX&}5)Q}9va16aLgEdHlH)w;s&-xq-G(ecWUrr0y3aaT?JLKHh-vOWwwW9u10lY)@4!XYGgNOEM$NdhgQaAT)!89 zaz!g%a#zKt2FgcPY^Daw#RZoDcpO*;Y#3dEz-EBAf^|q(DR@W2aMCJNOVoC}s6DPp72-2~ZIdaD*^{F9GUT47xx1w#u6K6j=UJ*I+qIE+7L zhxOBfsIwoGK@E@SjEyJ&H`qUlm=K9*jRKH}3BicZ_>6~G8Wo~yRdi1nk|DabO8J*Y zW#friMSmhve*niyoajYicM>Y(R`ytSy2o5G6ee#+KZVqf$0(43MT|DIho43nG02TL z*n`R73Oe|R)HsdWSP+Tmh!=Sb0x*N9;TlU-JA9%$5it=`hkpmBj$wvivo(MIg>YB~ zivO2jQV4)?b%kXIOsptug(Y4`(p@2i9Va+m1zC*gHjwoZdCI6w3n_@?92H*5#6#94jB|NoLP?v(IFRgy zl#Vo*O8FlNaf69@HK*kf9&wfSG!Y0eC{Z<5qleOyfzRJjtPprJ?KgbAWj!LKmXY2%jjrqE@3{lL(SY#Wk_f0=n^U z{#BWr7?xGHnf0PoXewL%_F4l4M>ttl+_{!?WM{V6nuXP*3<#7Ox_#Owr5>71m2stk zD1*J(l-{_dr_mac`9N0bE`kzkv`0pmc{XKKC{y)cpXpUksB2s|lL8n=MOvC*7@K%` zSm23Ld+MZ5y8oBu36QH;Aj#+P@M0IF{ zP+4_2x%9DorE@xsw2ZmRw=#GPBigHry1Idz5Ek)~#Tt^VMnd;OnGIKPio#X4HE^#s zW(UQYoJpn%b(&x3uypiLpR2r`yB&6_Puu<(yy#ldl(#s`tBKSvL40 zg_~)XU*%?`O21Ehr*}GSJtUh@3Y*|{u34O}Ta3c$y269;hKw+}iTq|j2cP6 z2K+>~L!9|Kj`KvjHH%=>s=K;zyR?UrJ4>@rC{SV-RwR79LHo7~xPW-{kISWtDXhXe zcf!+l7~;ULkVGx+T7%#a4z2*Ky-*5ke7)NHjSM^h?LtKsf{7iGdSptL0!y8>cmKgi zShn%_LBKn<6x6UM)P)9!Ru^WxyLY5J=}cZMABks3SA3Vtq{YCf$X)`Q%B+jU$IQ?S zchQ`oaA`v)c0Z7$A9@?ZGuR9D3bjuw0Cq67XpF{16@*>O8j(7Q8KMF(paLpj0`W}G z@GQ^uOwaio&-Oge?~Kp?e9!wF&;4xA0v*u#T+k}e10cuHAg2Wk4F(`b3D4jN6m8Lv zKnEZf(P{t&Wzf-Qz|g!z1!ZsrByG|qjnY?u(kCqyEA7%O{n9ZF(=#p8F1=T3Kn7ue z(mH+8JbeW|P0~QU(?i|UHBHkntumEd~00ltS39!}$zyJlH)@*&&YHikT4cBt5)^5E3 zZr#=hVAglt)@dErb*%shkl1z2)^@GfIv@l>0NIgE*_G`Gjvxdtkl8Qb2#`PtYf#yt zUD+?70i}%r7@z^DUD~T10cpSqoX`k{KnF{p0v|8}t8Lo3o!YpK+P%HotF79&E!@K` z+#^r|BESf3aNDK5+{>*2&0XBY{oKq=-P8@;(~aHNt=-eT-6LQKh%m-Qvlt0v#x>Xt zZcq>ose_EL5b;@Rh|tLbfZk06D48S?rYA)cF@y;48jxvk_Ou$R0snPzyng)M)~mta zE$cN2&KmrEPde}dIsoCDo!J%s0=)0bfq< z^xoxJj_)I2@A)3^`mXQ(t^tq$32*+wl-wVKX$9!5s*20T2op800cTP1QI^#r*7(?PT86~>N6kNqfX*QUgAX_ zS-R@Ca=n1r>1gXmIR|kOf`P z2dcpIY0wR5Pyr%f29$6HS&#>mPy{hx2!EgjU|2nU?KPXL@t zAOcujUn9R7Q}#f&L(1NpHLo#*OZ9a5Cc8*QtQHXfjahG($UC-!5ic*{Lofs{aQw+X z1RGuo%m3+`UGqCH1U5j~B2MHsZsX6r>ab1(HlFs4AP89R2SgA8B{26Q5CNRv2d7Qq z$LYXA@(LjMGLPk^lqo-s_z0;{I%@CI&3qR#T|1mP+x6;ote3HFZUhKO z#`74sV?&`ha@C8|P^eL*PNfPJO;t()jP{z*O0VD{U7cbwnY26kmkN|Lkw`3Co0HR~aiy=dVOnyOG2+zrxGneWmq_Sqv z5=USdUD`B;2z3}C(EuWX2u_66(Ue2C#2CCd&h<;SN#pW}S|_4UJ7 zSrQT?ab~h_OmN-5=-WJ&>Ns#3bL@It6c;e?DdIEyN&ssh_ftgrxk z3oN+`@M|o>%mPeAxCU6PFuh7-al{1BT8uBaaFnsH8XKET2O>Yyte0dwv&^%iGBdKW z&t4#nw9-iHC8ZR13DbhEt=j~!m^J-V4w&WG>~hPxNfW{Av!xK z>ZXk*`gGz3JYB%DAS)W7sglBqzO4n(l0o`UM4 z4@3|Vz!6o3st`j~tLkPbrUY1`)&HT)va2t|6e#RR6h)MgM!ig2OD@F7x^=I%dR!}6 zwG>!!S!Hb$0tg{=5JEC1GeZ(IZIjf@$jn5ea$NYZtm6P&bfhB%zKBUKA9)-XhsHdLsUabUFtj*g z4JV-Z0~ae4{djcJ`vc*>cLFSsCX#V7`IxPEGRh|bWap`=p}3-Xs-I$pswv%B9g!^t zrv55{y!cwNX%dmft1aZk>h;B8k^SmcqDf2<*soOV5eV>s7{W0kAB*fVZ@K+CTO~6) z;WYRKO3jsUT!AEyCt~nG@--akr4clIAU+~611FBbHt5)a63H0FA+8WGw{<}kb}GRk z^1u-Sa>5v@$ioUsV2C_ufCRvCLkyhI2Unn$rVhY^hQx(F>P zHmg}YLJU~MN506IFO5QokY=nknNp+=Z0?f?l|&;NkH|+N^tq2n@Po%ahCq;a?8pY< zGlD_Z2R}B{qeMcm0V~;OKa; zhVP`}ili9Pi9Ab7jGiVKES3mpU@4=roVGKe(Xx4CLCf~kVwPWhaV*zLV>8bunXMH? znn+4UIOLeMZ`pB5bp#|O_xR0C{!u=H3}-mOsmDW>Ql6HukcJoX&HbOUj#iHb+IfxI@(x}$Gu;Q$e|-*RmqMp!eN)r@8%Jc=!BdghKRWoJv>`BIn06s9wksU`mt&(={R89u2eJzLe2s>CvQ z0IfQ=bERj!o0DNgN*Q=;azRdf+%Fl#AM7NLlGX(<-6gtbMsa8G(|VID#C zl9#8M^_kBsYgs8fnX{^ur7MkVXXpA^&xV#Ib-in8Nv2oSS_l9PNT~Mwk|Mv}h?k0i zQCM`;BLBdO@vC?lp3@?#y=6-Fq-3@1Nw0-jY^imd+Z1hcLHk_ix)XJ#rS5@JdtIrJ zoA#7P|Y5E`R-t z$s zHZ`lw()3rw|7CGp15Drn9~is0{H0VcO2z0km3mw4i&1-~&@ZA0EEgW;SEty;hu#u2 zlRfK*NqkwAt`)^Crt*rd98=Q5_^vWG@Qr&M7O(6wpo}d`KmlOp5`}rTwmNeG0*c@P z2>-y%Jn~9na(w164^III9*b838sFiH*vTbsvS!UAu5(^l(N$)2eX^`&yK-650*G@} z5)h(RT{=W~rj@2ywdbjLdMIU00!o`aXhI*?&@5eas~i1lP6`;(Tb^{Sy8>!kr&iRv zv+R98Dg+P@da{%u8*^cOY*(-N(X(z{uATktsO)+wxbBLyqurI_`g#b#Mzs<+8ktqE zluF4)cDX(KVrIt^+6E55x-$(GYD>DZP|g~+=Y3g2kB!{>HurOvoo=1DTi^rFHEZcx zYRTH$$&?NETKWC(e!COh06#6kEq-wW)A!VvT{3;WeZCVrJmMpVxWxZW@tj~><^LQi@m)t7Gdre9s_S?4;`vF`P)gT3ogC;PT#yuHbm(M{IONYrgZt zS3FdZAb{AH-uNBxeDjI_{KKCP?I=(A?X5p>qKkOpr0a4a~D6`O~~qBBDH) z75gK+5J0Nc30s1Sh)*gO!xL8-gI7!ZI*A%dY0BmpP^_MkzF2|@w5KtvM4p%8(g z-~a)LfexrZEX=~#lR6K~zYzSwS{uP8L!|%&HUcEB0UST48wy1E00F2&sNlj?nTn)%8K|IyV|bMj0D+vNsiELGF#n9iN%OzT8;bvn z3J_~M6}&vMp$ZHbibS}(p@@dx*#ju(3UFYA67T@1aD-5l3O4CO0RRU&kP0r;f?AA< z6NCyPjEXCOIxytIvy(((6u|(*L;<)&s8Gga90Cg&zo_6s)ffs8=!zA%kQ<1KLO_BY zgo;Pl11Z1|DP)8`jDS}W01^;FKj?v|2tu5DE~tR9=_^Khe70kxiWAHOYG@U1`a}Vs zkAEDBJ`eyTpu(;wf!!GnClG)(7>YuWifXh2N65ygNEHD%#ooX{KCDNnD6pvT$f!t% zt`Nx!AxVxr$yOOas^C5yhzd$j$*zFI6r&0)kvcy-N2u@s94M@cH2@t6gbJaM3N<)F z3`he=z!?kC0F=a#0&7bBb4sZ&$&y^TfB*m?`2+;d?+%hLZbkv2K8AmBTR!Z zL5dVewyfE+Xw#})%eHM>f=j>tlsbT>!KoKzR*abyVcnA`)!pA zqtMo+`BLt?RH$LtSG_*$%2Tn{o?ejyMTt`sLs`(jc@?UK zjf^$)QLyblH~$-*{rS-16Y$>8zkk}030-EFP;qrNSYLl7CZ1$_NoF8c*)8bMWtPEY z5lUJS2A_5S$addyer+~YU>K^VmxeAWBo}4TX>?&|a3$awj17Ip(s3=CxRHQLrDu_U zKnAHBOU=PmkX|>LR+m)INtYm43Mgem^F!g5oKaRHz?LN8YNJJ+>l4I?4akri-Jc*^+axYV;(G zXxfRWV1))-sFgjY*JF+d4%KC{yqbBVim=(FoO<2aO4LLkRXJWwUlkTsoWFT{5sI&I zwdZ1r)md1i&ki8lK~Yxpm6eHg713!l!aE+ZjjigHumA^{SGh4^isg9Pt*6jsnlhYT zYlR_*SXh-6#nW$?<~nbr?}^26c-$HFr(mw?IvsF#>9v$zdw$y@nCYI>@1LahEAMFm z=geQ7P!VWgS05c2Xuj1QXgpSd#b|4H>G&T-WI)K zHb`f&MZ0~`yJ3=g+~spup76OP;snySwGG@Wv3Ay5VVZ4Hri?}KHzm5pfBG5Um!FT1i=eyC$X z3>`~X02;|pzSTUv{clxQ`5IIb;1LZD3^6Yx4Osu4qr&=aWQBV{57%Im6uVf)cW$G~ z2=xX+5c&&7FB{t4Qlue>agQXQOU#Ux^BeW>PdYuL6lo-45XxldHQGy>>VSfs!HB6w zZxUm<@{_qd0_}Qxa+>itxIym$$R_?n8oUBk#Sh{~Q4Xq$hNk$eg;dRS>WLxaP8Omj z6-PK6aad`X1RR^-?@A_g(tC8+DN+(fM%9B3i}1)Hj0iD|f00phvUQbvm1;_76w_(y z(#Y~*5_i_w<5tRrwiiWPO#01YO52i2l*q)&aaB~<5`KY=_ZAar)_9UD4E8F!oxW6L1TM}Np>~O{k6wD zrs38M`$`#>p|Di?$`9rU#3#UbZ;?@@AUfSD*4PaIW6BJAskl9pPkZa-h<>-S#+lbwgA8K^&E&HU9fwgD z3~6ALYpjGE_ipS_6HzzY#(5U(K>)pK-7KV3_gwFBNO{rY4#q+yI+171YK?$N)V-2u zuUa@9+HT$JwyVLbrzUd^%NC41oWSjLY{c4rXL8@1QFV*S!O*>K^xGPBYa{++&}~h8 zP?Yg+MgS6k%@knMV_oxivQ;RHFo#*0{FEut(WH6E_%jQZNs=?w7pyE<-P4qm$uPBB zivfnl?x^!nPh8lU=u^8H2de+D651qV4@$T9SxjhdWuK{>TDQpkq`V<(5`w!N(S<4q zJ#Z@AaX9Lo4c=uXpo(Kd#vHK3wg+XRd>FjAM>!4|Wk#yo)g3*pKn9?uF>C5F`V0qI zs}w6LtzA@%{U?-n0ctYfQH}T5=t55#cr)~?r~Ir-CQ1uyX~)|MmZp^_Oh)v?ZnX^? z|Hj^s1x2BJe&FxUTtfyRw$s#G;Ba8FVGGvmN^@b>VRBvE%}vX5V#AWL3k9|~Zk3J? z#WiSgC$}aMM?R)=HHiA%9_wf~k7eQ*fSIf+{x$nBOg$Km_M(%=bZO2tS{bS_Td6gV z`XKWT7C{qtL|R%dk3j#_R0aY4lqlB@DqBJ=#0W!VQ1Xn>5To(U4c@o~;dGSV43~>A zzBI?;Wo1I-rGVX2WxkNSaUrL-U+?o>`S?YWQGswtp>tM*^zD7|B1wxj`82U@?d6i` zXJg=oRz>S6b)8{5?rPVmGIRJlB&G8NWA40`Yd1_$CzN(hycCPuPjh_4m2GV#SQ3%8f{?NxhKr$;qlT!**Rkusp*in6SYJ1*SXl5EPIHi_!x-$Hd$@o~k1MM!CuE78JlAfsgfNNNfcYp4ZUno$7b2PD~dVl(w)c;s(AmOa>$fI`C)SVA!+ z0fB1efwiSyvV?J|r8S_2dL?%_oU~YKVl`ybU~Ys;d=-B`C46=kdq6RP{((Bh0%IdZ z9QIOD*}_)o!WpJlEg0i$a5PjzPpVKQ9fq)X{IHM&mue28~R3dvdHzP!X z_kkgzBQk!KKjH&e3;~4w5h4geFEw{zu-98<#x7KcMhmh|WkezbNLmh3I}^hwEzy51 zcvaD%6XE{{aYr>z)v*`>L?QMheGxSuzwuDfvQ~C@abhNiyWv?TGH{=#cYcLpyhTyy zbb53Y7LR2rI!A|q7JbW-eOs7xmlZu^r%`T~htBhP%U5Wt2T2%~f`}oC`!RW!g(JLn zbTLCPL1xR+oqR^GpF0Detm<%mf=`qgZ4V z6x07>Ils4r>U1H00!BVrC(CwJxwK55WJ~11WAYSROo(I3QH>h0dCh1<2$7Pzu|B#a zQoojfS*C{y8D)~e8ck?smO*4|f)tN(NZK`GA`z1*@ipfb9)t%r5|bh)cq$ap8Dv>Q zr1%~UWOr2Q6v1Qo z(^u2veQh^cW+Eo%hhd{Kkcp##*SHaenH$oGLsM8~;dp#lg>DCRf-WQ?4ah)NMqZ;K zc5sAQ-gID;Qf&w06%>+Qz}PdIkxWuCCXcBuM08@@c0;e09WvND9r;i=@TznbX2nikBe7SL&$&?}MvO4xY8*OF<$_lB;b=Dm zcaH>GHo{RR(o=uRI&p@Wj`m#3X)8`eqVChFb8#df$YIJ+d7442X~B^CXl>|08ssLg z7ILW^gP@=4hYdv(fb*PU^r3WUJ-uatiG`G7vn12ASBpcDMF~2u#UZ^CUc3i!eub@n zR;VEXuV>+CMd~qUnlI(lj|XZhv$TCF5|DD`q%Cr%S2 zB7~DCUsn}St36OjYboX|uKKLb_ne@DxY2jLfGL5e8y>fn5{c$;S*LwyWhFkDB-mve zCgE*kTNU1#MmP9Ex&u&oX*neuSA5^Z7!e*SY@YRR>g{0rgng_g)VNwgD2B337`_aTL{e zi6A?quiGwNS-nNmb(PdVRCtUmx31^n6rAcSbOnE0i+ly6vq$VBILe3sNvi@Sdd@k* zzO%gBks`!Jxg3i_n02x0sjNE6v`9&7ipC<^MYlTwyjK5vb`wiEz~On^0b}ZgP^;lI z5xARjk`+C)FAL4vi^iFxDG?G&c-V?jGOmJ(zStC^Fl<2qd#XbUhW{!z{42#+A+rz`UWW)0 zNfDw{C`C57nK=X$yA^BY_nW0kr2hNAVRJ@&^}w*0ihIO8-f@%A2^wac901if=$lBp zA`#d0xH}=j(I=n7cOJ=vBk0?~3&z1pa*g|jIp zoh5#A$Tri;`Sn$MsCx>TtumyWa1>0X!6V@^rvccg5GJB?Jk|N^mvwWKwPZ44^V8n@ zCPMAPLN+?qq9%%X=%CGCx;5>Ia@ysHc)bT0SSCp4K&{rAQMbRd7?A&x_L` ztXeUwk?f(9W4BZ_oi9$tX|l}6#iAe8YfU-~%!pOGwbFpg8kUti!di67|0x=hgTqr9 zm~@exGGSAb!`Q;y+ONkd`)IE};g%%pBGCWG+dw33l5HK%gk=SIfd~aEA(ceFhh@*< zU)P&^pc|-_dBbzz6>j-(xOQ{hB9B<&Dn}?@I0U;2=5(<_JR=Ib^J ze$$ZYDtxriJ&;^8okGI;i! zX7T1VAj>Bx#kvRLs#2O@ZQ4Aq;+&0Qb3Wct6yej9XxooW<^t|?n*>2|jI6V_zQG3u+Kp3sWoDyw=g)dB&Tj)9$&Jl!LQODzWeU0KK4p`Gx>}BqLC1R0N)?0~v<-=Ck8RI*tgdfsn zUPq#|u!R~ng)V_oTX-IN#tw4eOsxI{D0h;PiL2hr3u0ZKqn$}$C3)%ym+qIN6-`kd z%FM4=w<}%OT-epkLwJ_+N<&WvG6;*YA`?rJbc0$oK6+cigl*-&Jx3YzYC%M7-iap# zYs`_evb)AVOU$3VXNq|t#xVb4j%UW_98!bSBGS?URj{~maP2bsJW|5R@lmcFFMPTU zd42~O9h&{jT)DA>Bpdd;k#UVcoj{VtUX>l_;ObxRa@5x? zKml0mCkq`9-r6PvPi$&Ca%y_etTq99IC+JAS?svwwitkQn+CnVz?Z(jYk)Ix+ce^# z$|f@}Ww#AjSW=rQxtC@1k?CQ0<{X4t5lS>;!msLM6(qUda@^e;yEq_qAaonjidWqv zQ)rEb=tpCBuObx@gn0-uMN1qXQGJY?Urva;+xfy^6PmikZeumE;Ng*Y;x%%h*CE$3 z+skzL=Q})MBza5Jzuy0;?T={PSDJ3tz0U54y+i!&#Okg26&J->o~~^2Nn3(*l|UBj zC1w7OEE?iPTr?mYVgNB90RVyo2LLF5aKOQW2n#YCP=H}Vg9sG>fJm`m!h{0{HgpIQ zWPytnM?UO$65~pO1yUCLSWv)Bnl)|S#F;>wsUM^a>H)ZoX630wj# zIx?wKp(0r(I5_ZWK?VeimP88HN;afix=66u=u+w_(pu6kL=h`n$+x`-i-@&>e8cTP`mCz! zDvgRdtEj#bt4+14gyRsx_EVOEXg2Qt>zW zcvCA-*)FQj!2=`8kkz?dLbY7&^0f8U1hx89LSJ)L$WF!-5LC0;XpCyBg(B4uUI`gg zH_!F(gKDs2f77r?lcMyfzU8{&O;9N3BM&fIJ*7{ze7Q|XEOa|;)GKpGzKlKO45Ak! zXIawnKm-xwGBQJ{jG4}4{iIYjL@iyoA|;c{>QjcqOIfL;2Iwk2n1CHDC5 zT}c1Q_Zrj}Om_{F%gFBDi)___NG6-aR|Wf-R4?rfQ|rPYO8GNKgSD-%c8U9rq=cWG zwdtdXb=Sb-Olt1MM{6riu{a|Q_`ch^X0bW)gbXas-ioGnEh}e6sBF)9>bjtApXYH*)V@!J=6K#y8S7YfyzDiQCTyAy+qN{Dt~sxDLsO1!6t%SSbS3|Q zOY&Ehv;`W^u+3<#+ZBY6A{T|_%VIyP-rf{4tEDJVanLDH`CvD|IYqF3)^T9=#u6(~ z$*);0iB@k`WVlb=r9Gx$i|u+>tVV6>JE&_{o(fc?6UnbvpV^P5ip873NhpFvaui2A zc9*r#=p=}uT=9qqD3AoPf%4JM1-()+7OCrC&jViuMFJOA^$R|gqDbyM(<;lEC@ul= z7Gv6_ueq%ZK(Nz{a0;~%fSpBh%+ZLbY`39lZRs?;5daYFNVa7~PdU3HoPnB%Eb}aD zCETi$yv7n08)Z>{1hY-02EqWO8Kgf0LzfrZ=chxt#a6*_(h@D_C}%x|Ua$W-Pa-Wc zpKH>pnd_O}DnAD#H{l3F&5N3Srvz0CIZaGWpK`TSe%5U_qY2W{v`M2;RtGZI(wE+{ zI7R1(Z+!tp5Z;(XQa9x(WiUM8NDDC4vH=w;5fSMrNZAWU z@RxNl4PeizvWGm6aiSY;&HTBW(&UIONb?Si04Xd|qHZ%s!(4S*7E7^;3sDn+WoCAE zv;ykomzzl@8h^QP|Whh*e5RWV}%yeS$NgmQv z8C{1!y2wj-R)X4;OzYn{K@q@=E8a5Oi?$EFMZN2FP8yRFF(<(@w(v?Tfs_=qWs%Qv z$Lba@dF7NoVWq!pm0NKvI9u>k%Ewf!(`J~06!+mKTfNfkh#CJ}9uZ@$As;T6yP8_u z0uR+9t=q6tt^8w7BDcD;3jtx(afq=B>|)xAkp(lk|= zm9w)P6%H#3RL4EnIZR#$#sj8WGgX-_rEc{b z^IDwQNf8f@(zh7Hnv}xC^%+PX#~l`uWkpAO9)gj)T8?CV)nTKXvktCku5ulTRNpAn zMZ}%H@veJuIt$eP?3%(u%BgAb8~-2;E^ePMP~NOa%wZ%ryn3_+uwXk*3QdOuG`+%^stVAD%`?bt|a>!M93hhj>1C4Sqi>6k~o zm6csJda_5sO?V;8?YCeZaWhOI7*ZsGffJ2s4UeEX0BAYaVKWc0B$P6qD>D!@89(yF z4q-El21%a#6QDr~oauSCm!KEB10WN^pyScMWr@2=nTYO)AhR%}#4wq`0k@Drvoz7S zf>N-1+8o;H5_D4=8q+{TdpZlm4!g@RAbCNTtETi@j#-iz{%ejuLV!v^fC8w(e_N_5 zmv%Ru2-n|K+r1l+O`2?~p701D^;5}?FNw8Trq#7xx0P2|K*^u$jD z#ZVN*Q6$Au?8HFi387Ioo-nUF5}H^u=EU#$Xi2 zVI;<4G{$2@#$;5+Wh6#akxYx9cwGDiF+3rVhk{<8Vblqel*FGq(p%1 zfD?FuU916S)I|`0Nnd<{6X*a7&;U+UNtSd;Vg!LG5P)5*i5bX_4uCQW0>9xAn)jie z8$m#?m=tW9JEWSKl|;#_)JG7ofENJA6Y$D%v;cGTO0Qgj7q9>j&_u1|%CQW`PqY9f zP{)bP2|Ri}O_LJC3#vqsA9I2VfQb#X#LB=l#|r>~70}19)W;P7feX+?!Zb`$e9O3$ zOPkQMHfy$n;Sf5at$_v{VWY1E(PE5>B?OeLm z=%ezWAN!h+N4!D#tFNa4iStCy;#AMne1Z1lN3+z#tu)2@yu|yg3D!$Dnt8o2f~TNp zFU0vgi}}HVFwg@f%>=E)5wL(6V90Sj=*OGHr>rBB+lPYM+P{o9--X`#ajlfCd! zKHIF0V3HBNL=gB#fYg8un8Z#r(hERRCH2H6ebOaGM-#2Y6kSn$Y|#gm(b<$t3T3t> z(m*1z5MUF((Nm}il#~CCIWCnTQc4_wBz=J(NP;8)f)_~A7sbRl-GDi*(>u*mP2^KQ zwNpIZ06i^7E0xbKMaTFo$1P1xMioT~wZxe?1Teje4$Tj0s>SsAK?f6?xY#y@Sd5ig z2@n{8R8`dx2!Rk-%ok{aCx`-BeS%tD0m59>R(;i2oz+>jRa{k7UA+KUrBz>jf?Gw^ zRUH8^ID<2A17{TgXMNUZ1%p;y)rMSw5Kz__-PUepRc-ZFWp&YTRaR>yS5<9MZ%t8h zHP>x@%Mq9fc$HTHxKu+p1VgaRiZcnn+(6!xigv-w2vjZ_YDjOr03D#!DR=@WhysOu z0v)&jR$bMDP1yg1ZP;3cScz3tik(%3Wmt#JSa40%Gk^dXfB_}173a>|Y=oR>%_){DY=u^cxP)0Obr zYwZA8C0qY0z+1RgSPe+l4(Q#x1zzFBTjEVs@dCm!)zgCYM z7)cf-y2NqL@(#F{XI**k;Ba@xQK2#U^X17nozK@hCMHHkt!!@3V{(`=Z*$ufnKqS< zfy(1?*uR1W{=gZTVm!Asn9&l?T@03LT;fGdpsG9>CB0rsc(Kwh(>E+3TEQt*V8&g5 zF$vF40dfs#u!5t@qUhug9aAOH&k>=MM}L#G<3SIb7sHrACzI}@64PUb zSHdU3nvKa3iB2EyIo;s&oI4!wP1jL1)4OQS$l;<*b!M+mC7rzkE7|ClVlk^Jh+{fG zCr)&}kh*$X-Hp{_hARmyF|c|e+h?o5i?P~6suis5;h-iB?v|i2X~CN)&Lel{`|7=; z>OuEH7tg0IR@CE8m}h0eyu&^_{;i_XbhfN?m{ojhuVnbfQZ=LFTB{r1*xQ%G;%x1U zHAo^VQQ}8==n3P+f(JH4AiJcz5H(jkmICtM1 zCR=t1uREu#JPv16(JG(*^@Tyw%e!TXdv}S7i49~bUfAgKmyKVJ>;Tesfh^s1?(=Ku z9u7**$$8mR>L{85-DE`+%?Ag^=-tJ`9mfG3f;Nwzr0%SJB2K+AIX>y@_3BM~LqGW` z@1%cMEm3^=MgI7z4;oK8!1eUs(B&Iv2mV&Q$FO9ezpTluq{*yzHQpx-Puu~R z_qK>rfm!##q^S+bRu7%Rjm&>r!P!@t15H*Z!37>P(gS$;2(Z)uUe(i40fy^1?tkiN z-Y~UQA05)ai{)Kf6CKzZ$liY08#25bG!i;6LJN91A2P7Mb=D#%_b%Y$yX{x=AvZn) z!k(Yi5LqIOHsXVCDeN;BEAP%#6qWmR_L9eR8f?dEZ$nG=U^{-*y zd|2>bcCqVI8;A|h<(8{o3O})Id{Ydh`P)pBkP23U14_=VFp zSt(EX-v9P{y$8s~F_gj;`t#j30v%d15+V_}qd&0qCqFyv_Jt?l3LY0tLB`P-Z$Z8% zDn|>!t0VZ9^*xry_+F1~ma~|IuMrC6;8o^*gz^4uAyC#7zHQ-~jB`+r?q=Q;SgC7Y z9@y{j4+lEGvp6r_WpVA3jJg&5LG;{@zu7CN|Gp0=eII%2ZGSnGra$C{MTC-2Rmvlw z#-4nRweyzath~|n>9TTH7PhI3Fg!vkQkDY#;<%mcaG=f&=85wWBwk}<1vee{!%30; z&}4EFUa~7vfdZC7f(B`E$FV<7&yVvG-L)b>;@@}0zVDiao7ngtQl_>I7q{UQFvWjI z)_8BgqaU2yIS+sJ@%87sFRNsJuzfIrF^%nA@Hl8~!Lm@MI+9kk;v!{HS4FAD&pfUv zn1GqecXhZA6}$HRq@oX}@RBq8eU{O}W8Vj}-Cg3gE$DVwetnV(IFuZV4IewKXNj@B zNPu_QuRP)rec$Emt+wt=yfG(OU@9O!mrw0IJ~Fzd7jTd?jo;Lb6`IB(m*Utj#1k)v zU0RGw4!Fin7k{ZAOZ6{^Prnc@AZ2dgbQmH0vuQWndhENsU|cEi(y?Dv`NoaKd+KU2pIKfgbdii>1DiTWB`+B)6z%IW4`8c-m< zn)A(qO^1ofL+)B#!Ve3ML7gNTwv2(3`UQX)o*-3q&6Ez;H4TU>oR(iaB}*l66dev& z-3S_szaw?CaV%uG^LwuF&EX4wUUCB!YD1-GU62LQ`m3XXUYvfv)inog)}H4@t9Sx3 z*v_xPeaHRg;S1FD$;82*e+QjH>YpV30MA1Vgq4_8;A)IDzMz7+Mx1?t%Z`l0bH2@BAVpGHS%xAr=Ze&tX(imCgz zZv8I0B>_(?po4+HbYLD}X^9M`rxQ1EZuIOSFbJL(C|AN^2y~o*YQ;!Uax$-aa9Jzm zVJeHP(~FSJ9}>gGDgonVB`STF7-i5C+qL6(s|QG1V5CiT!;I0)o@HBUPiCUV_OWe! z@R2MgT@sO9R?~>ZLp(tS39zLngQ$%LhgeJfYwh>@oka{-_fwsOCpDaW@*PK-LC`UcsYMU0mvL>R!63>wpdht#6HeY&Yef@!Q9h1s9Arb5>Q{OL>rZZLomk?7-J+ zbNL=Gq^@T9M>CGJGHwuNz42pG=yhhho5N#q4~?Dlq7UDeJJ|icQSu&EZOA)a!Ch4( zL;1H|Z<@Y+9pMNwT&rnv);zT~n%4Wd9Q`QL1u**g=`OrhWKr|QfJ9!xi$TdNjVkY{ z3a?L9hLzuItB$D8C8&;Sd^=U?(Q$%)27ad-Z3c6Sr9JE9OF4YzFX_SO8K7sPqdw{2 zmZ&~u+ldvMzI^kq`i$3Yo%5gk?k1j}4SKSpE>3DXI6oiRxpUCXY52*@=#T%g^1J+` zsl{fKfMX?77ycyFl-sio)M}R2Kh&D{D}@VRb|^ay&a$N~Z5<;q>Y;AHlPOXX)y6d1 zJ(e4b`u0>#NMrl?d)+@PV&)ziUy9DTvQ>LA!)^0HbPXi1fJ0Ms!C{d9g$YrYUYm@= zX5GZ8XCISvjz9H>y`F3Bsn@C~`5LO={7&^%S(a^4y`D2+y6!pPcv5Xt&0Dh)Z^e}?CpxKI5T(8e6P7j^H( zo#sNR=Y$EU7Ux`9P!mC+VpGmj_D=a<>3A~lI6R7X!V@UysX=>^lH;AYESq}Jxo$-30m9@^9r-AmWrHm0 z8qDg85~0P+BVH(F_*&yx?BQU}4RpG1rYPe#H8-fN^<4yEiAK@cU)yUM$ADg@H`%~y z2bfp^vw3IpG}+M%H+rQDsuhPGviNKJ8Q$VmR)+~niI!S7OCeXvxE0(WTM?NNhj=!; zv>uZ;9G`{HuXC)Ib*$&Z8UF&&I{giH>|vOCp3(gDEK}a4j{!gTm-?)#kIbzY!+^++ z`H|gV@Zjx+tn%&nT6v-yjs629M8cezi4@;$Fdc!4O+|te(GcFIMp|Q3H-qxPMwaf9 z7^^22#HKGq<r7oJ`kK_2^ z1>n?vlk3n(q6w`afkd#uVql)04e$*TlRn4G8-7i<*cYJ@H@V0K} z$;Fjbh93l#&L3aXrMB7T!Cz6*G~+m;J$K;*5;Q~cxSg790bw(<221C!Fex`Ci%pSI zE?RrjEB{gwY>G&gn0Mj~z;+8i@`CmYftfFFB$HmXrzvSagz>c^a7O`4ETSkf)6@>E zt=8h>X@3}NvZI6!0Tm^Qf$8&rdF(&9*Q$%~c1Z8fXi{c$c|>VNBlJX3%Mhtv9*9Up zx7esP#B!T#Ec+>#zxx}+vX%TCPtt=#QJB@rTj+#H3e{duHqEb*wa^~D>3M*44O+*Y-a8xZpctx4BeFQ4FtI&!Z?GIDo zOGL;5Gac%V4a4=Pp4D5Q*xp)2p(vtGEsmlu7tyK4s~ z$cjhlBY#dg<~4{c$+sXj+F8?(`rHC!;+`IcGpx9q{r(aGh6V`)5+A>83r>+iEz_eT z)GEa&S?BFbX{>i+|GgF59f0NMNX?2#e!MJmEv@>qUbJ(@k6&9oph7l${VW20mkG3? z6(SHLFGjS+3AA>zNWi+Kw*j7<3?wYSk;cqt3H*JW3~km36^39Sh`>`OGe>eTMkvZk zE^2Kh*5npPV3fn3gQ|{^O*v{`f9KKO<3V&UyT1bDk!=OSnA43e`f?gB4+{y3hwu_f zskSp1#=r=DdZw}X{yfZ^jzDc5>iiP;>b1mG)2d!x3OZFZUGS#eJB9)TQylAlnmnj) zZ?5B0-}PE;gDX#+lLL}aDJl~WO^F)@a=+sq{N(Qwhv8tSp-{xqEAF}h8U`aI{zyol zGqeT^n}R1`-gJG?3e=Qp_zp2ZJz%j??ARRq7xdEZOJafe&*tNxXT$W|>uNDnw^M1# zWRoRhmI~iY5G-SB?%{35N=)Hem*Kp$-n* zh~lN?fBbH<%Mv8pEu}`iSIZV0DuwXR=T60~3OTdXBWX>X8Fo5|uW@$re51nSk5t-o zMcy$>Tc)ftRs293_lFpz`F`vxXK`;O<|T{8#oXin(&Yl883M zK!kpL`nuZtrFd$t3qeffPKEC7T@4`~O9N zd}YUi^PL;#GP{5N+N8LcS>eK~Wl_;O_h5*HP`kLq;IiCiWi`wfE`hLG7_-t{lkza+ zG|?-t5$S8PHV-xUX2IU3L9nnfFhz;DY_MN6tg^SP(ygm>P{OokK?Lsb0rDdTO+w*= zhMfr&0ZW{`58;~}*{+sZRxkYW+x#51$viL!{~qR2Zm%S>b?@53**JC@B`r3eghQLY zL9E6yQ6;_jBsFOLd_6(-@nrr?GJhkP-y9K)&bhG3_QT+Pg*Ki0sU1TouRY%1E2CQ5 zK_WrEnmZH6t+ej__R_hq+_`&JaCNEM#2iC21DR^~NZdN)WL-s6GLl2ep-HlWvRZ9D zlL&~p#fxvD%+MorteaIa9#XO6k76wiw-Ap3%2zu9sn70=)$TsV@KJZO%vj2#SQw~3QYI00^b7`+5fbNce1PdgNp({esT#zm2@g73bZ19f@eJmxn$rt%!mnsly%~`0X`{pDd%7f3=z^6SVue5=f4xRad64G_~=~(%z*X3Ze zl-Bl%_Z|7p#qfy;roj1e=k_30jiI_-|0yL7z>HbOf*HuRBl6ZYN^+_bXf#gvPz18$ z2?(M6RD=f)BX)_bkzpZNUTwS|ry?TWiGLetQRbryleu`Gx-9bU1IwHKleKk!z=Yl_ z)#Kiy%XWH(d*M5RDr)I z@qN$!BSlf&Bnw#CJyg z5@js$q0^3gA=h`mzD+ypPowSZIUX_=ygyJ-FyFi87o|D;9p#+YE8pTt01uq|OI!X| zcVimjVT-s*jwL^rbz#!p77@U+ekJE&$YRC$6%N#0v2C1vNuj@2__6n%Mt2&WRjRCZ z3hIsV#_%PY9cH|D?$cBksloiyF65iww9||`fFy`-@!2k$Fa<##+f-Vv#>r7Y9Bbst zlf56Q03r`V!w6<_7Fx$SL2VmF-1f4ZgA)YwBSRXM54**3T+C`M63|9Q^+n`5mmCY({;=m3k`*Bxb|Eo_XJ-#x97xq8+#_B3JxP9 zPhR)C#~|NuY-2B)z#%I9L*(jrJL?`=)lB8qZrV$#5>D47+*Bo`Ru&>MV2@clPeqw- ztp1x6e)5Q7`6By4b(981kNEt>q(GioCKaHMm@pbqrHcTddRMjW3TWTunJt;9oVbKZ zUsJiJa26N~xWCl%IZ(f1sK!W;vrm<{2n8h)9mk>O_e*cVY@CZ(!qWqFV^W%YikX2IY!Alq{xjDe@NwmGb zx|>yun}xXKllqOP4?UvHxg5l7dN%3b8Jaj(e=C8zYAIXe<=q(xn}o)N=+(}MJ6u-A z5jtM~I>zbMZ9i@-cvd%ij^&y6P><9>8(vz)t_hjn!iv*m$*9znU8#=2ocZXRGZ`YZloq|e{u268yXe<$H{C;@wlO~5^(tH*4;aV?wGSN zu@pv|UEK4z&(-ONez>dgM(B7#1)CRl3$P)qTf4;FXUKg$P>$J0n0Yfwbtd#htbO}2 zF@P1DhII1J&;xA!f3cios$R^c8YX{w|1~-qqy)&<#bxKU#wLGL^{D3loZr$!A^4>w zQDidHHY7f9I>ix)7f;wNei@YdVV91a#beWZE1c9G8_&i%y0j?4sYLLz&RuVN(;aF&ATv8uzs&IwF|1jCOGJbA&~!H*CaT`~)aRf~kvQro3PryB2^K`v=x2*H=vOwp6i&@qdEjHl`FDeTypr@|CH~x)%#(xB zs>2!2DHR9L7QQ=Leq{D}>VPYIbcK~~QNh98VChF!&BK*j-N`5g4Z5PLDl`n^06~uJ z&m&++L4(v!Fs!XIr^Ff#FmSlp7~_(T1=PBQ${y%4biKLTiWUd#H_{@2fm&U|4pzbd zYcEivZBIJ)no&Y%2mn<|w&ufyU`x2H+&-yQz915Yer`N)Uu~Jul&Y z_gH7C0mBqc9*sNqI$?4?r|T2@t;KV8`}(Q-P7XiVI}ct?ePRS=7`xmUb^qj^E{|#3 z!?i~lyWmU)Z1TF~Z*PVf2^2=Os0r>716ob~4ba*xH2)lUQv@UwqswsUL!2;@j6Q3l zfx(GJSg{Cj`;3M(DZ4@){14{50?rk|5v7%7#-($xG8Z73FRnpHI6;C&Fq1Z0zxM^w zm*4qnfY*mhWv|AfH0&hJ@=1^;cFp`6bcOMmA%A;*klkaeheidOFLjlrG<5#57X zXp8}*646zK2TX24*5K09>1gp(%`J|IcV-njd=LZd%1~h1t7l&Qg*ta*ck)TZ^{{|~ zxbVeJ99>$w`i}F9iDA*I!r@=z+)al35&{@(InG#6WAH=hV}Q-H0`W9y!i*kwT{c-u zvfRl@Q?ag}bH=}afz^oGn98Pa7)qsr4$oDUNAsJt(jd&O$xDs4x8*8_*jD75A!x;? zD-@NC7K9Rd#M7 z1g)_lSsl9JfjK;xng&R-%FG{dO*?Hf2An;n?u88mW(#nWv^NbvPvPa+tVS>!tRZXj zi=j&jBOD)#8|CZXTVa?d>&`W+$SN@Q1+z@5sF#h@XkyuF5D}vhB6u}tEwgdkZIqb` zZWuMxUST=x1356W8Ja<;u>&tY+yRI5S*X_+&R&JeMqIFI+nI7(>Dn3Uu6$S3r~#tn zXX)d*HP(5wE8xgf_WjHl!ufrU4Ff%>Xiv?b%%MxO12a_inpD2Jo^pNT*+#G0V@RV& zSGr8YP7NsLc3qLr`Q75x932+kwOqs0nYlb(NSqvwq}BbUC|P=XzG6Hplu#77)%7@k zZA*g?#K>+URemn)rNjq4iiQ;{{&@HG`R^9L1M=I3nfBrx-6K~nQmM6Z7eP@9w=!rJ z|76ghp^BtPnrP$@+gGihrmXQyO-s(V~KN>qe*@F-D9A z=kFBvsWHHjQK-iogc4i);FBM|<~CLOrCV}kEDdasir(OolusqLy5gjv8nEi5JzV{R z3^v-q5EBDl12*QgL)B&CT60!9pi2{*3 zhs$dLff9Paga^a$N&f~K7#x=oEKU3R(HCu_2PYwMgQ>s`3I2k#`+`r5Z)yaWBV}j` zjrrAKO9cyj&v-Gq6LN}zuB9~hWu5g|Y22Sdpm=j@aOfZi{(nJ70upD?dC#DqS&+iy z&!A(HnP6a4U?ch*Er^E?QXbAhlTN$2UlE6KJwE zksYKK3`dgrZd~Mv(Ic@ z&LrXFp<(wNc#Y8*(}D5&^g!rn!2i)h6c9cm#q+;N{g)n?WPm}y9Ywp3utG%9h?fPsm{1VFoMC7$B>hDxF& znhP<>|1dJDE}E652WtW_WXaeaI9nj6lBWdLW69y{>?|0fMSEn1485@S%Y#Yn~0Xi0?5G7TI zCg^`BB@XZdtN`~Jss1yiIIKO($;n_qNty`vI#Y^IXyQT!t`|gerj##Y835=vg9vAG zkik%N%g2G7H8O-AUF|c-nhQ>aTm-|XErmNDq?)mq(_?3c9$citEPg4wv{#rMNW*K& zWvp`Ho|5o#RljGx6+b91RXHorK;VBZvM%XfoaXWnlK zz;;IZ3IGM*=(C*#hSKu6!^)Stlj%8hIpC4l-eelK^KVQjq5zbh7fj(npz+Ck7mVa* zDBfmiV7s^5s27z+I51l-d=n zDM7H8)^-8_s^b6NP|l7_{~(2M&N2$0;kJ=baXugke#Y(t0LcXz2~joo<)un<;FNrJqF7TU1gk`t6op~4_R^Lj{G%yfj`4%7^-#& zR(N?z3W}mP7=VtN>Kh`wl<6KX0ulxoJO+B9X*emX`U9OpN_tEFxX2_2LoCG)^sr zcwczHMTJzZTYD&;1H;!7x#Bc3wG&v{tILD0R3|*2##j1}Uv5oF)^vwtGKa#LwxgPW z-~JdCG|I#nFi_yIVIc1hwqG$OCO|}2j6z0VOq3G0CKkaA5Lelw$_#%Jxg$WSO3#F$=@WsQ&|0 zaM&=FvW%ZOriz%X9H>t$0!u7HTqRV#{-3);aVn8sGW5Yh&)~Kyid_PV_4^W7hT9az5=1EuNr zI`Pe601n?Gw?m2kK-e!+Ll=qusYXRQx|MDje=ATH|Ao5^ehyW8Csm-SjD;lVYi`I@ z9L%gqKpJ#a%QOmH>&Nb9@ID=-tA3z8LSvty?gzae;)p0C%>i3R(3fdYLsw)1#uOwR zMl>k>JA8UlKaN?Y(`Tx_IPl^*#Kl!56%65Q>ud5&tyH}lkH?&OcyGi?YRvx{nmluh zcuk&^O#vVBLD9z5k_;wVfHq7V*3VRD7T zMLe)^<|#|7Pznp^qcU3Iy#shgN3kxRnGQ;zV~3zjF#C6x-lt&b;Kinw-mwr+8jHy> zX4wQzM8Ea_SU&?`pMwt0QH(9f!s11RjWN)yb${4;3*up)GgEV~NFi8VDrY;Dl=LR1)DX&- zr4lV#J5Q=zfe)o9ts<1v?<4y+PTZX}D5^FufdT(<^Y-twbG*?~($%c#k(-C_`r~(* zkyQCLuEH)#YV4{$^w?u~G%wcaeX08qbVZWt?h%vZgJV>3fs-G}oMd3=crYb^g$+YK zP!o677Gs}Nr+-}5^U%HSu{SZ2d-8-DnkcS%ZN!3}1Y}WW;_5}_Sl}^LYjX@0dT<}h zcLj00kx*#x$J2CRgXs|Z!2+FN`f{mho-Q;6rnR&c0sqz~qog00tnzUEvmF;-?)@T= zU%d0b6e>mrVS^d+jlL}fomH_D@#}>Yo;L9KHh&26*^}-Ui2E*@7M7ZDg)C9cu$pRP zB%EQtJ=Jha%A5xrPqF~K$=G5(FODyZoJOuRFB?SYW+C5}jbY$8SlR&& zmM5sST`nyp8C?DM_4n_b?!W=T(oBv(Lso>U@FePR)qsw4)OfJg5k>PSarb@+B~1cU z((;~s9~7R2FOfZ+j!POxn00Iz1pAJ%-;oYU?1QhH_dfdZ;gc?DlUmFBny+->KJQG@ znhg2l~Tom1%$ZkWW51_!~e4nV2KO=RY&c;l&L6 ze}31H=11^wu6;f_{MxE?H}Ws(C)t)3k$BKoqSMmefHf4J<|YjNp^Er04?tN5d9aIB zEJ8?%XX}8H21Nd zpFh@yNWb?^hho^A>FooiMcPJ?X+>h=4 zc}&YvlM@MF>>L@!H3(QDXhl$oXl7Vjv{`&pTn&HQj$hk2Z>f9KX?K1|H}>mK_`DVX zvs8BhE3o)Rb*6I}02_Pel{*=Q=D2M&}vE^j7M>k-z07pWzzt zC_Orv&hf_q#u(62%M7*G*&k2V)`P2d=4%r9!lH%eXp4XAAD-3dA9w92p3uaeynWsG z%BUI`lS)G0EdY}RF=TE;;_>GU>N5y09n8MES;_l_adalwKe2g{!%JZ9B~xnEUC}Ps zSPUhYuF+P9{j@bRz1bg6!b$mH_j8yBl=#6}zS}dh7hyjvb#5p5bX?Ww< z>i4^uUE4Tq_v~?T@7&QGc(b4m!UO<0D~+w{Pp_mehUb3s54YWGeB8cn0)0x4vjIw^97X%oTf3nz^)8^-sL zNz#e_>!%&9-zWH=te0c=tQ7MYlK^tA-#^nl!-`wsx5%-)TsgOI@lv-pb3DSNI(Ez` zWTl62CRb9dUgi2fJZiW6H2$_f;&x%Xm^tt!{dp&_!^FBDRj zdi>Anmcmd{Eo~vTznrkQzaC*m zA*VziV>I^)S|c6j7HaISKowTL4-bpBFTGjU3Xk6CRU2~~@-;WylJuX1X`EKKEzb!U zOsBcx)JMT^^!D@3I%ff82 zQ@xMN>t|!XjVfcm1UjRIwJlv-{n(ZOGl>)X4g<88&dKOl4&(fGtl31T@?+SV!>3dC zsT62hv;oyf-O|#x6Dndje3Glp zIlMQK#(ohprWziAu8wX0R?nw$v`^MogaLL3tIe?(*Z*>8z&#gQ&Cav7tM9d`_J0N` zFWj?glWnl;@ntUDi5M+UC6CJsYpliYM-X`$HHHZzNSV>fhhZNgSO_Ol!KJs_MFCs%+b(MV?iEeL=!D#!MNw zJR`im*e%4{(b9!h=?e{Mhr0hZBl9NC!~1gnVX^Q(IIGPRrWPH zgX9j)SjuJ-nNNU3v}L_fcM;l?h9$04RI!x1-JbRbR8zbs=^PrX65ZunuXO)zkWI+_ zkExLk0o2`|lGwcO_O+Xf`&5+7qD;?cfR3u?ys5@of#yS|=d?>5avyZhT=_6T69R_A zzr>#TXqo6(o$;!m zJ1b#o>eWNv``u78+MX)-<&Hk!v=m7qK|Gkjhz2Rczunh?(eu=ur-(cg6m$1(~W zXgZxBi|4F!J$v8{*zb?R_J>>a0m*P{Lu~(BLRq@sWY~W6DUxVu)%lPZ@ zQtJWk91LN6jR{gm>w5*?qTNJx9RqcMwBg_7Ppg*!i?xPdy4bx3ctzz4c9d~QUe{qy ze441Ux#Nh*lH#g%mW5;g{t>=Ad~3v_l)5}_Oy^MJF%j^$!ds78(Omn{_y(Q&g!0~X zxaw|qX3M97j%AEWqH*K1{-HxntqsN z4(Gqr*G*kr{r>kZDjaDX9?Jc^K=(p^1xw9VZFO_jXJam{^W!}cIXn)Rxcf#Bi}CTV zw#{o^`strMels4>a+*03pXbqIT-7L3zPgcNNqXlD{;uGIU0KfIxhWK1WNs%oQWnIOG5TK~a2o8dHt5jfrcz(exT@1)hWWkFwWWp-{o^qh!JlfudMOr8=usd;7j~|>(-@IlZSixB^PU6po!9i5c5>@RT_~b<9EXil zH?ky!hWpBBtBbLL-Qgr9tu|D%&tIP~em1-4t}`?RTi$%bXZ|4ly3tmHoD6MurqJP3XFwde=IgItH!G|1Vo< z9tQ(RjgcSky~*8hbCbZcncWKKeke_=uc+R>y0`Z@vp=ZPN`i_RltefZ4tTWCh8CPY zcW)Ny8(ET2W)XS#sIPgpVLQRdDgtMEmr#&Vca3UZr+&PDA;(Bh-%~*c<-?zOZhqEt z+95e;RU53P1%VY3Ewq=TMJ&Lla7RW16M7iaJl_eCCvGHv4O>+lEoyto$%AEO|5smD zbJvXSt7)Q_Z*ExBxFb1yGM9MsyUCQ%j=GH@)`pF4ei~+&e@Vz|X&I@=N$jYT-P?>;HG<&CfW`6mytRt0K?QO6YNvD0Jr3ub+jK$h<40(pB{xIMYf`&tNm3!%Eue4ex!)or_sKPKFPA)xADZ|9TWo%e&I zv$nx(em!#ER=|QEB=uvZq$7Qn8OX%bi-l2-bTHmsg024d%su(Lr1Ch0dTkDBd#lxHRHWF`)R6EO{5Br+qB=9Is zKQ?cNYW(h3+kYELdXrEJaa*GZx0T!acq>iaeYg7i8=>1~>`b&DF*CXIsEdNp?#HQpWcx1G%#N$H-t9EYgd;t$_-{3`E5l3k8h4?mD( z;X*YVjS#yVzbn-^tgDl9a9vM@YiSgqNgL0)tk{n|H;FFJHwr}jMKBRjm1Cj6K#@Y7 z5G?_rhw;=ll>9qax3@4nl7cPK1FH0$IsT=xbSE6)=(e}sAGaX6BZ_L( z8wsC1URYf`&s7QyoJh`saT(8gMzEl=1T+%)+4GzRnRRsP9d#SJ8VhH1gUZ%JEJp8p z%kSomY1x{m3q9U*FzkjIu>z-mKk%HrO;?nudqMEtj8_FSa8G9SHGlCxe3h7_#iJC0 z1k!K5v}`ps%LYy{=j;w8bI=fD`YOF#E0X^6A{%d0O!c(msE;2^_F(j@~nue9h= za~TR@^)gDp$u}NJ#&4GYa_@&c2^oA6`8j#MgY4ywpB5=1f1X3^AlF z?!ZM)&hrh^);AT*_BWoh*I^{B-)c-J`N~aZ$U_)4M-@_C?D&=>T)iBfI; zBJ8@sltb{51`^zrLr^a9%6Fd$Sp2;j=GSrB1?dOcclkEHdh5B{4bNj#3q6IaFSH*6 z2Vol5TcNKJonbgjY*6ugessR9R~wD>5>7sMOtv9GcJap-<9A91!HjdOD6M&|04fM^ zxPCt^r&U)eh4M&;jTO3yrgibOy>zSSbXE#b)}$DadT#$^uWxtLyl=er{CRx^*xLG# z@=3)UK~|Sn)@4Y#sTk;(W#flSDv5ekmzYC}w5XQb;g`xbZ()g;>v00ROUw0*V`ZOAs!v~xhl zlhMigC$!p97B|73&m?Ql8pEo8{`HEw?e6k+4Dosa3du|mo);1ey;y&(5_W>be=BU& z-=zg#aUz@~5PM%rM6FwW`NLYYO{27icmJ7tQRtf@iOWqr3QmqdH@p5}vOr}D4)*RE z5zM8eu=yzDU5X8>z(^%K z1v`qZZym#`wys&|WZ7H&-GAUgqf?&J?fB~l^27^#z@UVLbnlTI>h>UiQ-zUmh;afL zdbuSfk1v&)1wkz=i1<5g=DS(Q&+W=Z3;`=NGDEPvb7|q1{Xr=N&W~g&m@lSZ^qgi< z(@5Y{{&tD6(Mcn?3!wfNxW4pQq?jv^RXOdLNc~tQd^P*4z38I>s&Tpe1qnw$kVrz< z+}p*La?zH@f8duT151c;U3_3oa|4_eH_5nHv*Vzqm&?Z51P;@GR>55TTpK|oT{|Y| z_4$K~nK$k1ZEAw@SKh#irn7*OiV-2i0kynCkfzOAbX`Qe9*h5X`FG`^?jFf541o$h z8b)A|sS`yZKjh-5vyEq`f_c|q}U2rUWO*DzZs zt|FzyLHvalRF?qWi^I1}p38=GQx(whCz9?L7|ZW=A;#tLf&cLm3%0cANMxOpKcDR? zQ8*2+1CKwdZ3Kh!R!jRYxBB+@7DV0e;$i9`lG^i2Dyz}1s%dA4HWD> zGT1;Mqh!ILsdb!D*hFv#v0EK!J#xzWg#&-JJsV?8Cq|8f(R%4OX~`npU4t?$v$TA5 zG>Ycg4>K+8A%fZuL78se+X+)U7Y_ce4ERhAAFUv$)%gS_ zEAb983K9DP-&5l~fx!9c7F&n!WTCq2ZZUekbJ?MS=htoHLX|}E&krOMZRr?x6O5Dz zT1}VAo`VLp)q!FTMikV_B(jEUgW_bP`XWh95WJmF?zChq`|7dGr^o;>;mG~@RI@Rc z?kjaRZQ!v7zwp(uc`4T*Um4Ky8rgd3C!e1wExoAcEIPO6@`^pO#$({U2wH;mGJq12^x^dD-QBLku1=BQ3-^{2J@Ahh%8K z!$+Z!s$G(a3t=~Zl(Z?+Vh>1h=vA&vqpppk!eZ9)iE~tE>MjINAXT$GEC+(nIY(>T z%)KBvr`x33qEz(Y)~vpuqK>Ry_R$ipf~GCsbi%f zwm;YqwM6$f&VMMiyZlyao-Y^DjA%E6{@uEyu5-mU=@;W$tk&1-AX@yrdrp-^13*!R zamRG&m9TYEUpL1gLmr!j&UE#{qb98^ij0NMQf%mB2Ri#oC0B`!N89zhVV(##nG*0K zi7q5qllA4UfYe{&xZLCdj%n|W0h>BBNrcQ0!g7DvwWA-^e7xyK?7|rK(oX^O*xoJY z;0W`be6TP=6z5Uhy&V{JecG3DRUyU_6_oNzC}$CctN=0lIP(Y^rP+IZUYlhE(?6~W zk-u&I&T*z{G~!K8%*RCd9~TP!y+J;$I+fAaYcdG2PgbXi1fsE-jj3u9BsVZ!kgEfC z+kqijx=$Q~3;z~6EdC-q1j+2ZO+mcAScxO6MPLSMCT^J|aK^M{pWX~n1r%V2$@Gin zY82nZilKde0*ca$Q)KL=&kk(FI}(ZSnBa#@D5v2Zm=^4u45z$2e1it{4OEFcodIP7 zl{W!b>*=o!?8+pI1MCRHv}8}@YgqnHV0%8`9)A-RsF`)annPFqE-r6;II7tGz(82# zG}=y3>lt*6N032dwI5f@VXNmz^LBmeHyCs*F&KGQ36teD4d) zE4(^NVReP4bpm<-kNGmr`{jbLPqmc{O^(0=tv@mpYjZdxs?;3`Gf2?RO$u(A5QJCn zpa1GdEwy|x0*7xUx~>aMX^0pg#=Q$1%>x?gPk%H6UhYB0=rxU^gMLs{Ip7mGbo?y-0(&H1x09DVC&Y4LgV!3niRjUge#0;46$drY| zr8}JkMqgHACX$I2vHtZB{GXm8r{F~(30(@lhOAO5cW(qvma~AP=VU|>8T7>}Q2r)V z`t-WzOa-i39Nls^F%@E8+uLLbj^!fv3u;yKT$Be}cI6>C}n={n;n|LJ`| z40!sWJnsh;5R13CmP_l6N_&HrH!TcQekhkyW`uXje7?p*fU1CyNpnAco>9BX?BJB% z%?Dx`q&J;vdSEv=NzS=xVS^37B9yTi^>@^Rim9&F zf^J~r88S-5i;uJzX%NDI4*Zi zyKJTV0D{%v!3Ga-FuT$W3ZV;%c-j}ADS~Lg9lCV8!oRk0DLUQzUan8iGlAk4oV(O3rl4wV&8tf zI_zc=CD4JRc4rR2Om?-ZNEu{YIS-@lA;>eSfWB5oN0i$K!0|FY{3CoXt)(|mh{MQC zycGk~8;tA~%5LUN`~!2LZ%hYlhi|sp1aBc()6qYi0Y@43`SJd|TyL$wb!HEGK;0es zN6gYv#GtgNz!F?2_bRaWJ$4)UEYhP$&s2GS&v*Z3iBeCn#NWkq5f@)deB-#fl(0Ip z6nlld5@wZ?#wkZC5ntua#KWyxB;+0AZa2GHT?bKRUA&R&f3u$q#yCqBLBmJhjuWB6 z_&+{?vSg_YJ82pMr(h7EA4yfpdR0+-NW+4z+k=I=27mJnhEI@F_}r8xfvXoKJ!q?1 zEmRTG$=>0ha2Z|YB7W3@F4px=9Zm3P0aPMjVd?5a0cv1E+P{pvn~tKPiu5LVz*hQjvxUB+ zw5)Z%1T;v+Nty2EQk>)>Z<4`%O$K%G#Fz}tnw*vjRr&IAoX%t+r|LyO3k6|2W!&3G z1V|$}CWgYUu9e2bahoyy%L0(&9KP4;e$lD9awZaC!?FMPg{1B(hQrwRpKN?`2nD&3 zC!+{LH#QlRhKo`0t0MZ$B6)*MnemJfCP_6)`i@b{%rC>Z;UkbgRalw2e+ewY#h^1{ zB?XetcTe^t&kK2&ertcns$ape7(K&$7{DS#WkR5%`u*3T0sRH6e+5oZ3F6>dJ3fGc zENQ57CkmO$$hGyqNV$<&?F=wLjWQ%nI-q8VKe?pXQ;4267)C3H9|q_vKu9m0-%;fjYJ1!Bvy`mBlAOKlS*}w>-w)^(gp!Fz>`mTSp_FnYG>?7 zF7gc9?FYg+q4#$}x9?C!WNl&nC`xlH@C*ki$cF2&h)D9TidKOQWtY$l4QdI$6tI>8 zhr5*N!BLivATnxB1Uil#0Mj2R9z>Qw=-%y%SOW$^U}fOb-)~a=zp4D2dc+c2D?%Kw z?qxEZRgoQ`3QqKiGvueIR?SaS;HgS!8mSJpPfMz)Lj%QBfJGpMOQ=)28{)EB$ieP+ zqJgGX%JEtu#*J}TN7w97@N9$OXlBGoA~Or~w8>&@x^W`C>{r$qSft;?BC=2bc!V*3 zWiJptc0Gt30YO))N|U81j9ruGautt?QIN$jPnp*2qe=2F7(SU#-`W=f0%I}7Y4 z>tGB!`D&udsOpFaRs3%*39OP)Fr-gBV6v18vhP;f`T$)qb@0jn(bf$RX4cv5$| zY0V*`$qiTLi;%+y8Fh`qDAShUq`!;r-%~;%OTKtmc}WkSmEw@hJehQCS^DW~x{AXG zZ2@{c-D=z-Y!$Tj!b%HHin!%b?Cb2eZQx?=qasy8*OK>?^dV}w*X%bz^~o8(*tbdc zNrhLY&rjYXWMC&zG${<;-LHhk3XIxctQHVcDf;}Vr` zl+bl3-+#B~#hc>eXg%4{8*2TPgq4X4j3!tvTineuI3U_3bgRl2SJ9!3yXJKi+W1~A zcXVGQj*pLw`=I!3Xo&eStFXiK#G|>_CRHzRhJ^y?`$B4rfc14&ML!^+NFti?_}>H@ zdlq}8Hzj{GlniW`n54$0cf3*FFxwd@G{=(0G3t13KP@g^p(H5l{xw@^udKz7Efu}7 ze(^0O&OT)2O=I6`dfOEnvj9cqqv$tK*=~SVZ@>Lq?9tT)i~yTGVzhPT)9jjZNEEU* z_wivg<6^0!{-79aKj2W}#GY%Jt~8FcI4tW?nFSB8i|p{DE`zRE9+7StQf0=TPMiwK zwFN#!p6w0Q*uo!vz0j1w#GkgEbd>vYv>EZyDf=G?6bV!`gc*li2p5OheetY8`}J9# zPEiEudsru$iU%3;AiTKvWIkvI)Rl=g|DYKA7=%MHxg|FL(lHk3?5L$QpgC|_5M6eI z!TbR<8juf!7h#>J#7$cp6*}!6*bl3Ez;~A^EF&Bo{rX(lgrF137G-6> zljHQS)T}eUn2?#O;MF8cl#|%OWdB%^skCx9ANbcCKgymui z+abfYJ0XNWx!N)_)HnTetpMVHd=br{(H98t#Hf7yB)T zk;Nu^y9uy~2&Z)NdAwAdUVZkzhYSHC|g_S-g>&H(x_ zx_?n-zloP04_VQ(#=l7T?vc{a(g`&pk$hSQc#%0X9*hZHD0s0}JE6vXxS+;NBK}Vw z|LZ!KwDW+&KIAzf*m;Pa%8<2Z8cWpy2q~B&mqmF;q1Li}-*5@O9zEB4@p{+`kQ$0H z|AmF!&|9N-Y(xHe0Ysi6$HQK*cgkF@Oe>2-7tlwkv;NQ(S1{)KtEo_f=h!_3kf>yZ z#d;+c3p>?L20{Kzc}R~3>6Ixa^VUIFPO1_^@bj5S`@20AZw!Du09Vs`RuIgPjpz6S z+RK=z!y$*OLK-sps8Rl%JW_5^`z!#(8s5U3K@z_Fjd|C{>sZZLq1Y;E8tX;hFS5Lx zo&sF8{`T%#s_9RNpTjAjoRO_ULf>I+7JbVY96{B@KIF$-j7RT@e%j{+Gk zYRXwjZj_}*p-YT?uKq?1Inf9L0D=K;{%tha7TF+Ks(OuzGj_juu;9+Kk=9&;%xZre zCJ$#3rLB3}yI2JIP(u#yTo>t7<159vOQo`@krfz&p}jBptg)S&K)wT^aIU;?lt7s_ zV(g&rQ90m8ecV}N81Xtmtt4V+V+}y{qqg1EWeI0eHN6lj%Kr?1Xwp}>)z}yLqk;r6 zamv_MiKZVl5VgC6Mwbt<57-o&?poq*jBQ@bkD{5lurBWiqlm!*ZeQYuk>gJRMW_kS^i(|W|{4e z!G5j#&j=v}TFsd5H--TJbJS|KpJ$=QgXH9c?#9O3FNfpl$qN#E8DvUJDcAAY_Nfo6 z&D{0ljtMpTgs|KZK1^5mQ<>8GRDp3|xuP~!m~E^=@eH~`VXp11KkTg}Ci-!|xqH^w zV#T7}X-g1ONS>@n7m&Wa@lM@Iw7EV+cM}|^PZvJt-{wlr$gFP9`Uq1QcaF2?Zb`M! zsGS_M?PaYO4wGC?%ZMn&y1TO*V}4~au}I2}P&z1FL*?4e=RuaswAkg#-*)^Y4ISdxVY$h4ymJxVDQKAnAIzOt8NgX~O>?xt7#3trgh_$T;lHVruNZyv!2VkZsWzM~U)l@1a4mKGUPFwH zKMr&0kCk!1@uRq3)oV6Hzunj7<*HCxg@Dj~eX0b>QzOw0usGXV&q}vZ)eD^UZ{i49 zSc}cm*~8|?fu%650f$uRPo@f&L^u(vA|*Yl#;hN@Z;GY(+B2XNfBG(ZlxOzNhYdx2 zb9TsCdwq1^)@)rdcHK=ypb3S@a5I#Buo{<2aRwunxdhk#RGm8xvQT8n0uW_WGmiMQ zs>aDNM+FZxa@}TNr8(9x5e}jW;}44L#%x~BjCku}4!jR?Fe2(?_0Et{teY6qreELu zz;3j9b(0%N$jKHwmv8PwK&3|kHRXqGR%DvzJ zQc7Slu2pauh1cfDHAagrKTSaL`K|2rn)0)P zNvtiC_W=Tf>|>bzO8ilQy@5`}h*?&Q{F+HVmuEHa-o(s!UV3asU0OA=>s542ck`RW zT)|@{p58ZCr-1@2FVDtY^=$L(9;f?JIPxM3^t z<&ofVsXi6K;LLJzc1L`b-+q*^d|qudbO?5s&X**w+k|mcHF;(%g*8QaDwj-2=yYR7 z+^rG94+`PIJ*!B}E-Sd*g!&&LPEz*u`Eu3m#A7}T&E4IZz_I7li0rw}r6@d|<(Odp z5NC-&iaI$4eS0!1jYEvT@m*pq{A;kJz_?gqkK_+YsSx9oB3lm79ooUeNDq*}yeIH_ zx)_Qj-o$3yA-wjwR$uj;HFzqSAg-m>P-)J?_JE?e>`B2cHCB`qrh{>?nl>#j8Ujjt z!H88$F?}=U60$WPqG1<^P?29F$-cZ_NhG1lT7?n*Hskoq4#LrUq1~Md{(PE}0epQ9 z5FVn*h!!8y&t}i(TO3r)JZ5AljE1&2UiMWw#2j=cZDWSg@hV2-*O*5JEa8{_nr~i& z<#6vzVcc<0hUe!FozUid_u9@X7v3Mw?tA@FV|x~AzZxSrp6&`mi95;|tAl}`QI-&d z{n?0KrHKPl6Hd5lVo!e&lZH6>W{7wF;Hn#E_$n$GTO1-IjOBWJif>Zt^qgEg%=&e` zcE-)tR6syElE1*wV|ekrFweS7sT>W@@72u*1x6qRR?<9a zGif+kT5!(RA4JH$)U5?cC~i*S*y{G9Zj{6~KEv^Ma&6t=Y`4E&pB*50pN86E9Il3s5$I$-TSkc?atc5`z9YcOXV6h1j#Nre_e?#AU zDH@}OryQXz(4bI~AX@bJltuKmT_Ked`F_<+xxbboL-3OygEvOj&c$y=#{080TbwRQ zeStLJ2wi6-;=l>nAr(gb)&4aS-BY6NHUmT;6aZ0F((HA79AFU^^2U$eQ{egJ{UBZ3 zR36CT3u796BHP>>Aa(DrX6p}m{K3v_3HX7OS(Q7Om=MI6?O7MxFz(;2KUGp3eOAyJ zdV#oI?LWUq%D0Ahz;ZL2_wSpfw9UW(IOuA$gXCGr5Lmd5Y3qHo=|}YI95vv0ImkIz zT7FhI+G!SEh_p1Yft*i!`xR$Q+azEn6<@QnuUs$2_AImHfUPqsC(V}RoZzRs_v?@- z>{j8(OVQGz)8vBeD9FhH(qr9_rgDKboZ$!)p5D+h54DUMvG@Q=YlsMutZ0~znY{Q^ z2aS|y>G?g_c@KhZ)+!rrGeiGS@6LO06f#YF!_V299oQ(>v$UCu{Nq3*6X5s^w$kPr z{1qF1lNTisvMl_7JsppI{$3CAETYF9$OJ#sb_l24+{w%2*lHGGMV6S*Onl~gnQ_cUnq5Uq~?Z~7B zBRQgXm?O=1*;RR=;gWs)Eti9h8g#L}Wxlx>?Opi*6|Km(g^ zcI!`v>QxUmM+ovYADVbp*jDsg_N`}>dX5WK1+n&f=IWz=mAxVFqmnOOu_^C}-@{hS zyZ7bOK+{e!<&^x$e69-VOU&MVA8yKjvPYDlOtgO~P9^_s1r2n1gpami>D2o#;BlY8 zn76M~;*79jh+2y5;{A$7EhFzA!ft(Z_9dO!3*TDgJ!oFm=Sf2;vtXboAE2WT2_45! zY$?3|> zD?UxTYH98GW6M~owTe;O>vuH&*UdvwpxZGKo<>Uf3?W%h*}fd*Qf+?c1`Fwf#gl<) z7)OGdO053$Lx{5yRn|jp=y*g-U*C_CcBWZl2X4krXeAPFY*MZ3+E_2nsYSe5AjZt(Q^MKQ3dp-X1<|K*~drZHFj?;}7 zzeSc#VkKg4>(Lc6h9M-f23y2bf`rOm^X()7OUO7gxh7R$>j91 zm_sgxc=%_DalMWS2FHlG4+Wa{)P9}kekH|%vkRB&8%>0GT-MGzt|!FVgps^EV~$g` z`h=JuOiZy>6JF>-VU?0m#Mht7NqklINJ5WL-L9uneG3=44=8@_^g+HY@>aVxN>i?S zocDF^z2RNOY^Ru#-e1pn#SqcilIcp*)SG)lPIX{NHDYQEqL<^9o}Ayq%TS;8*iSWF z9Ut%m&9uG7V_pLovY=b`RAiT`)LBIel*c84vFUbLSXcKE_eEA?UPaRhEQK+IKAqZR z-qkk6;0oRDDDIw)Wpl(qdPlFvgJj9ru6JD3~sKqJ)9Y&MT{ zp7X+#WA{G)yQ!Ks=o}(F+5Ge3Zhd}_##Eud)|cLx9_FY5qAtRO8bCIidq6_F56=%y zd?+M6d00^L$-sjIXLYnTj5>D{`2jx7-yy=ZPjj{WyT79B2f6o3kmRUA5d@>|gDk~i zRBO9+6_hF_vMWh&&RaBwKOZy&W z_rf0Uoai?TISyiRU!qlDOl-9dDwmtwD`fV^*mh0{ZCsKBCanAP1w5f&r8<)gqteS}8 ze)8o%{MflpdiqEhdlsoQu=?hdPXz{myW6wgqt?h1d&gZaaSm^YmKZVIKdx#NOF4{!CzbM+dhD2#Q>FY%|R7ygJ!v_ zW%B)li8$T@_sa4+yAGpWeFh3Wc4ALojcPOX;u5d{G8`-|?XF1z8RX8htsL^fhdqg; zrZN%B1oUoc7&x3+aeDo=(9C*|A=<-VZCy*Gr#?#+&y~5!rI*mujF6_g-0*a)G{dV7 zMw(tj-_r&k2F1Sju?y^K<>J}#>77& zj7`7=0G_2LxL@-OdsBCB_U2X-<$_sD#Zg-7XC7szLwe0KAq+&2Eh7ES6pW+^4}VxP zAXZXBESKH{ISWor6cHGOcOsX}4~M0=ttz~9`AaHAjRg-v+Egwn2vJhA0Kl}6J+R2w zP5=P|=L6-9fDMRB3OhqKOTn`k;C)JLY4p#;jJ$~*Mn`4y6ks9}%hHJyDRRO<{8jj) zc1=Ioe*6;^)v80F53mXU+>l26yvC4G6`8W)*9bX^0QkrBKua$psCil`_MaSF zXFUiEE+wochfLz7Qxa)MCWOgvNk@h_*9DuX>0O10$50ZC3U~n}=wImnO zFvhkhMMx1m`XG3WBg<2gl{99DH+}-GV)dY1bz6;LwR;W`t88{{yfztgKUSvKx=o*s zolA|!q;Yk&qNQg%rna=9O$f2OX&2R=4W=1JAxM#9$h-6pOsa@d`9L}m5 zZ5iNJB*mXFP;*gJGvlWqK5$aP+Jgh6c7|9w@o_xp}gjV6znp`pZM2g8tPjGcWT+e!GRI z{q`Pw-Qlo_sS{p?lGO0n(q;mZA&dKd882#M>+pwK(=CoG?#ZDYX~A0?o+_uOpF&0U zA=k#M;XaxUe?%sbdrMk|fae;uMRxsYgU;ntSBMU0tD=L~Zc4G#lVsr-C z15{&C}t)E8h0}p2`OFSypePgf87`D{guz~ zJEfe@e?H7A4j7kPOY8d)x1(CMzwRni^L#;L+SLR#QlL16gmfI?ypVJf z|GOvB^}OE*IFIl9QL&pf<;+?SAd>@qyU|cKUsU?4I>O1}Uoc|53~VtYR#EJ>DT!)Bc3@lyZZX4~<-pA0fq%BkUi=o%lb#c=*?QTdP;f7doCUcC)6H3&I1)KzH?8O>0m$HrrpH1OGagbxFmp*8{%+f~zMXL5|MSz` z-#xK;!B+g{0_*3GhZ2ASY*}zUp6hrDcP{@xgID+6rE}u}PJAs9>BVlF;><`XZCAQG zY}fiu+=>0ymI8ZVmGbiPy#Rx8|Q7pYe!$e9V_my@$3GZG;Tb|iEm)U zR5DQsBBh8q(tX2m?eD~$*e@R0{k@(mo8OC<4*$B?O)FWH08D`TKm-2jy$|E@y+0}o z7{M!bZhSyv+O>>WO|jdi0E85Mj&Po_UF&-hJMz-?i*FnL>)-q_y272sZd%Es1mG;W zXVpU(iVqkeZ{;e3o40eO-OhMM`N4>F#%g^SI?E9~n#x?5Oe8THo9L@5OG~ zj6w;(Ir5&SEjT&SNoyJ|p5xKHSL;l_gEM|55vx^Gkf#O-DWw#>u5e$nh5cB@837KygB*fo!>^p3KzS1Ga7YwP9n{fi_y`40JpT>9S9h~RXR7e za>lnX;;V_MTzLi)BlV=0!$P_{9pOCV2>aQH72fg0zMq6w*005`u6K*w#94#7A*YBH zwQI4v=Uv>~`o5rF4=&faeidihCPr*6OJy6X+=2`wq${N87DBx1O6PgowO@?c(Y=rF z`_ag%`gPdZwXN7qoRug6mdRyEs36{M7ogzOhm91+sp?h5x!N7(Pio%o^l{{6!ZW%I<- zhaN9>GcP!l0F(gNExsL{BS%?tMN7b^`x-fEts2u-5wT^A*kVT12vCTK%uDNYJ04oN9?yVBj^2xouXj&^no9vo>1DuXWtO8REHU?D&XiH-9%@w&jAGE?`~ zX{60##1=Bf7ZGRyBQ}RXwL}yI5F{c4fHu|3X{XoHbEK3ufQXcG1d!dX6ej_6xWefW zQnb0kIhJ&j-96Fn;n$A-#xXP#mXj>@l~v@R1YibXau1Sj0vqRDrB!;X0s$i!0#Ows zHit7lM+nhmXl9v|qCrYo&za_B#QZ|K6;i@S1cSgdA|e8a(qV_xa@(oUyM%D0ghhlH zBR(jkh`Pdw5m7f0J7GD=Vb1tbAw{?CT0H=|qE=*RFy0?|?br*>Xd4wXga02*rCozM zJ@GdH001R)MObuXVRU6WV{&C-bY%cCFflkSF)=MMG*mG-Iy5#qGcqeMF*-0X`A-F8 z0000bbVXQnWMOn=I&E)cX=ZroIx{jWFflqXFo+Vp*Z=?k x8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H1002ovPDHLkV1k0wgKGc) diff --git a/examples/counter/icons/icon.icns b/examples/counter/icons/icon.icns deleted file mode 100644 index 58689ff8a083c0361c38cce1ed15182f07df03fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251776 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 z 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�`z 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∋$yxeMtbxjT4FOjZ%37*ocZOuU@9EK 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 z z0#aNaA^qgE&!3Z zUwI9O^}o92YB{e&>jFkJSPNK#Q|A{YKpbqa9zU4Qk)JH`o}vLxHd#tr2}5G0a!tqP zCppCIns*D{l6x{Uo=$nY=w@;M17LrRsDR@g>?D^2mM$7oGnK36b;mx|zReMsr!0VWPEAf``$QRB6OyY=GBZwHDEl7@a9gfh3sLrZw zIRkAG!$bYfII1h+u3?l4;J@yJ4a--}x;gCh+ZNO~?X1otzy9R1gpj$xLBt@ut4UYM z-O3O>jbB+_Ld;m!NDi1w4{RaDMi0U?yS>D5tuU^f1SPk_>XVv7BzG@b=Dtl7*3FCrVP)t(_;Q=Ztr9EvOFmF9FzS}nChR%hOxWV9auRs)l zQRO0h8(miWE=8uY3|0VZg-5^`88bCC>w3Yq z0|~~K8}0MY3~|u;4A>rMaGBL-f%(P09NxUX_es(xsez&#qQKDBj^Kdy$z)1LK$Vms zxH8|B^bG5o2a%`ww-gcAZgT;ZyCw06Z;cm@ZG*6Z{d4TN^0*u39Ct)821FdcA5?>T zO9IdUe?oR#7rJ{3+e`J&N=r)wS1Wz09$>n5nV4HQrsjpKUo=%(-9@*I&d>7#iA&1> zXC8bC{CI8*Zzf}?WYAH0NH-sQ*Hs+G zMqziQtras{AjNcp0g{fm`hH%*|S^SdjjDbh836hn*e1iKTVp+Z)AK6SWsKlEShVt^8V6Psro}B`To-2b_-)dL06V zJyn!)uhLzOx%$@I$5$0&1=jg>e?|>1oPSwMa$k(l z7yaJMQ?}3)=c_Y?sdV+sxl37J~<`#yOew#N1DR=;T_mpL$r_i(F0 z%h^vb@4|}1>WBP$%Rn&u%b}{ZGe*dQ3xV?(iKJM=Nc%9i(16Uq2c92iUr`A%HwQ=L z-m|+!XE*_vJAo#bc43SNMN<~vJxtulEwGcWX)1Sv0&@c;TflJ@;%LIRfk^~`BdSzX zNb=GFE9m2mYdah<4)GPNf+ls~0}4sby~g2@RdW0&`)$xzI~6*BN4&DB!-4P8g~^Qr zvD{q4fG9x9j35#&l=vrXN1mT2&#)sqQ?bm0^M`M04jBoWe)B3(*!TpiEIIeCOASiy zI%5i8jlBsNmQajg;l@_PtVLir>ybj$oTPHoaw#AiIR+fdEp1@17%`tNyOL7{;@kSg z+QLEcsoeyW*(Z7}`c?47C2x103k<>{exCq1<9;IWy^pZ{-VDKjfe^%Qtp=$VZK2bBWB@!MHrzkyfQJ6E=Bf+ z?dWy@f3+7x#{Z%E=xTNWMpp)IE95&YIs`qox>dA=j8aAQ^;)I+HVVkt=w2R>C1nOy ziQ`)$fFi{gQ?*_Xv_(bUXVwp#sUO2;l8oqpG)9k#`U93Ahj5-pIHwf3|O9zu$HPi^`Ncvd*jaEBjuFLgU+sbZFL>5-1M<$c57ZkP!m zbnrI9JI5Glk$`;qy2Hjo%)M%9BhvD9wgbFT#_nqCVFVZ{8T@6#Nsi4qXwTbW&Zvbi z`uacykm-Ee%L{LA0cnh=7?T6ml#0~~V_epGbW=1-av6Le4Z$&x`0W<&%JROoogJT+ zA{;Kk?^l)$3%$RjcN&!y$5+hmsTOUs#~n!@y0Jb1Zl)R#%RXZeC>B%oSaMBBN@|(7 zu==6_dWgK{LPzUJ=(&ILKpw^=0Y8q0--d`~+GK0wRXRNl{QQXu#jo#;feGi>+E~rv1!h(Sd_s%#afH~XVc7S!ZLdM4e$d;m?Q~&vbV`%UfW5DhAyR%lGfL5HXLy0>Qp^B$&2E0h*_LtM#&Zu$zbl* zf@=yu{=3)pyMT;l+`tj&VY8-{H?MbA=w=hT?!vSjb)4ChO_Y#9R+6Eh$7?X$mGp3D z1Jza8b)r?iyFS1Epz~QCnFz2^07UwaP+4;Yr<_vaf!~}8?^FbrW=IAEw$eCLc@Vg* z!P6o&1-!^}Wnbx}t`{%xjG}L>wb9%i{8?@%sNG7RwzWoU`w z0!E{S{%DIE{U)%(p#U%%-P4rdubg_^%=c(jUO-?0J-it8HvAIxtg{14(;j38?iU4w z5*W`vrj;t@jHV%SYsgHWb(+{)El|(UT{H(C+Ic6}m|RHfmtnuVS?xv8J~;*LhX~Jg97Iom1d6 z3`D!;18!@j&PGvQe6;d47wts;+V6ZY+8#J(u{&`WTgjRR*g9Z^7KVU#U>IS7u}KQn z#W)VpSnBskd6*ZBn!ii3GpilPRr2CqxB5XleFNfe$*i`4-le>Vw7Ll$>f+jWm`O=p zmRZ$hHN`CT4RDq4nMypv2pm~10g?Bs&}UY2xqOS%+jl#IioXjM(Qf5 ze6JIwe!SSKj!H=`N*m6P?|^^QyaZx*1zLYsawCi|XxcFH;Bt5;4xtJ8iR}9Mi%5Gi zZsw=WYWHR%=Qnn{n%>p;u`&XdMPs<$>21%m1i^#~rMvk?MqbJ~kq=#$UmTX{4d(Q5 zazUvGjQG>oTYfV>C0c;N8i&|=U9QCrpNNFSPkD6c;*Ca~sRh4V$oxIr2Qd>Ii`SO# zv2%R(ZBTsD6^s--dsxJ2-z}_nHe}WPu{i2%Gb-MJL$Il^&;CUdpY~>=r+&TlyKg?8 zjqVa}_ZuZP>4zC8sW65da~L;)!zj?_y?#l;0?m1`OJ5hk*O}kmdcVezXqWz-Eg9#{ z1aG~pUW_@3Kf5${GTvtsP8Zp29;+C87TF|1?H3ng__I4!$>s@!dWk~9M*YQnIf6S z?0A~6Mi(|c>a&=u=Offzd`!-tPY9@=Cp66Fv~76%v;Vk52CJaj8NhB<*? z!(m0ame_W)?!FPP>L7PSw0Nl)@B62&;RO3XXLD@oKAV5)1Xrl_%yPjx!SbP*De)oRn}$P?s3HzWm^Dv-e#`uas#0#Rr|+x&gwg zDOX#YtKqEN2c+Y26@u|sIK~E8x#cR3Lv)v;ve%MiM3WxZl}IH1;q_H4>f|DR8j)F#u$XXJ-q`1188o;bjP;m!E%P+N5;}xFmF7t0FaFTc!AVql zVYMm~73&igoASk6!tfZZ?Ht1{Z!Evl*DUg@X3U2+%hkdPt%80vGq%HDJ>-I-A3vJs zoBb7zW2o;Co=6tc-FB=>bS7Lf1kKQLSo^%Z@X;p4YciwMZRRxwVGC#1Y4m&c8rm`X0rCf`!AC>Y24+?4*Q zurl&m(9&~>J-%7~@IJ|Jz&_cB^%jK6ku?L@DwmnI-R zAXFkh7}i8wPJqMxPAIJLik1mB`2%hRTqN~~eO?F&uE^EGt8|gj507XVmJqjgZ&oDr zv^0Hri)wF&hMd&&R`5IslY2&8Mt}aQfcn?No%~P>TT1yLK1r}VCmk!rXh@%xi2C8{ zCn8wapGMx&I*em1qkOP+I&#qW7{>Zcj>A)Mr?uMR_zW^oI-hNUC12 zb=^3_v1~m51}(K%;gi&>nx#vtGwwZs0?&Df9P*w!e42*M8}C%Re>dx{FVpqDjCAE8?saysw2aG&ERo zdwYY)$W=?KNs;m;yYhpVZzT+lYK-?jT#wgTxc8V$Uq+uYuXI3>G^{+^JHr`#cFr`I z=TdfW^{4GrAlUTRO_w#|9x5M=pK&(y#S%OT$*arZxwJ3ZHDB55hmAR#G2m=X?Z@n= zh}4r(nhU6=|p5^^ebmF{=5M>_gu^IhZ**D}B_py~wm-K<(fEDL*Ko1?3rP z1xR()>dR$BWtV!_BfGw~`OQ4)Z9JOT3tSRD z>J_0i7JZxJ%+lBUZcP7OD&xECy%pCAnM3rz9_ZQ_Nu=4 zW`zDNNA2Odl@sRSiWMKm$18Fr(qNlXrwgk9z%l1)XEYTzr!W z#Syu$uutDuqDF7v?P++P#LFkXvh?Z|EkbPNG!}T4hDM?0lEdPDePU_@nGouh9MeA6 z+>@+|^#S&olT1)dhIOb&LE5vYE*+CebswvP&PZL3d(^sq91BxS7VUGYAJh;d&5=a3fu2Xlz%y+jB|UBOG_^za@#l&r&(&Yxn0@GKthM*j zc;j0=_u_x-y;XA@!MZFuGh$|@ku7FsvdEH!wwRe^fyF#xW@fU*%*-r{nPo9EajV#Ntifu!L2jy7ln>Kr><#Dq?G)QNNn z;BW#Z-kX7~=$*A9AlLdh-y8LmNhbSL`($XL4h3se;> z=(q-$4H=pCX7cM1LR!Q-a?I2nK!)3Ra*>CUky?lxpC6Smq&4_b-CKl&T%m`;Ix9gS zCOOI17CN?Y!Mjf0EveS`&j|s@yL0Hrx&hWOgl$)tcG29?2R7nDg2cGq^2FGj)K zcfw4h@n(P{LvQBygp(8)yd%fYzO2?$^wKG-oibEh-7=`~t{FLpXz(PZy<5FKM5Tvb z2L@Z}gkXCTzctj&kVt4^IOWdm&-OQ#)z6ClnzN}u;?;hev6*ehuFdS`Bi@$!Bn6Yj``Tw*@5rYGPf_^W?ExXFAfpWcapP zVLovFk-IB8`DV2(P%n~cqjb23wb_>t5(8CTvx|MGvE@o8%a*g9q||=8P&s6#iK&@A zddX>-d*PY-@0O@KS^)#VY5>1vXlw~)&bwn_M8;gbxEzRQq%C(P%9=MVU>qZzol#rA zq5jgifv_Hf0?SHL!sIK-a6y(2i>Yfd%exmdgT)_<4#PZa&fy%d*w4NR5#~!|wrmv= z2&IM-=_KS)b)kQ}#U4zc$c)lZ?m-T>RJmYll;&H!?CqfqmQaWhi-E8Sj`7Ns(QEg< z98pPA;Qge*R7s1SjK3y5Yh5lS&cCJE{TV(=$3|^>z6p9-Hzn72q;fm>ikMFWpU+1F zZ!HFLCJ6l|j@oJ%N0AyrwY5l;kb9-KJNfU(pFb250zd$Mu4=TsxN8{>J#3y5?Q-j8 z`4&%g7Mt(IFI+?05GYs*q1Yp32! zJ!e|(7b&&sV6e5566!X7E5-omPlZIQZ;iZobrd|$)z=2jI#zr_hWCcMm?6Qj@2$}Q zx!KkUwXy6gaWW%M93xpw32CG}1ExM<@9oG7YTVBy^YPnb_>vR;20oA6oH)-$Nx@j) zK)z40)faiFPi)ZNzCiU@MIgJ2Vz6ZIv`4Z12@jDJ9HdcPlG66m=b6M+hSKV+C@+eD zDZH$L7f(16*iR>w@p<_=o{IAMUtE(R9sv#+iK?AM6ADlsS{BpvkN)zLn89s0da z?(G^0qqTY>_m-p;mn4~K`7o|oJ0h@cTt7$#H0(<&Dsp|dC5yRkB<_b_4eJT??&o`a zGneasf3_zy(MMRp`>7_{;>8v3O8!Y+sUGs+c9uX4$1$*sB4?}UTD2=R7TeT${sv{b zhvPSXx*qm{PyhdDmJI;F;{9LHtjNbOk^e!nB^LJU|3$O^MYI1!v;Rf2{|lN$-S`ih zbp@_zdD!915xn0ykqx&4MKM8cB6Ol|ROA@Q5s27@Bn5N1j3nW>K>nf9hFdZ#vyAF@ z9;YM60ut;$FmyPlA?1O~@?=HG%CsMQs){1ItuD5AK>=+xe(rG& z6K6{fS$gIg%A5R59R__-a*)& zV(7)+vFqsLjA!eLEPL+c-1r3Uz1vsqM#J}IKmRn7Gc4Lp2MC+bhTWI*|XRtxh zxwWxkQW9n7dPqgO(XO85DoW*=iz8UHxGr%NYsS^L2mLj7pwxdnxy=tu z*%#7@CyO!mvazwDV0mkxqDys5M3f<7Rf zxwzRLdQNvFKimxQ;ObGp(&nzwe+Vj%_+3dG_1yb(XfMezHWn8|n(^2xDm|q6^Juy^ z-{DjL%n0*$w>g5ehq+P?Lr1t+WG57HlBocxO|D^iMlcUHPkcQ_%r_|s@yG*rD=M$6 zDV`D`mQ;Bag&Zr!H^MKIdh>w|WBl?j9rGo^A!N9`n-`lIaJ4&9XYMnKr1UhFquH$o zJY&uK9J{!6OFu0kf$Jo)=!@Ts#RK+AH5~2EmEC<5XyEz$cPY&m_dulZ5Wq~K3F ze*>)=f6WI~T9uqHWvrSX`q_Gm+gw-KyIhj(V2<`>^2g*lr-P(1mm{RQJH+01r4yuZkC+R!_;#-*B)(zn}~8IXX})Cd}8y2t(qvTSu*(bB+J!f z^n_EPLz=ymsarbKpLE*`b6tu20Z+D?!}}YST&jJnn*Ey80gdQb( z!2Uf+Ra7km`DM#gHQV##WZu1p&cPjGHUmV9pO@glM&V0+)=!WhA3o zLQ98ERn`vch3e8^j|?gg3P^i9{LeEKg7FpimPsN;8)gXn72aYsN=h*Q~ z8iKXy1Qou=hMvqqD+MDBC!>R@q*sz{Z&p4nou;ippF#{?gBF#nH_1eg2?HGsv-wO` zSKmK{nroU}VIL0o-~3#*YdGIA%(_;5Du{Izq+0fRsU!ZL=ZKiXdAXWjWn5L`z?Bf8 z>KtgEz=BlAv~VK6`c@-NGJ3sb0=THO6h|HR6=<8@;N;vzLc$ zC!3*fS;$sk?@6n!=eT4?f1E&!H0dY;!KGBVo~4CQmRw|Rhci$jSD>T%U;S$`6#&V| z&^lr&l3u#&^9<=Qm69f>?G!8GR)tMfW3>%=<5NmCOMzRHj#&ime83NB5C`w|TSkU@ zcjmQl594Wa(LKqX@8S4kVJPbWWNz3Q9=)!q#+uLhmt?e6ulnN^Mpp_x(Yb1B7b1uu z1{YXrTE-ZQQ(Mw@WE7l2F6(C6{nOgT9={+%W3j}jEF$&Gl?{nSfs41U4TZxN_Nu_Y zaZ7U$)V|xW%uXrAm2w;yM>GK;yp%kQBxqYOOv#$oz{gVxR3(@3Bbb&oZfSNi6O90m z0puvA-PPKtu_RW%BN6Q|^df|y5e?-DBhMGw5UogcC(O3uErI=3x*}3ua`<3iHiS=L z<@FlyXzoxtgvJOiZ!`X-(?dEFBZ{sLQ4GFPe1PYIo!uZiiEGENLxd68`xIPZj;0%J?0%eZspin*0G@)ebRr zp~~)@><|7^e${UT?=G689s9>T4DNyFS9dTR8e^H)v+mLTFa+< zONj{Ka85czcIE0uGk@`B99q1zlVm{LvRAPa$M2bz=I)Z=#lIFNs(KQgS5hy7`<~56 zD+k1XJj52xWB1jWMWJPenmBr}SK-@LC*A18r@%(mb}(Txjd+}-&xG!pdr%(fyGzv% zYc>?OeI^wy>PrE5s{@F>q~&dD@z`C2ruo@^S-vsQj)<*x_hdyJ6q7OO+^WRvip3%R7YC`=#%yAE6)66{t1i>_=)KMp#;K_|2&J4f%+gRw`BU<))QzRT0&SD$;r7xDRRDEt ziBVw&Q59izpwnGK{5iY(-^_g4dMQE`7lF(*YLnV_~MT~Eu0us z$uR*S7g(yWO1>aXYEGuqf*x|kJJ;+xDC*~TC%p-%|3N6!9wZkB9c~g4p)z0B&an7N z|M;IA-euI7FBT)v64^{q>Q)iibV5E@O^!{<{;N&Mb!UjU*X+@ttQqOz)4zgnSx7x) z&};(C_8fcpn*?LE=an>wHZCe5KL`dY53^B;z{))1`6BPLo*IjHDseEj%`Ac}IQmD_ ziE{aDGtb{*_-ot9Z#Tn*q>fo(<+NHP!2nF7SRK}fU?~AjFyfam11@;VZ%Ymp<*fI7 z>5>iR&>RXgzpPF#wjV~jWuqh-sS`oMbOokYN?hGlu z>u90Haxc~*C{?1C z2AGLV;C;Tl$QN2lPCo2USR9Q6VkJzcuc80(r(yh(V6jHve8(}m^CaNO!{$omD{c6L zFPKCtN$@5`YA`RuV1K?_F3O=S=k%S+MA55tibCl@BI!85n3|t}o_=2VFqu7@;E)W4 z-OM|v2TWp-SvH?SoE?PPM zJSGAcHw7eqV2b(j|9jb{gJxn*xz1fD!-*4+DnwHWwL(mqm@F5+&>NZVTLlEFC zv8ueD8pYF&An7o_bR0!EG}9WhgyK5xFQxB-^sEs2vh3XB)oZicq6YJoVZ4f)S=ma> z%hDR%?rSuSJM1RugW_(j%yUSz)n!WxfmYk=K>-%`OtBW(W<}Te@;I?lHQ8}qe-rx< z=B5dcH>v+F_a^;TkR}``sZG1RxP@ELgAzit*;r8+Me9Li)eECezE_q13s?H=pB;Uu zftiKj-_jO$s*h5C~ zG23)Fj&AocB&;oD_n|KPe+4c}M-c^>*2vNi>5>t_DvN>T^!upXS!D$agrp z=bWM~f>uF~z0#F&)r5L+f(&85SoMr%93$p+oWX-9dg4=O^u3doRr%My7)U#A$>g13 zdb7vfISz%Cu*tf-*0ePesxx2-PIAjxGme;B=3T}KSopu4{Y1szIF&-x$NLDvoOH1j zzVYlFXr7Zo6Sk;^oGtG~7q;g)a_g@`E!HX);Ln)j-cvvsXLon_LlM&fwsR5QFq3-I zzbD&Axvj1evEMKc49?)D*?6m}m8s_KkcAUP8!EAc0qBIw8hi$+ANTDqi%8v=d$Ata zBYtCe1glXvJP2jK3x7)M$$rSnTKd0)Gj;$#sqg<4&VV1ofPnuI&a{6Onf_Ne`>$~J zU*YV(!rA{KoQVMbKjG}O9nO<@Fp)}kW{q7CftU3wiyv5GIF9l=rbRra+*023G^T`% zkj9h&$-SpX$NN)TV`FP4QtR{eDesU0qm1sZ@pKsVa9o)+Oc*p&ia0A2_zDp3Zu+)S znw54)fD8e$K>Y=%?BukTeq5br=X0fMl_l1)LBkM8i$OPTWralPh~S@b#i5h|>juK$ zJx9Xoq1Bv!oqYp~#B&8I{K_7orZXG`G+g{|Q@z1P|M0^ljU@lFh{oF4QkZ5$N*E0~ z20uHE6?kK^fq=N-^}J56j=`1e_#7=OdIDF5WK5h?P_9ak1P^d5i9nh>Gc{(tn&yfh zr5VG@PPt;$6Wya)#!A*RhOAs#Ds^G%44QwImDfybEyCn{k-N~)@WnvaWWrrSFxSi* zyFS(ej7(cvPvM@fbUUMY59DN@F~gx_ZTb5o(0=hCG~2HZhtX7sqFN)A?;s*5NtrR=r80)>ynKh+fE)tPU+4aa#Ku-KN}>`i9sSWa(U?# zUrGKB3sv2b_KrDt(psQ!6|lf)VWLvtM-*WM;Mx-}_hv~kJnbuTyr@<+dQIF#H#Y7( z+_AM{d;-IC!2?Gnu27J;5>yiYn$MgFP+w*H<1m-qK9ge9HO6jkuA0IC1dslfoYe{otjF;C&r zXIU6L6~+;VD15{#UkT>28bv7+3^9NC%4)lz@uw$_zT6B9{wRAUKO`e@W9U^)6~ii= zO}vdX>Y#U-I|NMl8(^FWi{X^fl=)7%6vd6TUeWnn;hnIfj?s z$mB$~KKi}ZRu$(K)N05~iIZyS`h-FxazXR@=|KXg0s}qN$t)%@;W4%G@8D6vEt^Yd z^xW)|x|<4_gU4%G3tg9T%=#Hi${-35Fdd%&E?=dfL!H?Wpz}__-0})U zOta7pLV$XT75q$$;vy#I%8ZG0esTYt<@3_z{|whEKM;-Ldo!VL-8@{nRPiA4VS{?KoH*u&`%6p^eq7?cSjKREH;K>1#ayV zF~V(c(1i^TpdxJb1U-k#OJ%t1R=(c}t7UuM|78~% zSy}TUnw{mdyx+xdRr-?dHpv_RhpHz1beq30pH2P9fDFn8sXR1&~If)DB#o zz>jtTnr(m2l#`XtXgb|lc^lyxv@RZ~qY zIi^F34KPaSEP-EWFpq-3UbN=Wq~_No9vB_)YrLKbw5f^M03+Aa1*TTFz=gx*0@^4> z#dEwk#1E-8hEs6v40d@{oKQiUESkaqd-iYFpGlME<9j=R zNEiaEpR@*W=~heYnGQ?2?d((5MbN6wHaW^FagbDh3wFp98|Ky5`~f6ism+b`W1rJU zv0zkkHG&!m5kv?>?9)regj#~y-zMPED@oDmMBw-6mKs=<%ds@wz!S%aTel%=nfMQz`Fkqbf5HAqKAv=>y1i)c&#k8?L*0Z8*X?fB=fT(NqoJ1g zI3%(&pZqOhXT{OadqRSQkO>EvTU+IYZt6~c5Tkl~>mou7^p~4XS`Im*(zGT`T!O_M z7=EKA&c4X{D&JQ5-j!e))X%JF^tzGNUNiIc;WF@!X6ROB)@jXN^_NVWx$kKY*lPh0 zpz2~kLMYDumUrt~NQ-CpxK#~Gb5%q|e^Cv((s2oFWXGVU8T5GsKx3N=f^Y2iHn!{D zbYedUaK3(2;EPZoGs8Mt?W&G_tC-WeFOY*h_~^qY>IODMM{|8NDbpdr>#4@Hq3sge zA-NY*@;CQiq316)l=||3uAnKkT$-e3-w!L)?Lm0dd9^1+x9Q#myaDXB|;bLk=b}K zG?2q@rd#SFi*)<%L?gHKz0omIte!b>B&Q5l@?ZP;wSTi28`CO-8DB!9xjgXu7S_BQ zJZ}veoVQ8mtFEveTosAF%P9m25L^X87;V_$Z)vU1D+o^J@KmeX$r$u~z3~J{hX?ib znf=hAyQL2BIsD#drd(cu_4n2lOam9UuHdygRx^IcXPW^xytYiw8Xt z;|Fe{#y@-?gmZpd>7{v3AZ-x%1Jjihq{Vc3KC52cv2#1$OaWQ{HvSikZR4wxi9jzEK&K4t_{o3RSZTqiq%M zkbYE|uCiVJ3Vgb-tu0N1swjZk#N+f<`3cwRxXsjHv#qPD zv7c=D2KbFgEy{uRv2S8d$Y4|{)MzR71t5%igO5+ngZ*02x_`6r{&sO5jW<3Mp&(t5 z22ixsc3MeZOFRBrbv7}esH}^no=eqB66sD~ej@q&_W5pUg1dUe0xU#uYy7;9sM39Q zZ6k`0!ViYm^)B#jhy60SrfU-wCrgxK{Dh(3XGG!p3H|QB_vuqsvxmdw90rg4WBpV>U{{noJkPoWxZLmM`q zv5kZM0V8G1&rYoi{^dTCto^dmW0AD!r~EogF-+I(Xd{>FZ5Uavt&bo|zg*?51i#Pv z7S>7HPum&?;YcbldT4hEbMKBAgb3+Uove*L{q=2w+3+jc-yk#~EcnkYeoB1eqB@w^ zwU~PH`IP#8ZG+=+k|i6yVMdz3T1#!sEqOu1UHIvii0$zt*pJX5`AOtOxLT{@jV`@5 z2kF$)aUbV!s8#wA*Wp#swUO(kVB**mui~dEQ)RT*uOiqnkeZ=0#dXr&YPdNQ(Lqzdzz+@C-Xu-ZNLjvCaj%FZ<57a)QFF>yMH@zNR zY($LZLV63Y=bp#LWHZYj-`VR*iq_-hEqoEqmZ3N2ldO0g7x7XZ3QG_#JSiWR`QzF3 za~6-FO(1bFksKZH0*}74tz%aAN=f|zZ$`l3(AVy3TG)#5$=bX#LUd!w|76H-dl$T@B|C-kqugK4nEnRYP+Rgln%=N|mL?Bkur znH6pDuV!AMTZ;5IIe?ml$lD<~%cOK%_^*66gF#{Rf_{mUgQQ7p+G>c?SaVNl3l~FK ziI0b#mC_WG-H$rZX3&6ECDXzvSvMf->88VrFk9hzORxUc>29~Ob6|wNy5Y~sGS)`r zDrztwdxgABM9s~mxx6BCFNVUjq-M(ySpPmP;+b*80OBZI!+=XXR% zy6XBJV|4xwUW#ucgBL&no=%wH>Fi;h{e)f5+?2zeBPiCBO$u5v0ALMOcQ9OYEpJdW zuXNJ2Zjth|I*O-@@fd^N#eLulZnBYf%C9UAT!HC3%v;1w1gHBsA=}LiB-GmY!EZ~4Se%|* zpK5RvbM^pU;X8&MbFP2}bj#`b*rAT+?D_)nmxkMMyrp`*Cx}JN z-|1kVla02&E% zHC8txDH!-oYuJ6h`|XMrrvuRr;cT@!Jt=WxCN^Kunk>b`sRJyw8IQ(Us-2=r&CMO| zP*-+nAj#KszPvkE_0z9xoxZlUIj0tjgK<8-wP5Vj0A=4Zg4EBV?AlsmL>;s)mUGBH zCFazhG4008*?7*VuIKBA15o3(*3#WAS&w>~|8uy5=Jz6_Mq=vosF!6rWBRO)tmHfl z#=uvD21Acny{z&)AnZ|C^J)kx!WTtp!bSKa(I4rpFU-$!RqT#lnZnQlDs)@Qt9x{+ zdy5Z|*kj*cWYQNu5?=i{?o1xzOlkzk0py!^K}*eeWZi6sHcjXX!I|JCAo@K{QJ(;I z`d$K~d-LPT*}Ooa@$3?A1|TP`vqz^xOfBWHF$HdNnXe>Vh5CvN!Sw}8g>emq9O>g{9<44 zV?g&fcG$wD{fhd0#r@WIGWoE3q4VJ)dm8W=unlfTs(iYkE}JOS-`!raLl-R$s00K6 z>L9;#s^jH014U~PupY3bmA;8#KzE$-*6V%`y1BZxUxs2<9zaj@!a13VSHp+ z;%iSURK0ndgXAWm>vmM~!qMX~vi5K01)OTO6NY9rS${lX9U9eNxfw4$H>1tLy ziX=r5sE>Mbxh@2G0Y>UPHQ%!)+&eApk%cSX|MzMF>jJ~#fx)PQn($n?>`YCT=4?D`c(E_`4b`{k2j0(=a5 z2obD8HqF1$)KXkwU|Kt3P&ZPta^=D5+Eq6{)@20NCqP5l%av(bCz>VZcY(`Q@i)p+ z)auH&LcGZdve+F3@Mo7WTp&D$6Dg$L)5C@4oo*Tz93TBcTr~OdXVarO>~RlY zV2R0-eSblTbAN|{?qi(UefAn>#k$`%9e|6=y0~nfKFbeioa;nIMmQ~#|I`ucE4bRI zC%=(+2Q%E8_Z1+gp=Oct!596!F77;W4_v5&FynEN8N2dnNBXZv%>*0XPrS<{`GtI2 z7zgQT>Z3-o4b{(iRrAT@_Hqw_b&uI*wa2YHU0IjzL{~x|_7EtV`L-_&w!*=@44{Y( zFN_eZK9tJRJL(XbEOdmcIudRa!1aR{nv$CrwP9vEUJ1t7jsq6eb9=5KV`;XLe z@f>vY5Hw0>4^Qj;R-`E`5(iI2}ZL5;DX76oC!xQvL$zxcgHoU-KER zWHB|q?oK3*s6=i?Swe%o(DLc?SoxS+rYgh6Pn17pZ8w7{Q-wln2Wp(dXf-eQuGpnuwKLWWs$=F_JZKa6ssw^$~D7*DJ&GHBmV0K&B}nS2kG4 z&b&Xb1g9`fQ`l8lZz7Q!Xm=Wxo}73@iKg#nq83(*w)|RWh{m`~9_jt)Ue30W_XQH+ zr|!}PFTpZ=;D_yEpc$;FQqOr!hj+fX(Q<4plts%7%E`^`W>wI;0efa9YgqZPJ(Y{J zW+xs0Fi96CJ6GD%2!LPAL6~J0_P+!b-vQ3Zau#*)VLMlgu7nro=Yxc5SA*K>m{l#a z-(Z98y{Z0ml4W_B*xfZho~c!D(UotdufWANOGAg@0JlK)TYHrqh*6I0n&Z0ATQQ^m zo{;Uo_3i#jcR<;E+SMZZc60S?&DC$A@><;Kv$DoqgR`HVbo!><@g;R(M+BfLA}t4T z+a$Z_)(X#gq9zMB#aH}!r?8+lf4;cV!2hvCQ%lHQc^fUR$aPXjFF}t;+jUC!^c$jwE0e9OZc_+}2N5Y{gPeyE(f`WNXgQ zN|_AakxjGK{k0vzX7(s%r%zK|@)p~4)amFHuKeooxM!>zj|IdZ6vQFllTg}xZNyD? zKpexF<~{Wubv|u*S&u!5)r>OZ*~;v( zQljS+boFok{YdL(ze>UJZGtImNu?Z*>%_1(TH6x`SX;F1e!@OcJr*G&JXHQMKiaT* zgvf2^&h#5?CZ7wK^yLXUiFhq&B86PeF0o+1%>8$ST%l{u-47 zsR`krZ`Guaezy^K6p&W(GR0ge6s_X zW~H+>;^srXCD}?64_J)gePuQO7rfeHOY1vkT4mMP-k+fhrRqZqV3-`z2^E=#pM;Qa zP1dhW`oqd=K-r_VgM=wiHMhUE2vY$!KQsj2Wgm-{*7KwA^lJHKdy5C6!y7GhF-6OH>XcS9Eb4F+4631_9{4mhT?|MZ?>OV9gy~&QQ5HcmZAnX%P^mGUxo8 z2Mz;|6>wfLM&B?Wd6V=R7qDx&q&9h1Nu>B}`x274@MLl-Jk1TBk%6uehtxr?_=H=n zw<~~}kP5!SM4I(V<5ZPTOCiu*oYxh!F6L4EWjp)z!W7dj^mnYVgD?aXAWUC@Pk^ZM zl_u_5+#KFBim0fav(K1-@tQQEsk>}59KgS-k$G$LtvKn59e&IM6V1@BAq;SoiU^W= zZ3lv;h-NfoFJqssw8em;*_07*bbRcjQ@vr5IZ7Yalc3^QTc3QM`13tBhiT>;^nf40 z8fcYkpX}$+*Dc<~0}S43YVGij&k7+jrM3cI(C(+9sE@u7moAW%A9%d|d2Vw0q4^g4 zMKdc2eg_^{`?YJ332-0c{|TMjAV=7&zSh}4gvchn9$;r)(W*jO{3~W58!JoNsuHp* zyhP5j`nu!xpZS9a4{@-nTpYdOI2V~KU~63SQfp`&`UcQmtNPhoU_tb0ied((PB^Jj zsAq51#jwd%b;($ZDpmf|2aJXVZmq69q0R$PG4Uk8QHG4ZD190j+_PNtdr6jA=_Fz7 zCP{kfmR0pc=_!n*#6fg^0@N5W@DYeWJKNI%L3Imy-XAdq+YU4>qovI@<5Uv{hcdk= znx{QzifNPFm3B`c-1#B7@yjO9R*idHRN^hJa3h z!DDUQ694@sp+Xo66#=heWsq2x;UqN!+WdEa@<*Ft`m%yWRzIWa*5M9_gg*;9&E#|I zcdY0Nma*EY12?O9Z3dpaLk;6DE3vN=bnGq-4jHl^Bd>g2z6BPkyw_Vhj7A(fK zJN9X8*@SA|J?4h-BmfkNOB(u@`wAtHtjy|a|Iq8d#2dW@_o!sW!$**THn(a9W-`*} z10_ORQyPtsxcpTY{1G8zG97hNDs>89%e~&K-ng?|0-8sAWuIQ7H=Yw+;^2`30rs&x z&7jq~aZ=e;73I?&tK{`6^QvPw9DwdxGe$)x(=nS~nqc2}EBrv`f&S94>&K+g7exn9 z3&ZpZ*egSCRiL68eV>{LZMr$t2XzGn3UO)8y-SIkIMt5Vz=ThTzLK5P+??!Ii;H|> zVSr-$b)^GKUg?Ov`dQUHOgJ^@=RF69?(P|xpoRpc) ze|AfseLRQw0mM}H$xQlGFhY7!`*pYMnwYTc=YL89b4rd9=V1hgYt&U%hWD5)c&asfRQ}`=p=j5B}CrV|0b>_rp7+*+HZhdn^GgrRh zpkMWq8@SEPy8kodm%P+%k`Ff z1U9W{HbuSkE&cl}S_>+B*Me{XX?eP)r_a>kTM@iJ%UZ^RlbQ6Kqx2RIYO(qjCM0&f zxsA@O2tH5m(H9M^cnL!Py)A-Atw}j=jJRD3e%=0ozJqiV4j0mBTvg zX1zjeV-Ot0mei|%D6x!q(X!CFU@=0*ap=cvV@nZoU4h z-oqNL^Iyrl-F%(FWz~B0F>A0mXHk9Av$rji8-|H{5t+^MaBcnk z_%fG9yrI8bPz9imh$e~VrphYD?)>xxG=0lZ>DIy6a)z`JmY03+o8poHEULVU%2iX3 z$E#HTF3TQE-H74>H@;Ae4`*JA18fsQc9#KLouKJgfNh1f020ehd!4&!sUO#mSA67{ z>p$rDgyk>UFlwQ-Sw9%4ZBn^1nj-(b;%Oqqd;+j|KX@_;ZP9)@cq>g`8mB9Lo_b3L zbs?@koccc?S7e$98#km0L-gqf&*wk4W1XNkw5S=-H&HP`|6b<#0q+n;s!chL=@QyI zjP9?h4>uT3Zhx1jf!Ayuwrqa-UTD&}$6%g#`c9#{-8!i9MmJlAmN)j=I9YXj+5T>R zRxmEV95Fav_9MG^ihtF7p1_x`97$Jh@T7+s*GA|{pMC3=CKZz`BEVEnqBJZ-1TQh^S>5Sp zrS&_K;(*bp)mwAXV|D<#IxDHm-*Z6$J;R2P_i&GxiPSoT9XxB9vnnX%xd)!$KtN7y zpZ!WPJ29XZbQ#C+~`F;0Lq-)Pd6{bY|neQQBTBAYLIAwKe7*U-@ia z=bh6(MuyJ(N{55)(y+CNQBgQHocH|_ARO@F!Wn}Eak9>Yh0BqczY{L!U&jyM2seM||YB4496cG5CGWq>%W%TzykH8Q5SFCotJHSf%o!kOIZ@VU2zV z@jcj~Hr=ycykKafidwNA`5QS}QTm7f7jSc$&Wui$wy_0Jn$~Su;G$7ErhxEa?L%&U zqr0>rYs0}JGOUV#^0mCr;afY~IWrOZf?sc+2}a2Frn^MoQ8)f&6QIhX0mcsWZ4v4( zDFj?v?hjPF1HhkL)%9!r_$DWo$~YyMUg&`%(%{S?{BM>5E-9k772sl3aC^1hhAs9X z_!`~8D1+qPQAoz?5@O(Ygw!?nf{9qD!a`igLmYmk8$mZ6y_0aftL^e^_l!kF>pE7j za%T51nqDR&uQJl2Y$hLJ%4(}|@T7w6fcmw?NaYGd{ef9*WDd=_d{RLDK&ruKb0j4n z;mF49Z$Q#WjTD)tHkOJ+x+VI~vm1iumK|f0wG#qWMgFwHA^@9s zqRtsOEpwTW_nKXWxYJss#OgEqhRS2?)*#m(ygy-0|0+ZQj2GVc}^H9QNW?q z&19c}IW$DL)-=ArD$yoDxZkYYb*N7B7#!$EsLjO>V3g59Pi8_?DL{g!A9B6>18InT zz1~7QsufyIAEaNIXJw)?rCv5o2Qb7JQT(x=w9k#P38ba1q1jJnFTNlEF3Qm5FOxf1zL(ifvs}a zNDWj}{xdKT{VAnoWiPf~cuLR30^?Nj?J&PHbk9NWZk3 z2a?dbGRrbUY|uBX0r>$L9tJ`~xZq&B!hglB7!URBJ%NNcpJ4ys#zfy28x*r_)p4Tl zlS5l#7p|Q`Z0)XyIRH9nVn|>zh;iNOCpUbD|cdBT4yeuhm1?~IzfNYr@B5m=6ApvhF>2z-&ciWr$9i7AJ6k&3R5`mc;+&T zvAa8ojvw0&5cu~5h6$^%d>zvFDALyn3+11{+XF~xY85?&p^d_F-LZyC$$O5joJ+11 zp#Cb^K+Az^__BfD!4D$`kl73pF-Ig%~%LR*+$v^&E@ZF3M3gRh)j2c7BT7Up%4EUOP`m`)*<*bzE7f?AW1tvpKAa!|} zAY}N(NqSNLJc@UA2zvufhhf_sMo10RcnaKXlrMx17hOJ29#c%^@+%^wI#+0M?oqqj zrOE?WOh8UwO=>g~2g-CQ2}7GoUW?OxOJE*YZ7~UeRm?Nu2}4vu_)gC7lIDHJyLsk1*%CS zumJeB0R!1h7=k(SgfYsJ#?g=x$&~p*(OyE=NK^616rK7)Fewr}!}6a3Mh2b>Ljra} zXrXS2uaXY`u$zMDh&_wgcCdj&oQJ(o_K}chO%7c0*3N!Z5hyrvG%3xYZ*+ysJ%1x~ z`?`{2gNcS2C_z-96ws_SfC3@%pE(0&_yD#!pqLcY6p)17;7lMz{2z|9B>{=>DIN{j z)=(T2gMz33XWq21ypzWS^*QewP_gY?D@prPj2}Q{&tUPoOy~JGP@h<_(y%Y0)=?kD zKuqS4ttu=2850;PVoxqY2r)pmcFseXELhB|Hc|!Zi}hwh12p0KZxd?j{xe1rI%JgG zF0F|XWKTNZVH9TL((W4y6c?~1g6<_;hT||0x$-jxHUEe4VIzV147S+pmrD+?_I1+s z6%b#1qtz{#I3RYgiMi^enn_9@+)nC~h&EOEdI>OwI;X&LFhQhA*jNWUAp!UU?=MnZ z>X6_E^~iZZ2d`x{{Y?kpN@VXr9iTn?&u%Q>%4t;a4$KAW<6F&*Qi)u)+iMtxLSTSf zEcU$Oa)59Y2oG9NBOPk6GwgI1dXUI8popkS_#g(<1^T_32#@_4L;-jL@$J{K+}cCw zBilew%OwsE?;k%`OHEpW!TDdZH&Ul<)g#cDM;S0uj^NP`pF#3A@Ur^8Jmvu3@s2Zy zp}6O13VEH5IUpefTEr!rzu!EjN&SOAQh+4<0R(UEPujE~h{IZeW6@^E)k&_I*HqDz z2@c@KQKy5p%~WTqO;|*#@&kp6|N8n#@d92Qo`c4S z!J_Xv0%APeal3=^BY1jn`|)R0bgY~9%0SXgN)%kUKblX(z|IBP^kAbS@#kGZ@2J6T zp452(G|p_N8{X7PGFUH4UP^p>l3D=qpFvJez-MQQJc+z2s0%8fG^+3mKHxaeOM8G+PN-s6MVCrF4)I$4VraGu0-#4Kj-59PX5c3cobIbMmQN#UYMs`9uxlvvYW zE05w0=VnTbflkrISZ>Sy9W?5OF*t*ApBmCv_eUTu6-|!qTU6acDkp)EHlhG3neaxm z&tHVAzF~BQ_=k%_fy!4OLy)V0kMxRopY;DH&tNXs& z)1shZlWpv4@fBd*c=p1y*yz)-bN3C_lBCEibJ8CEANIboDXuQ+vb(XyU4pw4JV3C< zHF%KVZo%E%9fG?A2q8GZ-CcvbySq+5Ghe1^s^%BG)nEJ8J$Cmwd+oK>nI6B4lF-}x zMDy4=T1^Uxc7e4t$c?dFD1o?mQ{$bTMBmWZ00hSb|0M5ADvFwx;-CUOf3almeyGVF zRmPj-EU@NdHP|@phj2W7##-#R8;QQJmdu>;!*EJD!?vkNL>RT!um{kpm_^VFR4NXN+`ZgWpcHE2ydVsmMENj2g=ovx z)8yVPe)aIRug>yX%(xmSEd#D}M^UKbJVHHkkFb;J1a~`Sp(e-z#1%O^i^99A2eb@8 zrz+`E$%-EQHm-dhb!8%N`z2|iL?H3k7@=%d^uYCUxX%(6+X8J-N0XhN+_M>raWN)$ z^oM~;3M1-i@-^9yOx5MjTZB34@lq=TtzlX{eIpW&bi)ke+gah;aRiET&s$m+spr?Q zVlVlv@LP)20`^AXFvqSN+%gZGS%q?NLl!&^FxEMae&yiF@40_ot**Y>mml&+k@SA7 zJZ=Ky5p}Uu5mjz|UMhi%gw(ktbNWe}DhwD10&g708V2;8wy2^ylt~%xEHeX4=6IX+ z;scXp;=7|8a<)z6;!*bVX^}uz&X-OypuULY#(n{X#MCp)4#fib#l&cgC}E=0SdNXe zK{JeQ6LMPH59mQUR5G-H3`gxJu0Tv8YxGh}K>!ynfx{{aA`l}s#5Lbesn_YZVd})# zQY@>f3ytp#oxe09$YDE-oRRK_46#V3nj;d{l*^CUNV9&L*liOVdK#Nnol>QO^T0HR2cU$JKA0xIeURG&jQ!xONT#fi= z0V3rDWiuwg8x{luK>=3-T&7C2YBnvgS`-1(K!QVjQ_2MHFQM1s0y)2^({UM^STPAu zfJei0x55Axazg-YMEJI0reAI&+Slq23NECtut~6_4b8CFxQcgTf%J9X?C*p_>!MTe zCmyIcN?zT^WZepLQU2SHK4S15_UyE$M29b19Fb8~L>&YJ+>d*;-!!>uwApom4<2RC zipJ?|9JGVv|LsZWAb4Ic!jS;2bh(w#<#*eyX7|KkKwh}?s5?)E_4RczVSe=*20Xf^ z6PCuvA1HjKWDmyB@Y!JI1`ej>qI?Ps@$bAek;ViVQr*O2qSB44NQ%GB`Lc{9rb$z} z{RbX{#K^TAN(ccF%Tv-1B-T*;&|i3^i3qFU-x3P>?Yp~O8B;zt40Hsbt-%8om1CR# z`Qo<4Zs9yH_niA3-=XdcCIAPBy7Be+1Tq`SJ5zEgBw>j_9&7@A;3KGaiuC3c+k9sE zT@&G^{w5I}1KR!vBs^4kO|-#?PW->sss}34V{C#<9?Z~J$a8^um5<)2#=nvHhtKq$ z-dv$#0NM?RJYaLGmVgCH3}`NkGnL5$|4jgp(w+bc21H`my_2C6>XJq9R+Eqe*pv;> zVLOS`fe@9DB^=+Nek>>h1KJcyQ16$mgMrmwOU;XKJZlSUt!+GQD=@GCnsD)+iOFeb z8N6kSITSZ1z&IfB5-C9iTIazEh!FK}lp*Fu0MN*Z=%9V*uN_L;(Ubg)Ao?~hI%Qw^ zk0q@iL>z1tKp{BvdpGC5Nn-{VWBfRDaejomI%tI8sl2N+Psuk8mW#IGM= zV~BDZ=p$qR@eqxNmL@%x zFBgNNMFv~H6ah(CVL*jslQG6>{2qE8^dgb})59GEATF~I{JNjhjs6vBuM8EIFG^FXQLs3|VLtzf-;$-!1A@vySqhhrSMK$CBHHEI=f*AeW@|ZRl=`| zEL%%qTX8O5Z@h+#|3ioCz`Y9k&A3hqwMWHN^bk9AGTKMah?tjf_;mAWnb?gU^M~kR2?c zBHdVZUc@Dk{p$+~4$hX4%owEy5A-0L_6<70cWws+~7rPe#vrQ+y^M z19LWuoB}e2oG;>jQk=KpfI;l3lUYT@5|C%`CUU%iFm;mWrFsA7{>L*`fRU7c`5V8s zi}(8w9mV{59_G`7+QUiI(88!!4-(*ttli^ZHab)Dab*aAtp#6{83$41bYA&dyXqa;NJiP15wA#hVN# z!}q5PRQ{If%kKzIB}lqjw~9-Rl=&E*ruDXinIl&Kj0U z*45MZa7^e54g5;u4nOMdBqy=pW4Nc~!@>z#fdeUFMY=*@W1(e~kHwtg?vz57INd^q zNQh7sLVXk)ti-gCNMPSAeWL$#kc@~3{h*QsxHWDmSH~~pNimsI$M5wO^WA6h2X|NP zCYGPatwux3$=UDnen_)ceFI*-gSw+hqxR0O06qp@VZm1=rCJFKoZ>v`B|2%PNkuL} zi`)z{(Za!n?SRaL1CDcAPUdaN~6xIfug(+1dK#GCK4& zMI!qeGh4sLchayjebccY8L*8Xm|RlwL*@Ul|2d>}%=MR9qB}4!;Ilk&1}p`ycaBO? zP&$-JQox3UTAyB$qGQ2}O2^ZR1d0+niS5M;lI|VXteG49qQ&C&I2V=jubV~J&Sq<8 zidf1W{@(ep&+{TY@%Kdw*&iLouC=k>;W13%UwsC1G)`${LUaIW7(Vx*l90qAp83|a zDHVMq1*Z|h0X6mDUBGYV(JurXhVgZU+CS>x@IP=;kT=F}2$Dj_aSZE;1~q+fiZV~U zHb|-ZOp#djYCOar@b67G?arF+>Ftk=U-?l;l%x3cXgCH!NVFlvTM_f#O2RJIF5E46y#R#6?GNDPk8L->l61U zi!g$pTH@;gc_#{P4Z`IbM}9HIovq?=fO(L&Qow3yTckGfAX?3)szbVeh5!W-bA9uz zmEquxAp^X%6QrnmiSER~M#MQLQL@X6zltUo2@9vlA)YP2I1*`7bY43M15H5v&RsK~ zA;agX*mLvZ+Bb^x=N(VW8%RpqtC@^+s3%$)(CT>etHQ>#K@8dcwGac~%t>Wr1zcmu zgNue;*_<|`q7N?@xp9XzEX;e%nuddGP$bU*+gahvZW|)Oex%+C6y?=R0OUIm?;#GW-@+)OLV1 z4mtn%CE!s;GtCt|6VH%ALQPMf6AX)wQ>5Gr7hR81uqd*qec$)G^T`Xg^p5VIu+!Rb}H;v8ryPOR;UgJR=~lA;E~$^seCZElXI-G8?_RP3_8N= za6}tz@2M&{!%5>BSwo~LQPNG)ii!~sfm7TW(>HmvVBgstHnY>)tA#5<0Z!fVGT%bD!7PCT3KU|r zn-_PMbjK(~4X>M+*06rE8BMq)-|wYp0QA@6Z)dqi#GR+EW9)KZ;0)eI5KCvww*aB= z+0;~8Wp) z5!mLgDQx_>R`Ec<^(-lqey~KKKcv70=$m*BAMM{~9Hai4EPkKxj{eqy%-{7@dr>51c0XKfoXzAwk7 zf_sb?ry2}H_Ht(JB%ts66A};IZoSD3=4{1P68PJDdfUUP?zNoIA~$J&Z}!IByMxc= z)^5TT)y1A~^i*KROV-_J~UxQS(h$@OcPtsMF* zi-rhuQXBZK=1h&%OU^hwR~|D;Oy$s-btz6~n=_vlu~czr!e@KfSnH-u*e(KL^~b zATuN{fD97{xLbNq2d&{d61Zx|RfVe4`kx^e5*89yI~5>qG>2>6X6p-}_3)~pr1Wj) zoQ&&*?m5W({i6neHud#`aqQUXmo~XF4QHdg$$!7j+dOBwfVe@wp(i~B!P_W~E50#>6$QMwMJ9@SxP&u7R4uM;H-nElJl z-YP{ea-{_A2nZvn7j+B#<*)U>lnA-BfR^8MP#bgy=G(GrlHGDd^2q82 z8#kg15JkyqlkyEX+-cJSyh?5IZ}icok7Y;wKPoTA<1eDNk#+XG0eNK{ci@xn#lo4F z+s@Nw;y-6Jr!^9vXS#S3){;+fqY+}wFuE|LY+(&4T2O)_7O*Ds)}N?5RZ;-fA-u6} z+5MT0@?+|9D;SWGR6cR==1EU@ByERe(68cb{Gg(ir6UwSDo3gG9h}zRrk63s6N0aE zixBn{-8nDCF|jV4BW&0F&^}jOD_5rOY$(wAbxsec;vy;uK1TXH*=I;5qxBzwiI)PR ze>nI?Bj7$QJLm%%?2>|Y?~C-CYD^XeS1ytg49&nG!lRTw-xap_U3)(@>5%L%Ggq#( z9#tR+cn+beBTx_qNtAuT?MIUKf>c0N`J-Xdyftk8_7Nk0{$Wt^VU8t5a5ie5T-$8% zlJajXBz`_S%ZaZ3xz(El0HEvr=LN9V^NleFv4cIXZ;22{#nvemT6sovBk24tCA=Qm z`|CBptlH^{$2=Ai^n>>3y53h+^>p6|K3~G9mt1Cqt(mX+RkyrbmwWIhN3%V~APr^` zH8!qsA{VVPy%5bu2jaLd@ouHYoRz)n;-o{ZeXoe-4juAo=q?`x+Zd{9@U`pO&6=yT zCeH0((f&SsYY%z3mh@%xx}*8xH;qZ`SG}1s@uPV-x0;=%`Y*Yz0=nK7v+2*z>UcHn zF_=4ow~4XQ(TE@u0AoN?`rsAXmie?y&rHN`sP!EFA-GI0JKNPe;oiRXb?b*6nWm76^}CK1XKHyLRBF zT+RX>d@6Nadm@qCSh9joxThW{3!MX{#j&9J*-Pg@H6y0rpNQIw?k|Dvq(;J-HWlG% zV{Imc5dfbNirE*Vx^hUcXZNJs+|ud!2nDj4T6s2_tCdJyF5e>TRn9{SMyK z*7y6loztgbR_$nP*wMQ{oucLCE9L9yj8Lf1)mC;QPFiuPu}ofiYC4K4jt0ah;-5qo zDr~)xj0+2~D}DAt=UMgYxLt8SRU{bsPgm!rWn=td5519ImobqRa@&Ce+P?iT_`HJ+ zWL_GgoculmQ~&%d+V+0cS)u>laO1S?B47yeC#|}YKa@LLs*$kAx0S~SZD}F}Tt4CK z_*@0}FV5#iyl_D&i(S}cBo9lxIeE2F){+fDm-w);2z_9{zVN-I@8LZ;nDD zKqN$9%^cG-Ejf9@G9|=6T(REIlWpkSuc5x-^eGixXffT_w>6GV2QUdkcC@f8Tv1L_M0^D38XvOB?=j(AyJ zC6K?rWq($n(+FP2$z)wj5OhdNeuQ?3K1G{omFD_YRkRyWKRB4{&;RRKzn^UMd^EjQ zM^XSNgo7q6SRNPJzz435+9vndM!!6ouv$@Uu z>C=(?xaf~iT8++5%9ksSA@)^K_y`CHXmxC!F&c!G_WI((ntjH1jX&{8*q6~kIp7SZ z6+pg%=5}^|opPv{T)KNrY)`aT7%~l@p)ly5F`$$-eG_KL{sJfR33u8cDU3?ozxk1a z?;)Ngvi$YUemyAcS<&Y(IjAGoo-X%0=^uJnfZ*We-FAK?CryXj*VG>dvX@b8F&IWk zuq9lx;^ZO*Zz#6OKR5fFng3F^S(1Vx3vX_y0)SE7kgfpjG)gffv~D-Xu%c?aJpB&T z47$bqr=E5{zV_NjYwXiC{=|E=ANqIy344kM&K~s-keoH?a6b$MnJ1|e;E(0NzwBD1 zYm3HDr=|n zm^?-rwvX@Hr)-|B_kBy>pMkuTxHz7zVNd8i3cU2~er#67UjAiSjupsv7aycp4Cxn= zKVDrTJ8Rj_*M0vhsG1=f$Mg*d>72eXGOft)%FeiMoehyff_ky;Zf|v#@%3^esUow7 zgt+K~F^3Ul4q0ClD5StjHg>VwWD6aN4dll9ofm$SL`RLcP${$9?!n*foG(*;+{dYU z+T1f*_mv-8yqH+(f5?0xa#I_)3>CFc^Mto$hDFezJ79k6gA=z(l0=H_(!*X13x7#( zr|DMe67HCK-;nVe(QmJNAG+(hVhDXGzy~$)TNeL;X+q)*;%7>Bt*Ngp& zi5WF}?);fnjZYt9AZlGQI+A?wCaU-vX#37Qd@EJ&Mzp~`Mtot$S z`P`CC+3*%C9BcU09&GQ>*)gfsWze7L0F%K)%|&m&$bPf`1scC5#X+AE}kH-n3zIhbBy6KHuYkN@kE{4<#ok(RLEWc;A@vlGc$=R^VGbRharqk8K z8~7|7r`p-jPcglfh|N?Mxif&v4+dXNw1qFeD|X(${%<)su2MP&i2RKsIg{|bQNr!u z9aRvn)>5a_fV)f0{qgFDp)k`;@0&F;bPW>Tu79lufj!^mZkEy(1d)3`-jc!BS? z$r+Wa#J|mfHd)ovj9GXNa&EW+>D4e6a-8U=bIU_Mr(@M;Qg__A>?RvFnaeaQLddXn zYlY!*hDzIs9Xs-+=ha!kkc3Iv3%Hb^Q!In*mYUue`h|ZIF>Jy&i`pJpV{}QvHJ%e`p=a zU4QcZ>W9K}_Q;-vSjUyh1KJN&QA@HxSdGg*%*&w|9%57dzMs`Q)%m4{ zj(1$r43-=!IqLYATWu>w!Cn2n8)G*SjL~>P5kiQBvvh9>8T?&VKWz5B0bfOKoBhMk z9HnP)EB;rg`3Ct~tI2gV$NkMRJH=u4!RIUnxGr)Cu0b8S(9%OmpyYuDiH}W(_uV8m z9a2>(wjMPDAk+hnC{>rItzX$GO00g}cAogwges-K+YpkOH)FCwg>NwXAjM|4UfKLw z;@8sV;nk%$$|qufxhxBer+GTw(^VDvU494u#bqVntnix4$)dCl+ayB2JuzX#);sOv z(nJ6Aru2n|ZgvT&@6*DJ1UrLyyZz87eFi{{1Y=G`05@++W#ffooNfmU+1jpVWAB%1 zELr_POb}oHPH{%1ibjqwA-CQ^+|Bz_kZxs%eK-kHEc-EoOVfW|G^;y$C(b`?o#^ja z?CHxi4DAc{M2gc*`t6B4EQx`Hk5X1bh|Bg|-UL*Sq=@3)=t9lU>uz%Kl3`E}s=^+Y z-LfyYnX+=(E<{;rDJb8%;Cb;bZF}h@vxX{qaY`kIdwryoQmRy!T0@-!cN!hAclM1JZ75w6+9Jk5N3MMSwy0pUTCHH9K;0#0vAcX$n@HTrh;O zI+A1!P+u2t=|S^0=Z$#J>cx~FD;DDU0pe5c^4d$wUVz46nhrTR9OR?YC}o^=${O!P zp%-g_dKKd70(a@=o+$r@hJr)@BzT|c2ms9Jm@PZo5J8kgoUzO)t>*drcku!{ z7r4*&(hVzFKB9%=(n$WwVyPX-6PXSmoY`Xn7eloL+}37w^<5XWgKABSZ=?NI zBpEXwBE-!QDBt8D`+So`R$O0M0|3=Qy`OGmFYeLni8(;DjTY43#RJ9}mwP_t~fa@$mc~56}Pc@cbVS&;O5y=SdrafzG_kzK>qE zP|ydIr98KI@-C3NvMx>(eYJEAHU44^Hh(O2>O$s1Z0(Tk+%rw)E&l# z0SG9kQ&NTgO2d$J(Mslj@_lbUn-*x+mce+0AAtXc9U+cAG^CPV1d71PWgf9jHz_Hw zaQ&+8qLtW3KqH|Nt>3%;(nKv3O=C19o@l*=rP$xc+Q0tdK}{MLOGD4zeTz=Rur{%O ztE|#KcuRJ-(DvL^^VT(}B!Cqm9##mmxjB^(a5ngOmgGbC9F25I_Fs!=3|av-f1y+X z@QyIh=j$S>sgRV2@+7JKL8KrX7LgTIgcX+-vPI3R&HTxoJ0+<+wQ&fw3~2;)3+3-3 zS;lH|GY6KpiT8B+?T#-mK92(}19TIahjb0>z7JPKTUT`b`~CXf(YP>?G{!iJz2ap3 z^bDvqj#DfnvgW*>@nUKFLkplpHJXDTGkd=LgmL$`aktU8G0yjQ(R!`!b^8aM@~@rj z(1t!z**_i&`hCeW!_ZuTJ(63Blq06ekFV`5Ec-TO;cSv!T#BmjPdjfgk~JkdrTPZN zDzezJX8ihQsB#xqG}8}P)b|B@J8s0!G~=v@qmzVZHq`As=VWomJ-D7iHbIkji0+QQ z$hAr$-z3X7BIsWxCk3PnX@@tMRv6 z`@wk={Dg-@@%e-Vco=VE?))(w1&JqxohjIJzlxk{sIw2y(e(`0gj2DGUd_W4-P)Xw zntE2E+@CxHGa%&eh!Ei5yH_;kctU4nWX$f@@yKtP#SPV`Pp%DTs5FU}lAqQQY|4xa z?i@ty!XFUBn)yCOjZ{+DFFLa2lZW@TW_7+HObJEoP>D@-&5XXASBpEY_vO@@`_5dh zL|B(~=8^+I8W{c{dpMLAB#=C$t;zHGswQyy%HG-exAryjSDgBU>}AH&rQ~isu(#L> z%r|&M`EMw}j%@9992GbhH6jS>*=pA zeHG1_76!I%ndt9F*1A-#{-kOWffoH?AB+0mXe}ne<6pp@;AfPTj74sbKPu!Y=>0~8 z#xIY)f3b*Dw}z8~F5iMCh<%fB18WOwt>H8RAZOVAp!nx|3@Yh_&d{UG)E_NnDYbM< zwsC**7!tx+winyRFdmo>u)8}*&0cVRncW|5tvSZRe!`Lt-8EzWgvEmsIJn_E9(y6a zKiC8_LGm6^g^}mqSwI1RGniUA>f@jMdv%K&v$mHKOuW7|twUrgqh+RQ1NSm>AuvG} z;MX^wzPc-(ej%Lo@Ob91ea%D~;TCrhmKZ*bEld}4w4ECf*FRFPq3D~#FWi?HpoG|u z3+fSN>y`WL6;>EjSxvW@ME9(C;&pryweM&ye!u`OQrIXv_c==4M#30W0J+WDS~J<> zRjQaA>a}cXj%~W(5}Vugjz`r$4~@DlE_zM7!&w zY1rkJaSX(U?UPZ)F1ix_B3G3qN7xbd)A3SqccOy1x^$Ft`|^_!`(=x`@|(OjY23(4 zd-tnBz>qMFN)y`K>#(C1-G&Eu1I-n-3m>i^s0S;&sblH1DAa!LANmwfl`c zHQpjoM67QI>&o@CqN2d7>)j2WATZztqj8TrF-KMz8EoS3?;|zx%6xFTtW&n_Dlw*{{qTu+63b2_sSnqANh|=@G$QNvj#LA9dlsFesGXFf9 zzI~usWtUaZ2ySg>g98~dend;ko{*#UIAg>CMBoBKZ~+Q9%s2pw6H~n2$j=|+QK96j zj+$s>pL~EcPMkyTLkY&)mXjDTycQInr36@T5{)uNr4=rxcBOiF`%x8K#_Myx+|s5U90#*+Io4~ua`d^dyEYsj&sexi z7ha_G%f`k~7JmBdvLvxT-e_61E-_RZ_vD#1`_Htb+7N*W{HemVrjprTi(LultjJKL z@o%lht-;!RGhrM(+DD;;4z^M_1$G{%h}T^QR2ipS0|m__ezc)(@F|T2~%(LZT9V zRBD>DiWyKc9wU5dQ&VopD;W8noe?EAVSb|cnW-Z}W0*fDf(VqA4DJa}kWJ-quBc+W z=ojBMZf=F`%+=-W570|))&hd#7A>6zWx~)N4_>s$`lNigCinBB@Uy;)*jGE|>8cwA z|AT0L`si2HX`FRKf+5^f&8}cWyv{>N;`xy{%5VQ?PJ`dfVw0amKuho*#9$7#;zf46 z8A}HYx|WBm%{kk(XgjT*PiAR*6n6xUJ#UMyYd*KD7>zqAMjwTwdwZL)nw56TGs|Ch z8Rc}P-X_k>i^Yrys;TlrkeC2n1(;U|h380}LuZk>qE$q40OYCj6DzR?u#P&8_o4_2W_zOfK6stNaK2Np{2T{l!Kw){k35q-6B?%BnaJP4?{Hf=oZMJjf;+ZgS{4 zu1S*ajy3-8_}o*$W?8<*EtY@tKb6hHqCyb_>&{OBy1c6LZP_8tn^~z?nCeI<6TYtQ zJG(H2v2dOW6>9L3##BR^%y&-~MmH@mRD!|}LziR}t@eM>K^2)AAPw*Oy?PQgG*Ak- zoK;U>1+Tm%MD;}IyT(a_qj$UZ=t=N=JNwLEwGkbK46fa%O85pQsZw$_NPeX66+FMi z?opJQ+MLu+Q?VVyszW{Sql^fv*>(T7cb%nydQMEX;N}Zd42c!WH=c#UE60FLc+b|G ze(SzjkM`(~S+}Zw4XLPH+v8!8_PjcIKZAx$K~p?yI96=L$Q^9NM9<%(=BsmCy$^TM z3eO+V!6rc9C9WtiKptD^FVA{Q*UzT){aKx5o5(*Y_er@JPa0moOF9aZKz^-zMFRb1 zFTQwJx@t4-u_=|U;&35BYIs5-PH2P&x04A$Afn=pK^^*#PH9N*2<)YJmKz^RE!j>hthvn209)AZjMnV=`dJU>@+67YXETP3`Shof zDMCH7uv`p_E)MgDyza!ohr!^^fl*&HH$Ki(*=||3!|*}fgR{wBzkB4u&|nWQ-jJG| zE7CrXKg-BgiFW!Dmtj)!bqp6v3(#~UFM6=C;~{qtN5sAK99GvVwmF_Oai-@7tK;)S zqhHi3;$Y{)V!qv<`8|(HsMYTP>C4w{lg}NrzL=o{3SLHY<4GS&D&rWfJxgoexauog zIyv8j)Isj2dN|-02Q-hnb!*(fHH8>le~{<)KaS51rIF)VDAUq@KTXYWv{e% zTk|24xed|YlnGA@9OIZbVmbrS^>RZ&tTpxPPY3wnq!^sZC9(S6NH4jv%*ZKi|KT8W@oZK%tnR z2$MmA`Ny>>BIp z{rb2q%qO@g^#U8!jI6%X+$lm^Or~a;Ubjh%{y+g6}E)$-P#TLamecI1^^CO~ zNKekD4HBJ90+X4Tk`KWbCDFCrjBA_L-T(9a>`@fWN$^C=4CAekk%~y0im+g5Z^8BX z&Ms)PqT_LM^ZecFuW^?PxjhR|6Hq}D*kLXPY5VOlVV3)6Lpk$k$x6e<^J(lQY4QF+ z@OO-g%d5w?_B(<FGhb^Meo&?+5XjM<=+vZ&B(g$F|q6;#%hj)QR$nJ z0qSgJH)=RK?dIh0PwLKZG1_i)I7#@G#u8vZt`+*H(iUulw+hnsBH?8ramh4Tm#YQjdx# zF%-d3od+YYo9(Q^9tX>c_Pbe|065rUI)9$yoA36)h$~+^%rhrW-+fAsnsvY4)FJv( znF$YT|3V6DmsFT^+7|iNa>%v6u|I??|Kfgk72aw38^DU`tXDOaS*bRSEUYg|#|LA` zVa9_K;2eytzz8z3G@$-;71cgf(cyk{0hKIc%A(MWK|^EF2a9$!H}mW9FF?VEbDa!p zy8Xk{J~P@w&27ah=!Yspro`)(P?3nAANtuk_V!hV>Jm%}T+-p+7A8mx(t0Clg)u>+6QQ z;^rhz7=NgoQ^J4!b$h#Uh}-0PIJ%ZAJ@#gQMzmkZwI|Fn#*Fmu9uLftA{QVedR5<- zzR!KXIk;a>H?D6Kh=V5VgN2!Vsrhvp>uT!96|X`mf*6xcZn8;#TZEm0EQ#Pf7l_UTb| zRO@7fGRjI(iWCI8j8{HdR8t-A!mq z$IW(+FmI!@GV79|7*JEZp?!7z>^Fm*$I2fMzqk;;%`B3a3Y?cy<_EWSi4k?@4O3@lKYt6r z_u6xTlnPk?w`el7**i!Ur@YS6vpaB>$na%d5tMepj=b z=i%a_^d1V(aF?^bv21-__R$glHA3!QsGOnsGmq1IqlR#`lm5ssRh`X5W?kU?1I5Gj z3q|)uO{{-DxXOC0ohRx*YF$eLVg36KF(Kuz$rT(R<|l#}3GANgF28mRp?A6olBdgv zaw37xKR!Xj+jJ<$G2^rwi^sX$^GQ4FRk<*ihEqrQwj#B$TEh*mO~*O+TIfCKk`$u3 zJ<+@zi^hTn>L1C33ie$$J+A9jJfHY~9}c#AQhD2d^nj&Jg_A7k!AGD9(tlce^MiVE z4Oh3&KT1OT)4r-qI+5~3aw?*+nCqmuZl>k_Lfcnv;7WtJ|3O4RX4j?UpyFBorwdOO zMP^V5sr^|diINT+$dZ=rkeOhUd5Kj}zb~?raGXj>f{+d;L(WX(@@yl|fG`q8Xqnr6 z6Fpb(tx#iT#YHXE5ZW&eZxJdr)|)KMpZm4EjE&ie%+L+VjVPaeC6WM zggg-w!-XW}(Ti;c?0ZRle0@`u^1GN8jYYH>Lx+aU>mHXbD;u;=UMZ;+@8#O}FFCsP z*X4e9?5{@I!VFRt|N7hNuDf_jiyZ*Vmme3h#l^_u^*~8P=-C2WKk43nX0LhvN~RuX z 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⋘Haq$jw1P@m+Fh` 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 diff --git a/examples/counter/main.go b/examples/counter/main.go deleted file mode 100644 index 8aa272d..0000000 --- a/examples/counter/main.go +++ /dev/null @@ -1,89 +0,0 @@ -package main - -import ( - "embed" - "fmt" - "log" - "net" - "net/http" - "os" - "os/signal" - "runtime" - "sync" - - "github.com/zserge/lorca" -) - -//go:embed www -var fs embed.FS - -// Go types that are bound to the UI must be thread-safe, because each binding -// is executed in its own goroutine. In this simple case we may use atomic -// operations, but for more complex cases one should use proper synchronization. -type counter struct { - sync.Mutex - count int -} - -func (c *counter) Add(n int) { - c.Lock() - defer c.Unlock() - c.count = c.count + n -} - -func (c *counter) Value() int { - c.Lock() - defer c.Unlock() - return c.count -} - -func main() { - args := []string{} - if runtime.GOOS == "linux" { - args = append(args, "--class=Lorca") - } - ui, err := lorca.New("", "", 480, 320, args...) - if err != nil { - log.Fatal(err) - } - defer ui.Close() - - // A simple way to know when UI is ready (uses body.onload event in JS) - ui.Bind("start", func() { - log.Println("UI is ready") - }) - - // Create and bind Go object to the UI - c := &counter{} - ui.Bind("counterAdd", c.Add) - ui.Bind("counterValue", c.Value) - - // Load HTML. - // You may also use `data:text/html,` approach to load initial HTML, - // e.g: ui.Load("data:text/html," + url.PathEscape(html)) - - ln, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - log.Fatal(err) - } - defer ln.Close() - go http.Serve(ln, http.FileServer(http.FS(fs))) - ui.Load(fmt.Sprintf("http://%s/www", ln.Addr())) - - // You may use console.log to debug your JS code, it will be printed via - // log.Println(). Also exceptions are printed in a similar manner. - ui.Eval(` - console.log("Hello, world!"); - console.log('Multiple values:', [1, false, {"x":5}]); - `) - - // Wait until the interrupt signal arrives or browser window is closed - sigc := make(chan os.Signal) - signal.Notify(sigc, os.Interrupt) - select { - case <-sigc: - case <-ui.Done(): - } - - log.Println("exiting...") -} diff --git a/examples/counter/www/favicon.png b/examples/counter/www/favicon.png deleted file mode 100644 index 82ff856acc792858f0fa759162adaaaa1fd8a409..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8696 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 VuS?FZA|u`ixTB$qE?2`w{vWza0|fv8 diff --git a/examples/counter/www/index.html b/examples/counter/www/index.html deleted file mode 100644 index 467b8dc..0000000 --- a/examples/counter/www/index.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - Counter - - - - - -
-
-
-
+1
-
-1
-
-
- - - - - diff --git a/examples/hello/main.go b/examples/hello/main.go deleted file mode 100644 index 07589db..0000000 --- a/examples/hello/main.go +++ /dev/null @@ -1,24 +0,0 @@ -package main - -import ( - "log" - "net/url" - - "github.com/zserge/lorca" -) - -func main() { - // Create UI with basic HTML passed via data URI - ui, err := lorca.New("data:text/html,"+url.PathEscape(` - - Hello -

Hello, world!

- - `), "", 480, 320) - if err != nil { - log.Fatal(err) - } - defer ui.Close() - // Wait until UI window is closed - <-ui.Done() -} diff --git a/examples/stopwatch/main.go b/examples/stopwatch/main.go deleted file mode 100644 index a87b823..0000000 --- a/examples/stopwatch/main.go +++ /dev/null @@ -1,56 +0,0 @@ -package main - -import ( - "fmt" - "log" - "net/url" - "sync/atomic" - "time" - - "github.com/zserge/lorca" -) - -func main() { - ui, err := lorca.New("", "", 480, 320) - if err != nil { - log.Fatal(err) - } - defer ui.Close() - - // Data model: number of ticks - ticks := uint32(0) - // Channel to connect UI events with the background ticking goroutine - togglec := make(chan bool) - // Bind Go functions to JS - ui.Bind("toggle", func() { togglec <- true }) - ui.Bind("reset", func() { - atomic.StoreUint32(&ticks, 0) - ui.Eval(`document.querySelector('.timer').innerText = '0'`) - }) - - // Load HTML after Go functions are bound to JS - ui.Load("data:text/html," + url.PathEscape(` - - - -
- - - - `)) - - // Start ticker goroutine - go func() { - t := time.NewTicker(100 * time.Millisecond) - for { - select { - case <-t.C: // Every 100ms increate number of ticks and update UI - ui.Eval(fmt.Sprintf(`document.querySelector('.timer').innerText = 0.1*%d`, - atomic.AddUint32(&ticks, 1))) - case <-togglec: // If paused - wait for another toggle event to unpause - <-togglec - } - } - }() - <-ui.Done() -} diff --git a/go.mod b/go.mod index 56f9a04..ea8810f 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,5 @@ -module github.com/zserge/lorca +module github.com/DavidArthurCole/lorca go 1.16 -require golang.org/x/net v0.0.0-20200222125558-5a598a2470a0 +require golang.org/x/net v0.19.0 diff --git a/go.sum b/go.sum index c957d22..19beafe 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,42 @@ +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0 h1:MsuvTghUPjX762sGLnGsxC3HM0B5r83wEtYcYR8/vRs= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/ui.go b/ui.go index bb4fa75..f5a6833 100644 --- a/ui.go +++ b/ui.go @@ -49,7 +49,7 @@ var defaultChromeArgs = []string{ "--no-first-run", "--no-default-browser-check", "--safebrowsing-disable-auto-update", - "--enable-automation", + //"--enable-automation", https://github.com/zserge/lorca/issues/167 "--password-store=basic", "--use-mock-keychain", } From 4d3a3850a9381bb9b16acc51d021a1d246f1fc80 Mon Sep 17 00:00:00 2001 From: DavidArthurCole Date: Mon, 1 Jan 2024 23:28:07 -0500 Subject: [PATCH 02/42] Update go.mod --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index ea8810f..13ade30 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/DavidArthurCole/lorca +module github.com/davidarthurcole/lorca go 1.16 From e62fd0de965caef9a233302b079093ca707e2f44 Mon Sep 17 00:00:00 2001 From: DavidArthurCole Date: Tue, 6 Feb 2024 17:17:13 -0500 Subject: [PATCH 03/42] New browser support for Windows --- locate.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/locate.go b/locate.go index 1b1659e..73e13d0 100644 --- a/locate.go +++ b/locate.go @@ -37,12 +37,25 @@ func LocateChrome() string { } case "windows": paths = []string{ + //Chrome os.Getenv("LocalAppData") + "/Google/Chrome/Application/chrome.exe", os.Getenv("ProgramFiles") + "/Google/Chrome/Application/chrome.exe", os.Getenv("ProgramFiles(x86)") + "/Google/Chrome/Application/chrome.exe", os.Getenv("LocalAppData") + "/Chromium/Application/chrome.exe", os.Getenv("ProgramFiles") + "/Chromium/Application/chrome.exe", os.Getenv("ProgramFiles(x86)") + "/Chromium/Application/chrome.exe", + //Opera + os.Getenv("LocalAppData") + "/Programs/Opera/launcher.exe", + os.Getenv("LocalAppData") + "/Programs/Opera/opera.exe", + os.Getenv("ProgramFiles") + "/Opera/launcher.exe", + os.Getenv("ProgramFiles") + "/Opera/opera.exe", + //Brave + os.Getenv("LocalAppData") + "/BraveSoftware/Brave-Browser/Application/brave.exe", + os.Getenv("ProgramFiles") + "/BraveSoftware/Brave-Browser/Application/brave.exe", + //Vivaldi + os.Getenv("LocalAppData") + "/Vivaldi/Application/vivaldi.exe", + os.Getenv("ProgramFiles") + "/Vivaldi/Application/vivaldi.exe", + //Edge os.Getenv("ProgramFiles(x86)") + "/Microsoft/Edge/Application/msedge.exe", os.Getenv("ProgramFiles") + "/Microsoft/Edge/Application/msedge.exe", } From 5bfe2656df4b73daacbedbba1809811c740a0a8d Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Sat, 30 Mar 2024 19:33:37 -0400 Subject: [PATCH 04/42] Progress towards 0.1.4 --- README.md | 8 ++++---- chrome.go | 7 ++++++- export.go | 3 +-- go.mod | 4 ++-- go.sum | 2 ++ locate.go | 35 ++++++++++++++++++++++++++++++++++- messagebox.go | 3 ++- messagebox_windows.go | 9 ++++++--- ui.go | 3 +-- ui_test.go | 2 +- 10 files changed, 59 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index f7cc83b..2edcf83 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Lorca -[![Build Status](https://img.shields.io/github/workflow/status/zserge/lorca/CI%20Pipeline)](https://github.com/zserge/lorca) -[![GoDoc](https://godoc.org/github.com/zserge/lorca?status.svg)](https://godoc.org/github.com/zserge/lorca) -[![Go Report Card](https://goreportcard.com/badge/github.com/zserge/lorca)](https://goreportcard.com/report/github.com/zserge/lorca) +[![Build Status](https://img.shields.io/github/workflow/status/DavidArthurCole/lorca/CI%20Pipeline)](https://github.com/DavidArthurCole/lorca) +[![GoDoc](https://godoc.org/github.com/DavidArthurCole/lorca?status.svg)](https://godoc.org/github.com/DavidArthurCole/lorca) +[![Go Report Card](https://goreportcard.com/badge/github.com/DavidArthurCole/lorca)](https://goreportcard.com/report/github.com/DavidArthurCole/lorca)
-Lorca +Lorca

A very small library to build modern HTML5 desktop apps in Go. It uses Chrome diff --git a/chrome.go b/chrome.go index b17b803..c80f9ff 100644 --- a/chrome.go +++ b/chrome.go @@ -509,7 +509,12 @@ func (c *chrome) kill() error { return err } } - // TODO: cancel all pending requests + c.Lock() + for _, ch := range c.pending { + ch <- result{Err: errors.New("chrome closed")} + } + defer c.Unlock() + if state := c.cmd.ProcessState; state == nil || !state.Exited() { return c.cmd.Process.Kill() } diff --git a/export.go b/export.go index 7e35100..c1bac65 100644 --- a/export.go +++ b/export.go @@ -2,7 +2,6 @@ package lorca import ( "fmt" - "io/ioutil" "os" ) @@ -45,7 +44,7 @@ func PNG(url, script string, x, y, width, height int, bg uint32, scale float32) } func doHeadless(url string, f func(c *chrome) ([]byte, error)) ([]byte, error) { - dir, err := ioutil.TempDir("", "lorca") + dir, err := os.MkdirTemp("", "lorca") if err != nil { return nil, err } diff --git a/go.mod b/go.mod index 13ade30..20d9475 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,5 @@ module github.com/davidarthurcole/lorca -go 1.16 +go 1.22.1 -require golang.org/x/net v0.19.0 +require golang.org/x/net v0.22.0 diff --git a/go.sum b/go.sum index 19beafe..d3fa0a5 100644 --- a/go.sum +++ b/go.sum @@ -13,6 +13,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/locate.go b/locate.go index 73e13d0..4c01618 100644 --- a/locate.go +++ b/locate.go @@ -11,6 +11,8 @@ import ( // executable file. var ChromeExecutable = LocateChrome +var foundPaths = []string{} + // LocateChrome returns a path to the Chrome binary, or an empty string if // Chrome installation is not found. func LocateChrome() string { @@ -26,6 +28,7 @@ func LocateChrome() string { switch runtime.GOOS { case "darwin": paths = []string{ + //Chrome "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary", "/Applications/Chromium.app/Contents/MacOS/Chromium", @@ -34,6 +37,12 @@ func LocateChrome() string { "/usr/bin/google-chrome", "/usr/bin/chromium", "/usr/bin/chromium-browser", + //Brave + "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser", + //Opera + "/Applications/Opera.app/Contents/MacOS/Opera", + //Vivaldi + "/Applications/Vivaldi.app/Contents/MacOS/Vivaldi", } case "windows": paths = []string{ @@ -61,20 +70,44 @@ func LocateChrome() string { } default: paths = []string{ + //Chrome "/usr/bin/google-chrome-stable", "/usr/bin/google-chrome", "/usr/bin/chromium", "/usr/bin/chromium-browser", "/snap/bin/chromium", + //Opera + "/usr/bin/opera", } } + var foundPath string for _, path := range paths { if _, err := os.Stat(path); os.IsNotExist(err) { continue } - return path + if foundPath == "" { + foundPath = path + foundPaths = append(foundPaths, path) + } else { + foundPaths = append(foundPaths, path) + } + } + + if len(foundPaths) > 1 { + // Prompt user with message boxes, "ok" to select the path, "cancel" to skip to the next path + title := "Multiple Chromium installations found" + for _, path := range foundPaths { + text := "Chromium-based installation found:\n" + path + "\n\nWould you like to use this installation?\n\"Yes\" to use now & set ENV variable to use in future.\n\"No\" to move to the next found installation." + if messageBox(title, text) { + os.Setenv("LORCACHROME", path) + return path + } + } + } else if foundPath != "" { + return foundPath } + return "" } diff --git a/messagebox.go b/messagebox.go index f14ea2c..98bcc21 100644 --- a/messagebox.go +++ b/messagebox.go @@ -1,4 +1,5 @@ -//+build !windows +//go:build !windows +// +build !windows package lorca diff --git a/messagebox_windows.go b/messagebox_windows.go index acb4f4b..3ed1c85 100644 --- a/messagebox_windows.go +++ b/messagebox_windows.go @@ -1,4 +1,5 @@ -//+build windows +//go:build windows +// +build windows package lorca @@ -13,7 +14,9 @@ func messageBox(title, text string) bool { mbYesNo := 0x00000004 mbIconQuestion := 0x00000020 idYes := 6 - ret, _, _ := messageBoxW.Call(0, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text))), - uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(title))), uintptr(uint(mbYesNo|mbIconQuestion))) + titlePtr, _ := syscall.UTF16PtrFromString(title) + textPtr, _ := syscall.UTF16PtrFromString(text) + ret, _, _ := messageBoxW.Call(0, uintptr(unsafe.Pointer(textPtr)), + uintptr(unsafe.Pointer(titlePtr)), uintptr(uint(mbYesNo|mbIconQuestion))) return int(ret) == idYes } diff --git a/ui.go b/ui.go index f5a6833..49ae281 100644 --- a/ui.go +++ b/ui.go @@ -4,7 +4,6 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" "os" "reflect" ) @@ -66,7 +65,7 @@ func New(url, dir string, width, height int, customArgs ...string) (UI, error) { } tmpDir := "" if dir == "" { - name, err := ioutil.TempDir("", "lorca") + name, err := os.MkdirTemp("", "lorca") if err != nil { return nil, err } diff --git a/ui_test.go b/ui_test.go index 892502a..a6c50d6 100644 --- a/ui_test.go +++ b/ui_test.go @@ -94,7 +94,7 @@ func TestFunctionReturnTypes(t *testing.T) { } defer ui.Close() - if err := ui.Bind("noResults", func() { return }); err != nil { + if err := ui.Bind("noResults", func() { /* Left empty to imply return : S1023 */ }); err != nil { t.Fatal(err) } if err := ui.Bind("oneNonNilResult", func() interface{} { return 1 }); err != nil { From 7a4f5169f11f675eb4e0e874a87b8ec4200abc3e Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Sat, 30 Mar 2024 19:43:44 -0400 Subject: [PATCH 05/42] Final push pre update --- LICENSE | 2 +- locate.go | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/LICENSE b/LICENSE index ed601e5..22cd25e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 David Arthur Cole +Copyright (c) 2024 David Arthur Cole Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/locate.go b/locate.go index 4c01618..8316455 100644 --- a/locate.go +++ b/locate.go @@ -21,6 +21,9 @@ func LocateChrome() string { if path, ok := os.LookupEnv("LORCACHROME"); ok { if _, err := os.Stat(path); err == nil { return path + } else { + // If the path is not found, remove the env variable + os.Unsetenv("LORCACHROME") } } @@ -32,7 +35,6 @@ func LocateChrome() string { "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary", "/Applications/Chromium.app/Contents/MacOS/Chromium", - "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", "/usr/bin/google-chrome-stable", "/usr/bin/google-chrome", "/usr/bin/chromium", @@ -43,6 +45,8 @@ func LocateChrome() string { "/Applications/Opera.app/Contents/MacOS/Opera", //Vivaldi "/Applications/Vivaldi.app/Contents/MacOS/Vivaldi", + //Edge (why) + "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", } case "windows": paths = []string{ @@ -78,6 +82,10 @@ func LocateChrome() string { "/snap/bin/chromium", //Opera "/usr/bin/opera", + //Brave + "/usr/bin/brave-browser", + //Vivaldi + "/usr/bin/vivaldi", } } From 520e7222baa5af33068b26410353da4e3eee34e7 Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Sat, 30 Mar 2024 20:21:38 -0400 Subject: [PATCH 06/42] Nope, not doin all that --- chrome_test.go | 8 ++++---- export.go | 2 +- locate.go | 39 ++++++++++++++++++--------------------- locate_test.go | 2 +- ui.go | 4 ++-- ui_test.go | 6 +++--- 6 files changed, 29 insertions(+), 32 deletions(-) diff --git a/chrome_test.go b/chrome_test.go index 8a4eecf..03a6bb6 100644 --- a/chrome_test.go +++ b/chrome_test.go @@ -10,7 +10,7 @@ import ( ) func TestChromeEval(t *testing.T) { - c, err := newChromeWithArgs(ChromeExecutable(), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0") + c, err := newChromeWithArgs(ChromeExecutable(""), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0") if err != nil { t.Fatal(err) } @@ -44,7 +44,7 @@ func TestChromeEval(t *testing.T) { } func TestChromeLoad(t *testing.T) { - c, err := newChromeWithArgs(ChromeExecutable(), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0") + c, err := newChromeWithArgs(ChromeExecutable(""), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0") if err != nil { t.Fatal(err) } @@ -70,7 +70,7 @@ func TestChromeLoad(t *testing.T) { } func TestChromeBind(t *testing.T) { - c, err := newChromeWithArgs(ChromeExecutable(), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0") + c, err := newChromeWithArgs(ChromeExecutable(""), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0") if err != nil { t.Fatal(err) } @@ -107,7 +107,7 @@ func TestChromeBind(t *testing.T) { } func TestChromeAsync(t *testing.T) { - c, err := newChromeWithArgs(ChromeExecutable(), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0") + c, err := newChromeWithArgs(ChromeExecutable(""), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0") if err != nil { t.Fatal(err) } diff --git a/export.go b/export.go index c1bac65..4bced0d 100644 --- a/export.go +++ b/export.go @@ -50,7 +50,7 @@ func doHeadless(url string, f func(c *chrome) ([]byte, error)) ([]byte, error) { } defer os.RemoveAll(dir) args := append(defaultChromeArgs, fmt.Sprintf("--user-data-dir=%s", dir), "--remote-debugging-port=0", "--headless", url) - chrome, err := newChromeWithArgs(ChromeExecutable(), args...) + chrome, err := newChromeWithArgs(ChromeExecutable(""), args...) if err != nil { return nil, err } diff --git a/locate.go b/locate.go index 8316455..f85d4b5 100644 --- a/locate.go +++ b/locate.go @@ -11,19 +11,30 @@ import ( // executable file. var ChromeExecutable = LocateChrome -var foundPaths = []string{} +var _foundPaths = []string{} + +func FoundPaths() []string { + if len(_foundPaths) == 0 { + LocateChrome("") + } + return _foundPaths +} // LocateChrome returns a path to the Chrome binary, or an empty string if // Chrome installation is not found. -func LocateChrome() string { +func LocateChrome(preferPath string) string { + + // If preferPath is specified and it exists + if preferPath != "" { + if _, err := os.Stat(preferPath); err == nil { + return preferPath + } + } // If env variable "LORCACHROME" specified and it exists if path, ok := os.LookupEnv("LORCACHROME"); ok { if _, err := os.Stat(path); err == nil { return path - } else { - // If the path is not found, remove the env variable - os.Unsetenv("LORCACHROME") } } @@ -96,24 +107,10 @@ func LocateChrome() string { } if foundPath == "" { foundPath = path - foundPaths = append(foundPaths, path) + _foundPaths = append(_foundPaths, path) } else { - foundPaths = append(foundPaths, path) - } - } - - if len(foundPaths) > 1 { - // Prompt user with message boxes, "ok" to select the path, "cancel" to skip to the next path - title := "Multiple Chromium installations found" - for _, path := range foundPaths { - text := "Chromium-based installation found:\n" + path + "\n\nWould you like to use this installation?\n\"Yes\" to use now & set ENV variable to use in future.\n\"No\" to move to the next found installation." - if messageBox(title, text) { - os.Setenv("LORCACHROME", path) - return path - } + _foundPaths = append(_foundPaths, path) } - } else if foundPath != "" { - return foundPath } return "" diff --git a/locate_test.go b/locate_test.go index 9498f57..622b7f8 100644 --- a/locate_test.go +++ b/locate_test.go @@ -6,7 +6,7 @@ import ( ) func TestLocate(t *testing.T) { - if exe := ChromeExecutable(); exe == "" { + if exe := ChromeExecutable(""); exe == "" { t.Fatal() } else { t.Log(exe) diff --git a/ui.go b/ui.go index d6586f8..68ab5ab 100644 --- a/ui.go +++ b/ui.go @@ -60,7 +60,7 @@ var defaultChromeArgs = []string{ // string - a temporary directory is created and it will be removed on // ui.Close(). You might want to use "--headless" custom CLI argument to test // your UI code. -func New(url, dir string, width, height int, customArgs ...string) (UI, error) { +func New(url, dir, preferPath string, width, height int, customArgs ...string) (UI, error) { if url == "" { url = "data:text/html," } @@ -78,7 +78,7 @@ func New(url, dir string, width, height int, customArgs ...string) (UI, error) { args = append(args, customArgs...) args = append(args, "--remote-debugging-port=0") - chrome, err := newChromeWithArgs(ChromeExecutable(), args...) + chrome, err := newChromeWithArgs(ChromeExecutable(preferPath), args...) done := make(chan struct{}) if err != nil { return nil, err diff --git a/ui_test.go b/ui_test.go index a6c50d6..7c562ee 100644 --- a/ui_test.go +++ b/ui_test.go @@ -8,7 +8,7 @@ import ( ) func TestEval(t *testing.T) { - ui, err := New("", "", 480, 320, "--headless") + ui, err := New("", "", "", 480, 320, "--headless") if err != nil { t.Fatal(err) } @@ -33,7 +33,7 @@ func TestEval(t *testing.T) { } func TestBind(t *testing.T) { - ui, err := New("", "", 480, 320, "--headless") + ui, err := New("", "", "", 480, 320, "--headless") if err != nil { t.Fatal(err) } @@ -88,7 +88,7 @@ func TestBind(t *testing.T) { } func TestFunctionReturnTypes(t *testing.T) { - ui, err := New("", "", 480, 320, "--headless") + ui, err := New("", "", "", 480, 320, "--headless") if err != nil { t.Fatal(err) } From 1d017f0031091c912e727f5253eb6c8c1f969d44 Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Sat, 30 Mar 2024 20:24:18 -0400 Subject: [PATCH 07/42] Add ability to refresh paths --- locate.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/locate.go b/locate.go index f85d4b5..17c15de 100644 --- a/locate.go +++ b/locate.go @@ -20,6 +20,11 @@ func FoundPaths() []string { return _foundPaths } +func RefreshFoundPaths() { + _foundPaths = []string{} + LocateChrome("") +} + // LocateChrome returns a path to the Chrome binary, or an empty string if // Chrome installation is not found. func LocateChrome(preferPath string) string { From d5349a5f8ad0e2cf26cbc34432a727fe50385ef4 Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Sat, 30 Mar 2024 20:45:47 -0400 Subject: [PATCH 08/42] Bruh --- locate.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/locate.go b/locate.go index 17c15de..3abd43a 100644 --- a/locate.go +++ b/locate.go @@ -1,6 +1,7 @@ package lorca import ( + "fmt" "os" "os/exec" "runtime" @@ -29,12 +30,14 @@ func RefreshFoundPaths() { // Chrome installation is not found. func LocateChrome(preferPath string) string { + fmt.Print("LocateChrome\n: ", preferPath) + // If preferPath is specified and it exists - if preferPath != "" { + /*if preferPath != "" { if _, err := os.Stat(preferPath); err == nil { return preferPath } - } + }*/ // If env variable "LORCACHROME" specified and it exists if path, ok := os.LookupEnv("LORCACHROME"); ok { @@ -105,7 +108,7 @@ func LocateChrome(preferPath string) string { } } - var foundPath string + foundPath := "" for _, path := range paths { if _, err := os.Stat(path); os.IsNotExist(err) { continue @@ -118,7 +121,7 @@ func LocateChrome(preferPath string) string { } } - return "" + return foundPath } // PromptDownload asks user if he wants to download and install Chrome, and From 09d719c4176a6b180d52dbf4ccfcd4509cff6b07 Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Sat, 30 Mar 2024 21:23:43 -0400 Subject: [PATCH 09/42] b r u h I gotta slow down --- locate.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locate.go b/locate.go index 3abd43a..9596bcb 100644 --- a/locate.go +++ b/locate.go @@ -33,11 +33,11 @@ func LocateChrome(preferPath string) string { fmt.Print("LocateChrome\n: ", preferPath) // If preferPath is specified and it exists - /*if preferPath != "" { + if preferPath != "" { if _, err := os.Stat(preferPath); err == nil { return preferPath } - }*/ + } // If env variable "LORCACHROME" specified and it exists if path, ok := os.LookupEnv("LORCACHROME"); ok { From 71fa00d16f239ec30fc2cde06c2a314a41d99646 Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Sat, 20 Jul 2024 18:50:54 -0400 Subject: [PATCH 10/42] Rollback EoF fixes, keep logging --- locate.go | 3 --- ui.go | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/locate.go b/locate.go index 9596bcb..4f45c1d 100644 --- a/locate.go +++ b/locate.go @@ -1,7 +1,6 @@ package lorca import ( - "fmt" "os" "os/exec" "runtime" @@ -30,8 +29,6 @@ func RefreshFoundPaths() { // Chrome installation is not found. func LocateChrome(preferPath string) string { - fmt.Print("LocateChrome\n: ", preferPath) - // If preferPath is specified and it exists if preferPath != "" { if _, err := os.Stat(preferPath); err == nil { diff --git a/ui.go b/ui.go index 68ab5ab..231bf27 100644 --- a/ui.go +++ b/ui.go @@ -52,6 +52,7 @@ var defaultChromeArgs = []string{ "--password-store=basic", "--use-mock-keychain", "--remote-allow-origins=*", + "---enable-logging --v=1", } // New returns a new HTML5 UI for the given URL, user profile directory, window From 166044806b9965d796959c2d97fba26b89528dad Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Sat, 20 Jul 2024 19:02:39 -0400 Subject: [PATCH 11/42] Oh my sweet lord jesus --- ui.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui.go b/ui.go index 231bf27..e972ac4 100644 --- a/ui.go +++ b/ui.go @@ -52,7 +52,7 @@ var defaultChromeArgs = []string{ "--password-store=basic", "--use-mock-keychain", "--remote-allow-origins=*", - "---enable-logging --v=1", + "--enable-logging --v=1", } // New returns a new HTML5 UI for the given URL, user profile directory, window From 2ed93e468a17486540e3f6f8df78865edfe89475 Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Sat, 20 Jul 2024 20:28:23 -0400 Subject: [PATCH 12/42] Another working theory --- chrome.go | 74 +++++++++++++++++++++++++++++++++++++------------------ go.mod | 2 +- go.sum | 44 ++------------------------------- 3 files changed, 53 insertions(+), 67 deletions(-) diff --git a/chrome.go b/chrome.go index c80f9ff..1bfb53f 100644 --- a/chrome.go +++ b/chrome.go @@ -1,17 +1,17 @@ package lorca import ( - "bufio" "encoding/json" "errors" "fmt" "io" - "io/ioutil" "log" + "net" + "net/http" "os/exec" - "regexp" "sync" "sync/atomic" + "time" "golang.org/x/net/websocket" ) @@ -47,6 +47,24 @@ type chrome struct { bindings map[string]bindingFunc } +type browserVersion struct { + Browser string `json:"Browser"` + ProtocolVersion string `json:"Protocol-Version"` + UserAgent string `json:"User-Agent"` + V8Version string `json:"V8-Version"` + WebkitVersion string `json:"Webkit-Version"` + WebSocketDebuggerUrl string `json:"webSocketDebuggerUrl"` +} + +func getFreePort() (int, error) { + ln, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + return 0, err + } + defer ln.Close() + return ln.Addr().(*net.TCPAddr).Port, nil +} + func newChromeWithArgs(chromeBinary string, args ...string) (*chrome, error) { // The first two IDs are used internally during the initialization c := &chrome{ @@ -55,24 +73,45 @@ func newChromeWithArgs(chromeBinary string, args ...string) (*chrome, error) { bindings: map[string]bindingFunc{}, } - // Start chrome process - c.cmd = exec.Command(chromeBinary, args...) - pipe, err := c.cmd.StderrPipe() + debugPort, err := getFreePort() if err != nil { return nil, err } + + // Start chrome process + args = append(args, fmt.Sprintf("--remote-debugging-port=%d", debugPort)) + c.cmd = exec.Command(chromeBinary, args...) if err := c.cmd.Start(); err != nil { return nil, err } - // Wait for websocket address to be printed to stderr - re := regexp.MustCompile(`^DevTools listening on (ws://.*?)\r?\n$`) - m, err := readUntilMatch(pipe, re) + // Retry mechanism + startTime := time.Now() + var res *http.Response + for { + res, err = http.Get(fmt.Sprintf("http://127.0.0.1:%d/json/version", debugPort)) + if err == nil { + break + } + if time.Since(startTime) > 5*time.Second { + return nil, fmt.Errorf("failed to reach /json/version within 5 seconds: %w", err) + } + time.Sleep(100 * time.Millisecond) + } + + body, err := io.ReadAll(res.Body) + if err != nil { + return nil, err + } + + browserVer := &browserVersion{} + + err = json.Unmarshal(body, &browserVer) if err != nil { - c.kill() return nil, err } - wsURL := m[1] + + wsURL := browserVer.WebSocketDebuggerUrl // Open a websocket c.ws, err = websocket.Dial(wsURL, "", "http://127.0.0.1") @@ -521,19 +560,6 @@ func (c *chrome) kill() error { return nil } -func readUntilMatch(r io.ReadCloser, re *regexp.Regexp) ([]string, error) { - br := bufio.NewReader(r) - for { - if line, err := br.ReadString('\n'); err != nil { - r.Close() - return nil, err - } else if m := re.FindStringSubmatch(line); m != nil { - go io.Copy(ioutil.Discard, br) - return m, nil - } - } -} - func contains(arr []string, x string) bool { for _, n := range arr { if x == n { diff --git a/go.mod b/go.mod index 20d9475..6784782 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,4 @@ module github.com/davidarthurcole/lorca go 1.22.1 -require golang.org/x/net v0.22.0 +require golang.org/x/net v0.27.0 diff --git a/go.sum b/go.sum index d3fa0a5..44d4195 100644 --- a/go.sum +++ b/go.sum @@ -1,44 +1,4 @@ -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0 h1:MsuvTghUPjX762sGLnGsxC3HM0B5r83wEtYcYR8/vRs= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= From cc8375c08fd4d404583f4bee6fbeb8769a691c9f Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Tue, 30 Jul 2024 00:33:19 -0400 Subject: [PATCH 13/42] Return successful debug port from chrome creation --- chrome.go | 18 ++++++++++-------- ui.go | 1 - 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/chrome.go b/chrome.go index 1bfb53f..e7b8716 100644 --- a/chrome.go +++ b/chrome.go @@ -37,14 +37,15 @@ type msg struct { type chrome struct { sync.Mutex - cmd *exec.Cmd - ws *websocket.Conn - id int32 - target string - session string - window int - pending map[int]chan result - bindings map[string]bindingFunc + cmd *exec.Cmd + ws *websocket.Conn + id int32 + target string + session string + window int + pending map[int]chan result + bindings map[string]bindingFunc + debugPort int } type browserVersion struct { @@ -98,6 +99,7 @@ func newChromeWithArgs(chromeBinary string, args ...string) (*chrome, error) { } time.Sleep(100 * time.Millisecond) } + c.debugPort = debugPort body, err := io.ReadAll(res.Body) if err != nil { diff --git a/ui.go b/ui.go index e972ac4..1a05c9d 100644 --- a/ui.go +++ b/ui.go @@ -77,7 +77,6 @@ func New(url, dir, preferPath string, width, height int, customArgs ...string) ( args = append(args, fmt.Sprintf("--user-data-dir=%s", dir)) args = append(args, fmt.Sprintf("--window-size=%d,%d", width, height)) args = append(args, customArgs...) - args = append(args, "--remote-debugging-port=0") chrome, err := newChromeWithArgs(ChromeExecutable(preferPath), args...) done := make(chan struct{}) From 646551fa32162b9f4c45c94886b709c62e74a973 Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Tue, 30 Jul 2024 00:38:08 -0400 Subject: [PATCH 14/42] Should probably make it accessible from the UI though --- ui.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ui.go b/ui.go index 1a05c9d..63d1729 100644 --- a/ui.go +++ b/ui.go @@ -17,6 +17,7 @@ type UI interface { Eval(js string) Value Done() <-chan struct{} Close() error + GetDebugPort() int } type ui struct { @@ -174,3 +175,7 @@ func (u *ui) SetBounds(b Bounds) error { func (u *ui) Bounds() (Bounds, error) { return u.chrome.bounds() } + +func (u *ui) GetDebugPort() int { + return u.chrome.debugPort +} From f5b1e7f0e84ca9ac641ea231673b0ceecf5bb0de Mon Sep 17 00:00:00 2001 From: DavidArthurCole Date: Fri, 23 Jan 2026 23:38:16 -0500 Subject: [PATCH 15/42] Update for 1.25 --- chrome.go | 4 ++-- go.mod | 4 ++-- go.sum | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/chrome.go b/chrome.go index e7b8716..e4d4b54 100644 --- a/chrome.go +++ b/chrome.go @@ -16,7 +16,7 @@ import ( "golang.org/x/net/websocket" ) -type h = map[string]interface{} +type h = map[string]any // Result is a struct for the resulting value of the JS expression or an error. type result struct { @@ -24,7 +24,7 @@ type result struct { Err error } -type bindingFunc func(args []json.RawMessage) (interface{}, error) +type bindingFunc func(args []json.RawMessage) (any, error) // Msg is a struct for incoming messages (results and async events) type msg struct { diff --git a/go.mod b/go.mod index 6784782..c8a4e00 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,5 @@ module github.com/davidarthurcole/lorca -go 1.22.1 +go 1.25.0 -require golang.org/x/net v0.27.0 +require golang.org/x/net v0.49.0 diff --git a/go.sum b/go.sum index 44d4195..402c109 100644 --- a/go.sum +++ b/go.sum @@ -2,3 +2,5 @@ golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= +golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= From be09d66053b7ac1a13e1747446744e7525139dc2 Mon Sep 17 00:00:00 2001 From: DavidArthurCole Date: Fri, 23 Jan 2026 23:38:33 -0500 Subject: [PATCH 16/42] Sum moment --- go.sum | 4 ---- 1 file changed, 4 deletions(-) diff --git a/go.sum b/go.sum index 402c109..beccae5 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,2 @@ -golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= From e3ba714b80df5fdaf3ec7e459583e858d73cb066 Mon Sep 17 00:00:00 2001 From: DavidArthurCole Date: Sat, 11 Apr 2026 01:45:50 -0400 Subject: [PATCH 17/42] Add mutexes --- chrome.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/chrome.go b/chrome.go index e4d4b54..f818798 100644 --- a/chrome.go +++ b/chrome.go @@ -37,6 +37,7 @@ type msg struct { type chrome struct { sync.Mutex + wsMu sync.Mutex // serializes websocket writes cmd *exec.Cmd ws *websocket.Conn id int32 @@ -395,11 +396,14 @@ func (c *chrome) send(method string, params h) (json.RawMessage, error) { c.pending[int(id)] = resc c.Unlock() - if err := websocket.JSON.Send(c.ws, h{ + c.wsMu.Lock() + err = websocket.JSON.Send(c.ws, h{ "id": int(id), "method": "Target.sendMessageToTarget", "params": h{"message": string(b), "sessionId": c.session}, - }); err != nil { + }) + c.wsMu.Unlock() + if err != nil { return nil, err } res := <-resc From 136042da7916cb946734787260e059ed6df99fac Mon Sep 17 00:00:00 2001 From: DavidArthurCole Date: Sat, 11 Apr 2026 21:47:07 -0400 Subject: [PATCH 18/42] Setup framework for relay, tie into existing chrome architecture, fix chrome tests --- chrome.go | 116 +++++---------------- chrome_nonwindows.go | 13 +++ chrome_test.go | 79 +-------------- chrome_windows.go | 12 +++ export.go | 2 +- relay.go | 195 +++++++++++++++++++++++++++++++++++ relay_test.go | 237 +++++++++++++++++++++++++++++++++++++++++++ ui.go | 29 ++++-- 8 files changed, 507 insertions(+), 176 deletions(-) create mode 100644 chrome_nonwindows.go create mode 100644 chrome_windows.go create mode 100644 relay.go create mode 100644 relay_test.go diff --git a/chrome.go b/chrome.go index f818798..71e4708 100644 --- a/chrome.go +++ b/chrome.go @@ -45,7 +45,6 @@ type chrome struct { session string window int pending map[int]chan result - bindings map[string]bindingFunc debugPort int } @@ -67,12 +66,11 @@ func getFreePort() (int, error) { return ln.Addr().(*net.TCPAddr).Port, nil } -func newChromeWithArgs(chromeBinary string, args ...string) (*chrome, error) { +func newChromeWithArgs(chromeBinary string, bootstrapScript string, args ...string) (*chrome, error) { // The first two IDs are used internally during the initialization c := &chrome{ - id: 2, - pending: map[int]chan result{}, - bindings: map[string]bindingFunc{}, + id: 2, + pending: map[int]chan result{}, } debugPort, err := getFreePort() @@ -152,10 +150,24 @@ func newChromeWithArgs(chromeBinary string, args ...string) (*chrome, error) { } } + if bootstrapScript != "" { + if _, err := c.send("Page.addScriptToEvaluateOnNewDocument", h{"source": bootstrapScript}); err != nil { + c.kill() + c.cmd.Wait() + return nil, err + } + if _, err := c.eval(bootstrapScript); err != nil { + c.kill() + c.cmd.Wait() + return nil, err + } + } + if !contains(args, "--headless") { win, err := c.getWindowForTarget(c.target) if err != nil { c.kill() + c.cmd.Wait() return nil, err } c.window = win.WindowID @@ -286,7 +298,10 @@ type targetMessage struct { } `json:"result"` Exception struct { Exception struct { - Value json.RawMessage `json:"value"` + Type string `json:"type"` + Subtype string `json:"subtype"` + Description string `json:"description"` + Value json.RawMessage `json:"value"` } `json:"exception"` } `json:"exceptionDetails"` } `json:"result"` @@ -313,41 +328,6 @@ func (c *chrome) readLoop() { if res.ID == 0 && res.Method == "Runtime.consoleAPICalled" || res.Method == "Runtime.exceptionThrown" { log.Println(params.Message) - } else if res.ID == 0 && res.Method == "Runtime.bindingCalled" { - payload := struct { - Name string `json:"name"` - Seq int `json:"seq"` - Args []json.RawMessage `json:"args"` - }{} - json.Unmarshal([]byte(res.Params.Payload), &payload) - - c.Lock() - binding, ok := c.bindings[res.Params.Name] - c.Unlock() - if ok { - jsString := func(v interface{}) string { b, _ := json.Marshal(v); return string(b) } - go func() { - result, error := "", `""` - if r, err := binding(payload.Args); err != nil { - error = jsString(err.Error()) - } else if b, err := json.Marshal(r); err != nil { - error = jsString(err.Error()) - } else { - result = string(b) - } - expr := fmt.Sprintf(` - if (%[4]s) { - window['%[1]s']['errors'].get(%[2]d)(%[4]s); - } else { - window['%[1]s']['callbacks'].get(%[2]d)(%[3]s); - } - window['%[1]s']['callbacks'].delete(%[2]d); - window['%[1]s']['errors'].delete(%[2]d); - `, payload.Name, payload.Seq, result, error) - c.send("Runtime.evaluate", h{"expression": expr, "contextId": res.Params.ID}) - }() - } - continue } c.Lock() @@ -363,6 +343,8 @@ func (c *chrome) readLoop() { resc <- result{Err: errors.New(res.Error.Message)} } else if res.Result.Exception.Exception.Value != nil { resc <- result{Err: errors.New(string(res.Result.Exception.Exception.Value))} + } else if res.Result.Exception.Exception.Subtype == "error" { + resc <- result{Err: errors.New(res.Result.Exception.Exception.Description)} } else if res.Result.Result.Type == "object" && res.Result.Result.Subtype == "error" { resc <- result{Err: errors.New(res.Result.Result.Description)} } else if res.Result.Result.Type != "" { @@ -419,56 +401,6 @@ func (c *chrome) eval(expr string) (json.RawMessage, error) { return c.send("Runtime.evaluate", h{"expression": expr, "awaitPromise": true, "returnByValue": true}) } -func (c *chrome) bind(name string, f bindingFunc) error { - c.Lock() - // check if binding already exists - _, exists := c.bindings[name] - - c.bindings[name] = f - c.Unlock() - - if exists { - // Just replace callback and return, as the binding was already added to js - // and adding it again would break it. - return nil - } - - if _, err := c.send("Runtime.addBinding", h{"name": name}); err != nil { - return err - } - script := fmt.Sprintf(`(() => { - const bindingName = '%s'; - const binding = window[bindingName]; - window[bindingName] = async (...args) => { - const me = window[bindingName]; - let errors = me['errors']; - let callbacks = me['callbacks']; - if (!callbacks) { - callbacks = new Map(); - me['callbacks'] = callbacks; - } - if (!errors) { - errors = new Map(); - me['errors'] = errors; - } - const seq = (me['lastSeq'] || 0) + 1; - me['lastSeq'] = seq; - const promise = new Promise((resolve, reject) => { - callbacks.set(seq, resolve); - errors.set(seq, reject); - }); - binding(JSON.stringify({name: bindingName, seq, args})); - return promise; - }})(); - `, name) - _, err := c.send("Page.addScriptToEvaluateOnNewDocument", h{"source": script}) - if err != nil { - return err - } - _, err = c.eval(script) - return err -} - func (c *chrome) setBounds(b Bounds) error { if b.WindowState == "" { b.WindowState = WindowStateNormal @@ -561,7 +493,7 @@ func (c *chrome) kill() error { defer c.Unlock() if state := c.cmd.ProcessState; state == nil || !state.Exited() { - return c.cmd.Process.Kill() + return killProcessTree(c.cmd.Process.Pid) } return nil } diff --git a/chrome_nonwindows.go b/chrome_nonwindows.go new file mode 100644 index 0000000..cb1b47d --- /dev/null +++ b/chrome_nonwindows.go @@ -0,0 +1,13 @@ +//go:build !windows + +package lorca + +import "os" + +func killProcessTree(pid int) error { + p, err := os.FindProcess(pid) + if err != nil { + return err + } + return p.Kill() +} diff --git a/chrome_test.go b/chrome_test.go index 03a6bb6..ca729cc 100644 --- a/chrome_test.go +++ b/chrome_test.go @@ -1,16 +1,12 @@ package lorca import ( - "encoding/json" - "errors" "strings" - "sync" - "sync/atomic" "testing" ) func TestChromeEval(t *testing.T) { - c, err := newChromeWithArgs(ChromeExecutable(""), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0") + c, err := newChromeWithArgs(ChromeExecutable(""), "", "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0", "--remote-allow-origins=*") if err != nil { t.Fatal(err) } @@ -44,7 +40,7 @@ func TestChromeEval(t *testing.T) { } func TestChromeLoad(t *testing.T) { - c, err := newChromeWithArgs(ChromeExecutable(""), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0") + c, err := newChromeWithArgs(ChromeExecutable(""), "", "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0", "--remote-allow-origins=*") if err != nil { t.Fatal(err) } @@ -69,74 +65,3 @@ func TestChromeLoad(t *testing.T) { } } -func TestChromeBind(t *testing.T) { - c, err := newChromeWithArgs(ChromeExecutable(""), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0") - if err != nil { - t.Fatal(err) - } - defer c.kill() - - if err := c.bind("add", func(args []json.RawMessage) (interface{}, error) { - a, b := 0, 0 - if len(args) != 2 { - return nil, errors.New("2 arguments expected") - } - if err := json.Unmarshal(args[0], &a); err != nil { - return nil, err - } - if err := json.Unmarshal(args[1], &b); err != nil { - return nil, err - } - return a + b, nil - }); err != nil { - t.Fatal(err) - } - - if res, err := c.eval(`window.add(2, 3)`); err != nil { - t.Fatal(err) - } else if string(res) != `5` { - t.Fatal(string(res)) - } - - if res, err := c.eval(`window.add("foo", "bar")`); err == nil { - t.Fatal(string(res), err) - } - if res, err := c.eval(`window.add(1, 2, 3)`); err == nil { - t.Fatal(res, err) - } -} - -func TestChromeAsync(t *testing.T) { - c, err := newChromeWithArgs(ChromeExecutable(""), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0") - if err != nil { - t.Fatal(err) - } - defer c.kill() - - if err := c.bind("len", func(args []json.RawMessage) (interface{}, error) { - return len(args[0]), nil - }); err != nil { - t.Fatal(err) - } - - wg := &sync.WaitGroup{} - n := 10 - failed := int32(0) - wg.Add(n) - for i := 0; i < n; i++ { - go func(i int) { - defer wg.Done() - v, err := c.eval("len('hello')") - if string(v) != `7` { - atomic.StoreInt32(&failed, 1) - } else if err != nil { - atomic.StoreInt32(&failed, 2) - } - }(i) - } - wg.Wait() - - if status := atomic.LoadInt32(&failed); status != 0 { - t.Fatal() - } -} diff --git a/chrome_windows.go b/chrome_windows.go new file mode 100644 index 0000000..70d996a --- /dev/null +++ b/chrome_windows.go @@ -0,0 +1,12 @@ +//go:build windows + +package lorca + +import ( + "os/exec" + "strconv" +) + +func killProcessTree(pid int) error { + return exec.Command("taskkill", "/F", "/T", "/PID", strconv.Itoa(pid)).Run() +} diff --git a/export.go b/export.go index 4bced0d..cb62f7c 100644 --- a/export.go +++ b/export.go @@ -50,7 +50,7 @@ func doHeadless(url string, f func(c *chrome) ([]byte, error)) ([]byte, error) { } defer os.RemoveAll(dir) args := append(defaultChromeArgs, fmt.Sprintf("--user-data-dir=%s", dir), "--remote-debugging-port=0", "--headless", url) - chrome, err := newChromeWithArgs(ChromeExecutable(""), args...) + chrome, err := newChromeWithArgs(ChromeExecutable(""), "", args...) if err != nil { return nil, err } diff --git a/relay.go b/relay.go new file mode 100644 index 0000000..c15faba --- /dev/null +++ b/relay.go @@ -0,0 +1,195 @@ +package lorca + +import ( + "encoding/json" + "fmt" + "net" + "net/http" + "strings" + "sync" + + "golang.org/x/net/websocket" +) + +const bootstrapTemplate = `(function() { + const _ws = new WebSocket('ws://127.0.0.1:__RELAY_PORT__') + const _pending = new Map() + var _sendQueue = [] + var _open = false + function _send(msg) { + if (_open) { _ws.send(msg) } else { _sendQueue.push(msg) } + } + _ws.onopen = function() { + _open = true + for (var i = 0; i < _sendQueue.length; i++) { _ws.send(_sendQueue[i]) } + _sendQueue = [] + } + function _register(name) { + window[name] = function() { + const args = Array.prototype.slice.call(arguments) + return new Promise(function(resolve, reject) { + const seq = (window[name]._seq = (window[name]._seq || 0) + 1) + _pending.set(name + ':' + seq, {resolve: resolve, reject: reject}) + _send(JSON.stringify({name: name, seq: seq, args: args})) + }) + } + window[name]._seq = 0 + } + _ws.onmessage = function(e) { + const msg = JSON.parse(e.data) + if (msg.type === 'register') { + _register(msg.name) + } else if (msg.type === 'result') { + const cb = _pending.get(msg.name + ':' + msg.seq) + if (cb) { + if (msg.error) { cb.reject(new Error(msg.error)) } else { cb.resolve(msg.result) } + _pending.delete(msg.name + ':' + msg.seq) + } + } + } + window.__lorcaRegister = _register +})()` + +type relay struct { + mu sync.Mutex + bindings map[string]bindingFunc + names []string + client *websocket.Conn + port int + ln net.Listener + server *http.Server +} + +func newRelay() (*relay, error) { + ln, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + return nil, err + } + r := &relay{ + port: ln.Addr().(*net.TCPAddr).Port, + ln: ln, + bindings: map[string]bindingFunc{}, + } + // Use a custom Server with no origin check so that pages loaded from + // data: URIs (null origin) and file: URIs can connect to the relay. + wsServer := websocket.Server{ + Handler: websocket.Handler(r.handleClient), + Handshake: func(cfg *websocket.Config, req *http.Request) error { + return nil // accept any origin + }, + } + mux := http.NewServeMux() + mux.Handle("/", wsServer) + r.server = &http.Server{Handler: mux} + go r.server.Serve(ln) + return r, nil +} + +func (r *relay) bootstrapScript() string { + return strings.ReplaceAll(bootstrapTemplate, "__RELAY_PORT__", fmt.Sprintf("%d", r.port)) +} + +// bind registers name → f. If name already exists, only the handler is +// updated (no register message is sent — a second register would reset the +// JS-side seq counter). All writes to client happen under mu to serialise +// with the replay in handleClient. +func (r *relay) bind(name string, f bindingFunc) error { + r.mu.Lock() + defer r.mu.Unlock() + _, exists := r.bindings[name] + r.bindings[name] = f + if exists { + return nil + } + r.names = append(r.names, name) + if r.client != nil { + return websocket.JSON.Send(r.client, map[string]string{"type": "register", "name": name}) + } + return nil +} + +func (r *relay) handleClient(ws *websocket.Conn) { + // Swap in new client and replay all registered bindings under the lock. + // Holding the lock during replay (a few loopback writes) prevents bind() + // racing to send a duplicate register for a name that is also in the list. + r.mu.Lock() + old := r.client + r.client = ws + for _, name := range r.names { + if err := websocket.JSON.Send(ws, map[string]string{"type": "register", "name": name}); err != nil { + r.mu.Unlock() + if old != nil { + old.Close() + } + return + } + } + r.mu.Unlock() + + if old != nil { + old.Close() + } + + type callMsg struct { + Name string `json:"name"` + Seq int `json:"seq"` + Args []json.RawMessage `json:"args"` + } + type resultMsg struct { + Type string `json:"type"` + Name string `json:"name"` + Seq int `json:"seq"` + Result *json.RawMessage `json:"result,omitempty"` + Error string `json:"error,omitempty"` + } + + for { + var call callMsg + if err := websocket.JSON.Receive(ws, &call); err != nil { + break + } + r.mu.Lock() + f, ok := r.bindings[call.Name] + r.mu.Unlock() + if !ok { + continue + } + name, seq, args := call.Name, call.Seq, call.Args + go func() { + msg := resultMsg{Type: "result", Name: name, Seq: seq} + res, err := f(args) + if err != nil { + msg.Error = err.Error() + } else if b, err2 := json.Marshal(res); err2 != nil { + msg.Error = err2.Error() + } else { + raw := json.RawMessage(b) + msg.Result = &raw + } + r.mu.Lock() + // Only write if this is still the active client. Results for + // in-flight calls from a navigated-away page are discarded. + if r.client == ws { + websocket.JSON.Send(r.client, msg) //nolint:errcheck + } + r.mu.Unlock() + }() + } + + r.mu.Lock() + if r.client == ws { + r.client = nil + } + r.mu.Unlock() +} + +func (r *relay) close() { + r.server.Close() + r.mu.Lock() + client := r.client + r.client = nil + r.mu.Unlock() + if client != nil { + client.Close() + } +} diff --git a/relay_test.go b/relay_test.go new file mode 100644 index 0000000..0fdc2c8 --- /dev/null +++ b/relay_test.go @@ -0,0 +1,237 @@ +package lorca + +import ( + "encoding/json" + "errors" + "fmt" + "sync/atomic" + "testing" + "time" + + "golang.org/x/net/websocket" +) + +func dialRelay(t *testing.T, port int) *websocket.Conn { + t.Helper() + ws, err := websocket.Dial(fmt.Sprintf("ws://127.0.0.1:%d/", port), "", "http://127.0.0.1") + if err != nil { + t.Fatal(err) + } + ws.SetDeadline(time.Now().Add(5 * time.Second)) + return ws +} + +type regMsg struct { + Type string `json:"type"` + Name string `json:"name"` +} + +type resMsg struct { + Type string `json:"type"` + Name string `json:"name"` + Seq int `json:"seq"` + Result json.RawMessage `json:"result"` + Error string `json:"error"` +} + +// TestRelayReplay verifies that bindings registered BEFORE a client connects +// are replayed as register messages when the client connects. +func TestRelayReplay(t *testing.T) { + r, err := newRelay() + if err != nil { + t.Fatal(err) + } + defer r.close() + + if err := r.bind("greet", func(args []json.RawMessage) (interface{}, error) { + return "hello", nil + }); err != nil { + t.Fatal(err) + } + + ws := dialRelay(t, r.port) + defer ws.Close() + + var msg regMsg + if err := websocket.JSON.Receive(ws, &msg); err != nil { + t.Fatal(err) + } + if msg.Type != "register" || msg.Name != "greet" { + t.Fatalf("expected {register greet}, got %+v", msg) + } +} + +// TestRelayRegisterAfterConnect verifies that binding registered AFTER a client +// connects sends a register message to the already-connected client. +func TestRelayRegisterAfterConnect(t *testing.T) { + r, err := newRelay() + if err != nil { + t.Fatal(err) + } + defer r.close() + + ws := dialRelay(t, r.port) + defer ws.Close() + + if err := r.bind("add", func(args []json.RawMessage) (interface{}, error) { + var a, b int + if err := json.Unmarshal(args[0], &a); err != nil { + return nil, err + } + if err := json.Unmarshal(args[1], &b); err != nil { + return nil, err + } + return a + b, nil + }); err != nil { + t.Fatal(err) + } + + var msg regMsg + if err := websocket.JSON.Receive(ws, &msg); err != nil { + t.Fatal(err) + } + if msg.Type != "register" || msg.Name != "add" { + t.Fatalf("expected {register add}, got %+v", msg) + } +} + +// TestRelayCallDispatch verifies that sending a call message invokes the +// binding and returns a result message. +func TestRelayCallDispatch(t *testing.T) { + r, err := newRelay() + if err != nil { + t.Fatal(err) + } + defer r.close() + + if err := r.bind("add", func(args []json.RawMessage) (interface{}, error) { + var a, b int + json.Unmarshal(args[0], &a) + json.Unmarshal(args[1], &b) + return a + b, nil + }); err != nil { + t.Fatal(err) + } + + ws := dialRelay(t, r.port) + defer ws.Close() + + // Drain the register message + var reg regMsg + if err := websocket.JSON.Receive(ws, ®); err != nil { + t.Fatal(err) + } + + // Send a call + if err := websocket.JSON.Send(ws, map[string]interface{}{ + "name": "add", + "seq": 1, + "args": []interface{}{2, 3}, + }); err != nil { + t.Fatal(err) + } + + var res resMsg + if err := websocket.JSON.Receive(ws, &res); err != nil { + t.Fatal(err) + } + if res.Type != "result" || res.Seq != 1 || string(res.Result) != "5" || res.Error != "" { + t.Fatalf("unexpected result: %+v", res) + } +} + +// TestRelayCallError verifies that a binding that returns an error sends back +// an error field in the result message. +func TestRelayCallError(t *testing.T) { + r, err := newRelay() + if err != nil { + t.Fatal(err) + } + defer r.close() + + if err := r.bind("fail", func(args []json.RawMessage) (interface{}, error) { + return nil, errors.New("something went wrong") + }); err != nil { + t.Fatal(err) + } + + ws := dialRelay(t, r.port) + defer ws.Close() + + var reg regMsg + if err := websocket.JSON.Receive(ws, ®); err != nil { + t.Fatal(err) + } + + if err := websocket.JSON.Send(ws, map[string]interface{}{ + "name": "fail", + "seq": 7, + "args": []interface{}{}, + }); err != nil { + t.Fatal(err) + } + + var res resMsg + if err := websocket.JSON.Receive(ws, &res); err != nil { + t.Fatal(err) + } + if res.Type != "result" || res.Seq != 7 || res.Error != "something went wrong" { + t.Fatalf("unexpected result: %+v", res) + } +} + +// TestRelayRebind verifies that calling bind() with an existing name updates +// the handler but does NOT send a second register message. +func TestRelayRebind(t *testing.T) { + r, err := newRelay() + if err != nil { + t.Fatal(err) + } + defer r.close() + + var called atomic.Int32 + mkHandler := func(v int32) bindingFunc { + return func(args []json.RawMessage) (interface{}, error) { + called.Store(v) + return v, nil + } + } + + r.bind("fn", mkHandler(1)) + + ws := dialRelay(t, r.port) + defer ws.Close() + + // Drain the first register + var reg regMsg + if err := websocket.JSON.Receive(ws, ®); err != nil { + t.Fatal(err) + } + + // Rebind — must NOT send another register message to the client + r.bind("fn", mkHandler(2)) + + // Send a call; result should come from handler v=2 + if err := websocket.JSON.Send(ws, map[string]interface{}{ + "name": "fn", + "seq": 1, + "args": []interface{}{}, + }); err != nil { + t.Fatal(err) + } + + var res resMsg + if err := websocket.JSON.Receive(ws, &res); err != nil { + t.Fatal(err) + } + // Explicitly confirm the relay sent a result (not a second register message). + if res.Type != "result" { + t.Fatalf("expected result message, got type=%q (possible spurious register)", res.Type) + } + if string(res.Result) != "2" { + t.Fatalf("expected handler v=2 result, got %s", res.Result) + } + if v := called.Load(); v != 2 { + t.Fatalf("expected called=2, got %d", v) + } +} diff --git a/ui.go b/ui.go index 63d1729..39efb6c 100644 --- a/ui.go +++ b/ui.go @@ -22,6 +22,7 @@ type UI interface { type ui struct { chrome *chrome + relay *relay done chan struct{} tmpDir string } @@ -31,12 +32,13 @@ var defaultChromeArgs = []string{ "--disable-background-timer-throttling", "--disable-backgrounding-occluded-windows", "--disable-breakpad", + "--disable-crash-reporter", "--disable-client-side-phishing-detection", "--disable-default-apps", "--disable-dev-shm-usage", "--disable-infobars", "--disable-extensions", - "--disable-features=site-per-process", + "--disable-features=site-per-process,BlockInsecurePrivateNetworkRequests,PrivateNetworkAccessChecks", "--disable-hang-monitor", "--disable-ipc-flooding-protection", "--disable-popup-blocking", @@ -74,22 +76,29 @@ func New(url, dir, preferPath string, width, height int, customArgs ...string) ( } dir, tmpDir = name, name } + + r, err := newRelay() + if err != nil { + return nil, err + } + args := append(defaultChromeArgs, fmt.Sprintf("--app=%s", url)) args = append(args, fmt.Sprintf("--user-data-dir=%s", dir)) args = append(args, fmt.Sprintf("--window-size=%d,%d", width, height)) args = append(args, customArgs...) - chrome, err := newChromeWithArgs(ChromeExecutable(preferPath), args...) - done := make(chan struct{}) + chrome, err := newChromeWithArgs(ChromeExecutable(preferPath), r.bootstrapScript(), args...) if err != nil { + r.close() return nil, err } + done := make(chan struct{}) go func() { chrome.cmd.Wait() close(done) }() - return &ui{chrome: chrome, done: done, tmpDir: tmpDir}, nil + return &ui{chrome: chrome, relay: r, done: done, tmpDir: tmpDir}, nil } func (u *ui) Done() <-chan struct{} { @@ -97,6 +106,7 @@ func (u *ui) Done() <-chan struct{} { } func (u *ui) Close() error { + u.relay.close() // ignore err, as the chrome process might be already dead, when user close the window. u.chrome.kill() <-u.done @@ -121,7 +131,7 @@ func (u *ui) Bind(name string, f interface{}) error { return errors.New("function may only return a value or a value+error") } - return u.chrome.bind(name, func(raw []json.RawMessage) (interface{}, error) { + if err := u.relay.bind(name, func(raw []json.RawMessage) (interface{}, error) { if len(raw) != v.Type().NumIn() { return nil, errors.New("function arguments mismatch") } @@ -160,7 +170,14 @@ func (u *ui) Bind(name string, f interface{}) error { default: return nil, errors.New("unexpected number of return values") } - }) + }); err != nil { + return err + } + // Install the binding in the current page context immediately so callers + // can Eval the binding right after Bind returns, without waiting for the + // relay WebSocket register message to be processed asynchronously. + _, err := u.chrome.eval(fmt.Sprintf(`window.__lorcaRegister('%s')`, name)) + return err } func (u *ui) Eval(js string) Value { From 13839ebf1669111f672edaa735b725a2da6d5608 Mon Sep 17 00:00:00 2001 From: DavidArthurCole Date: Sat, 11 Apr 2026 23:02:33 -0400 Subject: [PATCH 19/42] Full firefox support, with test cases. Hook chrome and its test files into browser. --- browser.go | 21 ++ chrome.go | 43 ++-- chrome_test.go | 37 ++- export.go | 2 +- firefox.go | 582 ++++++++++++++++++++++++++++++++++++++++++++++++ firefox_test.go | 182 +++++++++++++++ locate.go | 53 +++++ locate_test.go | 31 ++- ui.go | 122 +++++++--- ui_test.go | 38 ++++ 10 files changed, 1052 insertions(+), 59 deletions(-) create mode 100644 browser.go create mode 100644 firefox.go create mode 100644 firefox_test.go diff --git a/browser.go b/browser.go new file mode 100644 index 0000000..a83b028 --- /dev/null +++ b/browser.go @@ -0,0 +1,21 @@ +package lorca + +import "encoding/json" + +// browserImpl is the internal interface each browser backend implements. +// ui holds a browserImpl and delegates all browser interactions through it. +type browserImpl interface { + eval(expr string) (json.RawMessage, error) + load(url string) error + bounds() (Bounds, error) + setBounds(Bounds) error + injectScript(js string) error // registers script for all future docs + runs on current page + kill() + done() <-chan struct{} +} + +// Compile-time interface checks. +var ( + _ browserImpl = (*chrome)(nil) + _ browserImpl = (*firefox)(nil) +) diff --git a/chrome.go b/chrome.go index 71e4708..c7c8412 100644 --- a/chrome.go +++ b/chrome.go @@ -46,6 +46,7 @@ type chrome struct { window int pending map[int]chan result debugPort int + doneC chan struct{} } type browserVersion struct { @@ -66,7 +67,7 @@ func getFreePort() (int, error) { return ln.Addr().(*net.TCPAddr).Port, nil } -func newChromeWithArgs(chromeBinary string, bootstrapScript string, args ...string) (*chrome, error) { +func newChromeWithArgs(chromeBinary string, args ...string) (*chrome, error) { // The first two IDs are used internally during the initialization c := &chrome{ id: 2, @@ -133,7 +134,10 @@ func newChromeWithArgs(chromeBinary string, bootstrapScript string, args ...stri c.kill() return nil, err } + c.doneC = make(chan struct{}) + go func() { c.cmd.Wait(); close(c.doneC) }() go c.readLoop() + for method, args := range map[string]h{ "Page.enable": nil, "Target.setAutoAttach": {"autoAttach": true, "waitForDebuggerOnStart": false}, @@ -145,20 +149,6 @@ func newChromeWithArgs(chromeBinary string, bootstrapScript string, args ...stri } { if _, err := c.send(method, args); err != nil { c.kill() - c.cmd.Wait() - return nil, err - } - } - - if bootstrapScript != "" { - if _, err := c.send("Page.addScriptToEvaluateOnNewDocument", h{"source": bootstrapScript}); err != nil { - c.kill() - c.cmd.Wait() - return nil, err - } - if _, err := c.eval(bootstrapScript); err != nil { - c.kill() - c.cmd.Wait() return nil, err } } @@ -167,7 +157,6 @@ func newChromeWithArgs(chromeBinary string, bootstrapScript string, args ...stri win, err := c.getWindowForTarget(c.target) if err != nil { c.kill() - c.cmd.Wait() return nil, err } c.window = win.WindowID @@ -480,22 +469,30 @@ func (c *chrome) png(x, y, width, height int, bg uint32, scale float32) ([]byte, return pdf.Data, err } -func (c *chrome) kill() error { +func (c *chrome) kill() { if c.ws != nil { - if err := c.ws.Close(); err != nil { - return err - } + c.ws.Close() } c.Lock() for _, ch := range c.pending { ch <- result{Err: errors.New("chrome closed")} } - defer c.Unlock() + c.pending = map[int]chan result{} + c.Unlock() if state := c.cmd.ProcessState; state == nil || !state.Exited() { - return killProcessTree(c.cmd.Process.Pid) + killProcessTree(c.cmd.Process.Pid) + } +} + +func (c *chrome) done() <-chan struct{} { return c.doneC } + +func (c *chrome) injectScript(js string) error { + if _, err := c.send("Page.addScriptToEvaluateOnNewDocument", h{"source": js}); err != nil { + return err } - return nil + _, err := c.eval(js) + return err } func contains(arr []string, x string) bool { diff --git a/chrome_test.go b/chrome_test.go index ca729cc..d3a8f93 100644 --- a/chrome_test.go +++ b/chrome_test.go @@ -3,10 +3,43 @@ package lorca import ( "strings" "testing" + "time" ) +func TestChromeInjectScript(t *testing.T) { + c, err := newChromeWithArgs(ChromeExecutable(""), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0", "--remote-allow-origins=*") + if err != nil { + t.Fatal(err) + } + defer c.kill() + if err := c.injectScript(`window.__injected = 42`); err != nil { + t.Fatal(err) + } + result, err := c.eval(`window.__injected`) + if err != nil { + t.Fatal(err) + } + if string(result) != `42` { + t.Fatalf("expected 42, got %s", result) + } +} + +func TestChromeDone(t *testing.T) { + c, err := newChromeWithArgs(ChromeExecutable(""), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0", "--remote-allow-origins=*") + if err != nil { + t.Fatal(err) + } + c.kill() + select { + case <-c.done(): + // ok — channel closed after kill + case <-time.After(5 * time.Second): + t.Fatal("done() channel did not close within 5s after kill") + } +} + func TestChromeEval(t *testing.T) { - c, err := newChromeWithArgs(ChromeExecutable(""), "", "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0", "--remote-allow-origins=*") + c, err := newChromeWithArgs(ChromeExecutable(""), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0", "--remote-allow-origins=*") if err != nil { t.Fatal(err) } @@ -40,7 +73,7 @@ func TestChromeEval(t *testing.T) { } func TestChromeLoad(t *testing.T) { - c, err := newChromeWithArgs(ChromeExecutable(""), "", "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0", "--remote-allow-origins=*") + c, err := newChromeWithArgs(ChromeExecutable(""), "--user-data-dir=/tmp", "--headless", "--remote-debugging-port=0", "--remote-allow-origins=*") if err != nil { t.Fatal(err) } diff --git a/export.go b/export.go index cb62f7c..4bced0d 100644 --- a/export.go +++ b/export.go @@ -50,7 +50,7 @@ func doHeadless(url string, f func(c *chrome) ([]byte, error)) ([]byte, error) { } defer os.RemoveAll(dir) args := append(defaultChromeArgs, fmt.Sprintf("--user-data-dir=%s", dir), "--remote-debugging-port=0", "--headless", url) - chrome, err := newChromeWithArgs(ChromeExecutable(""), "", args...) + chrome, err := newChromeWithArgs(ChromeExecutable(""), args...) if err != nil { return nil, err } diff --git a/firefox.go b/firefox.go new file mode 100644 index 0000000..105e998 --- /dev/null +++ b/firefox.go @@ -0,0 +1,582 @@ +package lorca + +import ( + "bufio" + "crypto/rand" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "log" + "net" + "net/http" + "net/url" + "os/exec" + "strings" + "sync" + "sync/atomic" + "time" +) + +var defaultFirefoxArgs = []string{ + "--no-remote", + "--new-instance", +} + +// bidiValueToJSON converts a WebDriver BiDi serialized value to plain JSON. +// BiDi wraps every value in a {"type":"...", "value":...} envelope; this +// function unwraps it recursively so callers get standard json.RawMessage. +func bidiValueToJSON(v json.RawMessage) (json.RawMessage, error) { + var wrapper struct { + Type string `json:"type"` + Value json.RawMessage `json:"value"` + } + if err := json.Unmarshal(v, &wrapper); err != nil { + return nil, err + } + switch wrapper.Type { + case "string", "number", "boolean": + return wrapper.Value, nil + case "null", "undefined": + return json.RawMessage("null"), nil + case "array": + var items []json.RawMessage + if err := json.Unmarshal(wrapper.Value, &items); err != nil { + return nil, err + } + converted := make([]json.RawMessage, len(items)) + for i, item := range items { + c, err := bidiValueToJSON(item) + if err != nil { + return nil, err + } + converted[i] = c + } + b, err := json.Marshal(converted) + return json.RawMessage(b), err + case "object": + // BiDi object value is [[keyString, bidiValue], ...] + var pairs [][2]json.RawMessage + if err := json.Unmarshal(wrapper.Value, &pairs); err != nil { + return nil, err + } + obj := make(map[string]json.RawMessage, len(pairs)) + for _, pair := range pairs { + var key string + if err := json.Unmarshal(pair[0], &key); err != nil { + return nil, err + } + val, err := bidiValueToJSON(pair[1]) + if err != nil { + return nil, err + } + obj[key] = val + } + b, err := json.Marshal(obj) + return json.RawMessage(b), err + default: + return json.RawMessage("null"), nil + } +} + +// bidiConn is a minimal WebSocket client for the Firefox WebDriver BiDi +// protocol. golang.org/x/net/websocket always sends an Origin header which +// Firefox's /session endpoint rejects with 400 Bad Request, so we implement +// our own handshake and RFC 6455 text-frame framing. +type bidiConn struct { + conn net.Conn + br *bufio.Reader + writeMu sync.Mutex +} + +func newBidiConn(wsLoc *url.URL) (*bidiConn, error) { + addr := wsLoc.Host + conn, err := net.DialTimeout("tcp", addr, 10*time.Second) + if err != nil { + return nil, err + } + bc := &bidiConn{conn: conn, br: bufio.NewReader(conn)} + if err := bc.handshake(wsLoc.Host, wsLoc.Path); err != nil { + conn.Close() + return nil, err + } + return bc, nil +} + +func (c *bidiConn) handshake(host, path string) error { + keyBytes := make([]byte, 16) + if _, err := rand.Read(keyBytes); err != nil { + return err + } + key := base64.StdEncoding.EncodeToString(keyBytes) + + req := "GET " + path + " HTTP/1.1\r\n" + + "Host: " + host + "\r\n" + + "Upgrade: websocket\r\n" + + "Connection: Upgrade\r\n" + + "Sec-WebSocket-Key: " + key + "\r\n" + + "Sec-WebSocket-Version: 13\r\n" + + "Sec-WebSocket-Protocol: webdriver-bidi\r\n" + + "\r\n" + + c.conn.SetDeadline(time.Now().Add(10 * time.Second)) + if _, err := c.conn.Write([]byte(req)); err != nil { + return err + } + + // Read status line. + statusLine, err := c.br.ReadString('\n') + if err != nil { + return fmt.Errorf("firefox: BiDi handshake read: %w", err) + } + if !strings.HasPrefix(statusLine, "HTTP/1.1 101") { + return fmt.Errorf("firefox: BiDi handshake: %s", strings.TrimSpace(statusLine)) + } + // Drain the rest of the HTTP headers. + for { + line, err := c.br.ReadString('\n') + if err != nil { + return fmt.Errorf("firefox: BiDi handshake drain: %w", err) + } + if line == "\r\n" { + break + } + } + c.conn.SetDeadline(time.Time{}) + return nil +} + +// writeFrame encodes a single WebSocket frame with the given opcode and +// masked payload and writes it to the connection. All client frames must +// be masked per RFC 6455 §5.3. +func (c *bidiConn) writeFrame(opcode byte, payload []byte) error { + plen := len(payload) + var header []byte + header = append(header, 0x80|opcode) // FIN=1, RSV=0 + + var maskKey [4]byte + rand.Read(maskKey[:]) + + switch { + case plen <= 125: + header = append(header, byte(0x80|plen)) + case plen <= 65535: + header = append(header, 0xFE, byte(plen>>8), byte(plen)) + default: + header = append(header, 0xFF, + 0, 0, 0, 0, + byte(plen>>24), byte(plen>>16), byte(plen>>8), byte(plen)) + } + header = append(header, maskKey[:]...) + + masked := make([]byte, plen) + for i, b := range payload { + masked[i] = b ^ maskKey[i%4] + } + + c.writeMu.Lock() + defer c.writeMu.Unlock() + _, err := c.conn.Write(append(header, masked...)) + return err +} + +// Send marshals v to JSON and sends it as a WebSocket text frame. +func (c *bidiConn) Send(v interface{}) error { + data, err := json.Marshal(v) + if err != nil { + return err + } + return c.writeFrame(0x1, data) +} + +// Receive reads the next WebSocket text/binary frame and unmarshals its +// payload into v. Control frames (ping/pong/close) are handled inline. +func (c *bidiConn) Receive(v interface{}) error { + for { + hdr := make([]byte, 2) + if _, err := io.ReadFull(c.br, hdr); err != nil { + return err + } + + opcode := hdr[0] & 0x0F + isMasked := hdr[1]&0x80 != 0 + plen := int(hdr[1] & 0x7F) + + switch plen { + case 126: + ext := make([]byte, 2) + if _, err := io.ReadFull(c.br, ext); err != nil { + return err + } + plen = int(ext[0])<<8 | int(ext[1]) + case 127: + ext := make([]byte, 8) + if _, err := io.ReadFull(c.br, ext); err != nil { + return err + } + // Lower 32 bits suffice; payloads > 4 GB are not expected. + plen = int(ext[4])<<24 | int(ext[5])<<16 | int(ext[6])<<8 | int(ext[7]) + } + + var maskKey [4]byte + if isMasked { + if _, err := io.ReadFull(c.br, maskKey[:]); err != nil { + return err + } + } + + payload := make([]byte, plen) + if _, err := io.ReadFull(c.br, payload); err != nil { + return err + } + if isMasked { + for i := range payload { + payload[i] ^= maskKey[i%4] + } + } + + switch opcode { + case 0x8: // close + return io.EOF + case 0x9: // ping — reply with pong + c.writeFrame(0xA, payload) + continue + case 0xA: // pong — ignore + continue + case 0x0, 0x1, 0x2: // continuation, text, binary + return json.Unmarshal(payload, v) + default: + continue // unknown opcode; skip + } + } +} + +// Close closes the underlying TCP connection. +func (c *bidiConn) Close() error { + return c.conn.Close() +} + +type firefox struct { + sync.Mutex + cmd *exec.Cmd + bidi *bidiConn + id int32 + context string // WebDriver BiDi browsing context ID + pending map[int]chan result + doneC chan struct{} + lastBounds Bounds + debugPort int +} + +func newFirefoxWithArgs(binary string, args ...string) (*firefox, error) { + f := &firefox{ + id: 1, // 0 used for session.new, 1 for getTree during init; send() increments before use + pending: map[int]chan result{}, + } + + debugPort, err := getFreePort() + if err != nil { + return nil, err + } + f.debugPort = debugPort + + args = append(args, fmt.Sprintf("--remote-debugging-port=%d", debugPort)) + f.cmd = exec.Command(binary, args...) + if err := f.cmd.Start(); err != nil { + return nil, err + } + + // Poll /json/version until Firefox is ready (same retry loop as Chrome). + startTime := time.Now() + var res *http.Response + for { + res, err = http.Get(fmt.Sprintf("http://127.0.0.1:%d/json/version", debugPort)) + if err == nil { + break + } + if time.Since(startTime) > 5*time.Second { + killProcessTree(f.cmd.Process.Pid) + return nil, fmt.Errorf("firefox: failed to reach /json/version within 5 seconds: %w", err) + } + time.Sleep(100 * time.Millisecond) + } + body, err := io.ReadAll(res.Body) + res.Body.Close() + if err != nil { + killProcessTree(f.cmd.Process.Pid) + return nil, err + } + + // Firefox responds with HTML at /json/version rather than JSON. + // Ignore parse errors and always use the /session BiDi endpoint. + var ver browserVersion + _ = json.Unmarshal(body, &ver) + + var wsLoc *url.URL + if ver.WebSocketDebuggerUrl != "" { + wsLoc, err = url.Parse(ver.WebSocketDebuggerUrl) + if err != nil { + killProcessTree(f.cmd.Process.Pid) + return nil, err + } + } else { + // Firefox's BiDi WebSocket lives at /session. The golang.org/x/net/websocket + // library always sends an Origin header which Firefox rejects; we use our own + // bidiConn that omits the Origin header entirely. + wsLoc = &url.URL{ + Scheme: "ws", + Host: fmt.Sprintf("127.0.0.1:%d", debugPort), + Path: "/session", + } + } + + f.bidi, err = newBidiConn(wsLoc) + if err != nil { + killProcessTree(f.cmd.Process.Pid) + return nil, err + } + + // Activate WebDriver BiDi session. + if err := f.bidi.Send(h{"id": 0, "method": "session.new", "params": h{"capabilities": h{}}}); err != nil { + f.bidi.Close() + killProcessTree(f.cmd.Process.Pid) + return nil, err + } + for { + var m struct { + ID int `json:"id"` + } + if err := f.bidi.Receive(&m); err != nil { + f.bidi.Close() + killProcessTree(f.cmd.Process.Pid) + return nil, fmt.Errorf("firefox: waiting for session.new response: %w", err) + } + if m.ID == 0 { + break + } + } + + // Get the initial browsing context ID. + if err := f.bidi.Send(h{"id": 1, "method": "browsingContext.getTree", "params": h{}}); err != nil { + f.bidi.Close() + killProcessTree(f.cmd.Process.Pid) + return nil, err + } + for { + var m struct { + ID int `json:"id"` + Result struct { + Contexts []struct { + Context string `json:"context"` + } `json:"contexts"` + } `json:"result"` + } + if err := f.bidi.Receive(&m); err != nil { + f.bidi.Close() + killProcessTree(f.cmd.Process.Pid) + return nil, fmt.Errorf("firefox: waiting for browsingContext.getTree response: %w", err) + } + if m.ID == 1 { + if len(m.Result.Contexts) == 0 { + f.bidi.Close() + killProcessTree(f.cmd.Process.Pid) + return nil, errors.New("firefox: no browsing contexts found") + } + f.context = m.Result.Contexts[0].Context + break + } + } + + f.doneC = make(chan struct{}) + go func() { f.cmd.Wait(); close(f.doneC) }() + go f.readLoop() + + return f, nil +} + +func (f *firefox) send(method string, params h) (json.RawMessage, error) { + id := int(atomic.AddInt32(&f.id, 1)) + resc := make(chan result, 1) + f.Lock() + f.pending[id] = resc + f.Unlock() + + err := f.bidi.Send(h{"id": id, "method": method, "params": params}) + if err != nil { + f.Lock() + delete(f.pending, id) + f.Unlock() + return nil, err + } + res := <-resc + return res.Value, res.Err +} + +// bidiMsg is the shape of every message Firefox sends over the BiDi WebSocket. +type bidiMsg struct { + ID int `json:"id"` + Result json.RawMessage `json:"result"` + Error struct { + Message string `json:"message"` + } `json:"error"` + Method string `json:"method"` + Params json.RawMessage `json:"params"` +} + +func (f *firefox) readLoop() { + for { + var m bidiMsg + if err := f.bidi.Receive(&m); err != nil { + return + } + if m.Method != "" { + // Event — check for context destruction. + if m.Method == "browsingContext.contextDestroyed" { + params := struct { + Context string `json:"context"` + }{} + json.Unmarshal(m.Params, ¶ms) + if params.Context == f.context { + f.kill() + return + } + } + continue + } + // Response — route to pending channel. + f.Lock() + ch, ok := f.pending[m.ID] + delete(f.pending, m.ID) + f.Unlock() + if !ok { + continue + } + if m.Error.Message != "" { + ch <- result{Err: errors.New(m.Error.Message)} + } else { + ch <- result{Value: m.Result} + } + } +} + +func (f *firefox) eval(expr string) (json.RawMessage, error) { + raw, err := f.send("script.evaluate", h{ + "expression": expr, + "awaitPromise": true, + "target": h{"context": f.context}, + "resultOwnership": "root", + }) + if err != nil { + return nil, err + } + + var evalResult struct { + Type string `json:"type"` + Result json.RawMessage `json:"result"` + ExceptionDetails struct { + Text string `json:"text"` + Exception struct { + Type string `json:"type"` + Value json.RawMessage `json:"value"` + Description string `json:"description"` + } `json:"exception"` + } `json:"exceptionDetails"` + } + if err := json.Unmarshal(raw, &evalResult); err != nil { + return nil, err + } + if evalResult.Type == "exception" { + ex := evalResult.ExceptionDetails.Exception + if len(ex.Value) > 0 { + if unwrapped, err2 := bidiValueToJSON(ex.Value); err2 == nil { + return nil, errors.New(string(unwrapped)) + } + return nil, errors.New(string(ex.Value)) + } + if ex.Description != "" { + return nil, errors.New(ex.Description) + } + return nil, errors.New(evalResult.ExceptionDetails.Text) + } + if len(evalResult.Result) == 0 { + return json.RawMessage("null"), nil + } + return bidiValueToJSON(evalResult.Result) +} + +func (f *firefox) load(url string) error { + _, err := f.send("browsingContext.navigate", h{ + "url": url, + "context": f.context, + "wait": "complete", + }) + return err +} + +func (f *firefox) injectScript(js string) error { + _, err := f.send("script.addPreloadScript", h{ + "functionDeclaration": "() => { " + js + " }", + "contexts": []string{f.context}, + }) + if err != nil { + return err + } + _, err = f.eval(js) + return err +} + +func (f *firefox) setBounds(b Bounds) error { + if b.Left != 0 { + log.Printf("lorca/firefox: SetBounds Left=%d not supported", b.Left) + } + if b.Top != 0 { + log.Printf("lorca/firefox: SetBounds Top=%d not supported", b.Top) + } + if b.WindowState != "" && b.WindowState != WindowStateNormal { + log.Printf("lorca/firefox: SetBounds WindowState=%q not supported", b.WindowState) + } + if b.Width > 0 || b.Height > 0 { + if _, err := f.send("browsingContext.setViewport", h{ + "context": f.context, + "viewport": h{"width": b.Width, "height": b.Height}, + }); err != nil { + return err + } + f.Lock() + f.lastBounds.Width = b.Width + f.lastBounds.Height = b.Height + f.Unlock() + } + return nil +} + +func (f *firefox) bounds() (Bounds, error) { + raw, err := f.eval("[window.innerWidth, window.innerHeight]") + if err != nil { + return Bounds{}, err + } + var dims [2]int + if err := json.Unmarshal(raw, &dims); err != nil { + return Bounds{}, err + } + return Bounds{Width: dims[0], Height: dims[1]}, nil +} + +func (f *firefox) kill() { + if f.bidi != nil { + f.bidi.Close() + } + f.Lock() + for _, ch := range f.pending { + ch <- result{Err: errors.New("firefox closed")} + } + f.pending = map[int]chan result{} + f.Unlock() + + if state := f.cmd.ProcessState; state == nil || !state.Exited() { + killProcessTree(f.cmd.Process.Pid) + } +} + +func (f *firefox) done() <-chan struct{} { return f.doneC } diff --git a/firefox_test.go b/firefox_test.go new file mode 100644 index 0000000..d83284b --- /dev/null +++ b/firefox_test.go @@ -0,0 +1,182 @@ +package lorca + +import ( + "encoding/json" + "os" + "testing" + "time" +) + +func skipIfNoFirefox(t *testing.T) string { + t.Helper() + path, ok := os.LookupEnv("LORCAFIREFOX") + if !ok || path == "" { + t.Skip("LORCAFIREFOX not set; skipping Firefox integration tests") + } + if _, err := os.Stat(path); err != nil { + t.Skipf("LORCAFIREFOX=%s not found; skipping Firefox integration tests", path) + } + return path +} + +func TestBidiValueToJSON(t *testing.T) { + tests := []struct { + name string + input string + expected string + }{ + {"string", `{"type":"string","value":"hello"}`, `"hello"`}, + {"number int", `{"type":"number","value":42}`, `42`}, + {"number float", `{"type":"number","value":3.14}`, `3.14`}, + {"boolean true", `{"type":"boolean","value":true}`, `true`}, + {"boolean false", `{"type":"boolean","value":false}`, `false`}, + {"null", `{"type":"null"}`, `null`}, + {"undefined", `{"type":"undefined"}`, `null`}, + {"array", `{"type":"array","value":[{"type":"string","value":"a"},{"type":"number","value":1}]}`, `["a",1]`}, + {"object", `{"type":"object","value":[["key",{"type":"string","value":"val"}]]}`, `{"key":"val"}`}, + {"nested", `{"type":"array","value":[{"type":"object","value":[["x",{"type":"number","value":1}]]}]}`, `[{"x":1}]`}, + {"unknown type", `{"type":"symbol"}`, `null`}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := bidiValueToJSON(json.RawMessage(tt.input)) + if err != nil { + t.Fatal(err) + } + if string(result) != tt.expected { + t.Fatalf("expected %s, got %s", tt.expected, result) + } + }) + } +} + +func TestFirefoxNew(t *testing.T) { + binary := skipIfNoFirefox(t) + dir := t.TempDir() + f, err := newFirefoxWithArgs(binary, "--headless", "--profile", dir) + if err != nil { + t.Fatal(err) + } + f.kill() + select { + case <-f.done(): + case <-time.After(5 * time.Second): + t.Fatal("done() did not close after kill") + } +} + +func TestFirefoxEval(t *testing.T) { + binary := skipIfNoFirefox(t) + dir := t.TempDir() + f, err := newFirefoxWithArgs(binary, "--headless", "--profile", dir) + if err != nil { + t.Fatal(err) + } + defer func() { f.kill(); <-f.done() }() + + for _, tc := range []struct { + expr string + result string + errMsg string + }{ + {expr: `42`, result: `42`}, + {expr: `"hello"`, result: `"hello"`}, + {expr: `2+3`, result: `5`}, + {expr: `[1,2,3]`, result: `[1,2,3]`}, + {expr: `({x:1,y:2})`, result: `{"x":1,"y":2}`}, + {expr: `Promise.resolve(7)`, result: `7`}, + {expr: `throw "fail"`, errMsg: `"fail"`}, + } { + result, err := f.eval(tc.expr) + if tc.errMsg != "" { + if err == nil || err.Error() != tc.errMsg { + t.Fatalf("%s: expected error %q, got %v", tc.expr, tc.errMsg, err) + } + } else if err != nil { + t.Fatalf("%s: unexpected error: %v", tc.expr, err) + } else if string(result) != tc.result { + t.Fatalf("%s: expected %s, got %s", tc.expr, tc.result, string(result)) + } + } +} + +func TestFirefoxLoad(t *testing.T) { + binary := skipIfNoFirefox(t) + dir := t.TempDir() + f, err := newFirefoxWithArgs(binary, "--headless", "--profile", dir) + if err != nil { + t.Fatal(err) + } + defer func() { f.kill(); <-f.done() }() + + if err := f.load("data:text/html,Hello"); err != nil { + t.Fatal(err) + } + result, err := f.eval(`document.body.innerText`) + if err != nil { + t.Fatal(err) + } + if string(result) != `"Hello"` { + t.Fatalf("expected %q, got %s", "Hello", result) + } +} + +func TestFirefoxInjectScript(t *testing.T) { + binary := skipIfNoFirefox(t) + dir := t.TempDir() + f, err := newFirefoxWithArgs(binary, "--headless", "--profile", dir) + if err != nil { + t.Fatal(err) + } + defer func() { f.kill(); <-f.done() }() + + if err := f.injectScript(`window.__injected = 99`); err != nil { + t.Fatal(err) + } + result, err := f.eval(`window.__injected`) + if err != nil { + t.Fatal(err) + } + if string(result) != `99` { + t.Fatalf("expected 99, got %s", result) + } +} + +func TestFirefoxBounds(t *testing.T) { + binary := skipIfNoFirefox(t) + dir := t.TempDir() + f, err := newFirefoxWithArgs(binary, "--headless", "--profile", dir, "--window-size=800,600") + if err != nil { + t.Fatal(err) + } + defer func() { f.kill(); <-f.done() }() + + b, err := f.bounds() + if err != nil { + t.Fatal(err) + } + if b.Width == 0 || b.Height == 0 { + t.Fatalf("expected non-zero bounds, got %+v", b) + } +} + +func TestFirefoxSetBounds(t *testing.T) { + binary := skipIfNoFirefox(t) + dir := t.TempDir() + f, err := newFirefoxWithArgs(binary, "--headless", "--profile", dir) + if err != nil { + t.Fatal(err) + } + defer func() { f.kill(); <-f.done() }() + + if err := f.setBounds(Bounds{Width: 1024, Height: 768}); err != nil { + t.Fatal(err) + } + b, err := f.bounds() + if err != nil { + t.Fatal(err) + } + if b.Width != 1024 || b.Height != 768 { + t.Fatalf("expected 1024x768, got %dx%d", b.Width, b.Height) + } +} diff --git a/locate.go b/locate.go index 4f45c1d..8ed63a1 100644 --- a/locate.go +++ b/locate.go @@ -63,6 +63,9 @@ func LocateChrome(preferPath string) string { "/Applications/Vivaldi.app/Contents/MacOS/Vivaldi", //Edge (why) "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", + // Firefox + "/Applications/Firefox.app/Contents/MacOS/firefox", + "/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox", } case "windows": paths = []string{ @@ -87,6 +90,10 @@ func LocateChrome(preferPath string) string { //Edge os.Getenv("ProgramFiles(x86)") + "/Microsoft/Edge/Application/msedge.exe", os.Getenv("ProgramFiles") + "/Microsoft/Edge/Application/msedge.exe", + // Firefox + os.Getenv("LocalAppData") + "/Mozilla Firefox/firefox.exe", + os.Getenv("ProgramFiles") + "/Mozilla Firefox/firefox.exe", + os.Getenv("ProgramFiles(x86)") + "/Mozilla Firefox/firefox.exe", } default: paths = []string{ @@ -102,6 +109,10 @@ func LocateChrome(preferPath string) string { "/usr/bin/brave-browser", //Vivaldi "/usr/bin/vivaldi", + // Firefox + "/usr/bin/firefox", + "/usr/bin/firefox-esr", + "/snap/bin/firefox", } } @@ -121,6 +132,48 @@ func LocateChrome(preferPath string) string { return foundPath } +// LocateFirefox returns a path to a Firefox binary, or an empty string if +// none is found. It checks preferPath, then the LORCAFIREFOX env var, then +// well-known platform paths. +func LocateFirefox(preferPath string) string { + if preferPath != "" { + if _, err := os.Stat(preferPath); err == nil { + return preferPath + } + } + if path, ok := os.LookupEnv("LORCAFIREFOX"); ok { + if _, err := os.Stat(path); err == nil { + return path + } + } + var paths []string + switch runtime.GOOS { + case "darwin": + paths = []string{ + "/Applications/Firefox.app/Contents/MacOS/firefox", + "/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox", + } + case "windows": + paths = []string{ + os.Getenv("LocalAppData") + "/Mozilla Firefox/firefox.exe", + os.Getenv("ProgramFiles") + "/Mozilla Firefox/firefox.exe", + os.Getenv("ProgramFiles(x86)") + "/Mozilla Firefox/firefox.exe", + } + default: + paths = []string{ + "/usr/bin/firefox", + "/usr/bin/firefox-esr", + "/snap/bin/firefox", + } + } + for _, p := range paths { + if _, err := os.Stat(p); err == nil { + return p + } + } + return "" +} + // PromptDownload asks user if he wants to download and install Chrome, and // opens a download web page if the user agrees. func PromptDownload() { diff --git a/locate_test.go b/locate_test.go index 622b7f8..139b5f4 100644 --- a/locate_test.go +++ b/locate_test.go @@ -1,8 +1,11 @@ package lorca import ( + "context" + "os" "os/exec" "testing" + "time" ) func TestLocate(t *testing.T) { @@ -10,8 +13,34 @@ func TestLocate(t *testing.T) { t.Fatal() } else { t.Log(exe) - b, err := exec.Command(exe, "--version").CombinedOutput() + ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) + defer cancel() + b, err := exec.CommandContext(ctx, exe, "--version").CombinedOutput() t.Log(string(b)) t.Log(err) } } + +func TestLocateFirefoxEnvVar(t *testing.T) { + path := t.TempDir() + "/firefox" + // Create a dummy file so os.Stat succeeds + if err := os.WriteFile(path, []byte(""), 0755); err != nil { + t.Fatal(err) + } + t.Setenv("LORCAFIREFOX", path) + got := LocateFirefox("") + if got != path { + t.Fatalf("expected %q, got %q", path, got) + } +} + +func TestLocateFirefoxPreferPath(t *testing.T) { + path := t.TempDir() + "/my-firefox" + if err := os.WriteFile(path, []byte(""), 0755); err != nil { + t.Fatal(err) + } + got := LocateFirefox(path) + if got != path { + t.Fatalf("expected %q, got %q", path, got) + } +} diff --git a/ui.go b/ui.go index 39efb6c..5ee7415 100644 --- a/ui.go +++ b/ui.go @@ -6,6 +6,7 @@ import ( "fmt" "os" "reflect" + "strings" ) // UI interface allows talking to the HTML5 UI from Go. @@ -21,10 +22,9 @@ type UI interface { } type ui struct { - chrome *chrome - relay *relay - done chan struct{} - tmpDir string + browser browserImpl + relay *relay + tmpDir string } var defaultChromeArgs = []string{ @@ -58,13 +58,22 @@ var defaultChromeArgs = []string{ "--enable-logging --v=1", } -// New returns a new HTML5 UI for the given URL, user profile directory, window -// size and other options passed to the browser engine. If URL is an empty -// string - a blank page is displayed. If user profile directory is an empty -// string - a temporary directory is created and it will be removed on -// ui.Close(). You might want to use "--headless" custom CLI argument to test -// your UI code. -func New(url, dir, preferPath string, width, height int, customArgs ...string) (UI, error) { +// BrowserHint tells NewWithBrowser which browser backend to use. +type BrowserHint string + +const ( + // BrowserAuto selects the backend by inspecting the resolved binary path. + BrowserAuto BrowserHint = "auto" + // BrowserChrome selects the Chromium-family CDP backend. + BrowserChrome BrowserHint = "chrome" + // BrowserFirefox selects the Firefox WebDriver BiDi backend. + BrowserFirefox BrowserHint = "firefox" +) + +// NewWithBrowser is like New but lets the caller specify which browser backend +// to use. hint == BrowserAuto inspects the resolved binary name; a path +// containing "firefox" (case-insensitive) selects the Firefox backend. +func NewWithBrowser(url, dir, preferPath string, width, height int, hint BrowserHint, customArgs ...string) (UI, error) { if url == "" { url = "data:text/html," } @@ -82,34 +91,76 @@ func New(url, dir, preferPath string, width, height int, customArgs ...string) ( return nil, err } - args := append(defaultChromeArgs, fmt.Sprintf("--app=%s", url)) - args = append(args, fmt.Sprintf("--user-data-dir=%s", dir)) - args = append(args, fmt.Sprintf("--window-size=%d,%d", width, height)) - args = append(args, customArgs...) + // Resolve binary and select backend. + var binary string + useFirefox := false + switch hint { + case BrowserFirefox: + binary = LocateFirefox(preferPath) + if binary == "" { + r.close() + return nil, errors.New("lorca: no Firefox binary found") + } + useFirefox = true + default: // BrowserChrome or BrowserAuto + binary = ChromeExecutable(preferPath) + if hint == BrowserAuto { + useFirefox = strings.Contains(strings.ToLower(binary), "firefox") + } + } - chrome, err := newChromeWithArgs(ChromeExecutable(preferPath), r.bootstrapScript(), args...) + var browser browserImpl + if useFirefox { + args := append(append([]string{}, defaultFirefoxArgs...), + "--profile", dir, + fmt.Sprintf("--window-size=%d,%d", width, height), + ) + args = append(args, customArgs...) + args = append(args, url) + browser, err = newFirefoxWithArgs(binary, args...) + } else { + args := append(append([]string{}, defaultChromeArgs...), + fmt.Sprintf("--app=%s", url), + fmt.Sprintf("--user-data-dir=%s", dir), + fmt.Sprintf("--window-size=%d,%d", width, height), + ) + args = append(args, customArgs...) + browser, err = newChromeWithArgs(binary, args...) + } if err != nil { r.close() return nil, err } - done := make(chan struct{}) - go func() { - chrome.cmd.Wait() - close(done) - }() - return &ui{chrome: chrome, relay: r, done: done, tmpDir: tmpDir}, nil + if err := browser.injectScript(r.bootstrapScript()); err != nil { + r.close() + browser.kill() + <-browser.done() + return nil, err + } + + return &ui{browser: browser, relay: r, tmpDir: tmpDir}, nil +} + +// New returns a new HTML5 UI for the given URL, user profile directory, window +// size and other options passed to the browser engine. If URL is an empty +// string - a blank page is displayed. If user profile directory is an empty +// string - a temporary directory is created and it will be removed on +// ui.Close(). You might want to use "--headless" custom CLI argument to test +// your UI code. +func New(url, dir, preferPath string, width, height int, customArgs ...string) (UI, error) { + return NewWithBrowser(url, dir, preferPath, width, height, BrowserAuto, customArgs...) } func (u *ui) Done() <-chan struct{} { - return u.done + return u.browser.done() } func (u *ui) Close() error { u.relay.close() - // ignore err, as the chrome process might be already dead, when user close the window. - u.chrome.kill() - <-u.done + // ignore err, as the browser process might be already dead, when user closes the window. + u.browser.kill() + <-u.browser.done() if u.tmpDir != "" { if err := os.RemoveAll(u.tmpDir); err != nil { return err @@ -118,7 +169,7 @@ func (u *ui) Close() error { return nil } -func (u *ui) Load(url string) error { return u.chrome.load(url) } +func (u *ui) Load(url string) error { return u.browser.load(url) } func (u *ui) Bind(name string, f interface{}) error { v := reflect.ValueOf(f) @@ -176,23 +227,30 @@ func (u *ui) Bind(name string, f interface{}) error { // Install the binding in the current page context immediately so callers // can Eval the binding right after Bind returns, without waiting for the // relay WebSocket register message to be processed asynchronously. - _, err := u.chrome.eval(fmt.Sprintf(`window.__lorcaRegister('%s')`, name)) + _, err := u.browser.eval(fmt.Sprintf(`window.__lorcaRegister('%s')`, name)) return err } func (u *ui) Eval(js string) Value { - v, err := u.chrome.eval(js) + v, err := u.browser.eval(js) return value{err: err, raw: v} } func (u *ui) SetBounds(b Bounds) error { - return u.chrome.setBounds(b) + return u.browser.setBounds(b) } func (u *ui) Bounds() (Bounds, error) { - return u.chrome.bounds() + return u.browser.bounds() } func (u *ui) GetDebugPort() int { - return u.chrome.debugPort + switch b := u.browser.(type) { + case *chrome: + return b.debugPort + case *firefox: + return b.debugPort + default: + return 0 + } } diff --git a/ui_test.go b/ui_test.go index 7c562ee..0595a90 100644 --- a/ui_test.go +++ b/ui_test.go @@ -3,6 +3,7 @@ package lorca import ( "errors" "math/rand" + "os" "strconv" "testing" ) @@ -150,3 +151,40 @@ func TestFunctionReturnTypes(t *testing.T) { t.Fatal(v) } } + +func TestNewWithBrowserChrome(t *testing.T) { + ui, err := NewWithBrowser("", "", "", 480, 320, BrowserChrome, "--headless") + if err != nil { + t.Fatal(err) + } + defer ui.Close() + if n := ui.Eval(`2+3`).Int(); n != 5 { + t.Fatalf("expected 5, got %d", n) + } +} + +func TestNewWithBrowserAuto(t *testing.T) { + ui, err := NewWithBrowser("", "", "", 480, 320, BrowserAuto, "--headless") + if err != nil { + t.Fatal(err) + } + defer ui.Close() + if n := ui.Eval(`2+3`).Int(); n != 5 { + t.Fatalf("expected 5, got %d", n) + } +} + +func TestNewWithBrowserFirefox(t *testing.T) { + ffPath, ok := os.LookupEnv("LORCAFIREFOX") + if !ok || ffPath == "" { + t.Skip("LORCAFIREFOX not set") + } + ui, err := NewWithBrowser("", "", ffPath, 480, 320, BrowserFirefox, "--headless") + if err != nil { + t.Fatal(err) + } + defer ui.Close() + if n := ui.Eval(`2+3`).Int(); n != 5 { + t.Fatalf("expected 5, got %d", n) + } +} From 8e3977b03d5f4250fe8ce784cda5eda51a9b2418 Mon Sep 17 00:00:00 2001 From: DavidArthurCole Date: Sat, 11 Apr 2026 23:40:32 -0400 Subject: [PATCH 20/42] Fix bindings --- ui.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ui.go b/ui.go index 5ee7415..74e1b57 100644 --- a/ui.go +++ b/ui.go @@ -224,11 +224,12 @@ func (u *ui) Bind(name string, f interface{}) error { }); err != nil { return err } - // Install the binding in the current page context immediately so callers - // can Eval the binding right after Bind returns, without waiting for the - // relay WebSocket register message to be processed asynchronously. - _, err := u.browser.eval(fmt.Sprintf(`window.__lorcaRegister('%s')`, name)) - return err + // Install the binding on the current page immediately AND register it for + // all future page loads via addScriptToEvaluateOnNewDocument. This ensures + // bound functions are available synchronously before any page JS runs, + // avoiding the race where a page mounts before the relay WebSocket has + // delivered its register messages. + return u.browser.injectScript(fmt.Sprintf(`window.__lorcaRegister('%s')`, name)) } func (u *ui) Eval(js string) Value { From 057f8219385fe931ccef24fdfedb9268d75f5c1f Mon Sep 17 00:00:00 2001 From: DavidArthurCole Date: Sun, 12 Apr 2026 00:17:55 -0400 Subject: [PATCH 21/42] Fix arg extraction --- relay.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/relay.go b/relay.go index c15faba..8b5eca8 100644 --- a/relay.go +++ b/relay.go @@ -25,8 +25,7 @@ const bootstrapTemplate = `(function() { _sendQueue = [] } function _register(name) { - window[name] = function() { - const args = Array.prototype.slice.call(arguments) + window[name] = function(...args) { return new Promise(function(resolve, reject) { const seq = (window[name]._seq = (window[name]._seq || 0) + 1) _pending.set(name + ':' + seq, {resolve: resolve, reject: reject}) From 6c5559bd3c787052c1195f146c7afc1e9b30b6f3 Mon Sep 17 00:00:00 2001 From: DavidArthurCole Date: Sun, 12 Apr 2026 02:16:40 -0400 Subject: [PATCH 22/42] Fixes for firefox with tests this time --- browser.go | 3 +- chrome.go | 4 + docs/firefox-realm-isolation.md | 265 ++++++++++++++++++++++++++++++++ firefox.go | 40 ++++- firefox_test.go | 257 +++++++++++++++++++++++++++++++ relay.go | 63 ++++---- relay_test.go | 50 ++++++ ui.go | 2 +- 8 files changed, 646 insertions(+), 38 deletions(-) create mode 100644 docs/firefox-realm-isolation.md diff --git a/browser.go b/browser.go index a83b028..246b9c9 100644 --- a/browser.go +++ b/browser.go @@ -9,7 +9,8 @@ type browserImpl interface { load(url string) error bounds() (Bounds, error) setBounds(Bounds) error - injectScript(js string) error // registers script for all future docs + runs on current page + injectScript(js string) error // registers script for all future docs + runs on current page + injectBinding(name string) error // like injectScript but avoids cross-realm calls for Firefox kill() done() <-chan struct{} } diff --git a/chrome.go b/chrome.go index c7c8412..48024fd 100644 --- a/chrome.go +++ b/chrome.go @@ -495,6 +495,10 @@ func (c *chrome) injectScript(js string) error { return err } +func (c *chrome) injectBinding(name string) error { + return c.injectScript(fmt.Sprintf(`window.__lorcaRegister('%s')`, name)) +} + func contains(arr []string, x string) bool { for _, n := range arr { if x == n { diff --git a/docs/firefox-realm-isolation.md b/docs/firefox-realm-isolation.md new file mode 100644 index 0000000..7f24c2f --- /dev/null +++ b/docs/firefox-realm-isolation.md @@ -0,0 +1,265 @@ +# Firefox BiDi Realm Isolation — Debug Log & Fix Roadmap + +This document records the investigation into `Permission denied to access property "length"` +errors that prevent lorca bindings from working under Firefox, along with the current +state of each fix, known remaining issues, and the recommended next steps. + +--- + +## Background + +Firefox's WebDriver BiDi `script.addPreloadScript` runs each injected script in a +**sandbox realm** that is isolated from the page's normal JavaScript realm. This is +similar to how Firefox content scripts work in extensions. + +The key security rule is **one-way**: page-realm code **cannot** read properties (e.g. +`.length`, `.prototype`, `.call`) of objects that belong to the sandbox realm. The +reverse is allowed — sandbox-realm code can freely access page-realm objects. + +When the page-realm WebSocket fires its `onopen`/`onmessage` event, Firefox internally +accesses `.length` on the registered callback to determine the call arity. If that +callback is a sandbox-realm function, Firefox throws: + +``` +Permission denied to access property "length" +``` + +This kills the event handler silently — meaning `window.__lorcaOpen` never becomes +`true`, all binding calls pile up in `window.__lorcaQueue`, and the UI appears blank +because every startup async call hangs indefinitely. + +--- + +## Fixes Applied (in order) + +### Fix 1 — Remove `contexts` from `script.addPreloadScript` + +**File:** `firefox.go` → `injectScript` + +**Symptom:** App crashed after ~2 seconds. Firefox's BiDi implementation does not +support the optional `contexts` parameter added in a later spec revision. + +**Fix:** Removed `"contexts": []string{f.context}` from the `addPreloadScript` call. + +**Status:** ✅ Resolved. App no longer crashes immediately. + +--- + +### Fix 2 — Protocol guard in bootstrap + +**File:** `relay.go` → `bootstrapTemplate` + +**Symptom:** Preload script ran on `chrome://` error pages (neterror pages), generating +spurious cross-realm errors before the real app page loaded. + +**Fix:** Added a guard at the top of the bootstrap IIFE: + +```javascript +var _proto = window.location && window.location.protocol +if (_proto && _proto !== 'http:' && _proto !== 'https:' && _proto !== 'data:') { return } +``` + +**Status:** ✅ Resolved. No errors on error/neterror pages. + +--- + +### Fix 3 — Convert `onopen`, `onmessage`, `__lorcaRegister` to page-realm + +**File:** `relay.go` → `bootstrapTemplate` + +**Symptom:** Page-realm WebSocket could not call the `onopen`/`onmessage` handlers +because they were sandbox-realm closures. `window.__lorcaOpen` stayed `false` forever. +All binding calls queued up, promises never resolved, Vue app appeared blank/gray. + +**Fix:** Replaced all `function() {...}` handler definitions with `new window.Function(...)` +calls so the resulting function objects live in the page realm. Also replaced the +sandbox-realm `_register` closure with a page-realm `window.__lorcaRegister = new window.Function('name', ...)`. + +**Status:** ✅ Partially resolved. Page now renders (Vue mounts, UI skeleton is visible). +However, bindings still do not work — see remaining issue below. + +--- + +## Remaining Issue — Per-Binding Preload Scripts Cross-Realm Call + +### Symptom + +After Fix 3, ~40 `Permission denied to access property "length"` errors remain, one +per registered binding, reported at `127.0.0.1:PORT:1:XX` where the column varies +with the length of each binding name. + +There is also a persistent error at `:37:9` originating from the Vite bundle, whose +source is not yet identified. + +### Root Cause Hypothesis + +**Each call to `script.addPreloadScript` may create a separate sandbox realm.** + +lorca registers `N+1` preload scripts for Firefox: +1. The bootstrap (sets up WebSocket, `window.__lorcaRegister`, etc.) +2. One per binding: `() => { window.__lorcaRegister('bindingName') }` + +If Firefox assigns a distinct sandbox realm to each `addPreloadScript` call, then: +- Bootstrap runs in realm **S1** → sets `window.__lorcaRegister` (page-realm, via + `new window.Function`) +- Each per-binding script runs in realm **S2**, **S3**, … **SN** +- `window.__lorcaRegister` is a page-realm function, but when **S2** tries to call it, + Firefox checks `window.__lorcaRegister.length` through a cross-realm Xray wrapper → + `Permission denied` + +This is distinct from the original issue (where page → sandbox was blocked). Here the +access path is **sandbox → page function** through an Xray wrapper; Firefox may still +enforce property-access restrictions on that path. + +### Needs Verification + +Before implementing the fix, confirm via a minimal test whether: + +1. Firefox creates a **shared** sandbox for all `addPreloadScript` calls that omit the + `sandbox` parameter, or whether each call gets its own realm. +2. Whether adding `"sandbox": "lorca"` (an explicit shared name) to all + `addPreloadScript` calls makes them share a realm and resolves the issue. +3. Whether `script.evaluate` (used by `f.eval`) runs in **page realm** or in the + sandbox realm. If it runs in page realm, `f.eval("window.__lorcaRegister('name')")` + would call sandbox-realm `__lorcaRegister` from page realm, which would also fail. + +--- + +## Recommended Fix + +### Option A — Inline registration in each per-binding preload script (preferred) + +Instead of calling `window.__lorcaRegister('name')` from each per-binding preload +script (which may be a cross-realm call), generate the full binding inline so the +script contains no calls to functions from another realm. + +Concretely, change `injectScript` (or add a dedicated `injectBinding` method to the +`browserImpl` interface) so that for Firefox, each per-binding preload script becomes: + +```javascript +() => { + window['bindingName'] = new window.Function( + 'var args = Array.prototype.slice.call(arguments);' + + 'var seq = (window["bindingName"]._seq = (window["bindingName"]._seq || 0) + 1);' + + 'return new Promise(function(resolve, reject) {' + + ' window.__lorcaPending.set("bindingName:" + seq, {resolve: resolve, reject: reject});' + + ' window.__lorcaSend(JSON.stringify({name: "bindingName", seq: seq, args: args}));' + + '});' + ); + window['bindingName']._seq = 0; +} +``` + +The binding name is hardcoded into the string — no closure, no cross-realm call. +`window.__lorcaPending` and `window.__lorcaSend` are page-realm objects accessed via +`window.*`, which is always allowed from sandbox realm. + +**Implementation path:** +- Add `injectBinding(name string) error` to the `browserImpl` interface in `browser.go` +- Chrome's implementation: call `injectScript(fmt.Sprintf("window.__lorcaRegister('%s')", name))` + (unchanged behavior) +- Firefox's implementation: generate the inline preload script above and also call + `f.eval(inlineScript)` for the current page (same as now but with inline code) +- Update `ui.go` `Bind` to call `u.browser.injectBinding(name)` instead of + `u.browser.injectScript(fmt.Sprintf("window.__lorcaRegister('%s')", name))` + +Also: remove `f.eval(js)` from `injectScript` for Firefox, or at minimum stop using +`injectScript` for bindings. The `eval` path on the current page matters for bindings +registered before the app page loads; replacing it with an inline eval that also avoids +calling `__lorcaRegister` is safer. + +### Option B — Shared sandbox name on all `addPreloadScript` calls + +Add `"sandbox": "lorca-relay"` to every `script.addPreloadScript` call. If Firefox +shares the realm for scripts with the same sandbox name, all preload scripts run in the +same realm and calling `window.__lorcaRegister` is a same-realm call. + +This is simpler code but depends on unverified Firefox behavior. Test first. + +### Option C — Remove per-binding preload scripts; rely entirely on relay WebSocket + +Remove the `addPreloadScript` call from `injectScript` for bindings. All binding +registration is handled by the relay WebSocket: when the page loads and the bootstrap's +WebSocket connects, `handleClient` replays all registered bindings as "register" +messages, and the page-realm `onmessage` handler processes them. + +The risk is **timing**: if Vue's app code calls a binding synchronously before the +WebSocket "register" messages have been processed, the call will fail. To mitigate, +Vue can defer binding calls until the relay connection is confirmed (e.g. by awaiting a +`__lorcaReady` promise that resolves in `onopen`). + +This option requires a small protocol change on the EggLedger side as well. + +--- + +## Current State of `relay.go` Bootstrap + +```javascript +(function() { + var _proto = window.location && window.location.protocol + if (_proto && _proto !== 'http:' && _proto !== 'https:' && _proto !== 'data:') { return } + window.__lorcaWS = new window.WebSocket('ws://127.0.0.1:__RELAY_PORT__') + window.__lorcaPending = new window.Map() + window.__lorcaQueue = new window.Array() + window.__lorcaOpen = false + window.__lorcaSend = new window.Function('msg', + 'if (window.__lorcaOpen) { window.__lorcaWS.send(msg) }' + + 'else { window.__lorcaQueue.push(msg) }') + window.__lorcaWS.onopen = new window.Function( + 'window.__lorcaOpen = true;' + + 'for (var i = 0; i < window.__lorcaQueue.length; i++) { window.__lorcaWS.send(window.__lorcaQueue[i]) }' + + 'window.__lorcaQueue = new window.Array()') + window.__lorcaRegister = new window.Function('name', + 'window[name] = function() {' + + ' var args = Array.prototype.slice.call(arguments);' + + ' var seq = (window[name]._seq = (window[name]._seq || 0) + 1);' + + ' return new Promise(function(resolve, reject) {' + + ' window.__lorcaPending.set(name + \':\' + seq, {resolve: resolve, reject: reject});' + + ' window.__lorcaSend(JSON.stringify({name: name, seq: seq, args: args}));' + + ' });' + + '};' + + 'window[name]._seq = 0;') + window.__lorcaWS.onmessage = new window.Function('e', + 'var msg = window.JSON.parse(e.data);' + + 'if (msg.type === \'register\') {' + + ' window.__lorcaRegister(msg.name);' + + '} else if (msg.type === \'result\') {' + + ' var cb = window.__lorcaPending.get(msg.name + \':\' + msg.seq);' + + ' if (cb) {' + + ' if (msg.error) { cb.reject(new window.Error(msg.error)); } else { cb.resolve(msg.result); }' + + ' window.__lorcaPending.delete(msg.name + \':\' + msg.seq);' + + ' }' + + '}') +})() +``` + +--- + +## Files to Change + +| File | What to change | +|---|---| +| `relay.go` | `bootstrapTemplate` — already updated (Fix 3 above) | +| `browser.go` | Add `injectBinding(name string) error` to the `browserImpl` interface | +| `ui.go` | `Bind` — call `u.browser.injectBinding(name)` instead of `u.browser.injectScript(...)` | +| `chrome.go` | Implement `injectBinding` as a thin wrapper around `injectScript` (no change in behavior) | +| `firefox.go` | Implement `injectBinding` with inline page-realm function generation; remove `f.eval` cross-realm call for the current page | + +--- + +## Open Questions + +1. Does `script.evaluate` (used by `f.eval`) run in page realm or sandbox realm when + called with `target: {context: id}` and no `sandbox` field? If sandbox realm, the + eval path also needs fixing. + +2. What is at line 37, column 9 of the compiled Vite bundle that triggers "Permission + denied to access property 'length'"? This error is constant across all bootstrap + changes, so it does not originate from lorca's injected scripts. It may be Vue's + reactivity system or a bundled library inspecting `window` properties. + +3. Is the `window.__lorcaRegister` path inside `onmessage` (which IS page-realm after + Fix 3) actually working? If the relay's "register" messages arrive and are processed, + bindings set up that way should work even if per-binding preload scripts fail. A + quick test: add a delay before the first Vue binding call and check if relay + messages have time to register bindings. diff --git a/firefox.go b/firefox.go index 105e998..9c63a48 100644 --- a/firefox.go +++ b/firefox.go @@ -517,7 +517,6 @@ func (f *firefox) load(url string) error { func (f *firefox) injectScript(js string) error { _, err := f.send("script.addPreloadScript", h{ "functionDeclaration": "() => { " + js + " }", - "contexts": []string{f.context}, }) if err != nil { return err @@ -526,6 +525,45 @@ func (f *firefox) injectScript(js string) error { return err } +// firefoxBindingScript returns the raw JS that creates window[name] as a +// binding function. The code uses only single-quoted strings so it can be +// safely embedded inside window.eval("...") where the outer delimiter is a +// double quote. No double quotes appear in the returned string. +// +// new window.Function() is NOT used: even with the page-realm constructor, the +// resulting function runs in the sandbox realm (realm is determined by call +// site). window.eval (used in injectBinding) evaluates code in page realm, +// which is where the function must live so that page code can call it without +// hitting "Permission denied to access property 'length'". +func firefoxBindingScript(name string) string { + body := `var args = Array.prototype.slice.call(arguments); ` + + `var seq = (window['` + name + `']._seq = (window['` + name + `']._seq || 0) + 1); ` + + `return new Promise(function(resolve, reject) { ` + + `window.__lorcaPending.set('` + name + `:' + seq, {resolve: resolve, reject: reject}); ` + + `window.__lorcaSend(JSON.stringify({name: '` + name + `', seq: seq, args: args})); ` + + `});` + return `window['` + name + `'] = function() { ` + body + ` }; window['` + name + `']._seq = 0;` +} + +func (f *firefox) injectBinding(name string) error { + code := firefoxBindingScript(name) + // Preload runs in sandbox realm. window.eval("...") is the page's own eval + // (accessed via Xray); code it evaluates runs in page realm, so the binding + // function lands in page realm and page code can call it without Permission + // Denied. code contains only single-quoted strings, safe inside eval("..."). + preload := `window.eval("` + code + `")` + _, err := f.send("script.addPreloadScript", h{ + "functionDeclaration": "() => { " + preload + " }", + }) + if err != nil { + return err + } + // f.eval (script.evaluate with target:{context}) already runs in page realm; + // pass the raw code directly without an extra window.eval wrapper. + _, err = f.eval(code) + return err +} + func (f *firefox) setBounds(b Bounds) error { if b.Left != 0 { log.Printf("lorca/firefox: SetBounds Left=%d not supported", b.Left) diff --git a/firefox_test.go b/firefox_test.go index d83284b..4d869f6 100644 --- a/firefox_test.go +++ b/firefox_test.go @@ -2,7 +2,9 @@ package lorca import ( "encoding/json" + "errors" "os" + "strings" "testing" "time" ) @@ -180,3 +182,258 @@ func TestFirefoxSetBounds(t *testing.T) { t.Fatalf("expected 1024x768, got %dx%d", b.Width, b.Height) } } + +// --------------------------------------------------------------------------- +// Pure-Go structural tests — no browser required +// --------------------------------------------------------------------------- + +// TestFirefoxBindingScriptInvariants checks properties of the JS produced by +// firefoxBindingScript without starting a browser. Three invariants must hold: +// +// 1. No double quotes in the output — the code is embedded as the argument to +// window.eval("...") inside the preload functionDeclaration string; a double +// quote would close the outer JS string and produce a syntax error. +// +// 2. Binding is created as a plain function expression, not via new Function — +// new Function called from the preload sandbox produces a sandbox-realm +// function, which causes "Permission denied to access property 'length'" +// when page code (Vue, WebSocket internals) tries to call it. +// +// 3. The function body references window.__lorcaPending and window.__lorcaSend, +// the page-realm state set up by the bootstrap, so calls are routed through +// the relay. +func TestFirefoxBindingScriptInvariants(t *testing.T) { + for _, name := range []string{"add", "getPlayerData", "myBinding123", "x"} { + t.Run(name, func(t *testing.T) { + code := firefoxBindingScript(name) + + if strings.Contains(code, `"`) { + t.Errorf("output contains double quotes; must be safely embeddable "+ + "inside window.eval(\"...\") without escaping:\n%s", code) + } + + want := "window['" + name + "'] = function()" + if !strings.Contains(code, want) { + t.Errorf("expected pattern %q in output:\n%s", want, code) + } + + if strings.Contains(code, "new window.Function") || strings.Contains(code, "new Function(") { + t.Errorf("output must not use new Function (creates sandbox-realm function):\n%s", code) + } + + if !strings.Contains(code, "window.__lorcaPending") { + t.Errorf("output does not reference window.__lorcaPending:\n%s", code) + } + if !strings.Contains(code, "window.__lorcaSend") { + t.Errorf("output does not reference window.__lorcaSend:\n%s", code) + } + + // Wrapping in window.eval("...") must add exactly two double quotes — + // the delimiters — and no others from the code itself. + wrapped := `window.eval("` + code + `")` + if n := strings.Count(wrapped, `"`); n != 2 { + t.Errorf("wrapped code has %d double quotes, want 2 (the window.eval delimiters only)", n) + } + }) + } +} + +// --------------------------------------------------------------------------- +// Firefox integration tests — require LORCAFIREFOX env var +// --------------------------------------------------------------------------- + +// TestFirefoxBootstrapFunctionsPageRealm verifies that the bootstrap's +// window.eval approach creates page-realm functions. It checks that .length is +// readable on each handler from page-realm code (script.evaluate). When +// functions are sandbox-realm — the old new window.Function approach — +// Firefox's Xray wrapper throws "Permission denied to access property 'length'" +// whenever page code inspects them, which is exactly what broke EggLedger. +func TestFirefoxBootstrapFunctionsPageRealm(t *testing.T) { + binary := skipIfNoFirefox(t) + r, err := newRelay() + if err != nil { + t.Fatal(err) + } + defer r.close() + + f, err := newFirefoxWithArgs(binary, "--headless", "--profile", t.TempDir()) + if err != nil { + t.Fatal(err) + } + defer func() { f.kill(); <-f.done() }() + + if err := f.injectScript(r.bootstrapScript()); err != nil { + t.Fatal(err) + } + // Navigate to a data: URL so the bootstrap's protocol guard allows the script to run. + if err := f.load("data:text/html,"); err != nil { + t.Fatal(err) + } + + for _, c := range []struct { + expr string + want string + desc string + }{ + {`typeof window.__lorcaWS.onopen`, `"function"`, "onopen must be set"}, + {`typeof window.__lorcaWS.onmessage`, `"function"`, "onmessage must be set"}, + {`typeof window.__lorcaRegister`, `"function"`, "__lorcaRegister must be set"}, + {`typeof window.__lorcaSend`, `"function"`, "__lorcaSend must be set"}, + // .length access: page-realm functions expose it; sandbox-realm functions + // throw "Permission denied" when page code accesses .length via Xray. + {`typeof window.__lorcaWS.onopen.length`, `"number"`, "onopen.length readable (page-realm)"}, + {`typeof window.__lorcaWS.onmessage.length`, `"number"`, "onmessage.length readable (page-realm)"}, + {`typeof window.__lorcaRegister.length`, `"number"`, "__lorcaRegister.length readable (page-realm)"}, + {`typeof window.__lorcaSend.length`, `"number"`, "__lorcaSend.length readable (page-realm)"}, + } { + result, err := f.eval(c.expr) + if err != nil { + t.Fatalf("%s: eval(%q) error (Permission Denied indicates sandbox-realm function): %v", + c.desc, c.expr, err) + } + if string(result) != c.want { + t.Fatalf("%s: eval(%q) = %s, want %s", c.desc, c.expr, result, c.want) + } + } +} + +// TestFirefoxBindingScriptPageRealm verifies that injectBinding creates +// window['name'] as a page-realm function. The .length check mirrors what +// Firefox's WebSocket event dispatch and Vue's call sites do before invoking +// the function; sandbox-realm functions throw "Permission denied" at that point. +func TestFirefoxBindingScriptPageRealm(t *testing.T) { + binary := skipIfNoFirefox(t) + r, err := newRelay() + if err != nil { + t.Fatal(err) + } + defer r.close() + + f, err := newFirefoxWithArgs(binary, "--headless", "--profile", t.TempDir()) + if err != nil { + t.Fatal(err) + } + defer func() { f.kill(); <-f.done() }() + + if err := f.injectScript(r.bootstrapScript()); err != nil { + t.Fatal(err) + } + if err := f.injectBinding("testBinding"); err != nil { + t.Fatal(err) + } + if err := f.load("data:text/html,"); err != nil { + t.Fatal(err) + } + + result, err := f.eval(`typeof window.testBinding.length`) + if err != nil { + t.Fatalf("window.testBinding.length threw (indicates sandbox-realm function, not page-realm): %v", err) + } + if string(result) != `"number"` { + t.Fatalf("expected testBinding.length to be a number, got typeof=%s", result) + } +} + +// TestFirefoxBindingBasic is an end-to-end test for a single Go→JS→Go binding +// call under Firefox. This is the scenario that silently hangs when bindings +// land in sandbox realm: the JS Promise never resolves, Eval never returns. +func TestFirefoxBindingBasic(t *testing.T) { + binary := skipIfNoFirefox(t) + ui, err := NewWithBrowser("data:text/html,", t.TempDir(), + binary, 480, 320, BrowserFirefox, "--headless") + if err != nil { + t.Fatal(err) + } + defer ui.Close() + + if err := ui.Bind("add", func(a, b int) int { return a + b }); err != nil { + t.Fatal(err) + } + v := ui.Eval(`add(2, 3)`) + if v.Err() != nil { + t.Fatalf("binding call failed: %v", v.Err()) + } + if v.Int() != 5 { + t.Fatalf("expected 5, got %d", v.Int()) + } +} + +// TestFirefoxBindingMultiple verifies that several bindings registered on the +// same UI instance all work — each gets its own preload script and its own +// entry in the relay dispatch table. +func TestFirefoxBindingMultiple(t *testing.T) { + binary := skipIfNoFirefox(t) + ui, err := NewWithBrowser("data:text/html,", t.TempDir(), + binary, 480, 320, BrowserFirefox, "--headless") + if err != nil { + t.Fatal(err) + } + defer ui.Close() + + if err := ui.Bind("double", func(n int) int { return n * 2 }); err != nil { + t.Fatal(err) + } + if err := ui.Bind("sum", func(a, b, c int) int { return a + b + c }); err != nil { + t.Fatal(err) + } + if err := ui.Bind("neg", func(n int) int { return -n }); err != nil { + t.Fatal(err) + } + + if v := ui.Eval(`double(7)`); v.Err() != nil || v.Int() != 14 { + t.Fatalf("double(7): got %d, err %v", v.Int(), v.Err()) + } + if v := ui.Eval(`sum(1, 2, 3)`); v.Err() != nil || v.Int() != 6 { + t.Fatalf("sum(1,2,3): got %d, err %v", v.Int(), v.Err()) + } + if v := ui.Eval(`neg(5)`); v.Err() != nil || v.Int() != -5 { + t.Fatalf("neg(5): got %d, err %v", v.Int(), v.Err()) + } +} + +// TestFirefoxBindingAfterNavigation verifies that bindings registered before a +// page navigation are re-established on the new document via the per-binding +// preload script, without needing another Bind call from Go. +func TestFirefoxBindingAfterNavigation(t *testing.T) { + binary := skipIfNoFirefox(t) + ui, err := NewWithBrowser("data:text/html,page1", t.TempDir(), + binary, 480, 320, BrowserFirefox, "--headless") + if err != nil { + t.Fatal(err) + } + defer ui.Close() + + if err := ui.Bind("mul", func(a, b int) int { return a * b }); err != nil { + t.Fatal(err) + } + if v := ui.Eval(`mul(3, 4)`); v.Err() != nil || v.Int() != 12 { + t.Fatalf("before nav: mul(3,4) = %d, err %v", v.Int(), v.Err()) + } + + if err := ui.Load("data:text/html,page2"); err != nil { + t.Fatal(err) + } + + if v := ui.Eval(`mul(5, 6)`); v.Err() != nil || v.Int() != 30 { + t.Fatalf("after nav: mul(5,6) = %d, err %v", v.Int(), v.Err()) + } +} + +// TestFirefoxBindingError verifies that when a Go binding returns an error the +// JS Promise is rejected and ui.Eval surfaces that error. +func TestFirefoxBindingError(t *testing.T) { + binary := skipIfNoFirefox(t) + ui, err := NewWithBrowser("data:text/html,", t.TempDir(), + binary, 480, 320, BrowserFirefox, "--headless") + if err != nil { + t.Fatal(err) + } + defer ui.Close() + + if err := ui.Bind("fail", func() error { return errors.New("binding error") }); err != nil { + t.Fatal(err) + } + if v := ui.Eval(`fail()`); v.Err() == nil { + t.Fatal("expected error from failing binding, got nil") + } +} diff --git a/relay.go b/relay.go index 8b5eca8..b9dabe4 100644 --- a/relay.go +++ b/relay.go @@ -11,42 +11,35 @@ import ( "golang.org/x/net/websocket" ) +// bootstrapTemplate is injected as both a preload script (for future pages) +// and run immediately via script.evaluate (for the current page). +// +// Firefox's script.addPreloadScript runs in a sandbox realm isolated from the +// page realm. Assigning sandbox-realm functions to window.* properties causes +// "Permission denied to access property 'length'" when page code (e.g. the +// WebSocket internals or Vue) tries to introspect those functions via Xray. +// +// new window.Function(...) does NOT fix this — the resulting function still +// belongs to the sandbox realm because Function realm is determined by the +// call site, not the constructor's origin. +// +// window.eval("...") DOES fix it: window.eval is the page's own eval (accessed +// via Xray from sandbox), and code it evaluates runs in the page realm. All +// function assignments are therefore done through window.eval so the resulting +// functions are page-realm objects. Primitive and object assignments +// (WebSocket, Map, Array, boolean) can stay in sandbox because those values +// are created from page-realm constructors and are accessible from both sides. const bootstrapTemplate = `(function() { - const _ws = new WebSocket('ws://127.0.0.1:__RELAY_PORT__') - const _pending = new Map() - var _sendQueue = [] - var _open = false - function _send(msg) { - if (_open) { _ws.send(msg) } else { _sendQueue.push(msg) } - } - _ws.onopen = function() { - _open = true - for (var i = 0; i < _sendQueue.length; i++) { _ws.send(_sendQueue[i]) } - _sendQueue = [] - } - function _register(name) { - window[name] = function(...args) { - return new Promise(function(resolve, reject) { - const seq = (window[name]._seq = (window[name]._seq || 0) + 1) - _pending.set(name + ':' + seq, {resolve: resolve, reject: reject}) - _send(JSON.stringify({name: name, seq: seq, args: args})) - }) - } - window[name]._seq = 0 - } - _ws.onmessage = function(e) { - const msg = JSON.parse(e.data) - if (msg.type === 'register') { - _register(msg.name) - } else if (msg.type === 'result') { - const cb = _pending.get(msg.name + ':' + msg.seq) - if (cb) { - if (msg.error) { cb.reject(new Error(msg.error)) } else { cb.resolve(msg.result) } - _pending.delete(msg.name + ':' + msg.seq) - } - } - } - window.__lorcaRegister = _register + var _proto = window.location && window.location.protocol + if (_proto && _proto !== 'http:' && _proto !== 'https:' && _proto !== 'data:') { return } + window.__lorcaWS = new window.WebSocket('ws://127.0.0.1:__RELAY_PORT__') + window.__lorcaPending = new window.Map() + window.__lorcaQueue = new window.Array() + window.__lorcaOpen = false + window.eval("window.__lorcaSend = function(msg) { if (window.__lorcaOpen) { window.__lorcaWS.send(msg) } else { window.__lorcaQueue.push(msg) } }") + window.eval("window.__lorcaWS.onopen = function() { window.__lorcaOpen = true; for (var i = 0; i < window.__lorcaQueue.length; i++) { window.__lorcaWS.send(window.__lorcaQueue[i]) } window.__lorcaQueue = [] }") + window.eval("window.__lorcaRegister = function(name) { window[name] = function() { var args = Array.prototype.slice.call(arguments); var seq = (window[name]._seq = (window[name]._seq || 0) + 1); return new Promise(function(resolve, reject) { window.__lorcaPending.set(name + ':' + seq, {resolve: resolve, reject: reject}); window.__lorcaSend(JSON.stringify({name: name, seq: seq, args: args})); }); }; window[name]._seq = 0; }") + window.eval("window.__lorcaWS.onmessage = function(e) { var msg = JSON.parse(e.data); if (msg.type === 'register') { window.__lorcaRegister(msg.name); } else if (msg.type === 'result') { var cb = window.__lorcaPending.get(msg.name + ':' + msg.seq); if (cb) { if (msg.error) { cb.reject(new Error(msg.error)); } else { cb.resolve(msg.result); } window.__lorcaPending.delete(msg.name + ':' + msg.seq); } } }") })()` type relay struct { diff --git a/relay_test.go b/relay_test.go index 0fdc2c8..2bc2684 100644 --- a/relay_test.go +++ b/relay_test.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "strings" "sync/atomic" "testing" "time" @@ -235,3 +236,52 @@ func TestRelayRebind(t *testing.T) { t.Fatalf("expected called=2, got %d", v) } } + +// TestBootstrapNoSandboxRealmFunctions guards against regressing to +// new window.Function. Under Firefox's BiDi preload sandbox, new window.Function +// creates a function whose realm is determined by the call site (the sandbox), +// not by the constructor's origin. Page code then throws "Permission denied to +// access property 'length'" when it inspects those sandbox-realm functions via +// Firefox's Xray wrapper — breaking WebSocket event dispatch and binding calls. +// window.eval("...") is the correct fix: it evaluates code in the page realm. +func TestBootstrapNoSandboxRealmFunctions(t *testing.T) { + if strings.Contains(bootstrapTemplate, "new window.Function") { + t.Error("bootstrapTemplate must not use new window.Function: functions created " + + "this way run in the preload sandbox realm, not page realm. " + + "Use window.eval(\"...\") instead.") + } + if strings.Contains(bootstrapTemplate, "new Function(") { + t.Error("bootstrapTemplate must not use bare new Function(...): same sandbox-realm issue. " + + "Use window.eval(\"...\") instead.") + } +} + +// TestBootstrapEvalStringsQuoteSafe verifies that every window.eval("...") call +// in the bootstrap has no embedded double quotes in its argument. A double quote +// inside the argument would terminate the JS string literal early, producing a +// syntax error when Firefox compiles the preload function declaration. +func TestBootstrapEvalStringsQuoteSafe(t *testing.T) { + found := 0 + for i, line := range strings.Split(bootstrapTemplate, "\n") { + trimmed := strings.TrimSpace(line) + if !strings.HasPrefix(trimmed, `window.eval("`) { + continue + } + found++ + if !strings.HasSuffix(trimmed, `")`) { + t.Errorf("line %d: window.eval call does not end with \")\"", i+1) + continue + } + // Strip window.eval(" prefix and ") suffix to get the argument. + inner := trimmed[len(`window.eval("`): len(trimmed)-2] + if strings.Contains(inner, `"`) { + t.Errorf("line %d: window.eval argument contains an embedded double quote "+ + "(would break the JS string literal in the preload function declaration):\n%s", + i+1, trimmed) + } + } + if found == 0 { + t.Error("no window.eval calls found in bootstrapTemplate; " + + "the bootstrap must use window.eval for all function assignments") + } +} diff --git a/ui.go b/ui.go index 74e1b57..9d11f0e 100644 --- a/ui.go +++ b/ui.go @@ -229,7 +229,7 @@ func (u *ui) Bind(name string, f interface{}) error { // bound functions are available synchronously before any page JS runs, // avoiding the race where a page mounts before the relay WebSocket has // delivered its register messages. - return u.browser.injectScript(fmt.Sprintf(`window.__lorcaRegister('%s')`, name)) + return u.browser.injectBinding(name) } func (u *ui) Eval(js string) Value { From 5a601bd7e014a9cacb41fdeac2bbab944a667126 Mon Sep 17 00:00:00 2001 From: DavidArthurCole Date: Sun, 12 Apr 2026 13:35:58 -0400 Subject: [PATCH 23/42] Add more tests for firefox, fixes for bindings, modernize github CI, add vendors --- .github/workflows/ci.yml | 38 +- .gitignore | 1 + chrome.go | 2 +- docs/firefox-realm-isolation.md | 265 -------- firefox.go | 206 +++++-- firefox_test.go | 8 +- relay.go | 64 +- relay_test.go | 38 +- vendor/golang.org/x/net/LICENSE | 27 + vendor/golang.org/x/net/PATENTS | 22 + vendor/golang.org/x/net/websocket/client.go | 139 +++++ vendor/golang.org/x/net/websocket/dial.go | 29 + vendor/golang.org/x/net/websocket/hybi.go | 583 ++++++++++++++++++ vendor/golang.org/x/net/websocket/server.go | 113 ++++ .../golang.org/x/net/websocket/websocket.go | 449 ++++++++++++++ vendor/modules.txt | 3 + 16 files changed, 1611 insertions(+), 376 deletions(-) delete mode 100644 docs/firefox-realm-isolation.md create mode 100644 vendor/golang.org/x/net/LICENSE create mode 100644 vendor/golang.org/x/net/PATENTS create mode 100644 vendor/golang.org/x/net/websocket/client.go create mode 100644 vendor/golang.org/x/net/websocket/dial.go create mode 100644 vendor/golang.org/x/net/websocket/hybi.go create mode 100644 vendor/golang.org/x/net/websocket/server.go create mode 100644 vendor/golang.org/x/net/websocket/websocket.go create mode 100644 vendor/modules.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 10f8899..4f84666 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,24 +2,30 @@ name: CI Pipeline on: [push, pull_request] jobs: - build: + test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - name: Install Chrome - run: | - sudo apt-get update - sudo apt-get install -yqq google-chrome-stable - - name: Install Go - uses: actions/setup-go@v2 + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 with: - go-version: '1.16' + go-version: stable + cache: true + cache-dependency-path: go.sum + + - name: Install Chrome + uses: browser-actions/setup-chrome@v1 + id: setup-chrome + + - name: Install Firefox + uses: browser-actions/setup-firefox@v1 + id: setup-firefox + + - name: Vet + run: go vet ./... + - name: Run tests - run: go test -v -race ./... - - name: Build examples env: - CGO_ENABLED: 0 - run: | - go build -o example-hello ./examples/hello - go build -o example-stopwatch ./examples/stopwatch - go build -o example-counter ./examples/counter + LORCACHROME: ${{ steps.setup-chrome.outputs.chrome-path }} + LORCAFIREFOX: ${{ steps.setup-firefox.outputs.firefox-path }} + run: go test -v -race -count=1 ./... diff --git a/.gitignore b/.gitignore index 2ceb2e7..8a4da27 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ example/Example.app !/.idea/inspectionProfiles/Project_Default.xml !/.idea/dictionaries/*.xml !/.idea/go.xml +/docs \ No newline at end of file diff --git a/chrome.go b/chrome.go index 48024fd..7fed579 100644 --- a/chrome.go +++ b/chrome.go @@ -496,7 +496,7 @@ func (c *chrome) injectScript(js string) error { } func (c *chrome) injectBinding(name string) error { - return c.injectScript(fmt.Sprintf(`window.__lorcaRegister('%s')`, name)) + return c.injectScript(bindingScript(name)) } func contains(arr []string, x string) bool { diff --git a/docs/firefox-realm-isolation.md b/docs/firefox-realm-isolation.md deleted file mode 100644 index 7f24c2f..0000000 --- a/docs/firefox-realm-isolation.md +++ /dev/null @@ -1,265 +0,0 @@ -# Firefox BiDi Realm Isolation — Debug Log & Fix Roadmap - -This document records the investigation into `Permission denied to access property "length"` -errors that prevent lorca bindings from working under Firefox, along with the current -state of each fix, known remaining issues, and the recommended next steps. - ---- - -## Background - -Firefox's WebDriver BiDi `script.addPreloadScript` runs each injected script in a -**sandbox realm** that is isolated from the page's normal JavaScript realm. This is -similar to how Firefox content scripts work in extensions. - -The key security rule is **one-way**: page-realm code **cannot** read properties (e.g. -`.length`, `.prototype`, `.call`) of objects that belong to the sandbox realm. The -reverse is allowed — sandbox-realm code can freely access page-realm objects. - -When the page-realm WebSocket fires its `onopen`/`onmessage` event, Firefox internally -accesses `.length` on the registered callback to determine the call arity. If that -callback is a sandbox-realm function, Firefox throws: - -``` -Permission denied to access property "length" -``` - -This kills the event handler silently — meaning `window.__lorcaOpen` never becomes -`true`, all binding calls pile up in `window.__lorcaQueue`, and the UI appears blank -because every startup async call hangs indefinitely. - ---- - -## Fixes Applied (in order) - -### Fix 1 — Remove `contexts` from `script.addPreloadScript` - -**File:** `firefox.go` → `injectScript` - -**Symptom:** App crashed after ~2 seconds. Firefox's BiDi implementation does not -support the optional `contexts` parameter added in a later spec revision. - -**Fix:** Removed `"contexts": []string{f.context}` from the `addPreloadScript` call. - -**Status:** ✅ Resolved. App no longer crashes immediately. - ---- - -### Fix 2 — Protocol guard in bootstrap - -**File:** `relay.go` → `bootstrapTemplate` - -**Symptom:** Preload script ran on `chrome://` error pages (neterror pages), generating -spurious cross-realm errors before the real app page loaded. - -**Fix:** Added a guard at the top of the bootstrap IIFE: - -```javascript -var _proto = window.location && window.location.protocol -if (_proto && _proto !== 'http:' && _proto !== 'https:' && _proto !== 'data:') { return } -``` - -**Status:** ✅ Resolved. No errors on error/neterror pages. - ---- - -### Fix 3 — Convert `onopen`, `onmessage`, `__lorcaRegister` to page-realm - -**File:** `relay.go` → `bootstrapTemplate` - -**Symptom:** Page-realm WebSocket could not call the `onopen`/`onmessage` handlers -because they were sandbox-realm closures. `window.__lorcaOpen` stayed `false` forever. -All binding calls queued up, promises never resolved, Vue app appeared blank/gray. - -**Fix:** Replaced all `function() {...}` handler definitions with `new window.Function(...)` -calls so the resulting function objects live in the page realm. Also replaced the -sandbox-realm `_register` closure with a page-realm `window.__lorcaRegister = new window.Function('name', ...)`. - -**Status:** ✅ Partially resolved. Page now renders (Vue mounts, UI skeleton is visible). -However, bindings still do not work — see remaining issue below. - ---- - -## Remaining Issue — Per-Binding Preload Scripts Cross-Realm Call - -### Symptom - -After Fix 3, ~40 `Permission denied to access property "length"` errors remain, one -per registered binding, reported at `127.0.0.1:PORT:1:XX` where the column varies -with the length of each binding name. - -There is also a persistent error at `:37:9` originating from the Vite bundle, whose -source is not yet identified. - -### Root Cause Hypothesis - -**Each call to `script.addPreloadScript` may create a separate sandbox realm.** - -lorca registers `N+1` preload scripts for Firefox: -1. The bootstrap (sets up WebSocket, `window.__lorcaRegister`, etc.) -2. One per binding: `() => { window.__lorcaRegister('bindingName') }` - -If Firefox assigns a distinct sandbox realm to each `addPreloadScript` call, then: -- Bootstrap runs in realm **S1** → sets `window.__lorcaRegister` (page-realm, via - `new window.Function`) -- Each per-binding script runs in realm **S2**, **S3**, … **SN** -- `window.__lorcaRegister` is a page-realm function, but when **S2** tries to call it, - Firefox checks `window.__lorcaRegister.length` through a cross-realm Xray wrapper → - `Permission denied` - -This is distinct from the original issue (where page → sandbox was blocked). Here the -access path is **sandbox → page function** through an Xray wrapper; Firefox may still -enforce property-access restrictions on that path. - -### Needs Verification - -Before implementing the fix, confirm via a minimal test whether: - -1. Firefox creates a **shared** sandbox for all `addPreloadScript` calls that omit the - `sandbox` parameter, or whether each call gets its own realm. -2. Whether adding `"sandbox": "lorca"` (an explicit shared name) to all - `addPreloadScript` calls makes them share a realm and resolves the issue. -3. Whether `script.evaluate` (used by `f.eval`) runs in **page realm** or in the - sandbox realm. If it runs in page realm, `f.eval("window.__lorcaRegister('name')")` - would call sandbox-realm `__lorcaRegister` from page realm, which would also fail. - ---- - -## Recommended Fix - -### Option A — Inline registration in each per-binding preload script (preferred) - -Instead of calling `window.__lorcaRegister('name')` from each per-binding preload -script (which may be a cross-realm call), generate the full binding inline so the -script contains no calls to functions from another realm. - -Concretely, change `injectScript` (or add a dedicated `injectBinding` method to the -`browserImpl` interface) so that for Firefox, each per-binding preload script becomes: - -```javascript -() => { - window['bindingName'] = new window.Function( - 'var args = Array.prototype.slice.call(arguments);' + - 'var seq = (window["bindingName"]._seq = (window["bindingName"]._seq || 0) + 1);' + - 'return new Promise(function(resolve, reject) {' + - ' window.__lorcaPending.set("bindingName:" + seq, {resolve: resolve, reject: reject});' + - ' window.__lorcaSend(JSON.stringify({name: "bindingName", seq: seq, args: args}));' + - '});' - ); - window['bindingName']._seq = 0; -} -``` - -The binding name is hardcoded into the string — no closure, no cross-realm call. -`window.__lorcaPending` and `window.__lorcaSend` are page-realm objects accessed via -`window.*`, which is always allowed from sandbox realm. - -**Implementation path:** -- Add `injectBinding(name string) error` to the `browserImpl` interface in `browser.go` -- Chrome's implementation: call `injectScript(fmt.Sprintf("window.__lorcaRegister('%s')", name))` - (unchanged behavior) -- Firefox's implementation: generate the inline preload script above and also call - `f.eval(inlineScript)` for the current page (same as now but with inline code) -- Update `ui.go` `Bind` to call `u.browser.injectBinding(name)` instead of - `u.browser.injectScript(fmt.Sprintf("window.__lorcaRegister('%s')", name))` - -Also: remove `f.eval(js)` from `injectScript` for Firefox, or at minimum stop using -`injectScript` for bindings. The `eval` path on the current page matters for bindings -registered before the app page loads; replacing it with an inline eval that also avoids -calling `__lorcaRegister` is safer. - -### Option B — Shared sandbox name on all `addPreloadScript` calls - -Add `"sandbox": "lorca-relay"` to every `script.addPreloadScript` call. If Firefox -shares the realm for scripts with the same sandbox name, all preload scripts run in the -same realm and calling `window.__lorcaRegister` is a same-realm call. - -This is simpler code but depends on unverified Firefox behavior. Test first. - -### Option C — Remove per-binding preload scripts; rely entirely on relay WebSocket - -Remove the `addPreloadScript` call from `injectScript` for bindings. All binding -registration is handled by the relay WebSocket: when the page loads and the bootstrap's -WebSocket connects, `handleClient` replays all registered bindings as "register" -messages, and the page-realm `onmessage` handler processes them. - -The risk is **timing**: if Vue's app code calls a binding synchronously before the -WebSocket "register" messages have been processed, the call will fail. To mitigate, -Vue can defer binding calls until the relay connection is confirmed (e.g. by awaiting a -`__lorcaReady` promise that resolves in `onopen`). - -This option requires a small protocol change on the EggLedger side as well. - ---- - -## Current State of `relay.go` Bootstrap - -```javascript -(function() { - var _proto = window.location && window.location.protocol - if (_proto && _proto !== 'http:' && _proto !== 'https:' && _proto !== 'data:') { return } - window.__lorcaWS = new window.WebSocket('ws://127.0.0.1:__RELAY_PORT__') - window.__lorcaPending = new window.Map() - window.__lorcaQueue = new window.Array() - window.__lorcaOpen = false - window.__lorcaSend = new window.Function('msg', - 'if (window.__lorcaOpen) { window.__lorcaWS.send(msg) }' + - 'else { window.__lorcaQueue.push(msg) }') - window.__lorcaWS.onopen = new window.Function( - 'window.__lorcaOpen = true;' + - 'for (var i = 0; i < window.__lorcaQueue.length; i++) { window.__lorcaWS.send(window.__lorcaQueue[i]) }' + - 'window.__lorcaQueue = new window.Array()') - window.__lorcaRegister = new window.Function('name', - 'window[name] = function() {' + - ' var args = Array.prototype.slice.call(arguments);' + - ' var seq = (window[name]._seq = (window[name]._seq || 0) + 1);' + - ' return new Promise(function(resolve, reject) {' + - ' window.__lorcaPending.set(name + \':\' + seq, {resolve: resolve, reject: reject});' + - ' window.__lorcaSend(JSON.stringify({name: name, seq: seq, args: args}));' + - ' });' + - '};' + - 'window[name]._seq = 0;') - window.__lorcaWS.onmessage = new window.Function('e', - 'var msg = window.JSON.parse(e.data);' + - 'if (msg.type === \'register\') {' + - ' window.__lorcaRegister(msg.name);' + - '} else if (msg.type === \'result\') {' + - ' var cb = window.__lorcaPending.get(msg.name + \':\' + msg.seq);' + - ' if (cb) {' + - ' if (msg.error) { cb.reject(new window.Error(msg.error)); } else { cb.resolve(msg.result); }' + - ' window.__lorcaPending.delete(msg.name + \':\' + msg.seq);' + - ' }' + - '}') -})() -``` - ---- - -## Files to Change - -| File | What to change | -|---|---| -| `relay.go` | `bootstrapTemplate` — already updated (Fix 3 above) | -| `browser.go` | Add `injectBinding(name string) error` to the `browserImpl` interface | -| `ui.go` | `Bind` — call `u.browser.injectBinding(name)` instead of `u.browser.injectScript(...)` | -| `chrome.go` | Implement `injectBinding` as a thin wrapper around `injectScript` (no change in behavior) | -| `firefox.go` | Implement `injectBinding` with inline page-realm function generation; remove `f.eval` cross-realm call for the current page | - ---- - -## Open Questions - -1. Does `script.evaluate` (used by `f.eval`) run in page realm or sandbox realm when - called with `target: {context: id}` and no `sandbox` field? If sandbox realm, the - eval path also needs fixing. - -2. What is at line 37, column 9 of the compiled Vite bundle that triggers "Permission - denied to access property 'length'"? This error is constant across all bootstrap - changes, so it does not originate from lorca's injected scripts. It may be Vue's - reactivity system or a bundled library inspecting `window` properties. - -3. Is the `window.__lorcaRegister` path inside `onmessage` (which IS page-realm after - Fix 3) actually working? If the relay's "register" messages arrive and are processed, - bindings set up that way should work even if per-binding preload scripts fail. A - quick test: add a delay before the first Vue binding call and check if relay - messages have time to register bindings. diff --git a/firefox.go b/firefox.go index 9c63a48..a4a6db1 100644 --- a/firefox.go +++ b/firefox.go @@ -259,14 +259,23 @@ func (c *bidiConn) Close() error { type firefox struct { sync.Mutex - cmd *exec.Cmd - bidi *bidiConn - id int32 - context string // WebDriver BiDi browsing context ID - pending map[int]chan result - doneC chan struct{} - lastBounds Bounds - debugPort int + cmd *exec.Cmd + bidi *bidiConn + id int32 + context string // WebDriver BiDi browsing context ID + pending map[int]chan result + doneC chan struct{} + doneOnce sync.Once + lastBounds Bounds + debugPort int + loadScripts []string // scripts re-eval'd in page realm on every browsingContext.load +} + +// closeDone closes doneC exactly once. It is called by readLoop on exit so +// that callers blocking on Done() are unblocked when the BiDi connection drops +// (i.e. when the real Firefox process closes), not when the launcher stub exits. +func (f *firefox) closeDone() { + f.doneOnce.Do(func() { close(f.doneC) }) } func newFirefoxWithArgs(binary string, args ...string) (*firefox, error) { @@ -389,9 +398,29 @@ func newFirefoxWithArgs(binary string, args ...string) (*firefox, error) { } f.doneC = make(chan struct{}) - go func() { f.cmd.Wait(); close(f.doneC) }() + go func() { + err := f.cmd.Wait() + // On Windows, firefox.exe is a launcher stub: it starts the real Firefox + // child process and exits immediately (exit 0). cmd.Wait() therefore + // returns at once, long before the UI is ready. We do NOT close doneC + // here; it is closed by readLoop when the BiDi connection drops, which + // correctly reflects when the real Firefox process is gone. + log.Printf("lorca/firefox: launcher process exited err=%v state=%v", err, f.cmd.ProcessState) + }() go f.readLoop() + // readLoop is now running; f.send can safely be used. + // Subscribe to console logs, navigation events, and realm creation for diagnostics. + if _, err := f.send("session.subscribe", h{"events": []string{ + "log.entryAdded", + "browsingContext.navigationStarted", + "browsingContext.load", + "browsingContext.contextDestroyed", + "script.realmCreated", + }}); err != nil { + log.Printf("lorca/firefox: session.subscribe failed: %v", err) + } + return f, nil } @@ -425,22 +454,71 @@ type bidiMsg struct { } func (f *firefox) readLoop() { + // Signal doneC when the BiDi connection drops. This is the authoritative + // signal that Firefox is gone: on Windows the cmd.Wait() goroutine fires + // immediately (launcher stub exits), so we cannot rely on it. + defer f.closeDone() for { var m bidiMsg if err := f.bidi.Receive(&m); err != nil { + log.Printf("lorca/firefox: readLoop exiting: %v", err) return } if m.Method != "" { - // Event — check for context destruction. - if m.Method == "browsingContext.contextDestroyed" { + switch m.Method { + case "browsingContext.contextDestroyed": + log.Printf("lorca/firefox contextDestroyed raw: %s", string(m.Params)) params := struct { Context string `json:"context"` }{} json.Unmarshal(m.Params, ¶ms) if params.Context == f.context { + log.Printf("lorca/firefox: main context destroyed — killing") f.kill() return } + case "log.entryAdded": + log.Printf("lorca/firefox log.entryAdded raw: %s", string(m.Params)) + case "browsingContext.navigationStarted": + log.Printf("lorca/firefox navigationStarted raw: %s", string(m.Params)) + case "browsingContext.load": + log.Printf("lorca/firefox load raw: %s", string(m.Params)) + // Re-eval all binding scripts in the page window realm. Preloads fire + // earlier but in a sandbox realm, producing sandbox-realm function objects + // that cause "Permission denied to access property 'length'" when page-realm + // code (e.g. Vue) introspects them. f.eval targets the page window realm, + // so re-running each binding script after load replaces the sandbox-realm + // functions with page-realm equivalents. + // + // We only do this for the main browsing context (f.context) and only when + // the params carry that context ID. A goroutine is used because f.eval + // calls f.send which blocks waiting for readLoop to deliver the response — + // calling it inline here would deadlock. + var loadParams struct { + Context string `json:"context"` + } + json.Unmarshal(m.Params, &loadParams) + if loadParams.Context == f.context { + f.Lock() + scripts := append([]string(nil), f.loadScripts...) + f.Unlock() + if len(scripts) > 0 { + go func(scripts []string) { + log.Printf("lorca/firefox: re-evaling %d binding script(s) in page realm", len(scripts)) + for i, s := range scripts { + log.Printf("lorca/firefox: re-eval [%d/%d]", i+1, len(scripts)) + if _, err := f.eval(s); err != nil { + log.Printf("lorca/firefox: post-load eval error [%d]: %v", i+1, err) + } + } + log.Printf("lorca/firefox: post-load re-eval complete") + }(scripts) + } + } + case "script.realmCreated": + log.Printf("lorca/firefox realmCreated raw: %s", string(m.Params)) + default: + log.Printf("lorca/firefox: unhandled event %s: %s", m.Method, string(m.Params)) } continue } @@ -514,53 +592,98 @@ func (f *firefox) load(url string) error { return err } +// scriptElementInject returns a self-contained JS snippet (suitable as a +// preload functionDeclaration body) that injects code as a