From 8e7e437b4c31c961259d6897bf914f8f05ca97b0 Mon Sep 17 00:00:00 2001 From: jokob-sk Date: Sun, 14 Apr 2024 12:34:14 +1000 Subject: [PATCH] =?UTF-8?q?More=20icons=20work=20=F0=9F=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ICONS.md | 6 +-- docs/img/ICONS/paste-svg.png | Bin 0 -> 59420 bytes front/deviceDetails.php | 33 +++++---------- front/js/ui_components.js | 47 ++++++++++++++++++---- front/multiEditCore.php | 23 +++++++++-- front/php/templates/footer.php | 2 +- front/php/templates/language/en_us.json | 4 +- front/plugins/newdev_template/config.json | 2 +- server/database.py | 12 +----- server/helper.py | 6 --- server/initialise.py | 2 +- 11 files changed, 80 insertions(+), 57 deletions(-) create mode 100755 docs/img/ICONS/paste-svg.png diff --git a/docs/ICONS.md b/docs/ICONS.md index 989ecd2d..b8cc92f2 100755 --- a/docs/ICONS.md +++ b/docs/ICONS.md @@ -29,11 +29,11 @@ Copying the HTML code from [Font Awesome](https://fontawesome.com/search?o=r&m=f ![preview](/docs/img/ICONS/device_add_icon.png) -3. Paste in the copied HTML or SVG code. +3. Paste in the copied HTML or SVG code and click "OK": -4. Click "OK" +![Paste SVG](/docs/img/ICONS/paste-svg.png) -5. "Save" the device +6. "Save" the device > [!NOTE] > If you want to mass-apply an icon to all devices of the same device type (Field: Type), you can click the mass-copy button (next to the "+" button). A confirmation prompt is displayed. If you proceed, icons of all devices set to the same device type as the current device, will be overwritten with the current device's icon. diff --git a/docs/img/ICONS/paste-svg.png b/docs/img/ICONS/paste-svg.png new file mode 100755 index 0000000000000000000000000000000000000000..1c7325299e391f4140759ee681bd2494fb75c910 GIT binary patch literal 59420 zcmdS=g;!f!_Xdo%6!+o|#oe9Y?(XjH?nP4^ihF_L4#nM_;BLX)-Fi9ayuW+zfAEcO zWM^coti6-D=6-7(iMI%L{+{R2zrzY7F%;hI5kAcK!4Tx&NQ{=VUr${7;__YNf@5)w~Q& zJ7B&ONW1_2n@!+p;fkyyO?RX)b98;=veg{Y*WdSjgcI4Qk9ZYlh*;3n&Mq2k`P#?1 zgoAJT^KA!~GR=?2Nx7JBo#sL&^JemNcj_jvy4API)5F7)(?-*WxYVPyysf_`|jHucBIHn6mGk zhaw3K<8nUuy`%2X2;BVXoUxOZi<2ID)A_lp$75hQvnOXpgeL54dk(Am0hXU8aTw2a z4u3SBQ2$6yVej~s40!~8?(+}v63%u#ujR@5MjGRzA^m9WX?wklp znWh2oSrcGG=FuNRWbPVw36t|w7`8}ckyk^Z)uewR};qz~n?urj%%_;yKCj|RKA zU?mPK64)ickecxepYJ4O?y#Z)4%S=0OhH50AanY{x}v+X?RZ*w$51(AlEdL3oCDa) zv)g*caXc2Z$f3KTa$k6q&$+!{#keC2R z;c6lp^X77WI=6=}eXg5%s3n0tk(BR_v2C2+ioCb!vvhS5_r_o9QWKMp7!FQ8AP`R1&4BybPVJ9_KYK;evq262szsgnm)6aJaK_8NlBx88SFgr4G z>RC6bB7-I?=GZhbUv+;C_W)(>dy{WNP)0X-HP0oCGkT67V>9nI|9MU<@vZB%wp=(aaRr-6 zr3FBAk={KGwl=$AeGsBy?7wGT=L;>(<*!WUuJiuZaQLz*wjRpny@7xUs6|F9~KIIkSJ3OSy-(@!9$vMKdPt z?C?VT1U*oAbw#xn4i%fQ&lv8S!TFr+Zh?H~OPk@TdUK&)?hItP0Y?;s<+D&)iY4Kb zwnGzypBuW!&zWuf2W6>pd$)|>oeSvg42V}W^0l^~7WMdOM+DE zynu&rUduoPuC;CjZiKw9&Ei0&0c(V z=Xa%X2Rh!(U*#z3ydLLphy?h#o9kslO|*;6)@!X$i?6$gf{ zHUdpB6tmLP4(h_k*@zU&*&QHHS~K7jOIj2sz|65P1p;ep+rXhBV;3(}#b~Wgj4Q}r zgQyY9>O8QXs4tD``RPxR2yzb`^z?^*Ej2Ib~Pe1jrxFVP{T5VPI0@dU0x>jg-z7x1)` zq4r|hCzsIhtmJ(+Gec9%+H*S@4_6g3sGklgXpeyCICMck&ioOZGhiw@cucX?K9--Y z$t5juRgj3U8Z>H5S836^12Q>U%TnOWgmWxME*Y!{K2FQz_&L`j$b+S7F{>WXbbK2( z-RJK{U1p(VnK)e(k5W8jdYCCkDwNGnw4i)s%4R0&EYUxsO>msqyJxTNrvI6!n9!j3 z3)w6Uh0q*K$7QR#xH@a1stlTdrKhOWTZWuc!4-gT)c{{ebQmFZy^3;^M}R;*CRSWI z^2;1|{az#oVVsg=nGjb;c}@|0OxGY`DUF^!iTpLMJyvox14jYm+*dgcK z54w_0<&-~a$L9pR!qQf)AOHj3D9K)zOPx(+i(?G3UI#L}3|#yh7LFQi-deKAjY-5n zmB7%8_Ca^fppB8xvJdn%19OsX3KWX#ysvk(8}AOz{pfrf$EC8*MUDO{EOijw4Xn*8 zL3x@o*u@T9fHEG|s?Lfg6B=T`oWZLs4yM6#$gFDtgv9BC82p)Q7T3(^F`VP=>U~Vj z>jj4Rdx7DvdKmj^B97IpYB_74Pb%O_BJdE@Ed1v-+*DUb2}zMbD~!nEi9al_N6VsD zjRkT~AOueqI72ICxaHK(=a8LOE$nT_IipvXkH1UKCvG=J&JNs-NxH{XAKYFte@`@> zEt5ZZ9;op2)lyj3qp6^;QC`Z4Ey7&1u1al@LhP(UUW)Ol)u<4EPTTef1H0@zK&B!D zN)!BQb+=)cxUhQo>7I20p$uFHQsoT<*M)Hi&*vl^yG# z3)(!;bS#&MT`72pjl=7_u`cwadRTqxXjiT{v7y9F{x;`(I$WH{&4wYofG?K4_&GP1 zl^<>BcPZ!+s)k`VSar;}zb-@C)t1l$vV<&eKM1E64Ca2OGC7P`Rl>d}5z1~r-NyN0 z$t(=MYkNI@mGgs-b5k^-)`;cIXLXMnX3=#gV~6_4Jv>a-&7U=t7jKtW!}X zlqkG9*LWz=U~?`g@4%Zd=rB!;l?N}Mf6a=Sn?kuly&QJQtEN|y!r?f)8V0K?_p(+%q9M-?okey0q z*S3yW7=2i^3k?T+yFkaXvbk1zKOw>Su%}{w@}6YFW+iXg+L2!n9tx8?W3%a~Arm^e z)0`4aIwo=ATtZBd%iL9o66NsPl+zHE99W)$l^gI2VbNYaKut-s$HGoAJG)_TgFe(bZB6@Q^Yrew?_@-YS%(4W@d4sDV!o%guH8OU$hl54zj zAQ8cL6z36F4h`h9TqC*e@Q537_MumB=9v<4kGNn_$fl?#W5*gRVY$j8E|xmvUL#f} ztk!7_?6kxpYGxBu08t#E7kejN&q-$2MP-WI0(dSfRAhFiQSX1oTWe-B%c3Qd^gQ*z zXCJ`iZ%s2-uy4nbgG zBp6f~s-(y0!ZWyhykT3ssezC*kB5|c3*bI|yrD_}w7lN3gy|utzbkv`99veg85>jH z&ml+=2!{BvBU3e4(tp>YiOtQ<9_|17`=w^rn+q;N6)Gdvi14ZEJ7Z z+|DgI(Z0TkrUAObrOibrN3DYhUPTHpXhF24eywVS=hf`1_y3w)MCoHN!C9QVB4pdf zojsXX-YLSrqo{J=lCdHgAb7KAf5T(Z>~N{n8sM`Lr@DTn{LDji@4WkwXzjEAjb6Q8&)2NJ&jvXkq*mGy%e?? z>Knek>QpmTtx`T&A?omc(Ujk7KM2Ts#8nXW@Pls|q22~f@hiO;H|nOpCy37$D{o36 zSr>RscuYo*&1>;7#SEN{cJ8C%(fO6hdO&ktPKH{S}b zFwkxdXacxyY7)a%YPSz8c+PZCI?6#)&d70_aciFGEjg11J0N7aZ_?K2ka>W|<@P@f zGBm7OBf}s@!M-S-0N|CcYbE&4DHU#mT2|2x3J1V!P54Zp34vaisWL%aQJy)R%@f*yf zItNcygxFa;*pXZB`W>MZ(*0RQ>Ra3)IoxD;p!8CH7;u67D9pUdfR#OzsLV946{|t) z?5Uf`$JuaRS-){7c2vgLo-|Is@cjVLOvZvCT?*tD&bD^gibWJtlk^GZWvuvQ92Pde z-4lulGdohj>lxp>HA(BqOHX_gKY1Ma)!_%u`IgH85I>d;9d2IRM7Uk-GSbGzO6&0e znZx!c(3EC=*jch|5tV`=oks|45I3{IxVEO}ppG?stXGy$ z_oked&iT=nq3icHE*g#+b{(Mk=B%RZdjaXMPS#B7zfMrSO$MdmhF(n^WbdcWS_iRG z?Ndmb_Zl2xAro~irUt{~ocFSXmROOwn7CI53M4g-RAmM}XYJoe=uelVe{swXfp4A$ zj@YUXcIdq@>Uc1z;-caJmw$K#ueWB|TrGCdTkV%s_V?+{l*Gjzi|Eu|&s%N0_;j~y z3|4f$cX8J3Jadb=}lF_j(c+zuOH>V&*X!6VA`@B|anU}`!`;lkc*zk3YF?B-c zKC6j-D$Jo>Z@|!b&%mc+GMni~pXV$>#Yd7m=d3}iJ*&w$L9eC?jL2<}J}#-*;vkTx z?Yb}f{@l=O50CJecnhc#8p+>RN&~ES7Io8XKehs0we=8)J&-_mv_bP}{>c`pxKPb+AQrP0vAC7zkHA8`=xrxI51uNP-B?g% zk2mYpU4E4av36}x{1ktdP{xXeCUbO0LzJ7Dr~@Rodkee7zAh{&M>4c!aSX4+UF%|G zN#)fytMB_R?^b?^&(dNd-b*Bbgc+vKBxX1kx z(PtFt1OsoN>};;zyN}Y>zEy!5J+%YI6Q-p=&u@!Tykn&IG;*|&jnG#N6eJ` zWyHc#l<7Cj=U#t>im9|HYVOmXQlpCRa$=#^qqh`DJUvW8qqfJ$!Nfvbi{W4kZYgiH z*}#_hJCHpmT&;R=`2=+=bzmx8lkUeelpeMXij|+?KpMmzZQ&W|6Lpz&z7yY6bNGm( z@R?OjFaA?M$!nAX(nU}Z@aV}yk$OV)Tl(bxc)?fUy|0uPuc~WGUnL5uN^H0S19jy; z!SLBStycNmx$AfQVYq8~Y*7OqqNK9rjzR$4Maq(Etj7XEM>|`HI2ZjWenxQksUzQ( zQ>eK1GQnv4wm8BINEw$ckd~oq;41n#9l2aoV(A#v?3d)A(VdY3TVW-m`rYox=yqcN zPn3+aTrhrMm_T!-1QI5-Mt<5Q&+EW`Q5ElLfnk-b43#a9e_rEgyCxQF)Ghg#MdeDL z3jOUG>wtR*kZO;zcq|98F{`x$XRqH8JOpApeu+$@F)7XO+nyAyPvwT@4qO|go)||Kx zg!aG(DXc|QQ6e|xn`WH;J^9L#3LSx$D0Tw=;qLov?`Vk1RYsK~ZQjgC&2=uYyBgc> ztbw2$At1HBE@-drE*Myt@^@d0j*`mRg;!Dj4>w0`6}l1FE0ZHOK=(A9H?CEUR@DH_d-~$zR}se!iv()sD7m+pD{jY?$d9}UKG)Ao(aREoyS<^W)hfXCV}!|z|((S^O+ zc>;D3J=qfXJJouC@Z3rcZpW5_CZUDY&`RQF^eVa1n8^+}I>d@{KRH2fG5-WTS*)ns zWT*-P1}sY47)U`4UJTDmLUJ*yBkdkb{#uxJpJy5nF4nlcgUvcNsz~LjBXT0@mgY{^ zlPn)Xs(B!xVL$`zhy{ahY?~0$j}EaX2k230G&<5|{q~+~f|DC~T&kq+T~0S^5EY-m zEwoE`)m}7O26#6=Q<(i6+Ma*9g>JwV4d{AT1O`-@`)WmNa~0+Kd`=V$P@9*ZZ7tIi zU$8m$Xt{Fb6HC^#X9MFig_Nfpd#8JM!(+F}YAX1q@}$bw)*10@tMh4us@y8St!be5 zGw9!yZCu7vS1CpvNOgChM)GQrO?ZO3#q^_(S?P;68P3}LLoMG6QgOyG#F<~+R$ItLx&%e7A^ zSvUiVvB)6q9M=$_Ha#@giXZ43Cz!)W%*FtzSd>G=HUa;2o<;Iu44vlfcFFFUyJKH0 zdaq7Rs{*k7V!ZeDpskK|~?eMxn25se#-Y9O5~ zTwY-;6P93N+$;yhaYgou3=y&leS3{|w14UVJa&Cg&M6jh@E z^vuIt%Alk%C!RQp%+nitm}syBoq2s~2PQ)g7U7t0%4pcZnX_`nT&gkI(Klkn$+0t- zYB$y37-mIlWEQ%U{#GsfhTKKr_T+yfdUW?#MEyNigar1 zo=Gtd8u%UKyT@50#!?AqyG(>-s>7qE=X^Cj#WtHqmU5Y9iB<*&V0QsK`gGEk!T)q;Ps ztdWOC$?ScBQ!11CsSM~ArNMHeBUYH!ILjnNQ-Q|Blm&rUgqhlLz0?zaT3c|1nr4o9 z36VTT31qS`{W8^J0pRMfruLcg?|5zPmOQsM$CHMzOw@gGSpWGwRln?)p(ySe9!`A6HGM!$yw6TGMfk) z)S(O@=sQ)a{ng7>bz&%ieeo++wUgBjZ&C)jGhDM=iLH();0TZcA2mebnxXA%Ol!&= zsHc#5+wde7y)vaeIEvJFVU6FX+;p8*Tly+4A{0cK*_#_`0$Al?}vO0W=R1St4 zs8Iq}z>>%hP3$3g)AMCUog_Lkvh8So%FNW%^E8r3tBoBqM07QP4A6G54A#WiniOk^ zgnNG;DcaSOoZvBjM4+jTRA$U0$do;^XRR1e*-k z_LFHX7$qC~x1{~w)Tq4D;D;=cRawA|5ex*61u#RKRV)41ZG1LFknnx&nhsRnKL^70 z>$n#`QaHUkbt#l+dL7~=8#+GD!e`w9`X&c#RfSjCTCL~t=kxWA$SsPt_&6m(0wPTf zxu~9Oe|EM$nf!no{ zo@9h4zo6_#TV>u!y~6-LSP8ih11~c|R+kPGK^nr4qn%*fS!{EZ?S50$$`cEmJ+p-` zzmIq^vD2^1v0JmDv?+|!cA-Jz^!vdl34T#n^~vEj^(Ks%f?l5YvGmEhm#g&N=T+DkYz*=R_JvIj4*@M7v#=H;qZ4WiD- zwOpy12o{ww)6(yJTha_KE5{Yc(=^e?oNLxv_7vb1y9cf?a{IDXKenRQq^prs^z(1+ ztC47j#)_|4!w9H6#kd>xX+IGl$2}b&yU8XS@)Ogq)q2wmjb!7Vr`1S%&=DS(?|MCP zqreH@eT#$dstpb$lp(VfiyEr1bb;!qm#{Y3gQC;$Y7xeIf7GzR|=xEWyeeO437PhDHWPYJUr=>3!hX2S=7v&aj{6zFpn;DpQ z%*Cr4{2AvpYEcdM9!ioay|6rU+7p3Q+SM%DpnIph)|NTfF)Y;Aamv`4`aqTH+yM|_ z6Jdp&96=$k+<{gclX_FC&v|NOV6D269F`0*6VzBD&P{*IbJn-}^xL`_$5Qp5Ud_PV z<1ci}kNVnR*Rl~FZ&r;ex~Tc9ZA{Uk?O=jteK=4#-3S$G;43{ApoDyf1Hh7r?L4S3}H=NgMQ+eDRyU z_@%=}ZsOIc8!o)BRl5(_^R>h%2No2UQKBbZV&#<Cx=?kx|Yvf zY+-CQ=esMME|#2N0Ax@H-~R91i;>xBNYCj=%7+|Umem_*rwI}Bzf<2HAMA9!mjy-5 zb-SdNnVkI^u9$$X$sa9idNr=F>x5PY*x(uuw*}~7sAQ24hP>R9+&0vKR_0l#j7@Cb zrcuORU3H+Xj{mb++JFp{Cn`*%W&*0C>dyDXBYIXS{51!nF~^X~U*A|cBXd!3O`W|; zRgj}zcSh)cezd5FGRhMcosEX>El!y!ANA<{7*+sL5CF1bZBc;vYM9n6;1OU=2@!JsiyZBS~EHzmRIKhVT$Hb@xW^? z-m zqkq>r6n;}uIkC2WcNeA%w^WSV?pK4hmiYrJR(w6G$BtK^oSx+Zln)zG7I33akjge; zUiv0!D~(u7uL;jRj>`?3(zZ5>{PN_j1a0=j8*M0=+A)dw!3zrV#Mal+v$9e8L+!e1 zN5@7_D4Qk8UUWlFlDn{#Z>>0bb`t1gAxJ%J@x2eDfDPP%jQL}O) z6pU#($WWsgz$XC(E}0Y4)sdEFcDK(4asOQeY_JlgxCPFMP5L+3@i2!EN(JG+lnO)N z6GY)5JtU!7_SboLLA4Jqz`v`m!B`A9qAiIiWmv#HSo?>8VqAZDYJ{<#2-mwni9Q(!!hiGPUozkmLiOc6=?KdJxu1v{D#3dsLUrh7H&FP?*I8DLL>*Y{W& zKPWE0XfV3}K0Zu030Qko#dhDP;_8l(@jnAxX8i|q{-^BpmU~%E2u}P*;=io<jLn*gK!;oE~iubNBMhcW_>oiAkQr#+tEbunXrBr{b zYnxcxCl*WcsF$U<0C%a~+S4`!U;pD?;b>T~FKFWW^3Koy>6(m0l=u&@N{}d-PLOzW zXjP@1lAklbB&T)_ar36Ot_lPZcJUX5>z+QYOaEyHzYHd{G?#nk-AxD%OrnU*wXANg zYNiapfKYl5fJ|@dn4Cj-Re^t*%c?US{Z-s2F7j@gCd*ux8oF-a9-BJ)x#8X3Et;;Y zmu{lMQP%rp|0+CP`D46pFx=qr-OGF79Vp6;ium2&ca~T1vnCcZ z-`!eLcL0+IBwOY-?zx;6&wFkYn8=);fi~hP$F_ezy-)H*v)#gp+d8~5+aagQD8BXw z_UYHlGML)ZqOqb6%~v;_LEnuv+uoNLX3j=Uy?d6~59<5YKF8#~<~%dNbao!O8v={L zD!+j_oacAikBuFWRZc)&U@}JD+lA0Ke9a;Bb;0S`Cj`SZ^e$5~ZQ=0w|8SK_Ajl#1G{dk0s*z6LlE26Zso<%D0F$b?QX6RKL85 zJtcpkBZP0kpd@;+r4YJtO5Dz)49cz+`*osz+}`8ZPDCc?#}wZ6KzH~uGckx;Keu-K zl{;iYCdm2TkZEWMB=FVI@NbVe?#wxR?T<*H%}y~d;SV~S}zJb6ZSEo5nFq9dSn#c5a=pv_`Z7_W%0 zE1L*-`Sg$LBZ`l@FEcFeQh3uKeEn5dA$2dvNyR^X&{-0&-hf@Yd1Sh&)K$@K#9e)w zgR1ftSLQz{OW9ACG{tX8saW>rvQ?u8Rw%^5eF8h;cDi0QoQ&oyja*E&=S|GZT#KkBF3rQZUjf{8RLGJu-*0x@W0jBc2v~qmxll z&NIwi8&Pxb>Rk22d6qO+TV&Mc@7HD4P-ztYFg-gV8fGnPqsig~JTJYcn>C{7V(|B8 z4hEjlo-c@h$%fX_ z3l^bAR1U{*HD(koMBiv=EIHS`1da}Av`9{T)W+%YmWenkfNj0V6h4JVl-0C#9*&OH z%K?FM;|6`taWWIknuJ$GA<1)j`LnRbUdZ5I4_eb{wah(J0HU#^WtG#)OTgvJkG%r^ zy!!~;y(z|z+WJ#D7Xjfg#D1_Kf)i2lN?c2((D2(i-1f(QQLjsZu{#vO2y{^v-qv@F znZ!eX@PXIud+x+q-J_G0jn!^q$#D#Ly&Qka-fHcrfX9)DPRhQut*U7uX` z(H&ew`~cS}Xy+yB>LG;`0}EQ`lBhm)fo`cSpn8WyV+o{Uf#W|i5;c; zD`;BnX8}wj7#LB6JmBVV>tmhk_v2|R^DNsOV5TBx;Aq*?F)p%v9@gA1%+?24y6-{u zp=YuJ9HDhhE*tD>jdjv%%prAsF59tA4H=KXqQ{HsEuwEJy#$Th_MJL!IxN+)ct_~} z1{E#XkEpMUBD$61jEsg+MBZ*Ieom_9aJBGpr337-U{9Z9YD#xD7!_bc7o;U;KTg34r5ctHDWPPe zAAO`H^43b*E1}ihf5}{@Hm73)ONKy05_xhXcvpYBsuqg!N^9fzB>SPu@o$vv@RBV1P6)0g(mqOpL#r<9SrNjrH1y-%?2)NN z43b|}7$b6W%MAaUnMk z9Vd$ZIl^bps=(_?31yo+s^oZl1 zZRK@elN}noiI`(@uqP+AB$LETAU-!Fh_#2ZlCiKz7n-7Gcl+H*VayJ?zel3Vy@{?j z62kiGT`ryp*$!XQn;2y0>{J!D+GlAs5oRYFG{4>*+Ub(icw6C|5sE=$TAi2lvO-Jf z#ecZqqPPJ4Hy!0Z2CdIVh#cT#g{9y=aHYuVDv{ESDtp&C(cI>h=OAXi9N_k=I|Isz zmH&<6e9KwaH9Op`Z4;j4ZhD}GY^{rr&Zdtbp21Z$Es=qM$B^SkvQ&3zmXRKTJ_;Yk z!oaE((XBx~sg${*SsqTG7$GTGb>47&?OCvgw5e&mh9j|Wik zq~X2iJMVt%^RIggr9d?gcQP#dW``xyBz#N8A+;aXox|%xr);N@bWbJOL!;`PSkg=&AaFY*ibZbTrH1JZw1~YT5-=e z!?a|?#4L>(3IaS1c1Ito$I^*ZL+VT8X0a?8>0UGpnd=4_KWNYh8kB~l>N03RT%soD zU399_d>!XuI6a3)47|`E#I^mxG%%VNjdiW9rgsa?FTZM#Pq`|02O?}uXsBp4(J^CQ znAb9)>NK@WR=jOtD)F6=nCxBj=#crMILYgOOC*L8D4ad}Ld<3IJn%Po0#j+oyD)wH z(b=8Qkm)}^jlmg6-JXDT)(bWKZ)UGU2yuk04EGCYO$MX3m2lCDN>n5YD zPozWvMa0^YNQ|xLtn5j7=&L{4L3e^-z*u?GDR086WA;BBlmN@Y9m{wT3Xcsh3LR`Y zHc+}VB)U`HQC()OZ`a1jA34&atKR(>~m+s5-9H7EaBsjAMXD0;23`81s0 zhzwEumYc}`ntmpaQE!to0vH$Fqu}i|+v&3dIo1$##{EG^@CjVUl7s2&Zp|4Q@T{o*86Qz!|L@Z8*DfirGZQS+CNLRXBoQ1Sifdi=-FG@Mx= zA~!9*vTG~`ZghREGPcKAB69u5 zes<_gniH#F_)gqf+z@hhw-EW~i7G{@qZ->`Dha34D_~FE3&1OXo{Fd+ohhqFj8qcW zQ4h#YYKgK_OQlF=oi%DEnbT*ALM#IEg5Wu{b|Q`IKU4-hb(g9l#WXcphTU*`sUzg>=oq4wX@05rh%N=RDS^vQ~plx zEwrcxLt+z2;6rv+wV5)+GjFpZU`fteRBmo`)#~rYt64#<1a$H6|IoHz;qCA5h+oxu z2EFDqpWJMLdmf(YFw`@NUWJvA}#cmJe0cdsZx63lUd#6|DFJb>Smd`^bwnbN;)+Z|A zp)2r;T>56ivU`BL8=AI@GH>B%9NQyeflso&&~HO+$?<}+(0w5OnDZlot%}~pF~{y0 zuFS>t=rLa1TGzjvX_dm?d>|AB1?7yrl2YQnnM49nu8VQ-w*WZz9a2ym8l#z$yy*$$WXcFu7 za_`=gBMQbD2*ZS8PT3gV_2!3S;xC2G_eHuftnEmP=k`jG*}Ka_&Ly5f>f!%;tjQRP zzPfF5C0HVtP=_{hq_p%}j~!}aUqVzC_;t9YXVZ-Z*&q<}o+CnK&reLYuJF466SQK@ z@`BN%dA!Ict5u5emQ6e2qTWhSd;$go=MU`MX5t6IM@R+4fm<++ZFI^=w?QBa zCvKXVPP@k=QlcjBFcS}r95TwapxwVcDcdyW}_?!4~k&NJMZy3m>0_V7*} z4Ki71F&i36$}5CLE2F)ak1-GeP}U#N0hfoyh}S0QRW_&1ZcH{@S7-%Q$BcRb1)T(T z*`?&e5>tPBO>f5makUNa-_J@U4yt_gpK3JJ)I~;a0MWv5&%COleM%!JO~#UUXkqck zec$nl(1b)~X>6edZOXixmz-UNX^DC;-hitw)=-z24d3M z(2{LR!U^Y-efU`U&8@VzSxN?62ryxfPTCkz7~U&p zbib4KFb$dBz9n0o1HPA6wGr66QWoC!nvP?}E7WT>>HNgud8f}2)H{teG1Klj8S6RU z1LJF6h|3o02I9<$emKVh*L@Q$4i93#a+PzdVG2rSuWN6>OgQibMub1{k2GT3JmqyRy9Cpc*VNbJVx3Kd;m9Uu7&Y2+NagN zHhaf8N0%%IKsopyja}0Aq3yic3Pg(Y7hi}2-@w{%6H000DyVEaMQ>KbLOUugr-X-F* z9;X|#a=HV%@jG8B#k56z4$b@_!@}Fec{n6L2=5f!SqQ6`|0Jx2kw6|dW6kwrc^5fx zC^Qy|63P75Pv_OFqd+*|9Qm&wl1bY%UsXMDGwrTHNJd47`dZDy`cAmGsa$kF{@acu zsrV^hHqI<{_bU)Efd*ldxm#{I{N?d#$1>rv$z;=HeA07!cb2NLiWqUFNSy#(9Xm5 z5DIbcQ7JwA3Vh+x-TpX@o1&SL6XaCmgA4(6-IP*fG$DY-f=IPEZX2rauU|py!ebFY zAoPjDxJAuq$Q?_3G@8ybeSDy%Z&uEI3bke=h)%jEO%*4*%(hTH-*uCi&2&G+Z^azjP>9)G#_UAqe~O z(X~U09t%eQ$i-z*Uz9OfjFdIh6o?EyEXtmDfRH5i#~Vr(DS%i-9;apBr)E{)4|?Ic zkgvegmCrUN6^#8zd8S%;u6o)c1Ww`}Zp-q}HyX#BMkZA>m*!a){Rd4b@dKIGo#@jS<4Y_+z{%4oRfNRW}>zqY`L}`+Yfm~ z;YD){8UW`P1AXJ97)7RhJ1wXll0C>g@fc|pS)sjhCg>dzaW9V%vwzF44;~*BCY;)#!eM1T+HvB0V;3o(LfyklQ*x3b$ak-*HAtiMs!Z^vMP0(Pz4Kk3&>@b5P+o;bh zBUIJ@Q_#>!X7#7x1KABpchgD%4AX541x9lSu#HH_468Yd*YWtPFI^P0o|;Q6%)0(U zS?bGpUH#&zh}ILm1nOr~@x=aN?jj!i*W{c1URce#@Z{sUTiBoNX2UX6fAth!1N4`T zs%+{OymY54Mw!EU>d7cDwU*!O2Wdq)tSab7#r{uQ-#)Z8O|-@2ZB1Srq(dCo=#lrn z-DaW5|1B@8YjWjK0nMf)0wKA9@Ultso0+VsNpoBXjlA%zCP__=8o?o7bgsZ9Y|c@R zh`?O%o2Fr0NVcwQ-t>ygXBt*Sh}DMzdAJf>M1h-6$nJ_Hg=5EJM9Wgdv4Cq-gVT$i zykgKHol6Bp1Q7v0zNF0-F5q%&_Avd2u14upeCBzdYaDS;C|XwLlmQ#vZMq0szNOPj z{*P%B%ga-c;cs3?uL_#aoLNd@;V%h|zd85=J`z2bKf6vyx@X9yC34VjKq5&+JIcfe z!1f#Pa&FpL^w2%e+7ifUC#kq~kaXdEa^x0Za|@|}jA2c{_1#H|_#zR9aJo{pSADd% zC-URDBP7WY`B;+PBLnbm?nxwnC<#{{jsJUGgJmP)4H@w2F@h%QXVl4Plvl>97p#i8 zB$Y<1N!9=S9>$K7cRMj>V=5)4q?sG+TY;+7?=g0rNpe(N;-2m)Zj(}RvHlg0)6#oV z4sQs{K}5j|&W|Dq9iqiK%g+PV6l`Hv?O}8}0CSl*WY}MePKCG_6Ts;_Ndc}t5fX*k z^3W)l5eP~ILf<8S+Yfb=l(&tlo2~4TGG#M!C{^dC#$Mpxg2lp#QkGekK#VWK zE-P|9NAf(GC85aGMs$lD`z?X)qgfR62GeLd8BA>(R1S~9PdP-HFnJBxBP{fZ|!On3heYDp(tYG_DSkWXoIf6dZ zqPquT5a(|45eT#YBop=m-!e&fLhKYRkY|Lf7|3BC6 z9N^{wbLzq8E?|Fac;TE{JYKR1)U6i$9<`b=J-75DWx>PkY)Lui#7Y=Je|B!B=zcYX z#tkJ^E5|Xm?%R)ydj&m@UkG>S?9hf@&`j|)DKXwki^9EL=9p{C)F#TusIv@fYx&xKi@R%ZD-x`@Q=mv` zaT=gF6o&$(xD|IR?(P&VE`i|g?(XiIH$Bfe|M$B1Ms_lpy=Kjxb^q2K#m%{p$vEUR zeX`C1Wm8Tkyt$&2nR~Rpya~D8?>z(YSOU+}=JQ@}*%zjL*MwjaaeyJI_-qLKO^hNle8%7@H&K{jGje1S1hinIv>Qj zDlWgAYyK?ePrbP+dEBmBykyeaVLR!G2GH_11U-tzJSvh!PIoGcOW`bLNL4O)jpX{J z9Xlmsr}oeh!NEcyI81Y!a$jyTDcWSI$e_wGwuNQ444oElGRYfP7T;>kVlMa$j5qE* zS0);`G7cK(EIX(VV&=Fb@SYrF4d}z`cnd!rN`}_d6?1LB0!W=HzLbW&G0}oILE1#& z%lR#cpv@Bbo+W^F+Gcp?r}&ibP3vP-AumsEpTYkGf7T$?0gO~}0(RaZSN0XrhWonX zBAsLr!|b1$r?GeY>ng^pa2)9+fes|*u6eO)doZSD6jKu;ue5$MG)#C*bKP%J?`MJn zjnGm==jhG5VVb>TNJPC;_CiL_T8()3<_;4+-BYpJYVWh`d}q*37)M9<@6RX=M@;6V z^gV9&ca6p*=NtsRoF2_LhR(8>EK5#vOcDKZ92wpZh-vU2@7Oy370eAg$N#CEkvKZ8 zl^iz7vlchoSK|5cy4-tEX11)${;P-o#YvDUo8Ym6j1dPga!hA=8;sluJt7GeYiN9- zh+#1KdVL8`@a9#4z-zAFX`E{itZZ zmTcJZ8l|LG@B#OQ;q=)!)4frmC@8tvk`RQSNITDu&-}(68u;GEJu#c@MbOUrsn?Ptl)hvTZHU% zv1)@%J?`Ug$=d!qObOWDj|^YNk#Y^ahfSYkm67B#AoBh)f$!;~4Mkc?;4L=x#_i*y za+VDP4*m{@TG`aU<3Lz{`Ug8m<1Uj&L9|&sa@uxzYsl=uK9fBZg9s$R6Gj)y?^1tSta zDIClKW>eRb&@k~;tpA-$$bHa10Z>@E(NPl2nXFh4s$p8=VCjreoEoaLTwz$?W-C4J%fxrQ*Dr(KAiu5HPsxX_Ie_fcqYPwFHBhPLDg6ZXTVG% zAKtdc$T!h~_vSuR7r3Srh@||{F*2TtS?DT%;fn}W(OBo(a^p|kfxI3L+M43(g1-iL zFYhjZr~DrOsMD}jZNGAnp1N))5FVA{23}sjMiwiBg(!uAk3(-HMb8SF;cK~uHO|lI z+@XOvZU#j(Q~GtY1_3?rgoMFDX$?%t{y|S1AL;E(tN}`o@O>nPMTbL`ce5D!n%+zm z_nDwEyW11)z`}o@x>!d_7eh=k2y z1W769)Ss*^GmXWgzRVja!`sl(YKu9GRI8CqcB&Q1vY>+U90Mkt>yL`qA@zHSBO16U zR@l32v7^QhHrNOMBgqhKA3tGW9qgrke?{kDijqo9B-tNAE42o)DnJ@yqPd&J%GgoM zC1O*0ESTI&)5o0I9L`31e}q-*{h2+0n6CA1wclP~&ja+GsaK+8Oh8%J!sxGE&OZTF zDF|D8mBs57+ps(JDGpDHne<0MpvEPpT)VSb~w*5zti z$YyeXjf*EAU+Gkq@xXW+TJqET;{O1%RAQJwkV+Oq7hq%^Xo3VJ9kR*ytsJhMsGN@h z?uAA~J+jzmRTDB&u;-_pP0mwAL~Xtl>siloRTA@9VweRL%_&GD1+n}upUwUFC+2>` zMD;jd2@UhJg*PA|X5CQVWyQkoIul<@dCqI93ytFbcUltT%428Z;}TD1)+AUUQ)L${ zF`1X6DG%}=8BDzYCg$~}7&&4b#>62w!GlPLD4oCDk+rTh5fF24hSZ^qXD>0HbZKq- zE^*0O=d}*Sw~p3tnLt7lVa{n`X%HS^XH;+p#p66Uh`55PKo-6$|=OqM=RPz3pzzub^;tSddF*@QJM5Yz7XP zK8@{z2CzYzl{p*b)_9}RZs(=ROyr0PT9!reO6qbfEZ2i?gX90ZIb|HcSv+Og)-^P0 zf!x+JYV~#AHh(TB1ns6DK+KP%+bYc?RTl7Y*NEoHxDMksWs^2xk}D-w4^nJ%UN(6EX@&Pt6z z$D?sMOnK00ITK=SThTeRN1(xQ5OFun``huXN}Ub`QXtLDslNDC(|l~l2m~mbyEFD? zJ3-+!=-XF+#A;fRK7kKm7Qx%^o_6&V!#q607yaRTW3tx|+7W6fe*!i*>zW>M__dd= zH(myvQFzqqy%6J!Eb6~M)8&9Hnz#(*B96d&BaXf#l05>q4l-3lHqZ2Jjz$e5Hs-3! za!&N9t<^+aj$kjZ(YI~}Gc(x)kQ1pQ~Tp0;>Zlcu@*T}JT`D6t;p zJ*St^ku5^xAUL93SXMoC*wrRxVkSI4(*ii?aTB__AJ*pW@6a)Ds4fdJVyCB%JQBL`KRuiKPmEy$1=w`fX@t`95jak2>n=P-<&L>!$cX zRm-HsBlA>3vZe3CRTGtqZ%v)o2?-;f5;E!Ob7rH5xNkkg$LEFy9luneV>X_bB0SqV`7!x_5%Hx~A1IPB^jbG1; zTP3c2nXjwkjGgUEPD-iSb)1H?O`^Ac)NKUxkIZ?7lJ$FvFVbW+2sa6d?JC~fwGzan zV!OfR9JI~gj$r9m`sRf*ZG6Dw%OIB0-G9&dj(9tC zBF~Oihm^X5F7o_EC677c%Xjk4O?v{7&nS<_eM(UVtmWC!$?fl9j&K2FS4=v;c= z_;t9Sm(zBQi+u^PHx*SrC_n2-UJ-AgDp=Kc8D=#kadgQW?EN^q*SZ#9e7f4{zAyN| zGJh*9_e7Szo3W~Ly|1&;^b%{wib{Ter6X%xU**t&!fxe0fSykePEs7hCUGdvyV@ zg>S?zo!m7IvG{A7GX2{XdFveKCS`zjL!H;Ws8zJ2}GSMdE2(A2X)1lC~YO!JUBL*$u@m`T5^}=FAh!G+@Hhl4Qu^=}RBc^!InNnoN zyPTY`jr5+e{nzvnoh)o4%otY~bok$-Wm}2QJ7P%`)N?IlDbmLEuCN$GArPpXlL zZBujFZ|JWqQUY!5rSbe7-)Vg0ESngM$K+(hz98M57fk@>M)I z;ho{ppq%(!P@lrN%JYl0pT5+JJ91k5w7P6T(TW#I|05J0@dZz>`owE^jvM9awFmg_ zvGV$fvGO^hGTn=8UIJJP0vi8C4b z&h|{|7r)UG8q5_xFb1si%E$}u%dPCyA3KoE~9^wz|FTUv)zXb|i2N7viNa3KlS z6e4u8&q~)WMNOi1xT-p$pX3uJWuqy)QQ%4gW+#nY3-e3l%b==)};pYID+JDI+7(67yXPSar73wV2i z?=W%8=O!bDXtus6=XtGBq}%kZ!)bcurK3AjyH2F}c+@Pjdyf+xv2xh`8!?BP`_}8N zKc1JFjE)mezxbKx&o6DP&xS1`)4_`(L7czFNA2enH`#o!*CViA+COT16%Srj z(hFSi#b;l{!D;~i6h9Z!<+061_e@^xl~r|*xO5v2=3DT3O@-o3(gbkFZli)Kc-DwJuSCHT3JsYkdWZrxB4~;})CktjYZrEMGXDXo%saUcoHa zjEvUo)fn-$zE0{jXnwa-&r%sS$!-Slp}$3d^DIKmXC(3e4Z+6djSVTff0yv{OUXuJ z+G6*)AdYoPgkL^mUx;1r4>)Iw($^iFwU;```MoMHeWsa*UH`RcQ?_?b-q`7vGRP*0 z4b=wdy~6q}!2k1lrcE^ZG_v97YS_?dx$IGfGhL#&|K>zgr2 zn5X;OY>TOV!E>iBs=Evpjmt1v=dSenXYM76W2Tlnx31HB<1L$6i07pE2-6>;LZZl# z<34dWZq%QdemhI>yFTJ7q1A$2+6J~o`8-dr@${P!`prJLl)2F@&4LF7e3-deJunvt zTA?2FWlMKq40<=2vfsYqq3FXC?;=k+QXHL#{OPEWw0cII1CrBUc~r1U_prvbEs#`; zH^PO;dIkDIks2!QUfn~Pw=Y)@Wl6cm-~9ty_LLqdiIWq-4-}-YnG`cNAWJ_#}i!(KNN73Y)k!Y!`J_U zl>a=-G}3rIG;_r=CtJMovU?ble$~+y>%R{Ys(iQ1)>HRrDnL#*_8=bgq)u5Es6nH({1)Q_;l6W>+)U#}!7z-5pI64-z*1Er}etRPQKv_~D>u$Js zpBVU=VD}Jtty26`Z_y<58JmW9(BAnQ>EHZPW&TCp9_!Ge|NDcG=%Yr~7}P$mP2%2h z)%lu7_tt)M-jldx_VW1|!JWrl5Wi2{-Mycy&ZzlH_)Jd$PGT45w!w~5}*Z|ILr zs22qOq!SQ+iGTM-7fSWwUNxMMdW#io@`7@zbRs)(Z}Oyl$98AA_F?Gr?00~8xYDk% zi^JON*>EVhE7hj?Y=2IFO?+DR3$a(m9obXGC;XIFDvx)!W zc_xzXk*O9kK{B#bL=WmkH;b&tv;{UY^A2_5TT2Fvww2MmnTnNUdPm5U_>MI>2kGb2 zUN)InH!wp}=N4xQz|f(l2&BhNNzi>^fs-$z3EbW^Oo!5&9<&1B~6V{$Jt&Ib)h+ z*0mM>k0}~zVrq=wOd+PA6PXR+Q`ws%RD%O3&GI8$`X36XlR|f2H=3Xj36Mj~sfy zt;#-V(-VlE6XNka#CRWA^-a3>f?T`P90t+DR?Kd}#PcB{N6ljBP~oU{=go@Yqi)}Ms+t< zZUJ*Ph0*T*6GBdK3+K0Vo(}}mHM8xG#r8DDJD<}KZhdmM#*wshz057bY2NIc#fYC{ zRChA&V(|83Q{X~*@rP%k8@pSC%uJGv;`~Y{Y z9i5)@@GvK?=K8p9zD|Pxdv+`aslFj7IxWETe!ZXhR9>yAdE=R&!bqg_k(p0h^jLNW zSwnRWT2!X?N6mYnhas*Y?26~OfzpYuWbcJ8KIpy|ssIL?O7;JtroTFEz~U>9754z+ z){W29zM!T>co85$QH#yI-rZiof2Dk4+~OuUVK4Rl5#ajy)3!u|-h-ZirlHW2u3H8B zN;&((Qr!z6&C$zX>rzfs(IQGb?8r}CH|tr?7csN&^Pk7Y*)=j(VIh&su18(?t0Rmx z%Tw^Wn>(;Ari~nR5#J>Ws>d_YTrz%r>k?%J2stV}!(_NW)H!)pTRN6&H-WzSwhifX z-jEhkMj87|51A`04#z_g28TGiVwLVXB!E0PYN9p-!<`?&vgcoM?K}vbHT4PR`8P`A zdUP|CR77ymPF-QoGq0V-YxNaYCC^)spz+ron@_Z22ZCrE-L=D)S}h5`r3U1sP+{4? z@zjm-YPK=qX3iUmuP2WY`M(qV zc}?O6Fx;qQ3gX|qB}<(kM7!*x0c8|DYvLiA1*F{4CI+)d7x3i7Ac%^*R_6zGNMqM8Yxp6B zj*^8?7YnXc*kp62T}{+=o?z$FzKfabELxoLNr?{fTt{!j@ufWe;$?NiAq3UX-p; zSy$isx34^J?T+`J-FRX(zNpLzK~a75n}}CR<+V6Sj@rnbERSl}D@Nk%4XdN%?MNl* zKYD|#pS+kQwg=am&KJ+XjmRDP_XKH{7l&(04uhD$7n?kABW4Jdcepo)K{ZVoLf@lQd!wC}ySY88i;v4*QEJ)^32#T|OOlj5BmSun zH%)A`eHXU9T&cDS*Pq*`Ed*)$?(;xC?Mx=t)zb3)XG-1$N(*7+7i`C-Q#DWi;~|=+ zXFdU;(}^f5cfgm7jN*Ys3?K#`;K8j}><46g0nTii&)@;)dv1?YV4Xs#n@5Du)m84r z24f#N7#k64wf5XiceeUcC=w)GmGY=lq{tedpjuYx_1jEz+t5_Q6ZeHbU1lxu17{hH zcuC^Hydv54xWu)Z;THi`BhRus#FM58hv%UoyEIaOa|vGs=ga=Qd#HB`7@de&PQy8> zF4B8!F`^latc2dGrt~a0aqA5ZcXEu`osnziyO@>Uu7V?S%K(j^WDXy{BfxK1nzp%1 zI_g%bbF(AwCTv2E=_bT->lq8rO*sFlI0HB0^GNY@NzpRQ8|ibExrsUH9XM)sW6<{1 zr00^gd{%VFo^MrtVoZSDp2Z!T;<2W||3ox>HKb-fti2??wH$c|$UGq5=>b{|OgZi~ z+!`U#>n#yeFxx#wK$0CS~ui!$q4%V?W7};#@>AS~EHul@> z)r6>n>$?&Dk|s{!sV%FqH~S-+|heiM7w>8kvFfA(6SsTP1^4fgcVp^)#~kvgVtstxYw6 znGy5QCoIFl*ntM5{4ESjm$23a4eAo*kbbyl+|zxKaXD!rZu86;o0A)GBM%F?(F$}T zh@lh<_-1@DN}9&btJRw$^{J>v+)T5#AAe7DGD`0I$!1bmq(S8_g4>iUqg}x+>l;_{ zf)Kud^;nM~E>{1ykj!))bt%&vs^`KeAT%Ska7 ze;=?5OzXUsE~*gvadNH!kdM{Uu*B<)&-t{i8`~%9itHHPRY|)c%Y9u8=7Fa%*y&1`yqx(TpB!V zxAH{ok$7C-@c^?}9kj=7M12|fg6+QP*n~VOci%I^Jx*78guVpNCQo{@2p_b4n4N2n z9d8I&=n@SawdB-z>xw}7kwP*3pcaF7Up8`q`L1cL=-b4p)m8MvcS~D$(IYJ5HVlzq z$+Y(qL-2hbHYeO~%}f%Csi+^<263Pr8rgyzs-v?Dt7gd-^FulhL;`;7=Dm7;Tlo6# z^c4Ipx3#tydy8?{10LhCAc_-R4u{o(L zGU3LaftJ(KY*xfwN4w>_Z=!9|i_;7l+G_J(p1*l|i)u4kn<0A`P&u z1TNg)u~qn>D{U|CIlppG$j&`qpz2=sx!qW85tZAr?T*?Zm_z;Xoi1}VptGr0WQd1y zBzZ>6-|1CQv8oF>N4J`GLtBHi_%(2 zLFJm1LK!y4FNjr+XR4!>4YQKAa%S;WY;owsk4Iy%v_Q;02EtOjFcDGV}+pUe&^;+6bhJV>k{$nUWXc6j~zg~AS0jk@0} zC$?BfMQfe7;@5uYa?#9w(7uW$n`Bl^CE=s6irn-$VG%M5QE`10*-u3`sxMs+rD#cP z{nRROd<;gt_0b?RspTX1{uGi0cXOa^Sn5H#RPX&NGG4L&&oTE|+d=Oc_`ukXcT6+~ zeZGQg2<7-$xfHagwdNZ4a+ww{EX!d z2q*GrAM>pUp%@HZ5Gz{CVtypz{{F@2LUp&6h!3~p|9CsF5NkP2hC#ofhn8o zL!&Bo`q;A{iz4ksL_Td)V|R4RhqfcHxleZXTu#8r4k|V!9OxZY)i#a_vc@Es)FfQT zeF;+)J>K}9W3&!hA!@>RQhclx_l*ro9y$Zs)lEwsdUD`FC9bE8eChG-?iEJc58E(iw|4hjmD*>n$j&IU_<|NBZX>|2k+nV2UeesG6ChsO&bThSub%2z zd5(r4A>xt+-gtEhx1F6*%ZeU0F;0%>H)Mrv<>j@!VB(clMZW0@q+IfEAi| zNTz+J-o#)^cYez0Ir3uCpv#uf9+EG+Nj~Jg6enVqspTC|1wDnv{a)oA?DJEQjZaL^ z=KgArs4JEg_Q{8q@N)7FE0NprVJ~Fx-Y430cRI1;{db{|y$?`SF}Zbye-9YL8Tn=u z&Bf1mNqYP@FZfGrL;*vp+k6!fc`xTVr@@HIr~erpJ3$B`2~MNy>77cl3)YfFr{9RJieLA zn=dNdS&*uR68=2>-Y$iCD8lecC21@ugLTQiLC*x^jN6 z+l)ZWb~5VZs0Sh2X$uY3NBEmNjt&exMBh9ZFeTqbm7MN|*@3O5k8bqFNO&;tm4!DF-SMbbvbj2%HY znDeN&RWqfv{Al8`!#m$?&qEEC6Ez46URu+_+Y{q4Q;c2{F7k70gl#1oR&vjywlu=H zzL#$XqMF4q3m;LcZ^1K~Sa$JgcZ8zglAR%^r5`A4uATR{?Kg1EX((On0kr zqovq%cRf%a_gfpgDIJ-87lOtY3jy|fxNYF}_KPl4+Py;_)v12!BdgK)AJ){`;=)F5 z?3}D=h--J^?x>)$j^cD-3`Jgx#XZ^G>XlT3c5GkNm)_*)pL~)wQpB~G+}A(+5%Pn~ zcH6aH9rx?YJoM!QHB%=~KD z&);Enn3EQ-R(ck`Xmk_cfC3xfR`v6Abz7c636$7Rg3}+V(vZCi>Jx7mulhfHtp3HN z%j)^@9Bzg5j%Q`#Y$Ky<_pGFk@oct{=SIK?r3s1#-2!8OZq)A;rq%Be#v{%ic)qT?(5zn3u@!P`nm-BRY%09ahZYs~KXfrg{FoJFaGuR%uh3}3wBQ4 zno2R{^sn8JBR)cSn`$+AlnaNst9woth?2v`s4zF`Q^i+=Zx{79_d|_>ZJRfn*w3}{ z(dtrKeW~7!_A_MWD?4mbRYnDdr5zS#7p|Yc#}b~}I3o-cP!#A#J@}S8B6=#`wjUa8 z7%PiljKV{h$mF;US4Uk&*wRu04NV`TbS3=7aiE&{`^N9A?FoB5*aNK!`r`1HSG5zn zgh?!itELez{59n;$0@sSA6_LJNe2?29qGT1=|I@~(|YxTV1H%)MF&*gSoxL!Bb3wx z9(o}Hc;G58fUysv{bRO)Df3W!WIMG6)Z3;OhoNSLurQ6Uu>u79-R={(0%+Fx*}(T- zxA7%3%}N%g=v$cb_L(QE&VS`y0hr!L#hF-gpd3bsE|o1j`|=4_wf;U)ozrzSkC~r` z0aG~aJY8H;ni?a;CNd`^(dm3nBnM~$w^>K?M=mZOnq1n#E!*pt=T;25xQrbPnTWzE zrpMFl%Yw5oK{A!{L+Z+v`7-WeVWT}g%F??8sg2cZ1cjW?E`7huh9`N!9Bqrew|1Y^ zBcUYrw#*+fg zLp_1kfN3?5!){Mj`inyzq>=6Z7$)2Wgn(%!un6OyWF{{>QTqM5an}}{Cp=c! zWR)}`WfAKb)d?aia=8nPNu(P^q1hzY@Wd+ECZ!)a`|BG~C&jSlc$o~hYX=|N44e^7 zPUuCBiB-hgJhu`cujaDB%f#|)uFa(PzAhnG_YnX{W8I+%>>4!wkZAeV*7_S9DEm;j6#gX%1QQp z5(8_{x_5hng=mI(ti@5aTzajz23>{PGg!wNbv?Zfo%xrJ(ko^?i|#YASppX%HhGN) zPC>n%1PvM%d47(m_(C4WsC_&qE#(Fl4#i1c&~`9t$YFpz^(DD9_@y+yf|M_{TrSHr z9y%g$p)uGnQP&n;+O`oQ_Mr$f^CrN)vKqB;4lIY-K}2Trg;G2iYwhEtlwCEPzvSlu z9HCj6$D<>HNU!{CWoFgTe@73whwG zudM@Vjb)0ng-sMB!1CD=;F`e(7-QJ=rqu|%wjhDixBf@tepvyYmdJ*jiNu!xy5 z@$lrw?-4-N{{gg5e&HYUs_}9O6p0Qa zS?rGHOc&ImSD$=tzEKm1?-A?t(j}k@uw@X>@}0A^`}JE&iRYmdTR0m=EX!j~O8RMt z(8zk7Voq(eb^zX6fafxLCDzX;%0*^-a%1$CVj>cC?z_qfNC|-VA^*Yh0{Spc){gR5 z3dgHOkDea1%ESiHFr5n04N?1I2iLI&dBo*2@8Q?nT^w!Re0TnjJ%K@p!uic}U>ttF zP^R$L_q5%3+Fu32X3se*>wh_r2oLc@FMdMHFfo`UBz4%GgjH@ID)F6q#_*eV%icb1 zeJDhB_9r{nttbA1%7Cz|nDhi?7mK7)z&6sRF~bngE~E1XS?)|#YaN9iC*~*lwe&EP+FuSK4#I=0=VDH?!uQ5RrlTh0AOu$*n)>NcIo{=u*i0?>v&_bGM1{kzq2kN?T|PJjBhhi z3H@#E(w+D_a#;QAn0~E|T3CBhr()dSec^3d^#nD)sl(cdGW<)oM)t@$XXv`jQX2i0 zamd?-JyzZ)f5i+H%Q3+}7GFhsN5u0b|Ihmg$Nx7BZ1=y!DP*qI(u`OG9V{3b>Ln>z zx5b2ezAeS@b4AOze3xu!#KcR`!&ge=ViyeXlBDDY0k(QUfPG&I=mFM7;J_Pldx4Lz zgKB7~e&3t(A9>i|{#bw2V9Ra%3w}n_>1ihaX?dytpkD~lUr!`gxfsr&G8t-iUh%+T zp$b1`yx(18u}kRhF8UdC>g}uh?-{Lu41ub&duW&$WX9$3Jx6%uFj`Q`25Koy@iIgu zGayhw0z-eLBI8M;WFG8f-;@Vt!YYIRmop)tz{k=lo9V~$KzvvPdKm#qG*t)Nm0G923inqRkLzAT!^x58I zRK3`R$m7K(VIZ+=ru#$)C=?@ddWq=2by?Yu;$l63D4JwX`wMlK(Ft5-2pP-(qz?MB zvk+7iNWeV(Y9w{&r8#;LU&%(;AG@N#sBAbNLO?F z$sJfD2;@HGcYyY-BILHs3SCH$JHC~2Itv`fJaqQG_c*Z^Qe%Izb zI)FbF33d#lFEGshcqjn>auHG9IT-D5JM0`nV@)0XGF{ z2)BW^QBRx;fVoF;o5lfZM$+hcG^h&+NNa!@pC(T^5D(98+i>m|;}~R_hdxMp0|`IJ z`mZF141dBa0rKpy@M^};fc}NmA*ND)zin7C|3d6&TV^agarsDslukK7UYB3W!Y`AspR>qDB6kuX{xe|! z`%tKok&)>y zP*M@G;~jIWY+)!16Ltjm- zX-yobDm5*=41!o@$1t8IH}cHQQ&@J#^4NeGmBYj@G-wMViJ7li&v0TvgY?;DV`Ge{ z+r$XnGTWTZ7awB&OPV-*KQ)_vYL@)82-9wa4Nnrri~l%UQjmQ9X1!QNq2NfNuclpmzI++wvx<|x zQPaYdK^V9_HO7d{8`+9W+I6+`wtGhRj}(gdSigCd}pt&+A=3hut~g}~+(K=uYd?nLU{8yKanYRwzx zZPODO0GBVWu&?y}g^c|gw)tL2EN_n-r20y3hpJNU4PZvp#m6HZ0|StF_aDaa)v~j- zEuSp1(7@^{K{UdTY&tQ+A0+i-KCC4d>phu%M`OQ8N~VuX`$m?NSxEl8{{P#}$U^>} zrG_YrC^`}-iZ0DK=N*vLv^twfg0R@m=2^yNh zLF(P$u8!iK3Vv8XYoKs4VM&jOGEyy-@az*(rw%e-We#W5J>%!et%INk$=i}|CNz{8 zsz^o;3a)*(=&5}Wgm_%cv!1x@e~f4~f%v8rtZTC_mLnq8wFoGH!#s2AHgbGV)j@J5 z+1Dy}QaxCk+0aK~4N}w0To&`>uTwK9F4__4Mn?2URQXqA&2OwdH!QfEFcRVu?5XE% ztjQY6rx-tL1}~w?H-8SnL-Nq=xq&-7OCMsE*KWK&E#Og3VkaH^j0X~7>P7$(VOXJB z?#68+P;AoBT7S+i1DdZ&9|N?tpWIkNo%4#)^Dc=>Q!s!s8w6+2o6qaLC$D%+P$BXJ zp`qowB}L>=6^nJ7TwlN=+TH>znO~2bhcdguJjfhzV%~)#_WbG@nA3^ z3+^?QV{GhXFl%1lPvXzNkBe@0a7hIMxR*VHw>*p9fLRWEO>7xh{=CIV6Z6Toz#K84 zu-xg35L5T(`E--fmF&ZGQBG}n7)}E}BG2<@YMgYEq~P$8vD)r4Z?0J0>Mypb(1buv zoq1-A46#7&XM8!+YB`Kd$h){{hO#b!z!Ur?E{NKy%xqIk`kut-{_8FYd*0b90qK78 zcXUDVVFnG42qQOF3*g7tek{b%YRi*r*0e{jO2Tcs7HGZp^oMnX@C+YK>rwre}dZXjd#9B7v zgAM@8qlc^qGd@C~u?ry^11R}719OT7Q+zQs-RocaAQ_<^otdKKM{z$Y&}p0TzwATg zLr8igU*$1~fp?^>4Kxh9$#Hh^IX}tCKed4>!D-T~aubz9uL>TO3_nR5YdR1VaE@_f{B|PyQkoWwnbuX5@=;k_ zFJ|X#v&eeYhsBvZx9|~XbEOrL`$(%aloQ~@2T7!qvOR6!nyvd>o0~fm**8!5)v8IE zxQ}LHF#^?irSIMlC4Wx+?=ip4hzZxU9+Lsi2591!{d0_s_mvqZz%^ryK+4zV)6(AfPCnhk)@)xL4kfytllfBd4<@f;0>>$DnG+Wz>Bo*X!Tzz3ilw z6}{`nL5|fnq6E^9o99i;zT~Q?Vf!+Ck?N7OPVVz-o`Lfxzehd=EwxWTr&W57&+eJx zJm9L5rE&478|P8PQ8;9ODN^g@^)ZF4B4Z<_hRB+}=?CU<{Wkl7W5v2-1ze$;H~OoJY!xj}?M_q<59OcR*y7X&kexS7Mp&yX zYKN~}z$IF0iBRo#_Qr0?({LFVXQz2#74BSC;V%7BC_Z%Y?s4-Yf7FU6`@d&4-%6c? ziXpjzVl@l_9ldE9QGSq3HN(P$54BEx#T7ar=lM;L{u@!=mZcJ0Ju6Mm zV)cP|2j^Van|$oNjLE~wj;4^zjxKm6e>Uyw&f1QY_?RiF2OMJE96-aY4Y%@PM5x__ z_pxjl)em77YFpcrfTz@heA#K9u=o5mHWil==C`|Dd6`C0){u4iZTQXE{at1D+Sv1t zkGP&FXmn`*wuTwzv+Bc^p%E%3pFSc4oz*5qQH2qp=<=L^uk+d^eadw>&mj54E+8+C z5b5GAM&^bq2Wz=|Fhq%V*sr723t_NPN}dB~&V^sN8z}wFj>`ulX#1+YK8~UeW)mHV zUnp~nz*}BpYW{$OJ&EP}LYOmkL+K||xYe)5w)tf&(VlmA!ewE<8wiQGEAKVKpwc1- zy}C@3JXKWKtdgVBONbx?W)hrDSgSI#x;(BLOC4xnI;b=mR{di(46F5kM$zI(0Y-G2 zau#~(b+t4{&Z@mrSY}yR3X9G;RiRDwE@8wl!W`zGNA%9om{4cxuFt;a z``n~ju!%q`TM=puRe-^*dKPV-c4k)rGrJ4!x3cWYqe|pM6*7WhShHB_&m+pGQKCxLb?UL?5u*X&4}LJ|_8Z$2U_DArp7-5kjCFGVXAL@_Y;Y zVpG%Dg68W_Q3fIqQw-Gb+l=n_13q>iVZSO-Pje(^lv80g{AQ5#{o|OpNJv>JKp~x= zH&T%Y6ts4|Cm;BvE{@b|+~i@P-mC0f6 za^8_@#&XeR1^r=KLj-obEEqeRze8}^u6|IR2L2>`v--pJT%%3ilUDWj�CIkU+ZP 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 rzSY~FCPlC>WqR(FTBqW%1R>~OI6Wx; { - updateIconPreview() + updateIconPreview('#txtIcon') }, 100); hideSpinner() @@ -1673,7 +1658,7 @@ function addAsBase64 () { $('#txtIcon').val(iconHtmlBase64); - updateIconPreview() + updateIconPreview('#txtIcon') } diff --git a/front/js/ui_components.js b/front/js/ui_components.js index 018580d4..d50e0c39 100755 --- a/front/js/ui_components.js +++ b/front/js/ui_components.js @@ -186,13 +186,25 @@ function hideUIelements(settingKey) { // ----------------------------------------------------------------------------- // Processor to generate options for a dropdown menu -function generateDropdownOptions(data, valuesArray) { +function generateDropdownOptions(data, valuesArray, targetField, nameTransformer) { var optionsHtml = ""; data.forEach(function(item) { + labelName = item.name + + // console.log(nameTransformer); + // console.log(labelName); + + // if(nameTransformer && nameTransformer != '' && labelName != '❌None') + // { + // console.log(labelName); + // labelName = nameTransformer(labelName) + // console.log(labelName); + // } + let selected = valuesArray.includes(item.id) ? 'selected' : ''; - optionsHtml += ``; + optionsHtml += ``; }); return `${optionsHtml}`; } @@ -200,21 +212,28 @@ function generateDropdownOptions(data, valuesArray) { // ----------------------------------------------------------------------------- // Processor to generate a list -function generateList(data, valuesArray) { +function generateList(data, valuesArray, targetField, nameTransformer) { var listHtml = ""; data.forEach(function(item) { + labelName = item.name + + if(nameTransformer && nameTransformer != '' && labelName != '❌None') + { + labelName = nameTransformer(labelName) + } + let selected = valuesArray.includes(item.id) ? 'selected' : ''; - listHtml += `

  • ${item.name}
  • `; + listHtml += `
  • ${labelName}
  • `; }); return listHtml; } // ----------------------------------------------------------------------------- -// Processor to generate a list in teh deviceDetails page -function genDevDetailsList(data, valuesArray, targetField, nameTransformer) { +// Processor to generate a list in the deviceDetails page +function genListWithInputSet(data, valuesArray, targetField, nameTransformer) { var listHtml = ""; @@ -227,7 +246,7 @@ function genDevDetailsList(data, valuesArray, targetField, nameTransformer) { labelName = item.name - if(nameTransformer && labelName != '❌None') + if(nameTransformer && nameTransformer != '' && labelName != '❌None') { labelName = nameTransformer(labelName) } @@ -242,7 +261,21 @@ function genDevDetailsList(data, valuesArray, targetField, nameTransformer) { } +// ----------------------------------------------------------------------------- +// Updates the icon preview +function updateIconPreview (inputId) { + // update icon + iconInput = $(inputId) + value = iconInput.val() + + iconInput.on('change input', function() { + $('#txtIconFA').html(atob(value)) + }); + + $('#txtIconFA').html(atob(value)) + +} // ----------------------------------------------------------------------------- // initialize diff --git a/front/multiEditCore.php b/front/multiEditCore.php index 0f797410..7c78f2b8 100755 --- a/front/multiEditCore.php +++ b/front/multiEditCore.php @@ -105,8 +105,7 @@ default: inputType = 'text'; break; - } - + } if (inputType === 'text.select') { @@ -114,12 +113,30 @@ initSettingDropdown(columns[j].Code_Name, [], targetLocation, generateDropdownOptions) - input = ` ` + + } else{ + + input = `` + } + + } else { // Add classes specifically for checkboxes diff --git a/front/php/templates/footer.php b/front/php/templates/footer.php index 46a0e76c..efa278f2 100755 --- a/front/php/templates/footer.php +++ b/front/php/templates/footer.php @@ -18,7 +18,7 @@ © - 2020 Puche (2022+
    jokob-sk) | : + Author: jokob-sk (Based on 2020 PiAlert) | : | Version: | Docs diff --git a/front/php/templates/language/en_us.json b/front/php/templates/language/en_us.json index 976e38bd..defbbe0e 100755 --- a/front/php/templates/language/en_us.json +++ b/front/php/templates/language/en_us.json @@ -613,7 +613,9 @@ "TIMEZONE_name": "Time zone", "UI_DEV_SECTIONS_description": "Select which UI elements to hide in the Devices pages.", "UI_DEV_SECTIONS_name": "Hide Devices Sections", - "UI_LANG_description": "Select the preferred UI language. Help translating or suggest languages in the online portal of Weblate.", + "UI_ICONS_description": "Select which UI elements to hide in the Devices pages.", + "UI_ICONS_name": "Pre-defined icons", + "UI_LANG_description": "A list of pre-defined icons. Proceed with caution, the preferred way to add icons is described in the Icons documentation. You can add a base64-encoded SVG HTML or Font-awesome HTML tag.", "UI_LANG_name": "UI Language", "UI_MY_DEVICES_description": "Devices of which statuses should be shown in the default My Devices view. (CTRL + Click to select/deselect)", "UI_MY_DEVICES_name": "Show in My Devices view", diff --git a/front/plugins/newdev_template/config.json b/front/plugins/newdev_template/config.json index 62847e68..6ac9b477 100755 --- a/front/plugins/newdev_template/config.json +++ b/front/plugins/newdev_template/config.json @@ -589,7 +589,7 @@ { "name" : "value", "type" : "sql", - "value" : "SELECT DISTINCT '❌None' AS name, '' AS id UNION SELECT Dev_Icon AS name, Dev_Icon AS id FROM Devices WHERE Dev_Icon <> '';" + "value" : "WITH RECURSIVE SettingsIcons AS (SELECT REPLACE(REPLACE(REPLACE(Value, '[', ''), ']', ''), '''', '') AS icon_list FROM Settings WHERE Code_Name = 'UI_ICONS'), SplitIcons AS (SELECT TRIM(SUBSTR(icon_list, 1, INSTR(icon_list || ',', ',') - 1)) AS icon, SUBSTR(icon_list, INSTR(icon_list || ',', ',') + 1) AS remaining_icons FROM SettingsIcons WHERE icon_list <> '' UNION ALL SELECT TRIM(SUBSTR(remaining_icons, 1, INSTR(remaining_icons || ',', ',') - 1)) AS icon, SUBSTR(remaining_icons, INSTR(remaining_icons || ',', ',') + 1) AS remaining_icons FROM SplitIcons WHERE remaining_icons <> '') SELECT DISTINCT * FROM (SELECT icon as name, icon as id FROM SplitIcons UNION SELECT '❌None' AS name, '' AS id UNION SELECT Dev_Icon AS name, Dev_Icon AS id FROM Devices WHERE Dev_Icon <> '') AS combined_results;" } ], "localized": ["name", "description"], diff --git a/server/database.py b/server/database.py index 64e42a24..2f98f7c0 100755 --- a/server/database.py +++ b/server/database.py @@ -7,11 +7,9 @@ import base64 from const import fullDbPath, sql_devices_stats, sql_devices_all from logger import mylog -from helper import json_obj, initOrSetParam, row_to_json, timeNowTZ, split_string #, updateState +from helper import json_obj, initOrSetParam, row_to_json, timeNowTZ#, split_string #, updateState from appevent import AppEvent_obj - - class DB(): """ DB Class to provide the basic database interactions. @@ -82,13 +80,7 @@ class DB(): """ Check the current tables in the DB and upgrade them if neccessary """ - - # Registering UDF (User Defined Functions) - # - resultUDF = self.sql_connection.create_function("split_string", 2, split_string) # Register the UDF - mylog('none',f'[upgradeDB] resultUDF: {resultUDF}') - - + # indicates, if Online_History table is available onlineHistoryAvailable = self.sql.execute(""" SELECT name FROM sqlite_master WHERE type='table' diff --git a/server/helper.py b/server/helper.py index 67e253d3..edcb6704 100755 --- a/server/helper.py +++ b/server/helper.py @@ -597,12 +597,6 @@ def cleanDeviceName(str, match_IP): # String manipulation methods #------------------------------------------------------------------------------- -#------------------------------------------------------------------------------- -# Define the split_string function -def split_string(input_str, delimiter): - # remove any wrapping brackets - input_str = input_str.replace('[','').replace(']','') - return input_str.split(delimiter) #------------------------------------------------------------------------------- diff --git a/server/initialise.py b/server/initialise.py index 4613c329..e16975e2 100755 --- a/server/initialise.py +++ b/server/initialise.py @@ -110,7 +110,7 @@ def importConfigs (db): conf.UI_DEV_SECTIONS = ccd('UI_DEV_SECTIONS', [] , c_d, 'Show sections', 'text.multiselect', "['Tile Cards', 'Device Presence']", 'General') conf.UI_MY_DEVICES = ccd('UI_MY_DEVICES', ['online', 'offline', 'archived', 'new', 'down'] , c_d, 'Include in My Devices', 'text.multiselect', "['online', 'offline', 'archived', 'new', 'down']", 'General') conf.UI_NOT_RANDOM_MAC = ccd('UI_NOT_RANDOM_MAC', [] , c_d, 'Exlude from Random Prefix', 'list', "", 'General') - conf.UI_ICONS = ccd('UI_ICONS', ['PGkgY2xhc3M9ImZhIGZhLWNvbXB1dGVyIj48L2k', 'PGkgY2xhc3M9ImZhIGZhLWV0aGVybmV0Ij48L2k', 'PGkgY2xhc3M9ImZhIGZhLWdhbWVwYWQiPjwvaT4', 'PGkgY2xhc3M9ImZhIGZhLWdsb2JlIj48L2k', 'PGkgY2xhc3M9ImZhIGZhLWxhcHRvcCI', 'PGkgY2xhc3M9ImZhIGZhLWxpZ2h0YnVsYiI', 'PGkgY2xhc3M9ImZhIGZhLXNoaWVsZCI', 'PGkgY2xhc3M9ImZhIGZhLXdpZmkiPjwvaT4'] , c_d, 'Icons', 'list', "", 'General') + conf.UI_ICONS = ccd('UI_ICONS', ['PGkgY2xhc3M9ImZhIGZhLWNvbXB1dGVyIj48L2k+', 'PGkgY2xhc3M9ImZhIGZhLWV0aGVybmV0Ij48L2k+', 'PGkgY2xhc3M9ImZhIGZhLWdhbWVwYWQiPjwvaT4', 'PGkgY2xhc3M9ImZhIGZhLWdsb2JlIj48L2k+', 'PGkgY2xhc3M9ImZhIGZhLWxhcHRvcCI+PC9pPg==', 'PGkgY2xhc3M9ImZhIGZhLWxpZ2h0YnVsYiI+PC9pPg==', 'PGkgY2xhc3M9ImZhIGZhLXNoaWVsZCI+PC9pPg==', 'PGkgY2xhc3M9ImZhIGZhLXdpZmkiPjwvaT4'] , c_d, 'Icons', 'list', "", 'General') conf.UI_REFRESH = ccd('UI_REFRESH', 0 , c_d, 'Refresh interval', 'integer', "", 'General') conf.DAYS_TO_KEEP_EVENTS = ccd('DAYS_TO_KEEP_EVENTS', 90 , c_d, 'Delete events days', 'integer', '', 'General') conf.HRS_TO_KEEP_NEWDEV = ccd('HRS_TO_KEEP_NEWDEV', 0 , c_d, 'Keep new devices for', 'integer', "0", 'General')