From 8255b8a99b86864560fd1a9a8f6f3b953352bd30 Mon Sep 17 00:00:00 2001 From: commenthol Date: Tue, 14 May 2019 18:29:22 +0200 Subject: [PATCH] docu: Add warning on infinite loop --- README.md | 12 +++++++++++- package.json | 30 +++++++++++++++--------------- warning.png | Bin 0 -> 16407 bytes warning.svg | 45 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 16 deletions(-) create mode 100644 warning.png create mode 100644 warning.svg diff --git a/README.md b/README.md index 47c4dfa..4f809f4 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,9 @@ Especially when it comes to passing `context` props. Use [clones][] to wrap-up the methods you like to allow. Checkout the "harmful context" tests section. -> **Warning:** The `saferEval` function may be harmful - so you are warned! +![warning](https://raw.githubusercontent.com/commenthol/safer-eval/master/warning.png) + +**Warning:** The `saferEval` function may be harmful - so you are warned! In node the `vm` module is used to sandbox the evaluation of `code`. @@ -37,6 +39,14 @@ Runs on node and in modern browsers: npm install --save safer-eval ``` +## Implementation recommendations + +Be aware that a `saferEval('function(){while(true){}}()')` may run +infinitely. Consider using the module from within a worker thread which is terminated +after timeout. + +Avoid passing context props while deserializing data from hostile environments. + ## Usage `context` allows the definition of passed in Objects into the sandbox. diff --git a/package.json b/package.json index 0392c78..5c02a10 100644 --- a/package.json +++ b/package.json @@ -37,27 +37,27 @@ "clones": "^1.2.0" }, "devDependencies": { - "@babel/cli": "^7.2.3", - "@babel/core": "^7.2.2", - "@babel/preset-env": "^7.2.3", - "babel-loader": "^8.0.4", - "eslint": "^5.15.1", + "@babel/cli": "^7.4.4", + "@babel/core": "^7.4.4", + "@babel/preset-env": "^7.4.4", + "babel-loader": "^8.0.6", + "eslint": "^5.16.0", "eslint-config-standard": "^12.0.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-node": "^8.0.0", - "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-import": "^2.17.2", + "eslint-plugin-node": "^9.0.1", + "eslint-plugin-promise": "^4.1.1", "eslint-plugin-standard": "^4.0.0", - "karma": "^4.0.1", - "karma-chrome-launcher": "^2.0.0", - "karma-firefox-launcher": "^1.0.0", + "karma": "^4.1.0", + "karma-chrome-launcher": "^2.2.0", + "karma-firefox-launcher": "^1.1.0", "karma-mocha": "^1.3.0", "karma-sourcemap-loader": "^0.3.7", "karma-spec-reporter": "~0.0.32", "karma-webpack": "^3.0.5", - "mocha": "^6.0.2", - "nyc": "^13.1.0", - "rimraf": "^2.5.4", - "webpack": "^4.29.6" + "mocha": "^6.1.4", + "nyc": "^14.1.1", + "rimraf": "^2.6.3", + "webpack": "^4.31.0" }, "_devDependencies": { "zuul": "^3.11.1" diff --git a/warning.png b/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..3efcd9550e86e2d66ad3ac494a9de05febddb58f GIT binary patch literal 16407 zcmch;WmFtZz^zLNf#AV|3~oV#I|L7|!6mr6dw^iU-62458Qd*saCdi?!5LsU{jT%< zx&Q9H>#V~XprN(8tGa4Gdsl?AqBJ@R5egg}9J)-Z#3Urp*Q@oMW&u{V%Ea8x!8EXV?f^ zOQw)!Vr5e2!On(q%j?{ZSFb~(__cF*2xK!nZF%fE2)V=YSNQMg{f7J@kDl)@j|g3Q$gf{HPmLl6XNL`U-I69QZ!`S+Y?7x z&!;CJpgI*A+~A_v*wgulEg`K-ySxoa z^k(heOGCXn4Y+ z!vBsNm`ulnJ0gvf^7vh}w_iglQy}te_QmdFC@z}F&j@)v38Xr;zCp)N{ul+i< zqsPvuGA(sfdY;9m4y;Pp zmvUJd0%!dzM4BaVCaIADa%SW@&uN)O8T~!+gSu`)#sq&Nez(b-SioQL9BMd)*kXZ}25I%;m}ceV3# z2y=9Lr)S?1;|RAJPsiAGy{q%QUZ1Vmw^njqIfJyD z@~)y3<+1m_O5eykXu!)oE$`W2IH%hUu&)N zmD#?nc9*Mb;a6$T&9AbI|0;vt2gT$hYR0OcYlOTD z6!C{A;lD~`Ze9qO;5Uo+72bF(M(A0TufVEkzFkA=xbm|h3bn}bAxBH z-`oe1ibyc+?L1GnvioMW%aNnA6-}X?QPZ7Pc=CY7^-9riR}D^2|-*VVacK{xq@8BeMJ5kU0Nib z;uA-2%axKnD=Kcq-_yn5BCVV(Jfn*&IOypib=P_YmPGEtc|Or@YU+#lm(2}pb#B5s zG=Ai~B!2uXm@{FKLsxC|)5u3O@JKVk7)tI=Rf|Zhk!;3K=hyKUY59X!|EU5WB2mN7 zv6Hrsq-`3qCM$V(QKSKHeWYJ_(~7|fPB`G2lRod1SBM2+qgu%i2Gh+s>ON2UfY*+q z7QgwO0ZLSQ*vs`bN7rgqlZVsqP5pB2a?;~MW7dWL>Bip|TUFsP4 zD`8@@(O+LsH3U8*c3DG7&$7F-J~}8YpKW)Uf_y$At&96)eDt?pIbsL38E^{sAn7WB>wQwLF`FYAqWwwyA*<(@t}#!@wyy6YB&1d1X*PW4k2=jTPa)Ji#h#w# z-PI=QSIzg82gwYPE7Q47c4K}D?P=7y}2mEn>ClRNEuYTfrAyz=xzfFiN z>ZE(}T)f%;+iTd|uBFIkh zAM!Q92wasucPDYN+JbIqF7WzGhpD(E21Hlf8G z_17{}f|7!qy!(%BrB1_xrl_rjFS6=Ps)XNdnO=>b_-mNuU1G8Qcb4%g!q7paduWYE zrf{_^HNQ7{RDr&Q-{v>mMW<&6p7CsY7<5yU86#a1qP15>6Wvl5r1tGq>zHfwFYE6g z$6N*IX51C60bq}({qyHXX-qM3qBq#SWvj-I12nFOIo=yP!nsa}(sVD9om?ZWDt{O< zCvNFxFe#F)CoN4!GnQ|2_O7m@UGBA)a1G_>af_(*dY`n_l(9{yDi z2X%BrYdrM)d=|z=D(yKIJ(Ua<+NxI{LOSX)4x~vC$>AZZAG}7;aQSdyI1^h1xIzL#O)rwR8J-4~; z`1TpST|-0Tp5&?Faa)ZVqbM88PN!9(#{UTQHE&6&N=m^5O=Khdis~x2+nbJjWy$8U zGQX>Za@Q0+VLK9OV8xXIW0`p2kx(ITx%rL{zC)O1@Bwd=C-tPe)vU-+(wGn+4u<4;8>db5FSc(NKG{v?(#sC*HkR3PHi~Yzri4)J7b6o$^dwKz`onJo-R~YVzjD9g!q~#?>w)8?#C? z*m1AtBlX8d=Ir~dt?iADf6NV0-Y?{EOWNa>ockM_NZ)uqr^W~=zKKgWau1KxxxI=C zRmUK+9J!0`G;{XfDpfav2RpANq}E5s(4Hl0>6!@a6+DqXU3A;nr)}ADJH(1>tZleT zt6&Xtja>K@f0LXkGU0E$>(~6$pyOA4Jk`|9vr^_)F(nK~w&B^!Sz6)BmpYC_bjM}m z7bx0`@$toGE$?BxjxqH($x|&zqReDeHw-P-fzGG)aFG9=PwZk1lk)N|nzd#%7<$!a z5?bnZe+8-U2yGcWrsN~*6iOlR#xNhC8%yKppfL2C?Hpa9QP;wwytLk~dcw6|-gdCh zz5Uq~2ZgTQKLlWMCE^VDRTiEJl8GK&BYbYuKD}9L7^ZX%ee?yR1UG$^IZAv zf-@(9HZdZTKF0{SW_%{Yhy1E;*CB+`RDyYj4wY@l`T04ofB-RRX4~SOLyDgd#l`C1 zQ{la`J$>cUT^bElta?l0!mfwwi7rHiDxx#+ZeG5*-46R%D?Td|j&o~~3W8c3cQ+yNE6H_u)^%vLL#g~_g?DiL3{(e%iZGTg`_Gc;=RC+zH zLG0;7N*5BXxBSDuME0kOOg`1spePkcC!S7&b>y}8^whEiXDKgwhhC=A-9MbBjt)A1 z?^2zcsWp=u&zTF@5pvo_uv@PG1o^07io2xmV`7g*dg8H;(F9^UzgNxH^W@$$)BZqU z5!qpaWw0J%uE~y*qvx@w$9Q6zs^lK4S&+gItZ~Ch;L5DS+3WnpkOL{*!-KVnQ^){L zyD~#7nq8k8`?up+tM_uf#5I8~!kZhR7jJZzl4I}(QO)KR9FQlT?gF~1Ax0DD5=HW{ zgL_;OELQmy_7eY<+Vyl1i>GONP;Nzumdc5(!%8MKkxB)D*{^064>^eZc_#wBeR)(q ztmpP*tZ1`_2m+5EO==tSjLO>nMNAAn;N|xFf&umT_@aEqcXz|BI}oX4>iDeBZYz7OmR%jpHU(35`{zUfqOaKy6Jg<&7zh7FYirI_r#ayKo{lE}fi_xxRdYt>5al2`p z1_%JIfQrFRWA87>+z#ublX?9oya-50E{BtOPb5aN>v^E7gI2Zr4cC%Tcm?GAi+KHdZ$}=lFMJA8`1vMK@icJDjJMfW4FRxVCUrI zq+WXUeTb%>t;W>t)Toipp2K@qA+u4xNziczLDZ8Sw5%E8RTm~Mc?8kXDp7EDN|pi? z=3_5YU8%+{Xyvu|H|oF=Eu1MkVN48W=VaRK2Ik3vp=66=#E|e_O645W6GlV)Bb4s7 z_&_`)-AmS?p08Q`;oo(=VFaY z9SI4EYLh_>7X8*fi(J3E+>?aG6{Bm2Y2A~$&wWejILHo~%SeE*m44Z$r>9n-BPf;% z3^`*c^{5>HKi1)u38F{a)&+Rn4!MyRir z0w6(KNn(>3rAxWZaZvHP{OQCMcl4nuOZR4@l+~bC)&8|3_O?6KUHH85Jy3pc%1|O) zMgny1rVk2|g?gY_z06#nuB2T+kN1-LY|cp-R+b674RE46zAI9YiO0_tRKL2i0M;e~ zYx}2l+`xKPco~HaN3Hci%XbXF@f>-4dC<*J$*Ly=Fzt}RE*oWh*zebD!L94ugnlIi~5Z`BSUNA#Gn zekA}x+R~`717Q3K1g|7ViOP8#)9$^KnO`3Sf1}hKMbe8ZwD@B zPaeSl05ZW8uNYQEANQ+{10;VC9i+_|$iQ^r4+5bN=4=$l>~E`I;L}H=w*H$IdP7ab&}C z7P~WTHr_v&3Q#PaeNcD%JEQr7x6Rqx5sGwqCQUdMtM&Ks!eP_@CKBV*%_B0~P>6M- zr#eOEAODlPA75d#!fDXBh_@kwrP~PW&%T6%!I{K%GnP!s1Vc4(1Qdyc2NYkEU!x0wwTBR!p^9kPxu*nU-doT^)Nn=7<6lGg!> z(=CgW<)VFBV<>zZ%YB*Q0;}fI4rC)1=svsf%hP0YlY(YCYt#1l zyb?D!TRSMHLQciD9ySjehis+BHWJ+2?J~&h#D=SxHdON-Rhnf#tSs*$dyxP6KMQlK=SZ$yh_8=wsPlf#s9EKp6oBaT~o_qASgsL^vjO;B_i5AuX-}*zdhLQ z_{Ui!L)rg6ts=K+A!jSfDmH>_QV`)L>jDHx4WP5){FOhWPoCckorFkH6&k$Y8jyOt zO%EAYj#XqdI=ec4_%@MevcTzYxHH)QfmN`>CGEk=vou!|sJUTxJ~P!a{L#8;cjObf z?)z7gJgxUK-7A{NUry0=-R*97G%7fVqLXyo)Cl?RLWdSkYn{Ir(-kXuzKx4N|L!@4 zh!#mjw-U7ZvR-eWD^}_4B{lf&!i7$FJV(Vrg1GT)ZC_Hck)~IA(D^EyxUF&a3+>EQ zz8(BaD0P}pfI-Z=t|}CA{$X@LMt-Su4UK7ysFTB@i*0t=$q;}`73Lg!uCBT}vjnHHQBk?L8{gsXuH;Q=IeNYt?SqBUx{J8{ zeYvgBh@#OLZ9@(@eH3@%$V|u6&A{ggHB!4z0-y(SX#?ehztcwC!uVwe& zLp*E3$BRh$A}QLLYO`QGMts_8;~no_RLfDdP(#JO`CVGf7DohA1`v)~hxH~yOUHdXAH<2V|Ow&I@!A!$-$ za5;Kb;jTK1RxcB+OsVsyIbC#3q9MlkI9Fp8O}6377PU$u{qkg#C-u#8Y&c{nD_rZ} zaL5>MJ6H%V00tuofK`c9nYFpN9(HB}70`U;{)`|RS!bHeEuMstktQT$zCypu{NKNq z(dQQ4cXKggu+hvH_+F_qqt~kWT~j_l0Z&;nY1NQtZ`?B#dsjX`b^51@Wv9a+jIJjx zKSvI1oCW%EO4WmLzEguOM2Pzcd^b}0sl#k>rph(bX*ePWUgw2**&11x7RnZ9E|AlL)PI8Kdso1@3afaa^6ZrHnEz6*-E0e zE8SOw3UI$J2X_X?I#GBd<~ea33OtZol_o##*SSmW8IZvQRTiw-txqvn)-yysujD%o z>(Qc@gN7VBB=W9c;MDBwP-L=~@!teh$0t4~^bYcZTB|X)-}t=#;OYB-sCM_|S^8kz z4fRLQ^}fiUHoW^kdJLbuyjC${evVNKTH$Lt1OOaV6cEq8jIa*O&e+oe_TH;9D z^^^|iEeO^4lb~Km7Y=eAQarqbdEkPH-{OC$y&+;3DtaxrUnWxwn=_zXB4C}UkdTZJ z5kU*r_J9U?+JMeLmnlP>luM9iLh<#ofUb!m6RDSoya z*X~`&0A5U(5TJ&A85eNLvb1B634#I^~Gq#H9z>t!-!q0-Z zl^O%nhD3y*HfvGwdYw?nO{J5R4<#2Uo}>CL4FOftnLX;^4P&uvjaO zh$DhNxULcnXwv_RP;nN3`ujCmifX5TwQ*d4p9jCea0dYQaxocs;UM6MMveMTrIzPh(!EQ`Zq!j*+H@=jFj2Mk}rh z#gP3YGx9kB+c#=`g3ZCu;`vW`XdXv;NX#b=mdR?Fk6Q#ML`CTQZFp0)cJxy!Z+>Pu zvyp)5U#pIQX9b+;XZ zH!I_C68cVTzSS3dqsTAUkg5ceD_=dmTf-ei&@DTHHrz%TiOUBn&2W0M7o1d|*AR&o+*Vd5Uh2E*-KMxNBCKt*-B+A4qr#D7_(|cZtmQaSyD1t&&Ua~|t}{E$CiOS( zm7Za_+M1O+UD+DS^PA&ygLuFx$<<n=xo*<3{u{eEk}Wsabn=3gVk&)7_%`|to`yvO~s zYV7rWzuAL&i{xU+7grr*xKA=U>R>_>b~LBG1f|jmEM+R>ILH0w1EJiBY*Ke^8=x&1 zzVeRe*h*-$X2s2*L(1`OIAPw5;~81DbnwJd8E6g?`iw8vOmdx_P`0xhb)SMWKonc^hIu7rR1iz|81eqb6JSOeU&M`!kBw;ygFgY?4x58UbELILc(>2sqDR%% zVbWL?b2e}D%1!F&q_D^K>+P1mGN4%${6%N2k##C@)8*|Ri0m)Y)z+&(W9Jtx~PjJq3E{Wc7Ctl7}Si= ztD?LsYTClY_yW*$3B9W8f6Hzn(U}&MiKToH55Iz2p-yNsAE8wt*(>M4W4y)W(I4MC zf3m~|aY`^QlJ`a#w53S}D_QQFL#jbu$((ah`@-0vTh^5U9ZE8H{Ry^rZUI?rhMV&n z&;nI-@ad^lba*V+YxMYlhIrdJg@p7w#~Vjfz+PdOFR%E~r`!v=i?J?xy(G@<jpG^z3+d;#_S<{OF%o4|S7jofA`Apy zr-j8^>^sJ*&BT>jdB~L3pgjM+x=>TLV>Fyd0vz9Q~8 zbI(-E4hoOGrlhLG?m+Ypd44lLqsK)B0_LOHf0@=?*x}I-YT<#{ zG8mgL*Wj~LY$Bl0qjmKtZ)~Yrd3^9*e@JZatVXnKDOI*Egh!Rw-8DDSX76-Y#n9t5 z-jF^#EX;YnH|rdp;!F#zlfwtMd*$`@U@~$|C1mL_gZMZ87!=qhz8p2}nVKITPCX&| z&qa5Q8z9&9&oL*$#3PG+=E_p#z_7ekMU})Xt%yGe9-NZwzGX$1(`nzK7!lGeuNOPN z$E#ZC@le=jKwsr=$OUF{hDndwg}itYyXbR1Y;<@C{tA*$*w+6Vb>F>Q6z7CWZXw^&$w`= zdp66IgJqUXhtSgoHFLv{U20A29U({8QH!ft5CXR%Ijg4l1Z)9a?HGH9S%rS~21Fuh z78^#qz^MGM*=g(-H^_dvIRx?!+!u%j5g3n%3sa!H|q1S1yGc>l;f_qB^JNt?$>-kLhA_378m>!;ZEJ>laOi?8L5lWYalFI zHxEsxz{lrDMCoFoGfP>n0ev&&im2 zo!kI;X&uW^`ATiEo*p;4|E(FuPMLac!UnD>XJTH{GZQWO-KQL^%x&&Jm2jeI z!v@GwZ;bGPX|c$L+eEkWGIBu*0Hh8}x&9$=Zuw>9GA?{x^u8xi5n+9r*Q+nuZG<>J z+ekXu+DiW6A!v$n&jXjCkSRwuHIm|+@~6EAC?I!MQswb+S!HAs@Vb0gelBJvJ9c?US8&8X{dnv zPUE@WmMq|PPv$|=gI1}d`|p~;>7pv;x4f((W)rWA9Y;W)OvSr1y%b_0H|bqgX8a|_ zVIfqlllUocIe5HG-FLFklm?3zR{PQcEky%?M%tI4M!^BBbc6&Z;*&jJmfcvoe9nR4 zu2#cuicd1o21dQrE2|B*&^!-jF-+(}z!WBW3)WtYdRc+}i^O`iZ%bdh4{*W?U4v9} zJDekdf3Bqi`T^cJ&OMnbVCj#Ai^w{9!8?EFh9>F;W&{!m43Ue?1a<_D=fNcdWAvJd zf2x4Ah(i%)f#QpLLI2Ig-Yyo8yF;aD4>LiMtX#Vvho_Z%vkYPk$DsaFTP1(6VU$=w ze6_iZxILW!o8<#d?+G5(d3Q$tZA7e#IPKi@A2TKgr5Mj`{5>!Dh;H44&9_`YJ*81( z(f;~lhAyMd!$&vewR8Hg*LyF4$|S5y-uf33;Hzt`(DV7UBCqhcnL|%+X}ebM6XNZa zHtrnq)U`}5;s(=q>`$R}sJUZ$7OrmhYiw(L?O+f_Obai+Sz@Zi1OyoDtxd+?3TS+M z_cYeUMRz5uVBg>B?C2p)l3lA@$~5#+-Ik*?A1_=|sz5K%*vUFOY^iE081yQ?cx zSLOLnMMgH{b`?z$?K)eyckg^gXfEybb_NL&4Mi!Zwzf*Un4!;vn(p@JQWpnZ?6T9m zk7HB2drLbypFq(%1CY&mTUZ0m2oK^^N%~Rck%y-z<5GPdBhtP3w8tcS;!9oe9Sz4! z$dKA?(+neuY5SzjN6nsNBRjPpiE7*w#TnHuE}8@F4cVVKemS&lwB~&>%DYv72kS8Z z7q_Ul^{DFWZgZ)_eD!%zsHni>6|l&glR@U2O9N%LUcr*0qjFv6lsQubm?2CSxK(6b9RHN1ijyzz4!2Crn*Z}3eo9R2c|K5bpT7|L zgbAAaa%WY@dzFrRK($c$Jy0o_U;>KznG^X9k?~&}n4SvTR9epcD7D+p2w3{Yw=U#H z-bdt&06DD0?7dNfM4z--U3Kb%=h81hjn6%gX=E)Q??H3cxL`x4Q%5xod!6p|5<^}* zh!E_}6v=BFUgA2*-^-~0EbkMa@%4xFDTh;Xx|N8FF6%elKeiyirP2JB;?$Uz70W-s z#uiF_XM_2Yn)(#4eWj*(dUm}SAoc3~;%7yeYCmSaKf#D*G8H2GDOcVzzDJC)Xv|;? zINAFazEsGC10~~3h>U|^z=q4>l8xm8+s~i6-{du#1)5iafhEfsSP;d(0H}da)z7&C zx3)UH@bocAxTNj!D-Mf2VTFOT^N zm>!JCy|jx!HJfkk2%pB?0bqs&T=A!ktQ}y4j1T*a;E;;|L(3Tf4x7~m!MX6Qj&DvY z^L=n{Vz;|j`--rhFzetO(j*f8S&)R1ioFrpeQi0f%yf2RrSl zGIMareZ21y3aw{iN6ntn>`65g`MzjzQDMG$$pKWQRiWv$D+Q;ClNrK;ntCScE7_xK z7a?TlS`Z-7^N;n*M`Zr+hsMTmnZ{`~QT`Z3<5_kSwn-Xz2`){2Z|fPdm^sH=Kj9jG z-WHwfiV-0(l3_M5M7Y3Y6C;stviftI%QX1Dsc&64wg2Sq<9Z~bLY>!1fDaH$s?amd z*n}9(I%M^xK^CIf%{i@8#wO#Xm2nqqY}$@|mYbJo3Ze!80h;nWivb`b)^cvb>1(+5 z*Cn&#`L5xk9R<>(gaV~EY_rM<`<38KTbrdj{yYm}r)>u^K*a9sVu`@j6MYhyK;dM_ zbl2^gw^sit;P_h42ghZdUQ}9jnjW&>9z`7QE+zgR@LC)_4VkCy1=LDr!53-XZP>ry z1+JW#Dq(D1o&T`Cv6KQJ3pYotbn%w7U!;5NCM`CoSLK(S=pPJ{#?dy#&sI@*f6f+~;XRr`knN@yK8;*i+ zbT6{{;IA{XNuc0UVa7~38o2p#_TCnEJU5J+h$fC?wLfH6V#e1DdzdzNIXFSKzNDe3 z>n9%{W;Og%m*Bz$e&bzvbR(CQ|7*nvVD&LAIl@IlS%dD|>KrW4Vasb7EgXh@y*BT} zr3MILhctBQod=~&w=1V-7cYY+F>DS77F(FyfrTfvy%fx2H_SA1c~cCfrl zYnyNjOHM}7U4aK)!Y#80_)+0bX$e1bZh6++r9|o{^P`28bazsq;GKXohBe;vUX-rQ zUw~&U6KPps81*bjSi@7EBu6X@qhaW7d>!YZ6(=YiqB=3HTe}>XhhI@*b6y>$2!nCY56iJZ{3g ze+V#gOzT6g6uAi#_yPvHX5HY_Z@VPTLm2_XQE1XBDDZtdO^ag{1@XcIAt^v1l3j|4 zcg~0%(h#}!$4=DmzHWg#&a|O*PRj{mg-QJ)^PgsJk>E2A4?IJ&%8Z&fHU1>98_8oj z*D73>3n}`~sVXzrKHBS0^)_z$ou95w*XXUVJ&j2HDI~hb0RKEXA6Rn{ywN#x1ECwVz9d2NMdpvsfnTZl*F7hA*$O1e3hV~2 zO)XkJTj^Q!-Zg(D_J8c8!;XlF2jeM$%C$9LwV$k{YSUrQqy`8 z?s@9gasE(~COhT6U04?ml*r%N@d!=Zy^f5j=V%$HNc$j;PGdEHMX5#?YYtgOpvDG4 zoW21*Jb*Wq#0de9AXn3NbB(PaO~{U#5&w_skWluspzgFPLxKA8hegMAKUSDvcq_WI z)jCx0K#{9ZVGY^SvnU~LGeVJ(rdow}iy$`(6ZR@BG*+`|UXdn}wx+8K?QYKVAf9>kD%PEUO-0Kfc4A{O!b>M-lzL1Y~w6HsgUBOgLSM^5pJXWHttEZZ=E! za1g9&)O*c(#)ERT^Xd`8Oq{^i-1OG&c(!LiN=7xG0MwSVziBX`+F-T2NHq#`rVegX z=oTSQX(tg#!0E7@*&-PX(oNO-D}sm?dvMinS79)nYb3PMJ41&o@C463lP#lE8P#UN z4%iZ`E%_Fj{o^fn^rh-LrU|y|8NQ*k%vH{e^H|v$vca_R&(*t1I?pHLl(}Un21GbP zI@vL*pTr9jcJ@;gW;8S(9hdF--IY3k=0OoS%1Lw9HlPg7gDjX!R^j`Exq9D3a_mkL zJ#TZNpwuek{+m4h!)c8_q%_h948()$To{Cq`i!kg$wL3h&us4{%HInY?M(3T>FDXH zdQ}CGq-gZdjMVG=n_&LE$0VJ87y z6GD~&)A)o5!e*`06q_eAf|lsATB%*`TDA~QNu?m0H;wJEp)UOFOwfV2{zW@Z>EOT^ ztz~hR0fg;*I3<91!BFI3<$jnVAI3s3H1!O0$w@qz0-);Y zur^cuNx%e$D{GuJKr; zXdk^p{Kc`+RxISLWS8xH{B`^hemns07W6X7L+t=|c9Kb}LiNg&(TDr-jEaahM@4-x zaormE`IXtz{s29$hB~BeOdxS$vN`0) zt|e6*qAE~SqMEa!v7;>0#msKbPT{w6kETQ(9PjKUhU?ggnrGlyC;~In)-iAynE8D2**g6p zmRzbq_f0!Dkb!3}$H1wmpj*Z=$QbTRYsa_pej~HO?HdSfmf&(0p-7d{zkj^qOF(y2 zyIV}5wSxOW`I=S+avl}%s9?Pi>1zruzZ}I5)TB?(?f@oS)aZ3-j8&7`9%@?v*AF~~ zgXLs6@g;GeH5J^&scLPf`~Yu7Q@g&Lyz2*T6L>`D%xU)27`9%^3Y5e7$X|=uAp# z3*LzZ_t5qs4+hb@wKnvC$LgsuWHKdGN%K5fmLguV<$N-tJYWtF^rv6wZ&c-S1Jbu) zWE283A!h-HE>Z88tNt@(t5yC=l_nRBHvdRfa&maKPf3AFey^}&fEj-lYrzpR$a8JI zi!mQTTZG8KaeIX%xb4hS_<(6+5~HBe=Vd(zh6L_ zyDl!f6iss)*w~e@fUA;he&Zw|d6@d`^f~M3*pBO@FCpoB>tb_3fqy@X#X$mx>ieFq z@NUK=#n|;BpguUV{o&_7v#OHTC>B3(@q{u!u4Fb>kKl0M8TCm#sTBMFQ8ABV6Nfrp zePw*Mk(jAnGt<+*MUBnn*U0=AzFdN$(B<{`M383N*1M!_R;xfcM`-q6%rMwTtK_kQ zJZC*(ap~wps-6vf+a8!O{=RG53U1g4bRhIId4X$RHN6^lUzh;pdtJ?wxTjRqaW__ zq%5J%iPJJaH?YRVg}LBNlHn6p>ezjnoh{b`lrc_QFo!x{ECdK*Dtikd9lkx@n}n)Y z;)i8-2on!~7q;3_6JAC-g(d ztsokp_39j^eQ*2?XEG0T6ncheA}i1cNV4m!R*skkgLQ=x8kYsiwClZ@aRxg3^2x$# zjDe<^<@|4~LAtbBl0`FbhVei5kEa-mjbgk(?pZb$4A`C<$f2- z0JujljoFIqp62^1M@SHdg6@EFgEvI7QpIFqDqn$9qp?VvI5Y~4?zaYmKbJzPzVFG4 z{^Ak=;NQ=4Cl(k*YPE6xa49bTt**6wngLierD$ZJ=nfNzdNmL*p{(9wt + + + + + image/svg+xml + + + + + + + + + + + + + + + + + WARNING + + + The "saferEval" function may + be harmful - so you are + warned! + + + + + + + + + + + + + + + + +