From 3a6be50e314f3be0264edd8d388391b633806819 Mon Sep 17 00:00:00 2001 From: Zac Date: Mon, 9 Feb 2026 22:33:38 -0500 Subject: [PATCH] Add GitHub Pages landing page and fix electron-builder config - Create docs/ landing page with dark theme, download link, features, setup instructions, and requirements - Fix build config: add signAndEditExecutable=false to avoid winCodeSign symlink errors, replace broken afterSign/afterAllArtifactBuild with forceCodeSigning=false - Clean up removed dev dependencies (sharp, png-to-ico) from lockfile Co-Authored-By: Claude Opus 4.6 --- docs/icon.png | Bin 0 -> 31943 bytes docs/index.html | 418 +++++++++++++++++++++++++++++++ package-lock.json | 616 +--------------------------------------------- package.json | 10 +- 4 files changed, 423 insertions(+), 621 deletions(-) create mode 100644 docs/icon.png create mode 100644 docs/index.html diff --git a/docs/icon.png b/docs/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a13fed1f98adc61ca590e4f01b2807220b8205a9 GIT binary patch literal 31943 zcmb4qWmg={^Y-rI?hxEvLU4Bt1b26b;4X{1yA#~qgS$g;cM0wi^x^)U^Zx+Pp3`UM z#m-b!cUN6iSJ#9q$Vno>NCF(m*1_<0Kiz(RjsbR0{~J}+?gQkqTx0L0(_ z2C&IX$r=D40Z5AptGH*KWxHu;FKrAT@Hccs+w#>$BMos34XwF@qbF;T!lHwq6ND^e z!YBvOMPT75Na08y^qRkI$|+I*SnZNtyF2&&{rG*2!ZxFD^6Js&0?SpRfiM32#Up3S zY4>%Q|Iyod=<*#oT0;2$I{G;FZpwsMTdW;XIR_SwPQ+at;(0}iwUm^~Az1SnxH!@zU zHwMMGkkqX|z7#Qdol7}fQk@EONb@!-jC3&OmdZ{CZcgK4xJYMEL4y9 zATmdNJFL}wy)Q6x(Din)(rwUJM-?^cLo_P5r?n`GOfgJo647~NHoGn&c% z2S>^Wm2&%9I+W1zn~{e^2aTEm#m-kVf(o^$;Muvw2sGW)Xf9=r1grXZt10n(;Va)P ze?Qu>foUGK)Xtm}ANU9dgG9BLeQaAzxv=KD1KZWv7B{t%T1oYA{sYQoRlTTetl(vJ zO|U2rd!LJyymsz7X(}*D@raqY|>r|5l365Sq7uR z`6IHfl*iD-ru7{R2|0r7Rg%KI*6tvSCRWji@j%z4q-8fNwvQEMMSopN%4Oa1!JK-f zGg^A`wYP&o*ct`$4zgGqa=KeVY)SfCv>y^g`7YlF{$hnyrI0U@h*t_nC9*3~%#Xwg zHApS3$|^;lDtgWh*cGT(tkC`4q%pqvi?*%)cO#}3J-r|) z*ii}OCJMO2`xgo-y@w?!BE@&cc=YkKRg)}Ntp8d-mzw~98hj&bmBPnWQkkvSRle~X z=%I#w@ks|p!I7+_AhoAQQeb@iV>7O%n!25m=MjX29b%XB7m3%k@*2))7~U@~^1aV!8FAHt%vGOZ z!NvrSTU|+3)4M&MSm=K$k$|hS+uLS(Hna*qhGIm{@n7I0Yg_g=;Yq3`BE$j_!=Y)> zt;M8R;Nw;3h4RBgDdv_Ddj_ByQf_ZmSbx*6j6~)0d`>!1t-4k#SL=vEQ_;v(>;@kH z!%?b%{+~`Pp$_4QLMz;aiXthNus9uZv3f=Dz7|n}b(<9DZ4dKxoZ;>(^}@t!w~BH* zml7s-^#6<|b1riIBOHAAH)Z$a{RdwEJ--%tpK8&v{`Sh-7PlUV84a|ZDC4ifx;N>p zEWuyGXWW@0?ZYS~?6Aa@&#=~}ud3En)Ou1By=rx~I8P#?83XaJXpaKS5DT#KFj$0- zTj`Os;)ggsjA}TuGIMNB5&z%A>NB%ccFLzpEl27ComC2tskRw(XLQv=dQHe)@Z&@3 z00|&VG`GR(lT@7v=Kk_xR>j!Okk%FZFRGTsK#b8wDk|XHlj@@wAS%PA7OBl(-XVTD zE{eh&^tTzKhEmJ8BK>)fK5T&U1S&7D^~XcFM8M;yCl)VO^HKAWs&R=#ETMQ1puCo~ z8~b-e`H(4e+#MXyB#pZekf8ln%6@?C4>oU{VFd3G2gQp*w!E-Irj4q`UUNA^iKxoZ zmYu4)vGzB#ftqgrEZ`Z#tg$*=9g2_*wAC+jrBrzeS({cAMIh=Z`-&9D zO}xsuxFaKsB|C`O$}wJIA4=nklqJ+@|MbIWh?2@}Qq=sl zUb^_^S)ldUTl`7~iGz!(q!SotM80D8bhE!Q`@BZT zP?<4@!a~H*CQ2?PwWyIB5izxW@_I6qVY*vX)iM#4B9LM-icvF#lG8ed^(v_gMGYKZutE3U3c+(iH;0A zwW&o@WBC7^6d~x3li5$K(m>9#F+%)X`mIeB8vrd>qFJp;Ap9DJxTwHZH95e-MTZew zK!198(sL3D%Lyxw<7AuHZCL;*CZ>K4A&as}Y2SRaxawQO4=7I?CKf&oki7}nWJU;^ z_D$q*GlfeAV?5m#5#ei761zJ%Ri2IL-p9##jW;uau$$| zQ?gYwmm)%!8^A&hnxo~<5-#VnXawG#bP;F$6qSmH(w@)-m#NZ&WiH)I&S&UIB)*uL)DF_nOCbbn$q4F5cx_% zxKJ)RxVD~*fPsFfw_b#RVf@hq;^YSPmok|MwPc~3M=a#FCWx8P(tx9oWHRT;$&~WmpJHOT^yf`nWq|}f0!6c=auqkPvTV7K*~ckzEMOai5HRm)L$&zk zp}Jh`Ib#Me_5$1^+MjT3bFYlpNJ)5#u6wlevb+VIf{7PCFfl1s!%s~Y??~DXRurT+ zDt=Q^*)Wv`WyYaMd?@jQv40;~=@NB-aC7f@d0~8S{w5TPc^bXO$ z!a*9MOuOZSQu8wLg{dTUJUG%JHWX<0fT)}R651xd!gNRzelQy=%<(-#p>~>7OELLI z27Cx3L^=nR29o9WGCHZfDam+B41@Lw>NF8fzr6(GFFnBs$z(Vnypu>?pErks;^S|m z{hBT$VGnG`1I3|LxoyY;EjsJr22)0`!jr z=CDF}o6mB3$hGGj9bhGAF@tAgcHOw5)bSIl@8ruMF2n9`| z6I{S_{9!tfjgovk{mMK-y}6m!NFrtGQwT|7Ujn|&Cm+Xs3}rYP zby}&0^o}lgd2Yj&KtlG6ZADKIMmq* zd-imBq_(!F)-1q~oFWc6CHh|(Xq%nNBLy%Cx6K{%!MlbwmvqF3W_29l?cMPb7O<)1T=}GW>IdriVExO*fK9}Uz1%<)kg93^~hU#zD~zr zeMeX|cnD5K1d($-TDbU4&KSrFqybrYf{cTfkHs_#Z=!=24=B^#Vat1i!?#Ph3L#!*T-Az zlh<(|NK-L+kk?8AI^=P{$#B)|7&`Rvs7dd%Ag*woBZsi8Yt%K2Jp1gRK8G`xHrDbG zbMBpCCq?u;ckp#$dvj$1&+V&8wElf!Tdmdte10d|I}0^v-xYGi7FI!{R#=sj3TVV( zAXM9qt-WAoL#aJ&)5H2yfvTkvPB@tSr~;ryL?2KcM^k4cPYl?#4w7OvBmb3x(jFda zfrFko|zjY6d`>mDXQf><2ZH(GuKerZNaICUt8}j~RWUIy&? zS&G|ZJ_Q)j|0w1P)1m%ga?JJ?KI7>voU=?E`b|$uV;9~1cIU7KKIDCby{p5}J3vnMU_A@-Q{sL7yr83Pnpq5yAvDn;{7q*?6uV-rFVd z@488l5yp8;2J*0^Ojz2MtJLbGhsu~$>^9p&t_%*yqJta~D za$ONE2za5{Hu*s78T!$-!JgA-1`d=Wk>hou%GXf$fCw}_t$;8kq`q-@ht_<6B;Bop z*ijjreWQ}cum|8#1c2Uh#HFz4eiq1g^h^JUn;f3S2G?o$w-+sqKuxNv!Gm4al>2S%V^V=E>v+W`^K zLVy1nCwqBs_lP4f)V%S=}`!$u(=^Ce7%J@OT|y>P_03NH~$j$tglUZ5!5~7&%PV-4d@=A^*ON3~)Z^+VnD7kL96b&6{)tM2ZS2^ z8E1bkAE=RB;SX4-2ury9Idd3{|6j<ND4e7 zC&m|qO!gs2WRz-t6`3g~GEaaY?Sy%w6_eNF0_*W(=jYgZsD6Aad4p*&p~{9(#Py)0 zyXQrI)`d@GFd<=Nuq`n|yqjV8Krp2eOp284RkBu{(v9KMC@hf6ZYWxeL&O- zEaSl$MGriFpi|&dNO7QoPO0BV9uqI(rtpBTszvO-4#5R8nV!(dDX25p! znUtLOr>w^Z)%HtT1=q~8bb)59P|Ik=lbR7FWn}DY^Zyci-3JT8%^gIGCDEUdjj1k@ zdzyZH>wFDW^c=j`C_t}cf7Aw)p>k086$6q691JiNIhnEl=??$;+=t?~J9F@l{#+iX zo2K)p^567iuSPHAw6f-$9O`OsV+GpIHOMR-)}&% zj$#Y$yZk;Mu=uA_w_eU1->qn~-t~69x-RWz@Ix@OO~|2LJ;`(IFKyuHmo-0Jd8M-8jDxNWtc+#E29-@`8Q;qO*k1;+>!%iM2ct) z{l*TK*52sHv)3m>N$Z5k2y_}GdxSmc?^vm0+wNFef%R+HHDD|KOEd5RP%LYl(aIUxJ)CNW-%H^d+ z`BHGu$Iw@9>P$1=_n6_&Ozh$Q!}}U_3xtdq;T2j_3|vn%WdapL{Ab=|)h!BiKLN%) zg5q!jqmm)NRu8!TfO1U;{AhrxomL3h;6ZX##my^O#NFD9&xHxb99 z{5ps?@N*`d608XA84c-N0P9?UdZz_M|G`I*(I!>CM>6>O4`iT?J5tZw+rZM(U<%%f zgYM$T^@btzmIT#zD*y(1Vku#|`v{RtS?gd>gF7B*O0{D1dkC*f5{5)mo0>;V@Q~)? zNd`M9h47hOs(ZFSg7Su+gAA^=ZYcw=(AbT`N6szbfN?wV{xyXTHdoqq%77d%VDmv{ zZB-AK>o+NOk;sZ#-GY9(=nGazg|iiinN)+H9=&UZ2T;Xf`T5Dt&)Y|8%h9tk{RQQe z4|@vhO%7aFFtCdq0;G)x zi8PA3e2lt`5oi2C21JDrJTZ#{Sx`NIj7B-SDba&3ME&Tj;J>PgndMjSk=_q!U}HS`m#@Gx#wGU$z*ywwswB#VcNDBA&sE@k#HV9^CsOO^aQ_ zt;bj%TZPt%q3>r5P4XZD9LOtWMHjE~%EQ0$TfAq_Xnpf)jQ$KY4)PjPCUW{i7pM%T zkKWd#H7~hNPCRvSIxiS9fJ^kAu5zWbG8z$$vcvCU((KgDty3T4@7dhk+zka4PJ@5g z^N9&KBQ`%x_?h5d0^o_sD>Npi^K5=EH*?<*IuFxlxPMk&_i1blm%l#oS^B2K{yuTY znR@+lZ88NoJaF||AnJ*Z^?y)HMrQ|ZA<;9|Q)B<-NHYm+x!ajg3}ogRqdDQR!~BRs z6%xswuYk<^f+1x1VraqJr?A-k(Rq^+DEQTlIKi^%kACa?ue?@vv89x$!(73xfCYh$ zkn^GXGvEXkqLKd$Ie_>pT2Icbl02D$<)7c5JgaY43xocsvijD|p@zH5!?Q7a+bf2| z_1txn(oB_O4W^K=He_S=OWvtKP{d*XN4c{&$NZWxhbtbrnPLsspssQIc3WrcH4{Fz zqgU5?=0X7FijPJQaZi30(WPtv~Lp zuLo1S;}A4|4Bf(sezPYp>ng?YFYuhrry8kyTqD3VijUQb92~B_H5A;f$PcPS-WpX5 zcJmpccIPV4OXSnyIAajQxoGD3;R3zQh=g`Eh=j<39w_!#G2&03Mz(*FF~LU%PY}MP zdjZN*G%y>{yZ|qXe=uU|A7GQ3Bwh2WF9s<+PcHH-yA>MIF z3Mhjfy=WpY8M@lv#qev0l*DKASS`btm}gT{Q+_9M?+;ShG&>r}?ssBM`;X2An4@NJ z=;09w!BG&p9 zXL044Gajy5WO(|zYmT{+M3Xts~5+ z|0N@6SuwxA8Xcmq5&G*VD5?WYYK^CoEd9qsdM<=eJU8yXBdPY{-6S7(7j)s`m3mP<=Jzr=*5R1IqK z%zc6&#TTd3b2P&L>jj86z$R&9LMWq(Ir`506c7?EHM> z`|(NdZ&mhTB%*X?3a*;c7qd|!xe_lD`X9L@~cT{3|3ds zCQA(nft$CMyFP&H4+;PC6OMS?`vKSS{43FywYNtWVA2VimQ@eYkA?0>2ZXikc+9 z78pUGcEyc!#Y8lZ-560+6%NT@3Q|Zf0@Tb7nvjPd#r5TBku4fOdv&ROXka;>m;-&` z2Up0Dd(lsh$G)0F^G759TH;$Meoo^}4H;O2vRVuor?pWX02xY;`YcGl48KbWM{Oi5 z)1QE|U*5OE1E6mYub>vKOX+z=%k<%(;b6G;EC2P%>(8ISyI$#Ito39E_LT){Yo~WP zPJ}p(%-|%g&Fll<@^KCyKyr6D5u70>boPG92gU~}G!aPZojQD$Q!mcIJMsKNdQcIe zq~5HXSaQaye2@|Zcvq$_$u2{9FE{nah``6~O2Ez|_LWzy!VE(Gn+YoDYVnKMz9jh2A zQ+5f#(D$9dcu2Yjt} z9!iA%<4?Rf=9blw<&X4Sr}wkpyN4kI(-K+l${_qYplU@c`X3S;gRoQI=o(uq{X&Zw z4t?*e)6{t1G+Z7$J)`pk%G9o=8$B)ooG&Jbq%(J> z`pYdiU5W*^9HoMa(;F7{~M)boU1cut3l}+hZ^{w%(!q8l;3GJ$cbba%1-fQSdl{jqpV2)}C>jspe{O2s}GwJF#+zh=moJ zX>r4D*?Q7gymBKtir%g}Lr5DW9!h-moj7tc26m6n!ME3u{5~>c7(4ctzX(MqVS>@6 zv+Y;Xq^I>iFd^zWhs{gD6bfs{Tf23JWh@nwQlxCQx?e6Y>q{}($ZfW8P7R10PYic7 zeeC?|HtA!N{bVm?!Z_|R+vi6;nFA5RjX=N(qe;cF?2>MvnP!5Hx|IOupA6?8?SB^H zY_g_2!UI@A=5ag=Z%Kt=rULgpSXiva2+g^E$!La6LX`w(@65Oo1vKB1jJ5YG{P~Tu zP=frc@)Gs?i>p2pA>w`#O7+t$J31|q>)*gcGskC5R&EIW%t1nLTh~QYvs<}9i`@Nt zL!xes+b2R3Ucui82#)PPp=kkzU%kU-4cf9b$Swwyq+wFN!=W`Av{inV0&AbN)Y?4H z*%VyH3%EUI} zYcRp938Ggt!1XBENL~-uwSvA**}5-O$sSIDl1F-O1|%cS2FwFtT;jwMpr> z)o)KB_^#9b;n+!O_4L)VBD}1Sb;7Q<@wPu%Hqd72t@rc?@SyxEzlFWiMJqi)4s@`< zDSr;wDnCIetNOeC+tL2&_UHF}_mTA8iw&M^_Pq2_qNiNVfjpe7dw8G?0Y=Xuh)@Kc z{=X&=ZN3FPBz{D#RlR52jo~r_5`B8lMB%zWNs&OpG#{CKoO^d}J)f1t&ps z%$_kY%&5G!A(Q~d5T7DZRaAnJ26=*#*bFk;(X?*}$xkDr!{4>e;eUEKKp)>pTT;n+ zTKOzCgd=6CV`SMBwl426fblcIFQfkY3m$1nLM~gRf4v^_%731os=ncO7oQ^UTQoVB zyZBaBlptpw2Wds8!_8!*}>p6tvh_UzY63_FqHoX#H z?3Dq7&^9!SprM~)oUgKJw|NtL+-3zkaJEx!0bP}VFgAl-ifvR{pbttND}z-AOPPr#ZS~*_cu;s zfq2|B{xGN&QIk`&o{ee94pMM*hL#OYwS+DY91)m5^anuS`XwDmFLDIM{CGm%GXrd~Um`5X#rs4;Q5GSLE>)nN^` zegMBfyXChFVm5X5`dR*6b6@z=$*o#3_%>Zy*xJodPdz*JB(aT~ZANd)=jeN0dk{%z+bFnFPP36{t)MAIwZ=&{#^iZ|m{LV0i zbZ{sCpC1n@t}*s4*- zpZ<50`L_`UKorXvteo7%GoGcDs+#+Zyfu1b1=N6k=v~EyK2qp$s?z^8`ddGL;zOH%JZ$lV z2FkH#uL@xydVKjc_ct*|il@N{^f;)6_ZZwlb^FyAx`eQyRo6Ih>-VSIS~9>Y;aC4u zIN@EoqI>vfvOitKFJ!_MBf(1WXCobHRFE1n?qJ_N9l-b5$O5sp^LGo*OMV$Pu`GDc>M*AKxb6@HYJKaDdJ9KS4Bv;7$#`6oB(@5Xl9!MuAOGZadHy$_%o6 zayg&bxM3`$hwmtNk^Zcx%Q6^6Cm+6q+?cHT z{@YZ*K5JU4D=@YsyWeIAYQhA~0hv|PTpDd+ibouN+uYDX zMyMf+=*wa!5Acnks#I#LtDFfbqGX4qVIx&h3pLQ3+ghac%GD=7HD8a`_Pyj>wO%qC z=Vj>CRI7_rp7xTTNsF$8=5TkVa*tuV%Gx9aXZRyABR%(W)DsoIlcYg&=y0G^A83Ux zd7eAa4_1kk$QRY+8qY0HcXI_g95j_EP4A30M!GYcgUnc&jHn{RZd+);$P5#<-NwMD zaa|309gN~;L-BYt{|wKd(vwlL2`+dm4ZtCly-emxCS@1cy&5GHojd_t&Z{PbS6CQ?KF~}N82JiX z>XSEEGLLqw%-X^Lp|aI?i2m0q#qQI~d~YkFd&!j6j@-Nc`;_puXNWi*hBK_u*6{H) z2P(qr#}o?oAIPtSzZ{tEe;7pjGJiX@lr_^EaQU zL`XFj+{aTnUE|B2msd`upt*yy3$^vS1!sf6n`XOH-o|ke=?#O!Z5QJPm*++=+qq_N zu?eHB4#^PcWq7f5Cx6=$(!RRWbjpCEE{}g{F6BTC>)RMOIC%af{!3(Dr&(2ijT3I}aPIBebD0idn0R zWK9L!JkU>Pb1l~!(vn=@l{GulMhW_ij|vUk8T(W((CB51i;l=MZ4Z&K5CGv zYvnZShr6!-R8w^x!>-}6y%~fPT8n?x0Y~k}NP~I6r4&T>H{6b)AO}n^HA-Hw8?`L| zZ^M%npz@`fhCEb(9Sv;pJD4~PdQtoI`SmgOKTOg6D=+ws_rU1SL}R31PG38u)*`p; zA+iB<1yTd9k2}NL*%O@54q6XhGM4r2No`jx+Nlb1rTRjyehHI#r8-uPhXs$GOy-E4 zfw?{Y^7QrDL^nDsz*l*UYZ@Rx3f^R7zORwonDI=5fiSp0c`Ydu{F~XtFRa6pEwO;) zy&c!_PQiG4pgV_~s#R>B<>dx{WGTC!)sOi=D{Fjj4DIxV^-Dq8C|_v$nc{>=?x5_0 z&tStaIF@Dkinx!{^<7(_{M~xlE2hyOU$S0I>(yo(T zhu4=z@Gi1@`mU=%YCAwzhEY)%1bb!-`hrk|RB_9ok*$vM5g_qIpZ#&8zG@>}znh1e zM%T=`w`Su;SHH>gvEBin@VG?T! zaRYtzrJFbw;rVJH4KfEE(Lm0X`0((~sJa&4$%*&dPg%gYW0=J-iy^(Yc$Ef|U9V#} z{x~I5WfGeq7H$wMficLU$EpacBKck;(Y#kH8Ol2O;c<~pM^L}Qe#~{o6lJ4|T_kWO z)cjEVn@(9E?xgg#Gjp#4%jf~PgiPVJL=7^5Q=D}AKHefCWR)=R_3)F5C6F|hb<5Ae6y+7}GGxTN}vnN^^V1&WEZq58hFEixXxT7l|yr+YgGtzaHNn3fF*4M?x@psyfV(2qE8-p}znn@HiL!0PM zYf_Kepi|2-W9EoN{(iDYuRQPYDXdLAbICVu&Abp$*+$x7D|Fp)L zGB&Rj{9<#I#|0=Fna?$2_K6)g!bdFSZoUKOk=(Up{9y5(TV8uN8`=t&It|yq8vS|# z6&FW8$(uygTbwE5SY|1wrMVcN_)U#J0Bi~Yi?mg+N!srO6gBjCvH!u=KhI-24@S=5 z%e+{}3^|eIjHfnL|6v)xVO?!(P`(|>K7@>)y|%Uab~RDxr6}WH7~&}difE_e;34i8 z47^7Wl|#)ZKe28MB9Q~)@qtDfjGM}dDpVJ{D^ z9XT7AZ)S2%9qI@@+~`puJ4m(2&|LlT&WAC+6aYa6WKD+8~t`2-O47-;x4Dax#FvD-ySk%z)NpSXPKNUdX6Hb z5uD5d^IGWYh+QkP8l&onvq;APtH4{QXZ2LXqgJUrPcCIB88`AiBoY3jrCQ;6B>S6FrV$7#Chd$s@^wxO zJ+6}SUopTD-#Gp>BBYddj2y6wvqdP{{J9$G;Pz2g1R9&@E^^?P=jPt0_|kLgh#;F# zO9Pk{E$EgW0ZhopztC)mRbER1sPoG+gmrBV%EGEhH+1z~=n}^Kx`Nz$uaCvwrVLq* z=q$2i(t6sNyFhU(by`;aj-N`?d2W|jh~`cByC^N;`_49hTqia=LNo$VUL^%vzGqP0 zIQ(LCwU&d}plqDmiszvAC;@~77!o6k-L@gwXTgJgmM?K%MnL{=uUYqdZ-}&ZpC9Mt zf79QdN&DKtM!T2JS!|*+P&h%KSI1;5a+n54+oJ$jlB>z!?a;gROD+T~l)KuXavC=^ z-g@1tl-S6ZN}%wU6Q&mwO;0sb9m3)N?Vfa@(CLncK8ps~N86BSzu<1=@=BPy@iNIq z6I~ujep5Sh@?5`i)EZiHW*dt1%O3GYPGn^=M&F~OV#(iJ%VP%+5Fkovop zVmf%?gb6ZYtxj#7ok#v#8s85G*Moxfcy4S@kr@7Kn`-j+MU3GZ0i+kv7l@F0<6{z1y!b{{Gys-;>)z&{hMwiswuOkxae64RSn< zXI&+teb{+;6;+{RwMP zY(jnP>CXatEd+1^hUT=l`7rFOcg_NmiW}yLj&axBS^bCpdD2C{^v$tdv~|z4zNPi> z2TM;V%F1+xq)UH@Mi}rx)hd|?#vDKD@*0i`FC;M5;)Kw-+R)F;?YM z4te(8>Fn^dLGFrUVLVW8V8;O~Nmp=tgt+ykgQo7+1-fAo_H_^u7W8HQv|fnnx&GB@?%L)oT%-#&r| zOF@#|0>lV4=uW-KTMW$PiPW1f|2oQ72s;uD~pYejZA?1Q#4-Thc^3JQC| z@e#|2_lVYS&#LLH@HfR4QuzE;5i|f6?C<#`VZ0Fx@Ci%1Xg%i(5Kr}>7woRnDs}a!ap-A^de|0h9CZK0{-tEk_kOSj%F#SM|Y|kJ( z%wYw7ZDTDQ{Q=VDKUzGU@q?7@f80p((6f@;jptjF*4!GD4n*(8vqaKVFC)WZBtOI3 zaO)2(MluRWti%2D*|DLj{+Ni9oZBu!vU%@NZF4xD|0JfMK!rRy7UG(&415U?Brt#7 zbk2IHa7C`xbo_wnDUiE3_`$XbH3)e)SR-em=PwCRAKDE8gkgYh_virnZ3r@0$PB8> zTl&R~A7knV3SW~gkD?y;ZaJ1GcLV}bME|h7#FL8mD>{09b(0W1GzERe6q4c(i_Q+@ zsrUu^tZTx?SUzl1{9pf~9$CE`QTYhv_jLJL{ap@P_6?@JhbqhfoLx{?iEX2N;Dh=h zK?XJUZ2h#QB&iEs1#gfns-_%M@=87ui}rlxSh0o_zVS!~c#|6JV$rqz2_4+^`=&>K zF?fzvj#18_m{17DW36+uM)+&;9jafwMGlkQ_#xiP-QWytplg*@B9d>YcGti)jB1TI z6Uui%QIEH`YGT-b*vc3~sI9|%Gk4E7W1#qtk_~IJr?*+J}O_% zR_}U+c~trC^cud2d^;T#J1Uk=KgwcTEOMi^7c@S2OaTY6HWqn}2FVKa>KHIbdQ?Z-^P8d+N1;=!IA<5opp3WQ*KW;tpzTZ>~OOPi(UTE^lmA$bbCY% zy-M&#d;BY5TZH`t&1j?t`p<`G>rl4)&^7n0BUNH>a1OZBP<9!+AMvYF1XL|}>o`i{ z^}gE3x=a4KKm+%!LE4)!azj{jx5G2y`0U{6KB$NN42bGt>*(+%kF z4J=6u#CXv86=eXX5PnMJTCK=t@PQK9*PgfT@%^b)Q>EceuSWwSCP%!#4J%CTL2H;F z1v-!6Zegr`F4hbl5Ar&QB6_GSuG~^Pgz$OAKY6WQT=ScM!dSiV2X697iP201t{D)* z`x|q8iP`yKkLVQx#Fq>!=mC5#x#TI7Ut>(Q@NGI)w;M7Ot_w0#K77bJ#^-lma~g~l z7H2YMc&EoLCAB%jca7s|3BI^&Lq*e3aJZ@8zP-Uy73=p6L?NV2bb!k~^Yt;JL6ryC z;=~2;g&4p#=ev;DXKT~2qXUc@%`<;h>G?dK;oK-7XZ&%KFD(?q^LBJuqs{--2r^meJpPW`NZgGL#b~KnSqS}g_jZn=y zlb@Ur>@e-_k{?8tIY*uY#b2|!uPR>u*9*XwyArmzL(+&`)4j=Z_W1iynSMTS$wDP& zSU2=v2^QNT3WjCn(e&){v;q7n)P$4|p7LDvCr`%12cf?Tp|ALYPakyNboy_K-8o+e zcQBP|@e6*O5l;@evxH!UU5v295!_eI9*I_YFUT1mCO}om>-&c1(DcH$dMoRt!G&1m z4Ij>(_hXXidj$IE`{>I*Ea5zUpJ>-uk(O{_3PN>D0BJB?xR0yPzjq$ARdEC7x4TXI zKz(NBuw;RzDKx3&w9lRS_#k_)L_ol{0AbLgvj1O!%h*L$`aiB_3kxx5e!~B+vTyv( zta+k6Pi$jiznM&I+nCta#O6%wOpHnL#OB1dC$??d*3EC-b^n0-VW0D@PxoH6PFGj$ zs(x9z^G^WIF?NA%uL#)@uP5LCSTj9Mw4cSD&=mI5yZ?y-xtm92e|yXYj^`!gP&_(<>f!igz}Hpcgat2@=7Y$|G(1#0x2U^Z!w zo0?P?$FI@ZUQ{5Oymu?Uw)D83rq>)TUWEB)Eo|FDEC$VQeg7O7rkp}{(!*@2)zs0GMQn;?B|~PyQ?E(gXeH7l3!^d1gO;3$UYF@OoP}1AkVyuSIjGJ! zrRs+qaQ2xDE`FmoFiP{5wi_u7KFUzN8srt)3tuO9CmPXUBl1+*ix%4CRJz3KaBbbKPWsdsl$>>)tmYuFoH$wbRMhR6tJhe(}`Z=xn zx?_vlG?04W<%*x~Qyq^}dZtwH6n!YT&)FZ_Cp0@YrPxR)YDBAqxcP;xyiwybLX^ez zu@Sudp7EKPb-Y(VdEcThCRpeD47c_ApjMeLB&T zp<+)Ju3yd`u4EkH)3J#D(kQakQ)4Fd^QCr%%gRj@?-dx<`-zeWN>uecm{xFpcUbY;) zxtQXb@bcP>sReMN;SH6>(Y$IVj0%3jl?FvWB>mR2WxG2hPCYuA<@|7uW3m2suKa@D z-j8>4X8Zt;)tDuuf5W`nh!*(qC46~62k`kUukKcWiX&TeaT~M#p7$P-w3V&4P!asS zBW+@5i~8n7$6^#$t!}g^iyF3N0lupiN;7#SM!d&}4*Slyx$0;RyO|-%{=V1y(~1<2 zR_nx07V-2>d3dBo0XCwmL1z+4AK6GSoFV&C%Y+BiaC1)pA~3cmWSN6 z)J1K@sp;2I8**};_x|Q*zEiZ&n-ph$F-`E!l>Ceee+2ZnwchLX++X&Jn#laChM+4b zULh8yE_ONl-euPaLwg!9_3L3bi7|ynpnWHhHebU#n;98=I*xk0V5-5wcYC-@oDEOa zG$ny#e>A}vm`fTPDP8UNN07d&V1O7js&Tt1t#xxZV44BR+NTjSmf#cdy#GNQf5C&L zzZveZ&nf;2x$|`8J#7eXuDf z0rk?qw0~w4FE6|g<8WHhKd2idBTt_)Z}?GPO-R;8Zkp|XtshWjeRgzN;&C=`{Eb(n zAl>sK)T8<=#>oJTEf|xW*2cOD3k;JB+LS>j=OvA@?>+Ll)u zlC*tm7Z<9F7|ZQ+<__{OJJtUbs?r(uXU0m`$!Y-0v49XhgsPz5_u}KFpyTzi;`0I_ zp*c{QDE%CMnLQQJNuTv3siOp>8v0j9iPB|g$!x^)o;+!PI?kN?gWk3c6llKn$4DE#zdj zs$p#kz1;JIKj-Q4LkVb_`gv>s(qu>6phoe@53VTc-QIKRZ7yR67kqWBe%jGnuwsUbc)VZB4RcrdQ1j)c0@f-yylWq@2$4r z?afV}@r1iwS^IdIY3|r+Lc3PT5*|LG(;O$;A5R75W9f7I{k}1@qcCZYO#LZByps8qY#NqCNfc|z!s6h1Vr1#pzUilMWeuSH*N1M z#4#0Z^}O?QRO-!&%89&2(R|h`Y2FxDA%Of=Iz_1!_+J<+k@a3FsVbc$*b4d||H#zZ z1>0;{3eMD{LwJeNp!3^%a$a}P+Zt!s$ED{ioS(p{D0NlbcTm$qmO8}yD05qNZ`{h^ zQ_aWY_h}jmie85LdmAUKw;_W9j`YXh5M5D8CVvq8o;%dopfX$Zw*z2?cwE94avGhH zpFMHk$Y}>vV!m)Msjy6}9~s&`+^A-t1S}9*l|+qV zL?6(cQ(vg#L#Vr0!7z5UXH4!xMD_h#C=i*z9VC z9hgMn3TiO6(>%d^sY?2&LbYucpr{&j*|v{QB;#V`EVxhb)IK{(x@}QWuxrffF5lm2 zn%l0hhugkSaRr`;JpYT&>iDwzj-q$%ZYQpEV3y!!_e=^^fzKHeAUwv@g48@ z7=aP8fZY$NJ5m1-O*15!f6a34Suw5c)vipndt%S55axt3w_hvcet9XAP%vfB>^a-d z8?+J#;`IR99?i1XT6XP=>|mCodtO!!83hwx#WM($WT-!iKtkq57d*3fTnbGcF*2|9 zn08pac}g`1QSo~g2@JxaX7J0Z5mSZQmwD=mqOK9sTU<~5!?J8yOg}i`oi_!usOq;( z;2F}`fYC`vLyw;Xh0Z!gB)?E^M07U4Oy7o>9Jaf7%D+Sp`FQ8@@T>Md znWJ`nXKf{_D0XezzpSvgX~s(v)^C0Y!VeLjYF4|;iA}m>*Y_CuqP~Q1!$yregu|jU zY)rHr%lUWXDPS~6055uZInZ-MVzI!RL>iaYN9G8gMK+N+t%*C72;Blny0;+^t{>HSYHU zwY{H>()^x7oag!3XV_01rKRDf&LOXHcxu-tf~E;TGR{;;N!(a+w{0(>{EIIyl>4gw z-by1Q*SuvD@x7sVvzpQna}Qbw2HFmsAGh?ekIwe zIJI*`7$>+^HcLr?IXeA#fV1(}ePY7K#h0=5E(iq}lYjx1$m_o1Y_3mw)qOq4mF7Qb z{l0AZMBl5@$qgQ0xc-)E(xZ|qi( z4OJ(GEo!lbwGPkVqr?A1m-W<4-+IFey$mBZwws!AH-{k(&w%vFpr1iVOmN?!#gJrm zhLu{;!;wSMwqD(Dgzbkn>8EHFCBVs-OBE-=||Hz=Ao}%i(K7 zoSCFXt+OZ8ab9!nTQ$z7NFWh_jgLVN3!iiUoJDnmdj$shxf-I{K(rbW%p$LBGAzQl z8{-#Yx{>KsA)ft$HqAJ#H)Lw|f6Jc$Q6Ch3kH#4?Oz-&*a$$&!EE>K-JCrc}%FMfB;PunfC0slOO< z`#Q#ve-g?;mg`{r$=#vax0@;kJ4g5NN_WPwa%bPp>|SJU+n3mxj+khd>lw7kCp%tO zTC_cHgF`DOqYaqZ>F>h2iYuKkcky!;u@xe{T?lMQbfSM;sI)0Roe?#QI0ng58@%P> z4B&I-G&tFw4)9{v1!yJv0xg1a$`{CgGImeC9cS{%_Ma#vjV}1I1s6P~VV5G}_!#d% z2{mCg7`;^?9}(9gHXGQFSUx159+*!H7AY(%d#iH}bY4+KkahGfWo zFX2DXhSWtVb^Kpys5;Sya0>_5A9?N(;8ZF}K~@H`Ani-7XwEEpwim51Eptqr>Gko`tIP{Wtt?M~E#bU#Ng{nqrzRgj-~W zUjC<^EBU3@RN}F8J@UKLlwIqBuF!$sABu_1S+}-`Zm6Sy#j*lwr0+625I|8Vj308* zi)dPG=Eo;*a*IA8CM|mp*ebz;a}1q(n+>ZC-T|lc?Y^7>0NpgCA-Y(2-{A~HkQ6s6 zd7tk0A}5?i9d1v^rxuGu$&z|@li#etIq%WI1|L~t0X#Wh;g!?vq`H)@TG;fiB z9PcXlBmeJG4{9tG1oZ}fc#{MI-KIWP~LWmo# z2r+3EhfoDUw(!$Y>G{`!E+jQEs4B0JOJB4y+y8{E?)H*NyHxH8Tl4uniAEfUu0aVv z{ubORdj=ObOiUhi_Th?>@*$Sb9)liszZk2bPd6rlXpmS$B|2w0r08u*%qC|4mhv)W zD4p@aIeGkX05S|G24-HLng7s-=n0`BgI1W}3!z;5}2m(d<7DGtYFAsBn`nIu!ry>eyI< zzF(vCXDp5~E$^*KdM#u$LYBaGA)jng#M(|6W{B9w^lQlODfVzz+*5zjTtaAU^AQSOMBkssXMYGGdCe3a!27SFGhh zt^zlrw@j-)@t&&Ngx?(g_3&__CdNDvQ8n8eRQ|+&MF4e0Qt0`{f3pj84I3CBoHB-# zcYaY3^|D+zt^{s-4t6+H1I30e2lU(FpHOnI_g|)-wKdl8a=V>1t1Pa?cNjU9#oEYnSY9JIcTIrbRAh@K06e^pJ0zA~*e9x4YU$Z5RF#kid@rAxfzx0^!*Znn+!6cy# zC;Juz#rG<8AH0Ouey{reL9ihhPm{;u^IPMG^c%+)?gCWt^Qm-IDvk z`tj;%L&nC)iG#TRA)M37YOKN;#20knIgtmDf-TC^u)HY}sCO0aOe(_&8>DrE*;{Vq z9jrIVN9!ku5%4}2T(SmufYHkfKgd>iR!FL3qqCxSbofU%cK9#e+z|}3{-}RZbtOWSxJ=@azjX9z zON5l}m3!)lvWTxp+K1o2?}Z$qIq|rv_>ogU`e~X-#sJUktRG*e#=Yt0c^*~JDEcdw zBsbD6kN9gwMiuDuD<4s21J0iw$Q7KZHdUjsIQ%oJ?k`A~%&k*`uGZ8-JUA+XH05Qt z%Nu2J_4Sh{u}(3TM%U1&elLE}81z0Kb8I`vZ~(W`b9?siDm!J}R3zx0`z$Z5zF9Ul zzs%SfDBDp! zC^LXPX*d&3T*19}-;lOFu%DgV5tdf1g9*>;MHn8mjlMqM$MoLO+#Nh8)HDn1Ayp_e zqk{E@H(?TMnuT53`u7q%9k~<1O*x6UP3gmkx)KE%3E;`lk>b`aV-1okI1FO8L;8`% z6*t26wd&Gi`ImK)gVhyO{RhzH`33aFyPY1gpT&S6#AfX?$V&?t#LbiJz-m`j<;v06 z`z=t<|IAi9S(JiuHRA0eDhsRa`X}U-H=+DuWog)kNisBFF6M-; z@6-XcZGUQ+jL;fZ*SCCBb>VUnIb<7#+6SDbFIJD88L>2oj8OEc8Jfc>f5@>IqwNV@ zqpb*6(Dd&9L{*EM5SSqL7dLTd7P&JMHBznw@ZoV#qP8c6IlEIVw%@vhmswdJ*Z{WReN27>a69~B7 zXgIx2mGuu7_gd4LD+9WiE6F=Qale?DyIE~5Ze+3$E;3MY6)?~y`}zqjll31RpAaxP zRqod`gtw-v`sYqpb-S$T5WMgu)Ypi&_RD*f|K|B|s?7ZV89L#^U=+b83U-G0GWc(& zSQ*V;mGyTY3;50-3tp=nDi+f-yd8nPj-6AM{hx|7)_lbY%*3ku{KUGBKhk?U*@%Y)1;@9t2p&qWJ+^7vIL2`@ zUz}q%7kRhTh_M~1z~lMY&-5JsJimThHc?S@H`FuQ$(+tDT=S*5SS^C>(*I=ZH4ZXg z^oDe5)I+p_y_1afID|~Un&Y1a_V+KT%sr|xY0QaC<}`xrSJXs+Fk}mlpU~Wd^d-TA z)S&w~-g&oaGB4$Ivb;2vHu&(`y-`B7hr1dHQRTu|%?ZRYa8pHd0^qx##a2n`^HJJrwS3k)9C}%5?^caV0C<$iE) z8ZOL*F^ZQA$QW)9nt5+k}%g~5_f>LO=|N5R_XawF}iIg?#hwqg%J4km#j6LTUnHa-2OfwYh zG@Jx4W~N4*m2kVP3RC%b2)N}R%sAS62%t=j_vR2RIkcxhFGQv}j7f!_l&caBd8A(Q zWHtRMbmt*b*rz=CqYr*9y1}%_njW}$a=aXl=}&x>`niTYkl2H!y9d2vCW%m$G?B-}g53km8eFdB*BNahatcx(M%tcj}7b&^(?d5$$p1$hS&8R=xUm`Jp zH_>P`YaEfkDQ`Jm4#SLl_@%QP)hD{fF2)ub=t)V!uL&62)S(3*q-EYPOnnc1LxLsN z03mkaO@0ZWd;t) zT@w}Esi3SV2mx=X>_B0LhNGQK)it=iI|vTR1#vl@>eL-H|9Qrz>;+*&8II*a9s+8r4Y9lFBajx z6CbsvjRoi$(cQnT(tOR+^wgEYXYNu5Xfd=m(|?j!o1|8gssE0uE?C4Gn4$LF;)Dah zXd()rakBJ_u)*-!-*gXRV!_ngR*YnSpZRkCPPjVJD*OylCE}1$Qnwtbz@wt~bjR6P zq1aqoc>#6WlgRLt({vOtcyglT2$ta=Sz6Wbr-LGDZ5%xe;w6qz*-DHTPebG~?k;f8Zwv#O5_Wx}Fcr)Q`;Hbb<;o06Fvl z8X4D(S<|MNe(_~hx83N_S3UN;Dw7A-^|$uUZ#ZX9pRvjW7rYfXLzsGGxV=H7ud_4E zOk8)k+o58!FMjFN5`SI=^l0H^UBOjsAEFR2!VsoR<|9T!vAqE~et0Lfwu%5>yR%Ry zrV$blHCJY%qL%iBu&VJCJCEJtAG86 z9%V7;#@@Qz9RF~QM7_v}IRCq@qAB^37B6$ywAW$;a$w?EBaJofb;sd1_n}Zzp&nPJ%B$(K+RojT_;(*}(J^D>djN}Qv z{?V()BfrsplGW@Z^prAw2(&$mn3*1d0`-#OitkqASbp9sqT2{d&Iq#tl5y==lqpqbu$JVaxE!V|@5fe+O8}@KQM#rk2%jQRTH5G2*1p@jtDe zw9LQtp8|^v_zk8w3JQ2GfmVU;`4Ysff{X|=7pw`7DA;#F2Z7ya`4i9LQBY8<&Q4fU z=W)0=RruS|!hZ`r+|j59k1}P_*}8YgFhJs~kIU|5dlsb7&qNe}8F_tE-IISyJ;OQ- zi_j^CZp|1CPE6p^NotnRed2U=A$_L$=Hf^DisF1Ts84T2X|f)ii6JKd;0WcWC_oCm zEz=<(tq8N2Qs7z_Jw6muHyZusHj-HkqVg77g!IkFTvsqM1-=BOT)@$Np{Tl5>q)17 z!`!;<5Ek)-Kw7#q5vKe&?UC|XxlSI=nl^YB^S6Y$REPxr0~9a555V~!^nUe!xl2Cw z=0&=zU|H5ZFyka@Oa~?6T1hwU(`-urceD(x|E}2Kc zC?D$#t5G7ZNQG~h-(s!45Th1=;a#< zwT4Ht0r5XI!M9giALfvorDafT>VOzR<#BG;P2Sh;FavQ75{2=>%Nhz8j7s-;Vf`2r zeWitE&QEf(+w7@_#dH+OmQ7WGSS#~sK(XBnGHm|2(p&qa2c`Uur4sC|JQ-iIY&4{v zpHdC0pNHTpl`WBVsZ0U#^KtJsK){%V{mbFcq~^gu+vK9gDX+IWd~tfPJr2 zE^w2VMipV4R?Sy(gbghOVcQGZJi_lP0&OCYLtz0Gq=j1;xll!dzbkoYn*R8@NLuzY z1eSS$-TsL8t=(t3w{p0wpRK>68`NN9XIOXRma~2Xq(WSP$u=X%qbha}2|7<5;y)wx zF+YmDs^i|vvp2|%0uixqtN=@{FzO6R} z26D1GUe13fY)cFYOex_?PYf~9I^vQTC^`UrE!zB-apD2|QxNK6rN%jMGI3zw#6NJ# zb6{qK0b5G$IQc-eA@n#D{0^jT6Vly+?n)c@)q#@Dg;u7_p;;hTC6hG|QoNsA06mf? zUqo!m49}u;sRi9IQl!iHyo-ye>WL+6LXbn_qEYdMK0e?4#`Pf2dETACD2;BUR43*( zDSpt<#<$d?T*g+OZGIbLnd*P|CT^{?)(%R<0*ZYAJp!e*TKItVF|=E|91~oAFvt{6M^aj3*c#=nOjpPO7FGwkKjAHv?_sA{>4Wn9VW(p0 zEq{L3x??!pqd@z8`MIwcMiS=yYl{nv8xk?QAjpXVzM}wDw(9EAAoV5Y8hTJVMBze^ z=yQ4fG`ie!+|(h2gVBTg2Z$QLiD`h6o{wok?dUz7A+a)g;)Yxsi0Ie}jAQ}6ASJbf zLq?yvOSar#>NrJb80mo8-?-_7F(usZ_EYQwx#Y6^Nb@yO8`UR2#b4xw#b548ZZ2#C zv(0IdKNnZp!XZ4_4&9Skj&^U8XM(H-{a650`MqDO3~iLB#}FrCddwkCmQMK#{dEiy zVa1h+;>QYf&L*7JDwrDxttG|Fd>4ciow2umCOSY5q`fU7keYO-7z;Gjj_A@)hAoN0 z0(jD(BfCcJFTGhiyZ_SIOu4=IdG)40O=!@QmaG+>nOI*ihW~xFuxvw<%^j&Ce^!GQ z`ZB&3jE@HB-=_HCLT+N^1`|u6DFc^cPVLmjRtoR-a$`f=T-}afq&V=WDFsBI(LQ~q zr4q|u3KGv?6<1nyQ2mhq06-Bgq~Rd(Fqx-?L0TZ_Y!vl}sN31FaKsKiGBXpDh>uUS z!+M83UiND+`wKDM8>Iv?fN^;#ioxpY$ohEfrtBmN)f^TVGLy(MRp)XsLgTo_to zt17y`gtU43YJlA5eJ~JR(*F>@0_mbMGtmF$GbMDRBn{#x-(;KuONHGWS;S7thSS_C zN-W$MODtS{I}1G-k^TNkgSsLl0R{fsL1L#f!oj+k^;qj6`jn(ovXJ<8^KF-#F4$_y z%PHO@pK#Q&6#gnxoqf#T z!^L}w_x7<16`=T>qk_iI$%2CjR&rmIyAFU{*6K{;t5UreBwfc-tzD|rmepHQIjfj2 zW52-#WBNY9Ciw?enJFR*CS+wk{y_#lgx@BPVT10tQmQr<<&pA_7MxExq1eoAF73S+ zsPc(Mdef@DYQq&RI?>Hlf|7yDJqaMJ{@@T@$g6$DQ~Hi~L(Xy$$EHhEBxr;E!sgdP z&ppCaYL*g!c5lZa0~EvJiWKO>Ed7S`ApZVlyI@j!t52VDmnev4-M>;gno?OU?I$7u z0mDRPh}Iy0Aa|vNhX>rYqP~lg$}M5`#IpY>wc^|^XCF=ZNO$ra!Rk1{uv3{io}BM& zb!e^n@3ZQP!m5g^(90No63UMe4%nihgjXQT*=IAhRv@ds`VxPP@+MGlFEoAz@lZex zndl6@AJfv9swXWI+2xa>^2zv#__u{aWU~Fq1X$!a0wyi?Mf0?w=ByD(J=h*TJUZA* z->-O0H&EZj%zWz={#|5X{`0L1fkJ8*g~+eERxwU(gi!B?@hh_JFR_&lIeqx2;S`b1 zxrx0|5@4$?%`WY{O+Z2yY1#d^SiZ?&xr(O@WhD1e6J5_z8}bpO6}S>X{hTmqPCsOI zJ+))|9$UOsv~R*UzU4Tjtz*Yf_sJo&%6gHy@rpX{vw4Im50F9K)iP@IU5_7w)CkIeuiuIAkM!1d3DG4GN#*532VT6<2j6Xu2L)&CW%O!h)O$t^B+j0CBk4WCRj{G(*0DbZMFm++tQp6m%TJtt+dd|$*sv!3Q&jOY zql>cW+WtzGB&lJ-UXPO9=xl>MuUrJV1MM3X!D`x0%vwUPLdR`5q|o97y)&jO0-!>NSpguLp5 z?Mr;H&<7zv85kXlJRY2W4$l;-f2lIrP?YCk0mCNBp(xl8_&9}x#8>sQw`r}yTOU*2 zksCrbJH{+9T@XaWNJ{r)aG1lcW3VYIDN6l#;C+=y>SNWO$b|UCk6Q?fglZU9R)?c3)@xACM5 zaHV8Ksw^#7qNNW@cO9+%OdpTvJ9@Q9ACLL>3m-7Z$A}fyfPhKx;s8XB3Q5=Db_~Qd z3&0&DT~uOljHDtzQJ8yfq|kJQ0yYUTg3RMS<%H7p)N!hwuWLce6un{f=W>B`9!IAA zCs}RSSsrk(&Z4eHI z(5%cTG4mn+HA1u?Mk|(pOAwt`z)C$5)F?LVkLZ(c*p(eos7_|u!-ZE_7p2zStcnAK zK0faL1Ux>d6m*cP&KZ!-{V0Ytqmu@Ucb#N%2-_=}zjr#7BTiH~Z(lcXi_fcai_dj- zl2)jJADMY3@<5Xo5MAK^9qDkXfml^u5I{Lg^z_|jW-HCJ(|6Pm{9`x5+-~QNTaWQb z|Dh?@92aW(ZS&y_)ai@(Xp9T@toI)-u)L&*{5@2g7yH;q7D+H2p`ib~(&_G2CdFf4 zy?lO4*3O&tM@0}7EjiuO*Njuuk;2@=uAfH!?-_oHN&IcgjsFp zJ5qLm(JyOU2`pH~-+z@9!#YVjqF}mI(jE!DzZS4 zJcTT+`XLKJ;sb_?3Sw{_V^THvbpyQ`&x)A)Ej2wiNH8blO+oVW^w~xT?IlVFe z<0SG%^St=!6>vL?1KDov)Y$FnBfSt3Ih|Smp*Gcs_xf&IjAfs03XIM}8VaZ$Qz=^F z2p2d8-FMp**Uw~sNq@cwCmVrT%I>3iCSPWxl&GaJ8mfVleGfGc`>4+8L@xtrJ{22z zsv%l$7`41qYIXIJV4kA}Q$BzGgoU*C&@Iofw1~L{Tdp&nrr1di_us#N&QA=`wZ9co zUQ^1SC3)E!3)$hv`%cY(f9!2;igr_To>(@WsfIf2x$xn?(TS%vjVuA-_e-$^_lPuG zA8IU?f*(T>MeFT5vz*UYg8#NuU3WTPW8B~-s%q~_H_ZCu5#VLtw`!X^dx`<3KFPom z4N0cpC!W#bdjlU)mYXV0&H3t(*1d&3@If7E%eMvQmSe^nOnhbo!QBP%j1qRgCq_*u zUEGPR%LrVMU^C*SR)pVEOK=y#(x-!Z7bf17#+CF7ae$>HS)K&)eL%b`!Pf{q_8X|s z4S0139(a!w7c!`l_3EGm`0jx0d0?DE_>ddqxBHCA1AJOIY5VygFXsu0bGul`${Edx zc1>r#xuyQEtPzX3E(y5AlWuU?FA$)fYh=ic50m6G?r2!VCV~6e2(H&_y6z2NY|JHu1RH}qFsKJN0qGW_XSrIO%_qTEw zuZ{CF0}*!!K+2RqVW!OI)}3v|W9y^6Sv%y*k1a8!xg}Tcx&E_93%a3?1?Z)^(4_oe zC>4=0iXq??{T~$qO0<1_u}1^ynNa6HcRybFSN)F;?h~V+c5}aOyC-iRh-B=wWI@)# zr?;mta=HlHzUxJGx~Qk7mBS|T4wO<1+Ujp{3IlV}YMOs^qvnR@Ty)duxE0?_Tat-9mCk9R0qj%Wq);8q$<)GUS^&J;A=rdk&A_AhK*W zEYJ@^C}jpz35Q@ok#AaXC8p&0;bB!)I6Y8u?cV4Nw;+wfz~A`xVzauUrfckCN)<(3 z&{xQ~ajOnEL&)Z_s}A@>QL6M^H2L+JB338Tlyjb53Az`|NxJUS*%W?}NXA;Esf}%a z?X}$0K88Ok;>v|HdZ43*ku4HzMe=MY@P80YQX0gVLGQU*sF#VSO+!ByzqCm&tt!>}lIYN$lnK4MEsxFi!H z&sQ$RBoqG6Q+yW06M@h5&67SWD3HBLzKH_K@hW**@6ZZx&%+sT)?Xv4U^b|HX0e3w zHtdUJY=5-4>CAEvx{@CLNGpjUbcs) z^yP(?BDIRA22a(?Z0&;9I7l-|G5SZ?kCx&GWpCXK#pwF0i8h8Dh?75$npwKykVeij z=nVyCMxNULH59G&N8j=;O7jx5+L@YMj3E&YHbq0?4Y~0Bq!qtVXyuCxY@CF0yHW z1>>v#6+-3>P4he|8^PY26)j|4j>qX+wW9ryR0$lA|g^5vInGX}<^Z+ZV4;S(qYTlr)S;+ZQc;w z2w4W+^N=^F+&iL5LIU1%_r=8&IR;~YbA;36lD=m)G9FlJlq%Mg5rJieKcFV2JbZvz zdiV$$rEkt{Z;0ckiPoKJr$T>N*TkQ?nvehOnJ3#sv{7UdWRVbE9hE1$T`B>lR6jQM znmgQ%`6X_=clh`5dP?oeYk55ERSBH`R|#y|eYpIIkc9ZD@0Lq>Y18&Gb}|!qYfcpI zE;>AWZBw?K*Anh)ZTu|<>d!$B>n$Y@^gP7FGI*{N;RK%``UDBT7q8>31I`}hGPTpT z#Kf+|G0`2WKpF}6vDTLy_uZfg9Equ^QYO;`rNc`1uCKLU9TJ8RiGN&)NNDkm7aQQ2 z%*OaS&UVJvELaH5VYgRKqg1r8;cL74utnbYDcRMpLsU+|`7c<=ouy1QE%%b##5Hc8 zL`VNOOZ1{I(tEY_ub=ft7_x>JrjA#JL60Z3nz!sc{Bsfv+zZZ4@LL2s`}U8GlDM)j z*fQ#EY7|=B&!eS>i(hs4mdUd?m;cL>9Wc*S81O`RnX>D| zv?%7=?2M}ttG6oi<7my+QC@tgTi&!J#|D@$o#z`~wU6v|*Rku+Z#A8ZDmCQ;$h0*) zRpt#`939>WrUU{w&p~h%$u8PH0aefwKe17po}Aal7WxLshlB8vwP8^XPda=-6!gw zAKSo`aKA<{zEQW4=fpR%l%zKDNDu0G>kT@~(;t+7Z!L8vvww>sUk{1-CEKsJ-Vm7% ze=#^X^TI&%U~YE3%2Ii=%JS!yS?z+2hq&`k7jFvYlSozvK|ik!)~$#E-Sv(hy|Mga zYx39)!`;p=FwEo>*f-@s$6NVghOhAQ)ET8%U<|R8Z)j&)pxpV+l33$s5-ttjNJKe* zcSNacnuAxAH9R)vG0FkuEJ>KG9oJS8_2wuPl5@nRAc9!|JuxfP_7W^qyd`>oe@bI8 zWbH4JrBe(Z`Nhm=WCR`kh~dbET=LIV^0Jw=dE&DeO`&atg=A^5i2eMAyk*JOQjGr` zBnhW*m3)~HBVD~swnZZ$6=$4mItUw9BqoY8Y`QyA5!@Z=@UJ0=y(zxRU`0XGz6EoG zqy;@Is|j<%pb32=>l0I8`z$5*o>za`E6=t+LB;BS{FW6)Uywgww`A&)eyn{-DzO!IOeXDtN68F=frtX2hkp}md+Z!Ht#!{ z#)^=6a}SR@JBTj0X! zKFGUty!mN9-J$hw;{`RLrfW~si)97(8IGRwGJVH>kd9Z>Nsx&(YO@M+PPeVENZ?7* zqgk&S$R}xd?w>xB5C=lO%ER1XQ8PT&%xcM_G-omWs`l(|@cE=qIEg^5nC$AT)pnuU zNv`$_ydb6B@j_VIHo9Yxk2*hT#W(t;JjK{PCf%?)>Hktp + + + + + Alta Proxy Tool + + + + +
+
+
+ Alta Proxy Tool + Alta Proxy Tool +
+ GitHub +
+
+ +
+
+ +
+ +

Alta Proxy Tool

+

Connect to Avigilon Alta cameras through a local RTSP proxy — no cloud relay required.

+ Download for Windows +

Portable .exe — no installation needed

+
+ +
+

Features

+
+
+

Cookie-Based Auth

+

Authenticate seamlessly via the companion Chrome extension. No credentials stored in the app.

+
+
+

Device Discovery

+

Automatically discovers all on-premise cameras in your Alta deployment with online/offline status.

+
+
+

Local RTSP Proxy

+

Launches aware-cam-proxy to establish direct camera connections for RTSP streaming.

+
+
+

Batch Operations

+

Connect to multiple cameras at once with batch proxy launch and sequential port assignment.

+
+
+

Self-Updating

+

Built-in update checker downloads new releases directly from GitHub.

+
+
+

Portable

+

Single .exe, no installer. Run it from anywhere on any Windows machine.

+
+
+
+ +
+

Quick Start

+
    +
  1. + Download the app + Grab the latest .exe from the Releases page and place it in a folder alongside aware-cam-proxy.exe. +
  2. +
  3. + Install the Chrome extension + Open chrome://extensions, enable Developer mode, click "Load unpacked", and select the chrome-extension folder from this repo. +
  4. +
  5. + Log in to Alta + Sign in to your Avigilon Alta deployment in Chrome as you normally would. +
  6. +
  7. + Send cookies to the app + Click the extension icon and press "Send Cookie to APT". The app will connect automatically. +
  8. +
  9. + Start proxying + Select cameras from the device list and click Start Proxy. Use the generated RTSP URL in your video client. +
  10. +
+
+ +
+

Requirements

+
    +
  • + Windows 10+ + The proxy executable is Windows-only. +
  • +
  • + Google Chrome + Required for the cookie bridge extension. +
  • +
  • + aware-cam-proxy.exe + Must be in the same folder as the app. +
  • +
  • + Alta Deployment + An active Avigilon Alta Video account. +
  • +
+
+ +
+
+ + + + + diff --git a/package-lock.json b/package-lock.json index 2dc27fe..3850785 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,9 +15,7 @@ "devDependencies": { "electron": "^28.0.0", "electron-builder": "^26.4.0", - "electron-packager": "^17.1.2", - "png-to-ico": "^3.0.1", - "sharp": "^0.34.5" + "electron-packager": "^17.1.2" } }, "node_modules/@develar/schema-utils": { @@ -459,507 +457,6 @@ "node": ">= 10.0.0" } }, - "node_modules/@emnapi/runtime": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", - "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@img/colour": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", - "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", - "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", - "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", - "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", - "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", - "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", - "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", - "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-riscv64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", - "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", - "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", - "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", - "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", - "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", - "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", - "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", - "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-riscv64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", - "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-riscv64": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", - "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", - "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", - "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", - "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", - "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.7.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", - "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", - "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", - "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/@isaacs/balanced-match": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", @@ -5096,51 +4593,6 @@ "node": ">=10.4.0" } }, - "node_modules/png-to-ico": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/png-to-ico/-/png-to-ico-3.0.1.tgz", - "integrity": "sha512-S8BOAoaGd9gT5uaemQ62arIY3Jzco7Uc7LwUTqRyqJDTsKqOAiyfyN4dSdT0D+Zf8XvgztgpRbM5wnQd7EgYwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^22.10.3", - "minimist": "^1.2.8", - "pngjs": "^7.0.0" - }, - "bin": { - "png-to-ico": "bin/cli.js" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/png-to-ico/node_modules/@types/node": { - "version": "22.19.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.10.tgz", - "integrity": "sha512-tF5VOugLS/EuDlTBijk0MqABfP8UxgYazTLo3uIn3b4yJgg26QRbVYJYsDtHrjdDUIRfP70+VfhTTc+CE1yskw==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/png-to-ico/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pngjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", - "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.19.0" - } - }, "node_modules/postject": { "version": "1.0.0-alpha.6", "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", @@ -5522,64 +4974,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sharp": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", - "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.2", - "semver": "^7.7.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.5", - "@img/sharp-darwin-x64": "0.34.5", - "@img/sharp-libvips-darwin-arm64": "1.2.4", - "@img/sharp-libvips-darwin-x64": "1.2.4", - "@img/sharp-libvips-linux-arm": "1.2.4", - "@img/sharp-libvips-linux-arm64": "1.2.4", - "@img/sharp-libvips-linux-ppc64": "1.2.4", - "@img/sharp-libvips-linux-riscv64": "1.2.4", - "@img/sharp-libvips-linux-s390x": "1.2.4", - "@img/sharp-libvips-linux-x64": "1.2.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", - "@img/sharp-libvips-linuxmusl-x64": "1.2.4", - "@img/sharp-linux-arm": "0.34.5", - "@img/sharp-linux-arm64": "0.34.5", - "@img/sharp-linux-ppc64": "0.34.5", - "@img/sharp-linux-riscv64": "0.34.5", - "@img/sharp-linux-s390x": "0.34.5", - "@img/sharp-linux-x64": "0.34.5", - "@img/sharp-linuxmusl-arm64": "0.34.5", - "@img/sharp-linuxmusl-x64": "0.34.5", - "@img/sharp-wasm32": "0.34.5", - "@img/sharp-win32-arm64": "0.34.5", - "@img/sharp-win32-ia32": "0.34.5", - "@img/sharp-win32-x64": "0.34.5" - } - }, - "node_modules/sharp/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6168,14 +5562,6 @@ "utf8-byte-length": "^1.0.1" } }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD", - "optional": true - }, "node_modules/type-fest": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", diff --git a/package.json b/package.json index acff0ed..4995a90 100644 --- a/package.json +++ b/package.json @@ -18,13 +18,13 @@ }, "win": { "target": "portable", - "icon": "assets/icon.png" + "icon": "assets/icon.png", + "signAndEditExecutable": false }, "portable": { "artifactName": "AltaCameraProxy-${version}-portable.exe" }, - "afterSign": false, - "afterAllArtifactBuild": false + "forceCodeSigning": false }, "keywords": [ "electron", @@ -37,9 +37,7 @@ "devDependencies": { "electron": "^28.0.0", "electron-builder": "^26.4.0", - "electron-packager": "^17.1.2", - "png-to-ico": "^3.0.1", - "sharp": "^0.34.5" + "electron-packager": "^17.1.2" }, "dependencies": { "axios": "^1.6.0",