From 18c54b4c40bcd16cb56696fd73ff74a12e6a040c Mon Sep 17 00:00:00 2001 From: sookie Date: Fri, 21 Dec 2018 16:56:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A3=E5=88=991?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...达式重新入门.md => 正则表达式重新入门(1).md} | 59 +++++++++++++++++- source/images/JavaScript/regex/分支条件.png | Bin 0 -> 21732 bytes 2 files changed, 58 insertions(+), 1 deletion(-) rename source/_posts/JavaScript/{正则表达式重新入门.md => 正则表达式重新入门(1).md} (65%) create mode 100644 source/images/JavaScript/regex/分支条件.png diff --git a/source/_posts/JavaScript/正则表达式重新入门.md b/source/_posts/JavaScript/正则表达式重新入门(1).md similarity index 65% rename from source/_posts/JavaScript/正则表达式重新入门.md rename to source/_posts/JavaScript/正则表达式重新入门(1).md index 72a3802..1275d0c 100644 --- a/source/_posts/JavaScript/正则表达式重新入门.md +++ b/source/_posts/JavaScript/正则表达式重新入门(1).md @@ -1,5 +1,5 @@ --- -title: 正则表达式重新入门 +title: 正则表达式重新入门(1) date: 2018-12-10 16:34:42 categories: - JavaScript @@ -118,3 +118,60 @@ let reg = /\d+$/ 'abc123'.replace(reg, 'xx') //'abcxx' ``` +### 贪婪模式 +正则针对字符串从左向右进行解析, 每个部分都会尽可能多地去匹配字符, 这称之为`贪婪模式` + +例如 +```javascript +let reg = /^\d{2,5}/ +'123456'.replace(reg, 'xx') // xx6 +``` +按照这个正则的规则, 匹配2到5个数字都是可以的 +但是它实际执行的时候是按照最多的方式来匹配的, 也就是默认的匹配模式是贪婪模式 + +如果要使用非贪婪模式, 需要在量词后面加上`?` +```javascript +let reg = /^\d{2,5}?/ +'123456'.replace(reg, 'xx') // xx3456 +``` + +### 分支条件 +使用`|`来代表分支条件, 也就是匹配前后的任何一个规则即可 +比如 +![分支条件](/images/JavaScript/regex/分支条件.png) +表示字符串整体包含10个数字或者20个数字, 并且最后有2个字母 + +> 注意 : 这个 | 分割的是左右两边所有部分,而不是仅仅连着这个符号的左右两部分 +所以需要加括号, 否则会一直涵盖到表达式的边界或者遇到下一个 | + +### 断言 + +如果字符串中存在2个数字后面跟着2个字母, 就把这2个数字替换掉 +如果只是这样写\d{2}[a-zA-Z]{2} +那么后面跟着的2个字母也会被替换掉 + +要实现这种需求, 就必须用到`断言` + +由于正则是将字符串从左到右进行解析, 左侧可以称之为**头部**, 右侧可以称之为**尾部** +从头部向尾部移动可以称之为向前走 +判断前面是什么可以称之为`前瞻` +> JavaScript只支持前瞻, 而不能去判断后面是什么(后顾) + +对于上面的需求, 就可以利用断言来做了 +```javascript +let reg = /\d{2}(?=[a-zA-Z]{2})/ +'@12ab'.replace(reg, '**') // @**ab +``` + +语法规则 + +|名称|正则语法|含义| +|--|--|--| +|零宽正向前瞻|exp(?=assert)|我前面是符合assert的| +|零宽负向前瞻|exp(?!assert)|我前面的是不符合assert的| +|零宽正向后顾|exp(?<=assert)|我后面是符合assert的| +|零宽负向后顾|exp(?IqkrmqI}#K>YOS6UrB9kn*Qb5b+=1*WqD5K3_D2v_E|!`}74Q zs_K?`nuVa7IKMvRd-{j043(BP2C110HUgfGpkz0I+Dx6fBjkvyp-Jp4dAXyhz_##C zfBe{Gud(?8$yPccFE>mS7_rG7@QW7_`EVFHvi(4iby&D>42pyG;N-x;EPGGz-F)k1 z;{9dPSXEI`5dk)^$B>n?TXPYX6%QFU|Fsts^zj28LEr!XV=kPgF<4iJ@@N?uHgMWF zHS93L5hfxcLXlDh{OP`UnQM=_wb8G~0$X!p4rjM$v%3mxU7<+!_Ol1?b>FL9@Ef1; zjT)6cpZKN2s6+FnK+E**SOo(eaq#S7oI#soO3AL}%C zFO$sx%ywGAIr@6I4sA3A%YvjTON zhkmv@Jzx~vH*$4h7x8S(q`DQHuKK4wd>Ix*kNsWMkEi7c9mdEqkn*z>-0F;%pOP8e zs#TX)jF({jB}`av>H#%jM|w0XwAy#9_j8+MLzeN&RVSNB*@bV^#g?olrk`Lw~wtmwn^|E zH?BE39bZG5>u>yFE-YLgU6Q7)oP^6@jk2m}#+(IT#OPlm94A~jM(<#l){DQvb7l$L zK5m2y<}ST1@1je(ZD_MJ^xxwP$?i3-`*q3$7g49RL0FGkVXsz*pr4Cm+;_l<_g4He zG4IPKG=k1uxlEJA4G{YHE9})S5$*^^mkG8$&iK%|fM8ZZgQ6l!KZ;4Hu=fe0E6n+z0q}W`*rBo=lY8j<6Tdp~A2Ea$gOUyTkjVs# zxn!t;;0Cv=zmH)P482F#`Ip;^Ur^TVkO(~mCv1Cd&;(i};e`f(jjwt1HBWhj}27eTHZxkJ@sX+?G}1E zQMXz;*TWchaRuMh4qcYzvv;srzS(K|Fv8_>s3q+(lHKBm^>ir5ugx(d@}^bi-WPIj^XZ!P#jx&(VZo#_0CJ=I%0g*Z{Ge6OI zi8qV6-aNfag7~)s_Jqk9J6xN;2}5W|I3SE8Tt zx>CqIw4MCV<@hij2wCm@D^p0aarPKuhC+t%z_4ROY?%zKBVvcq^)9DlEyd>Fe3(#r zW?<1SlI&ZK`{BrZIi0=xyVULv?a)tfDC3q;oStU%ZjLbOZ5R1oj~iFR5tWBAGm8|4 z;OVyN2Pe+m&S*gmZL+ANaJnv5o&xR)Ow6ObaHCzci|ujs^06fB9@AwHFFtKw80ZLw zFd=dM)_8(WXVGzJdH{Kh4wzxu?)7x zuXEwwA4GVFOLB-oz$!HgTlg%K@aRyE2iba5EuMV;99Qzj!8M0a&rk6RTJyoQ^5?y! zGB>Q&vUhFNmqSbVC1FwW-*cOohMMt{G}~sC&q{}3zZGrUrf40SV8^z(YNtljh)_?c zBf^uL<4){H1#QsU$yH3_mu9DZy{_tOrbMB}wH}}!XHp7(W~FDey^VVgWsZm3sw2RG z7hu-*1V$(1NUeU|7P>9X>cJ&HS+pSfN~5qg4fT^cI@q%VGI00S?DXkpC$`Ha-WkGU zjUMks9ac`1B`wyMjn3%uG?AUcW193I-=R?T%AU^I95C!3(3|7ZcUZ^L>G~h1@ zJA;Vo@||v$V_g7mZHNm=iBi0@&&Zi*dL@4nYLk)<)n1uhXRX?aZ)Ne-2tOgyH&iv`vA-CCgy|~?JXzBo?lgF0 zA7k9f@3tl}OX9@8l8EgGTa@cv18OzA!`->?zu>sA5JeBa#HTiW1DHLUZBe{GhE=L* z(DAX7lEa;{dT#+4(~Uxxj;!M>50E8%MrN}j*yG&zNv=Y@T)rjJ$8+ws>*ssNFHYI7&_734D8V#T0(xByeFF>n+D88TQy9y+NA;Cx87#OYdJ$ z0KW|LgWcg<8O2~sqk4xmCe|LIl2EW(zRs5sUuTU|VfPjQ2NL@8Voo*X0O03-)ZjNX z80Kud7b5IhMoMBKlp#?PCXUL0(F$TlChH0(M`~Ao>}!5l_x#D)o91h491?5oKod4} zilWtlqnl`nZm?fD(U-pwzsum5jwrYSKoxH4fehU? z34CpLwSgHo(#og824&lo@J-Bv6b<2f$@Timi`+oEcR6T5oyAGU=4v7l;&Bl80LRGj z5E$jc9}Bg@tv+NhCmkPAG1GL_e%Hzzq}=h>gkg-)_i?(@JAQ5s~C)cv#vh+hQUpG59*giTTIyIz0?%hT!G68Gc>DV>z6dF|KZMs3XH_$p`5mT_NS@%s#-B79;v&|6R_;dv9 z+;J4hm;)ZgHOe*5rP_sb;Njd&bU*J{u2M}>?bu>~0NF`1V+O>879XrV z|JN0qhE=2n^gQb-*>B&&7n`}X>jb|HRBYEAieIZBfsLw}1Y%bR=J9a1PFwEKAIAE+ zVK16tu4vb$3q3k)G!)>m4&w7055JHx=mq#GkyJM{^u0R$u`j!!mi^8+_$wr9S(sx8 zqEGQ{g}Ff2>i6-54>G@Z2SO6&WUiY7{4R>)0HLn`)p4>N8R%&(?w>TE44}U>qLY{$ zn|`NGu5O}uPS7yb{EW6*X4lb;7AcY)9f$CT^>uD!@Z{Q>SX^gzb4KD@ya>onUz~xD z*WIt(dBYMsqXkdjg5mq+r>C3o%*!ka8@CTmuG+b*!a&ZP8HSo%kEW7|tae*O ze6Y+bNkJw5Ys-e?Jtd2cc@VAEEB{OMi4VV-Wh1EX{jXk9qJ!Z1K^(9#jv+nwV3VvN zL8-t7biG66W~A8{=}cMpsG(=<;IeYk%v9&s9n$Eo@+;G+Vva8q9iob{lz(!*;epGO zNOJ5x(Cn?bak3m9*H<_;`~3kwKf}_`Fx~|j@6HwLnR|Wz_-X`8naqo%%E}pqm~`C) zxSn6sXF6v~<*&)sBP~hI z#K~2a8RX3RjY!Fpvi=3VEYp@CJg*xyb|mZ(wV|fV6VV$H2ck;7?9jvxLI5g0MdU8# zx!fuubN8DWY;9Or@q~0nZhP<#S25QhAcj``SLLIfjS(?U{a%?LZ-&^4y0t;~uMK68 zr&T#4flkmCjrQdjbmPyteO-O0BE=zU}`H#t9wHJj#CF?KK)ZPOEJQV4( z!>2K?&k1$7Ym%_wT~m#F-`Q9S=pO8{xGXUCqyI*Y4`nwlxq#geq+8(V?tqCh?$pc+ zs&-i9_bW|XFR?7uj{B6d2AxpP?|kY%eiw&H?T#)LsS(vumWMkI;=+jxR{KgA-^gKy ziX=Ev>4KkNi1;bP2e0CY`rqJEdBa1KcRNNeXYfoig*V0w{AWK0-M1nx+k?WhFdrFO z>BRNN(;YcyLo_%%9*j=$$evDTN4v`ziu~C`1wDT#)DZq9BvJaIQ-F{a-n!0EsWz?# z;Vy&u`&BQQXsG#4frDaoHR`cTHEU$ej&TsfUC_WOwl2;A2T!1vkf}|Tqo0&xaEZ>8 z0Nw{sd4NuLR>B$Q2D28{yjR#*eDJ!n8{Pc9l_1|*jRiYXC#J*lmhg(8>NKQbi1A_G z*INeLP51Y?7M8S7BQn_2D|}@B+oL!mw#1vu01Bi4RQbmx>NWcn#BEuKg8j|nFhwgqpL&#;@fZIE zhBZGDf@v0486rQ~l~*?hAI_@DVMk76?GXU6O!e&wnz%%RGrCPjub+~v&ifm&tCucO zTxNSeD+zK-B^eG}A1%9s#*GdlznIwCGtF3)<8h#~5RZO#=2ja){B|ZiNPW%3z=fR_ zJ-3sQy5P%-*ze0lIOOTJz3z{)RNZN%)!@kG?ocMse3u?mNUCZ0+N5@&GJQ0@^k4y# z+_}`t&|w)KZO%}ATZr?Ah;GDu+cp=D$ht&bW6_9}jxTm4`1p5x#72UApN)luoOw$` z<{EG6cmHhfBNhS8^mu{mhZ4$-t{(v1u5oK?d)aaI1(*Z%t#3VovdATGe@0^^YnSl# zI2m;fNu3-sj?}0J4*-i$9%#oPNiVYC?EFcAF0X!vqzl^v)!(%h0#nxCb}iRjd>Dc6h+bDiYS2m= zs_M`qSr+B@@9=Gq_a?gg^q_2%QhuqWeQk5_Zu*57Mx>hW-%pjl4ih6JCcxD`GD&jp zgwz$a{wo`#=LzF(o+CoTBOBodnRqW#zaFbO1P4QahuN+_)uiQA!h+8BQXkOX^!X!m zsUBt&{Dy^+AB?nj($H`X4bp;k>>kzC$hF;o#u<==Z=EPCK605M2ZC&`P~GcA;Sp}; zu1mu7TcF~5s-m|`pfJB=XA~;r{R@l!DwM2t1L=)dVxxrNfx>PqI16_q>)gL4=b}Gv zaL%co;{jns17=C&i5x#t3Rbo7uMPBqREo*n2KV*=5ED6_t~Y^abUNQ|hmN<^L(HMD zkqk$a`~t3QbvA6gqQhK7w$w7u7NW~kpvF?jeevk|fFH-eRtLK4si{sE73tu&<5!u} zw;AZZh0)_5L~3vd6X#L=-j1uUSvB^ari?^i08IO;jItHOPRkvD7`q7yUzG8i2V+jh zs5AdMj?0U>25x7aAmL28b2lF=Z+_qdL%8*e;u=gT7M6pJ)+nV=W+r<_T1a!3GYL%3OsP;(zrn1mFtz$|e|$FS%t?gdXl;7x9?iv-P+WPR$}7p&6yWuQRU zY7dz)sU9oyld6aQ;1d=j;nFQcx?tUlY(e&FaGiOm(GvlED^npJf^Rfz@;Hc$^ics$ zQUnBDKWYkE!liCft}vsbsgMOw%g z5ix3HzS!R_?3z$>RsX5Z+|7!6SDJ4GewO1CnvVo!(JH2pr)F_68%Ich8vw`USgln? zeu!+{j8gx4x*9De?}NqH0(TUJB?_L_xsFfq^JzD*T;x%XWeEIHfplfqi)_J#SzNw- z!-r52L$nEtrBFQB-SWTkmmqN6rxmE)EHx&?a4T-UF3wPk6;Hr2^J7VoS8qeG^I{EeL` z8~6aI7q)GDva3YRMQScla>qK;XfK*=haKcRuy<^%2p`H1^BPmuWlU{_*guB#h%+2v zty_VGJ7vB|Ug*d1@N|z>RWfbIO35i9^@McjG9c;4z$XG@X-egSJ-+Tg1IPjE6zIz< zQ2V%fKWyj&r|JLQo2qthHtr5JRIB1gW#3DS0`txUlX&hJ@|&oB_ZjE6uh8g16an6M z(C()0X~S`ey}E}8Xep(t1x?CvE*hV5KB2)Y!j70G$OohMtXHmb*DN9TlJO+!V~bmz zBUb5)rIw`HS8*Cd?am?ZVx{y($@A0UitEar4uiKowC2OZ>SM+b{e+Axg!r=RX&WkF8=xuhkh2CKGR3#>d-5OjOTCViyjoDxFQdS?*>;yYG;X>B;X zq)5WxV{f_*pHvgYd8`=k?Tvq|H^G8804^L+00v4NAk2l=W3&aIBa>W0!RDyUD+b5S zufQBQy=4gOos#*w*AO_X48)<6&i%t=IZuztk-9b!R1b!CbB1i+w-tT(T>G|#4>I*2 zuXk0WWgSG_Ayq6Sxm0kUhJ{!Z)@3 z{q5Ozu>pWADGq(e(GNk_hDp}IDRyp(534|gXin%fY?moImKKSAupX>R?LRk%B1Du# z<*Va{TG}1lmlmhJyE8aK)I5>uCtP2OkbFo#*8jU0v^v=ubyDfgx~a~Ved`eTvyg~q zTRCpy5n*@WQCcV)wn@XlKZSrxxrOhqJx2Iv*CfH=P;pltTD1IEkg<)3#ktmg@tlvVu5@E`lz4;=CaBDe;>ILlaup`i{VX8O`9EdV4G--x&#(3R+{W6L_|oj zv9S$V>-|wYdyB~#7?7x_sO()`LuJ*Qav7f2YJ6~Ua2#P^;o#s{@s_*O9|(Boo>{rM zLrO~MNQ69~!$FYd=H{yE>K!=T+}x`)YlA+nnHyhOK(ttn*)&X_Zx5%T_V>$qgz`;U z0c?iFin?7s#0uGhqB+9ehQ@hT&f=0%lr%JOl%#$Q4P0OnRy-zuHFJDc#NdD%5bf8= zKqI&2)>g-Lixg%(XB)(P;$A@jRH(Y;@SY<)^!Ib5kIIju<_RNI2<$YS>}R|=%<+i{ zNi(zGm2yV)9GX9pA)L;Zxz1--boLT`qflew;{gTAC6(ib_2M5ci-#Pe-=R9zJz&TQ z85#bs5G8J+Df{twwx7G0pD-+jDw|+8R8~=GQNY18QalD*nX}IMhlfG*X`8ZH^%(<^ z(z^FjF+_X`EuY+7fV7;Q~F zolX1$^UKJLLhNopORuC+DAFj;2j^TZk}odTt?&+0fbJA#F{ zqt^VcItEXc6U|CQW>^AqQ9o?%F<$tb!fLfbtC!J(RHQEyEUE|lUr9_uQ?}pF5{)h1 zE}?6>0iiwjVzKwXJ_C)rr&7b%ne(dp!%UoQAngvH8>Uj>BO_V05s}IXS)bMw3d-}4 z2MPyTxdVA_U$r$wKKl00e78csCMKkafk<#OFZMMS@A=~^#hCJy}PtD!$)1g zn_MW9g=bf1Fa(%J4gg6RqmSO!AEZjpg@;Si!uIoFvN>&VLi;pfxITl(jU?Ryy<=A+ z`m|at+?dsds^Hg_$e~02yJcw|a_T*&OR`mr;rbEpY8HWibc|A}hNAVK>4On>1BY_37*?9={- zl{u+ra<_pc4$Z&|G=r|=jWy~`t_ulGVh_AfaY8UQNT_e*o@wd9i#LGS8~yD?vK*gY zdB=@Z_EO(J+O85*9gW@U(It8Bje^_A7RfG!)ssNyDBkFL@0nJ$)f$xR;WX-RKze8M~zf7 zj1CTnObGMv0?)4yx4$$t6wje)hHYHQdnGw2q_@<`JauKMI|`mxPj+ma@Kov|EkBuDJgk* zcQ=qor-F`-KDE6wpDQQzqcc0?+cZ3APJ3^;4r@r+6z_;!Qk$O)8A!4CY^~1`Lw}-?zeN9l>KZD9) zjwaTN=oLixR^J&NE=`;ohR0fgjrMpT@*e(^M!|6-$9*54xi5cPDQ9E&>E-EX%p`U-CwBiGGSYZrH3k7qRKS^dz2 zlPM2nR;8 zHQ2g4X$G;&jTSKJSbhBvP_V+@_Kq~OeyyJ~yaa^PV1;$WLT&=}g7l?S>bXVd#^IWO zLjDl1ebx6#(_sgn57fBd#63J7;N6P6L!Ef!$#n42Pe{d*3}_g52XFX1N8gaq$fXxF zjDKBbr`|SX0iC1pk7(-I?UuM2!`2OceR(wgw)-0b4#M;hWUK?raSY<30d6A?3yLX~ z1t3-mnTAoLSwTm7TfkUnnRZ{UDFh7)HQH80AVXuu=FvgqW@%d(v>yrlYJzj5fecyW;!8C`n3 z{y2YrY>?9!ilzb6H!thtgVQH9RjjP&o9bcAUOUKInMBVJIW0Spv%Lw_9p*(1(Q@-y z#Hd4o^&SYmB9J}u^zs&_sDhO%_hqMShPH+Ak5StH;?4t!00SKz0{CJhG${!ihf#BC z*QY7G2pCfmp)c~WA_%e=jIAI8D)tVSIq(s-5Tr>?BJ0@v-GprsBU*UAkY zaZj{mHOf4;AeRQ7MZDW}Z5>(|W9)r}V zdTkCWnTev$dB~t>Y$5O;I=Ra3&J@b57D>-7!K*9KmEr)}vW47*d?TgxqUJlmn;DmV z(saf23)=io-Sjqe`$rS>m8Jv|9Pq;r*~SYhabO)25;R9@G zX<02QRTqZA$6qa~XcJ&Lm`7&gKE09H5t4QeRn{z_nIZc65s?m1?GDrj#rX$Wd7~Nw z20+MoohHE1PSR3AKw;S79OksjX(^0mQW))pgQX>d>vtno)&F?sB30Vmoe%t1Gbe5t z%iLTeYh$4B5jxt9txV5owt)fsSiM|k9Z@;|OoxTIJ~1wc{=ban%?#i$;c&i~BW@yH zUud9f|6CQ!a>z=H93tHPAJnks49jG*94$kyPl2s1|M&o-VxVq7AGGsv!qex1d|w^8 zQm{GCTBY9j^8v(a11rJS2o#>$@%!p|k|d<^>3O*|$1Uo=hnQ!o49JkWdtyZ3>a7Iq z@Gxkkmyr*^^i=3S$QM4Sl*qBX=>?gxMUDD|PXBBx1x; zCO)7oCskp(fzAW!!y3OE4lpedmt{IOkJYf&TIci3IypJc5Akd3TO+1(t4gm#9*UTr z!|~L@RjXHX*ZAD^P75e?A)nq|hqrbDI!Akkg#(|xAr{eiY3ZNW9P1al7kLif2GzPlNcT`+t z3TSY=@Z}?Z`H`d?3I@&Xe%FVgj9sy{GR734?y}UdSw9F?ZmxlOVu7jo zNwmOqw|u$Ds;b?$Hv#7NYorfkBKO));}+=>j?QY>(dH8tuKHYAeg+K+FYAUUMXBqK z>SXj(g~RzkI%jN504fRc1<%HAXHF%LUO74D>$3Ig!SJxO^S!cAv%A#Z!7V%EgIpyh zMDEnh%#DfwUg$IDAGF0BMp;MRYoNPbI%goM`n0liVk zqgy~X&}hQl&x5S>UaTPEE2F}uogk~tFBe5myz#ydF3V*D=-p$d)mr0%zvx)nkO&i* zhgYx4$V-j{!tvLYRM3u0hVD*^I5_@gKh5B8*iRQPE5hYgjWN~uoJ&&&rz}t`6t!=Z zUd0ISlPbcn3xf z3*Nu#;Hw%ohZE~%!c^Wa-SD^83YMInzB4RYX#NY>&U`M({O}&JpAY9)p~2-{RG8B% zrvPqw&4!KYc=Xd4>p30EL;;7eKeomhg>b#=IVdcz9ZVG=!ckd;30usx@!4<~*JO>( zpR4n!!UYS(32p{D)lcN*><>7_6o_FnvjDZ{VsS(RZ*IiVG;PK7nR}3`8uc8 zq4f7#q~qZ?rzf!?3sIEWW@=6S0^#-7PUsc2^r_h?`v<|?P6-A_5)KE#RcJhMge1$n6IEZi18yE`ZzMmgD^8y}s!i=z) zLSzpMuWDLJ1Y}GoF~U3_@@>@_CFMyTE#yIA=x!(oA&MBG78;}va}3TIEp9zSADfjf zl&#dv(?m7nqg-P>wnBq}l)jCqElwic@JIaLyPmjv;UND9;r|EQ^J`o}X@F*K_EIuC zJmk|R++v3<*OP{8N}laPG9nTn(!mKU5>MIs2B}5zEonS4k|H)T#~X^1pTh|ONzZct z7y!30gV@MjmZsJ(54#X6{>-qKjdF@s?p(RQs@0l1CU>T%j6P(xFbYtW=^0$QG{;Qa z?Wi{x4;?3ts2<{m__qh}y$0=D)z$ z79H*k_EX@txfg&`OOnLc#d0(LhD*EztPY);#wGtLPNrI!p=;enMMuZ-0N;bH95#8@ zGi2bo9au>5D+gQqY25l;-LF}_t~J9rj1)ZJcc4g&Ye}Lc%}V{TY3`wWR-YX6x2#_* z9VWVsVZ}eCV&)@Fd1EY0eskOU%b6)(v2M==v(45sACQ;6Op?7TO>IDM1Y!>T>yl&KMPBQmRm2kePeF-paGc)>x@PWCB@AvCX!Kz^6X z`+_i)xZFcjxT^ZK$PMHf4F=ep0Amk-_=S&P2GD~y-S+j9p#JNp+N>_aSth5%(e~NZ<$Y`@95Br!W*V+>>N~aM2x`}WJ08LFZvXJ-_~TMulifOlzwAMHUT&QV zx9f!X_*a>w+40qw9T>-z%Y-*bT61z_#2h@JYnvqfxNQ0BB~Nhk#l!?QIt+3bLR%0$NAz;os zd>hCU9^2JT;m6_ykIPL6eeXLpO)agh&7QzgG((H=-I1S4%E|#YD~-8M2NSK_MG|;P zMfNh@Z;w)RO@~On#Ksd$cO{&6TR3|0ai6c3#xoqY`wJITrECyZFk>6p{F7lT3aGxL;bE&-sL5@yktxq2!Pu}t zLQ_YlZ(;&m~`RY}QzW=1(v*qcBqHbKy36wB-WuX%O-_YT2i9>B=YJ)`sK z7IfUmX{{-I?tSiR_PT)JaG0p*=2`Qvi@Zr+FR7>RM)Lq3|6FyEofzR{mS-7S8~t%7 zR|OTP7#V+8rT~6y|ED2y&M2v&a~%svh2cea@nccJv+6aM1s#Roo)oe7j%*?*C@8!< z9^`O=J1Gp!D-CLhy=%>T0$_$GCidIqKUD4s%);o87DXk3l=bx|+!d7)x?k^^nR60)j#jnZ8@wQdX7CC+lzBd>>T=vj3#%t4AyGS< zKI|yE+u$TAM0wiuhj!*t>QEufW4ZUb9-$c?9^Mp0my(j=<>PZu(^8dAG!_*C&;wOJ zTQCKtrQvIgOYBh25k5Zb#9mEHkzUzmEC3U3Sm6j&c*HCyc7p<$Q5R4%Q=MxM`w_y^ zYVc`*g?oi=x{_Ek{Rx;j6R)L|=NiF~ge*4wtD;U@3nS67C#6yfvaj5qcFe&3P7^;U zDUo?p z$nLJ#bxC~alizJ@whj)4WYUr6r#$62Fgz~aUoU)jvRv1v8@_1Y$eNq9?;C|wq}{Fj zXcC%3wTi7A85t2(RmJ*{8^P@*xMIOUJ~JEjtkM!eVmsvQX;BP{v^$iXm-36VoEAS) zGYGrf%NJZNTnB9@R;sz1DiMF{EcH(G#$d)zEM$>m!Eb%v8DrA>-fBOu=S+xANYBpc zVr*kJUMMwM+`!N@)f_sbllwg7oiwk{ ziIR@9Vewk9?X=y}45wF&r^r@QQ@sTWP`8^dWuix)!_2KgcfxcMEb$7Mp;6OEz$ImC z2!I*kwA8*pwrQK06RII%$MsaCd83Ry(s%R3tgi@9So7_UWE#(vlMPy^Q(n~6A{Ftt zwWu7S%eTn|3sOJNj*hejTf@4b8^MR zqbLYPpuU~U=@H!C*=gD2W8zdKS42d(6Dy8Wj17u_uK1g)rd3Z6=~EOe_>@5+9$WY^ zAf`?s^@t1V7mx+&Vck&NWSKl9}OmMJJidG;Z#b1P@Q?8yc;2i-Uc|-{YXDD~>mDae$oT9*3`sM}wBw&!T`wwKJSrY}G$q$b6Z(4ERfHkEGB#4o zcApZ{7Wcs_bZ%ZO#5h?3eNo>IE54YSQPV)H5)~IIzyu>gVx!VikA7H~NJ2tF7l~<^ zKT_DWl|?9oLcy3uN zc@xFR07Y+(gtvH!fj_6+55ZgCy>P3MkPbFV>o&&W921kvaEqqzeJr7Dh(S=T5D-im zzY}{{>P;t}FS=p@6q1I|_h-834NOQT>8$1pnn2)LlbwvVGJ#80^Bnbo$HOJL2Hr0= z)TiulA2$pPU*XnLoU*pu5`wo z@?>CRe;!Z_>S*+ARKlGRJ9(=w)cS{L)0?7Qm(;Eqjv!D!5Y0WlrMp$=?Yahc)Wtiz z*v2^)>ESlAbLm!%_P0+9!t-$YC7&(rDwrxp@k5B3VHYmzv=kY^C}(-#;P-Cd6h-mIF}a6eq8iq z)Y7|c=K0su0#M}j78AGF`pcJ;9+5ey$GsE-0$EpC4nX?fVinUb9kLNj3REYdJhs0I zmRAacr74Uf*+y2&_2xGsTz z6fpNRS{`@L^$9G4OTb&ye#IL;I$Ba)zB)h70b=GXY^Oo0f3hVo=5JAgtOFy4p$V>bRg5Dkeri)pa z29b-+2bc0}Wc!bTvr#?8U~cYv0*9l+MO!qHJsB8~_1bXE1fw=Td*;k`326JNG}h-` zp+2>jxJef(%kvgXPi;6GXlF@)bDw8}Nn}zMXiqJffZ|!9+lLkTYQ0L#RS3zr3=u7* z^vCW~)E)IQ@Yu>`@~@1uv9ceBOaik1*0zKS?oAjit!`>xkByN9>uix#u6ih(RCS9_{=M2!avv?=;E2zjWf@!xkIR~ucvIc;E0 zaR-{hjY63et5uEASRY`agaogUH4bbim_#?*6P1F;Zh>|sMF+C&X5%o@TZ4D@A`@7Rr3oQNs91(I|>17 zkprMI_!9t*K(GiX_8dMu`c2m_D`G5vMrzegUN-Dg@IC6@PCDl<1Y&`=5o%$Pa`4Sm zkvPnlTNw?a?*qX6W_9y(5XZ||h^T}9!xfQ+_rkKpib7Bf&ex2ji7Wx!kIi$s2Ehwq z(^x4uCK4}*-&<;f!SyQvX;5ZBc3Od)3n!%^mHgIoPM`{ZROt^gvu2xOeYO>pM&=GyBW3fokHB;7G0}vJ#>6m(DvE8{E+LHx~qGP&Y}FH zz$O-^zL?obp@#gVO%q{2y5%%EHtpQmZz>bvT(&xVIJ0^kh+M^$Bd#gyEliK9kIKQ6 z`L7DUj|nXZ_-58J6w?#*&Egfun!DB6!ICQZy;1<81f?Nxc~;p18>hnuGhupGGd%Be z+sLZrjXNnRsXY3>!7*rC*34Smu@j3#GuQ7?660js=6|qG$*(CBZ*T9G`iGE| z^HfsQ_qejWygafb89oSiG74PUpP#R#1KOo_dr8*IFaSVCG!l```>i05(q57m>kE{y ztYv@?ya+FDpg>BW!>(>QpImZc@Wb;rKGcpHl#^0{5Yn7>lnlqGo!MKS5n;RSHn}W^ ztqx7q=s6K076qzjXs>`T>N!S#3A?uJzw^QRvSHgXDAawYPq}aI{LOlD(&uf^T5hGX zsZm!pDMGkKNi0hoIULVTd&VfXtI<$K%HK1%j$w8WS$`jw$eFDqf?kF&Cqcq%Po{y9 z_lo`SO>TyOa$RnhOHS`|mA^hx&IkKm@O6MIl;ozBNhqlt#$B@l0}Mq4Ddc$5)kFn9 zWuwfZTfsF*sW4aRMfOw4kUhS-R@gjl2BPt@{mN6678K(D3c&FfcdpBDv+`K^FYbIW%Yu)wH=H?6M&6Mm)67Bus#+&WG0n#VpO7 z+OcI}>9ROU&wE=_nWPTIHF9+lhel8E0%gz9t6}mKktmSsy1=_TLL$9t^0onC23*Ya8XNlnhK`fDRP+N~k_f382$Gnv?R zYebZS8~;YO_?KgOwR>&O>gK{gJZUEjlUSRL&eem!n}e1?nB~tMVUr^7nV68v+Yy7J ziSs(6N?vr%9koBn?}Upl70LfqlSc}t2`(4bPmv095L+7#;Kzvw& zDBZI-Fa~hG(IwuGf1I_W<)ms%PMu%&PRp7dgZ z5?MyG6Ssb=dMbP|*nHMb1gE2V=AtDgV6dFI9sCLotJf1?yqg*%DGU=V&wi29(Rbg& zmS;Wm0@e>;VgH9|CAJ7i6 zn8(Q?0dEgP>LLe;ZNNN%UtVq|oqT`Vh?b$qic18jJ4^@X=3L@q=Gt<5`zMJCbN3mY zh+VK@WAFQ3wDcH9u>xc{D?DFTX?H6P~5+&VdPNM>}K z%YMB363z?AB|*iEUywMGnDLyLGI;5-^ns3!@jExyH9ABVehQzHEQ$%YJ%`mMBX zA{^?qnDPkX$EeSN*W+jZR|@ES3a3>{j>yl?Z!rt5`0{WQ>aZ91HIb1&ib(}bW@N;U z8rmK*IJ&pNSPt52^Sn$CIheV3>&yiwubUv=fNlww6@r+F(@-_C_Flcv^fIPwH#w-q z5Rj2~*|};o$HpB*L$`j3D>uO^(NF__8BoP>065U5xG<|703Y=<2In=UCaI}-9f!+? zs6MTa9Zts&*tvw{G1;LN1iv>hEN12Tmw+gxDl9?kPMuSsd<*zzu^+_Bu@e{7M-r>U(y2xy0ANZ8*a-Jb-@As1Tb zcl=LX+{>%4u_-!)YUO!BmGRdXNuzD_3x(R~`;1xhJqo?-n=eSa5hBZ)dUc^#v-#l~ zV(Z#6mlk&p#0@A?p?r}OJmD`qXZ?>k0xo{rQgg~DIcNb-T?h3%R;=KC-+p|F{oFp^ z_3O^=A@8hp=a3W0vrW3W5K;I<2uDKWRu3#rdaXg&2H;ID_N-A=7N zMJOGICUJdS;oz$?QQ@P-_IHabkG!_8K;_Eg=8DbccGp;uGx-}fEKKfPZwcSHBVUIYlS#ACWc7tb&ZTEC>#)JEZ{)400Q^H`mAgBU%7 zg3D-X=%PztWFp6Txp9b6252?hzs&ZPxhCAPacI=(&tU#JaBwL?QO`<5x2J!Y8OTs& zo93_fhD_oLSoiB`jn81P0lx)c9JNXA5c6{Ajr_5TosY}bx1n-Y6Opi5qZZYXrH0nq zS)Du6Em>2hpIjzGjTXx1Pdw(9w0iDqzRn7bz3+hn-nd7JcU`3v@U&RaM^<341uJp<+C)Yr(Uxwvw{)!3?iERMt;H; z&*HlZiFC-pHyj$|a0UogpWMz#9kY_GvVGRF!D&!9{fI+jogwrV^!JxCogQF-?lgYaNy_X>>Dex_5N}KK>Orse zK|%_jqoq2pYx^Bk28P_)_8QWudrd?QelQX%rpkSXU4ZZWMNcC)O@Rw6ho5`gXoJ%?Sn7)!h_@=t^Q=f^Dx^@vr6q7HUe|!d)P3!WBi% z5}wji9UyW#=-n!XMOxQlfe;!nI-(Rci+lYt`zFwu_PAkIMZpy3&q%u3)3j_Jpo}zS zmv3&C(#f-i>Bz}|6HawTlbQTx`2r~6+R-C_rh|GM zNEQBi2}mCvM5f{4HI*7L zgj^MRscF}QW9V&cTyY2n$bz!t_-aJEU)0(SIWMmrLm|8qrv4cE^8MfXe@7%A@MLsq zm9R|QIFfeTIX4YmR2|TZ&MQ**Tbo%00kG%qx!iI5!sN74wAtT&D$oZ*AI+xj_QRBW(+=8f_SiODk8`Dchxm&5=NUVBP3oNjJ&^2 zce%r5qt3vAE@_;00L8$hpZHdh%Hw}HGFtI~!I;SggHiAh;k)ddhT0#f?z142A4^0h zh!<{(pUExFJ^_EdHJT*MX{94gBXKClRh;>__b zW9nudc{?pcs{WX`)Vomq>!#$j3jT62gqvCT%ygl; zCzyfAl;+L7{i8KL1ikP8?kZK0DZVXx* z>i&*d_#o{eiU;PTm0iYmP@tjNoqkk6x+&1SHn5hDL#O824?le#`rW%LOYTvy&(Gua zA1kZQKLTLt6}eJWj>+zO)V4BZ<{X#PN(6$K&Dwyi0=1-PfA2jchTNVDE&Je2Xy53s$lKx_iVh39tiLs3{vrPZ zJG6=lHx{GZ6GR4@u6Q8exyH6SR;XDfLHjkOR&xWZ1YvZiF z;+w;mQ&GS18@1um=|(1Z5culgU?LN5_P4H6tfw>da33l2ZuBL+ff8!1qaMt@T zt&HY%L+zM4OE)C*k!~=8uOvH959IlIjUR4Nc1x$hD$4cgnHJ}_C%uzmTQK~oO{Ik< zoutU(kXb*%`nXDO83e=K5XeQ_htsgV#m~MeD6grrq_{1w;NhsXd3oX0fT#6!@q=(S z8E02q4d=zDOgz07@X$`D5xfU`MwE3llZ-0~kO;1r<8?0sZt;rJM)%Vrk6%w-3-7db zEUt_etu@$CZc*GAF27qu4uyoyaKi=X_^o4NdeEnQ+FF(w#k~s*4gvzQN1GjwRtIzX zP-R>9MmR7LOj&dNN`nq7I^JT#gsTE9XMg!?xV5ds1i4d3U#2G9y!|H`RaJrs>5LDB zLXPfocdchIAJ5efvw`m~mQGS%`Fl9&7POFTUeaR3HC>-RBK@p8ku*NOs@C(?m*edp zzRdmliXW&I@~& z`jA}%;Xh(PkDSvJW_BPTfS#-7|XxF=VX5@DfG|Rn|5680{ap5 zJ!O4%=KrH??(ZAABGiz)tgaAcdR!>=js|~b zL7O(DPKoW=Nq!M^Xd2PCLEb|=6IAKha=aTE7S+7~1r~tsOz$p9cGgf81gt*iE{b4N ziGTEzzZmQ>5sW_*uR`33%`pwacfZt}Dx;{r0OHUpAF6$uy0h(De}1Wz`m~&oAG(BPsftUbsoMBrU}2sZh0mlx~uXh)hg+DWnp!b3TjtyQ-PlunQ(VE5E}AJ zx}r7U&0W)PYpV~%F0Ejcmnq6c3%&*Zl!n=%K}RDW@Jp>Mpl7t?GXGWqByO~ihkL`@ zI=>r6^Fc`9CU=ffK*j$4bGKVRtKSnO+W2fzMQmj3AO9DfxufB3p$Dj*Eh1Xud>d73 zC?-pg+dSIS*lnwr3Kkd>l zc)me`Zy$Yy5EVQQsGA6@^x_!kU-g`3@FAnyvoIeFxET0;E%n;SYIo~QFv+!3qsf&G z+LB>w%|ho+-tT?Nc|&5C01V*>AFkVP_iqx&Nfv@b$0;p<{b4k8X=z+zvQ|&2C7;V@ zci1r^iI6s);;QlvOY72a?ya9DMJ0tjJXLVAUf#5>aEhs#iaMXp{{z6J+$^)-5b6AR zCc!u>*@D(`2P38!>~+V6n=)tw`Wme*nO~u0PnXoJm%Sv%~tTwk*g?8_h^Te>tj2dyWjf&F?H~Ix@MH&946WfWs%j$ zsiI*XqH{y}UC)E!@@a#RIWjJuBpcracfZ}ev9w!3AjqfZa4VIwpGK-a8k3kI+O zL-q_-y(eTd#i=ddO=}jrg;2QUNPY~v^nLkqK=V3*1EH~xj8C`&G*&Wf=!X`vvz4BC zOVfNdED#AT&bfE?XM0*tGuD!wVz=ahJK|5aAm%fVT?S~#GR%|pjQ|zBy$T0F>jTNW z7jlCmQrAorL<0Be3=y1A-YAXbq(*_E_Xi(X3lo^vEz!{IV;`Amhl^x_BjMn8z+Bt8 zyWbuMf#4s|f9zkktdjqY#=p?Vsl6m2UFr$jeD23kb0!vK{V5$GkJBkIZCG8WG_EP& zE7eZ;Jzt!czFiZg?U&t+U}y(q9xVh9edZq$*heuNM|&}16Z|lQx7B*aMUhVi1JcMX zNqtPKGK{;3s!?nHy4xE99;qAvWEaA?E@mlCEnw^!3QR`e>o}OM*i|gRmr%|NwsdAS z7ib?*J5H*jA;lznaGayD^)0Tul2(K2^3_jc_n%HW;}^S5Exm)J$BQc)N&%&?1a~AudWPYu8<^!3@yFRnxrADfkQ>|hasU4 zZZQ_O4x$+B_tocqb2Wt)+cS;DyiqL#WYq+w(uI(g?UiFr^u9*v&d3Y zH|-%&2n~1wYlg&n&P+@uAN z6Oep2kH(jxH6ztRbUch)VL!_9spzrdqynQiJ)iYKGkQALd|(}90tSt)z|ov0U?s|J z^AQ>Z6|j_r`Ry9)(pk$z9C&YwN(OC+6-M3tezkZ4OsTdl}#(V@i@5K9vbCcy}S-DiUP!ODo_ z&eHOp?+aupWeHbuAT1KWko9OgR6f09!&ReWhvyzjOGm&#}a~s@x#1nf94(Da2 zhOysBt`kP}5kqtI^J5FowD9-mU}Ix@QF7x$?x#=J7$eA*mzQ6ZTu;4C99ehz!bBpk zu&{M>Gy$m-9uW~88*6=(KN!du(FVo<56#SqrkQ3*^)=DDEkk2t$30u|-2c+k({G&z zSG3f0fnpVlp#K1E8j