From 76034e67bd4ee8f4c6ee3f39f268d80ab5449f94 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sun, 3 Jun 2018 16:56:52 +0800 Subject: [PATCH] auto commit --- notes/SQL.md | 176 ++++++++++-------- notes/数据库系统原理.md | 5 +- pics/35650b4b-efa1-49ba-9680-19837027cfc9.png | Bin 0 -> 17408 bytes 3 files changed, 101 insertions(+), 80 deletions(-) create mode 100644 pics/35650b4b-efa1-49ba-9680-19837027cfc9.png diff --git a/notes/SQL.md b/notes/SQL.md index d1fb3e27..107156e0 100644 --- a/notes/SQL.md +++ b/notes/SQL.md @@ -197,13 +197,15 @@ WHERE col IS NULL; 下表显示了 WHERE 子句可用的操作符 | 操作符 | 说明 | -| ------------ | ------------ | -| `=` `<` `>` | 等于 小于 大于 | -| `<>` `!=` | 不等于 | -| `<=` `!>` | 小于等于 | -| `>=` `!<` | 大于等于 | -| `BETWEEN` | 在两个值之间 | -| `IS NULL` | 为 NULL 值 | +| :---: | :---: | +| = | 等于 | +| < | 小于 | +| > | 大于 | +| <> != | 不等于 | +| <= !> | 小于等于 | +| >= !< | 大于等于 | +| BETWEEN | 在两个值之间 | +| IS NULL | 为 NULL 值 | 应该注意到,NULL 与 0、空字符串都不同。 @@ -253,17 +255,39 @@ FROM mytable; # 十二、函数 -各个 DBMS 的函数都是不相同的,因此不可移植。 +各个 DBMS 的函数都是不相同的,因此不可移植,以下主要是 MySQL 的函数。 + +## 汇总 + +|函 数 |说 明| +| :---: | :---: | +| AVG() | 返回某列的平均值 | +| COUNT() | 返回某列的行数 | +| MAX() | 返回某列的最大值 | +| MIN() | 返回某列的最小值 | +| SUM() |返回某列值之和 | + +AVG() 会忽略 NULL 行。 + +使用 DISTINCT 可以让汇总函数值汇总不同的值。 + +```sql +SELECT AVG(DISTINCT col1) AS avg_col +FROM mytable; +``` ## 文本处理 | 函数 | 说明 | | :---: | :---: | -| `LEFT()` `RIGHT()` | 左边或者右边的字符 | -| `LOWER()` `UPPER()` | 转换为小写或者大写 | -| `LTRIM()` `RTIM()` | 去除左边或者右边的空格 | -| `LENGTH()` | 长度 | -| `SOUNDEX()` | 转换为语音值 | +| LEFT() | 左边的字符 | +| RIGHT() | 右边的字符 | +| LOWER() | 转换为小写字符 | +| UPPER() | 转换为大写字符 | +| LTRIM() | 去除左边的空格 | +| RTRIM() | 去除右边的空格 | +| LENGTH() | 长度 | +| SOUNDEX() | 转换为语音值 | 其中, **SOUNDEX()** 可以将一个字符串转换为描述其语音表示的字母数字模式。 @@ -280,23 +304,23 @@ WHERE SOUNDEX(col1) = SOUNDEX('apple') |函 数 | 说 明| | :---: | :---: | -| `AddDate()` | 增加一个日期(天、周等)| -| `AddTime()` | 增加一个时间(时、分等)| -| `CurDate()` | 返回当前日期 | -| `CurTime()` | 返回当前时间 | -| `Date()` |返回日期时间的日期部分| -| `DateDiff()` |计算两个日期之差| -| `Date_Add()` |高度灵活的日期运算函数| -| `Date_Format()` |返回一个格式化的日期或时间串| -| `Day()`| 返回一个日期的天数部分| -| `DayOfWeek()` |对于一个日期,返回对应的星期几| -| `Hour()` |返回一个时间的小时部分| -| `Minute()` |返回一个时间的分钟部分| -| `Month()` |返回一个日期的月份部分| -| `Now()` |返回当前日期和时间| -| `Second()` |返回一个时间的秒部分| -| `Time()` |返回一个日期时间的时间部分| -| `Year()` |返回一个日期的年份部分| +| AddDate() | 增加一个日期(天、周等)| +| AddTime() | 增加一个时间(时、分等)| +| CurDate() | 返回当前日期 | +| CurTime() | 返回当前时间 | +| Date() |返回日期时间的日期部分| +| DateDiff() |计算两个日期之差| +| Date_Add() |高度灵活的日期运算函数| +| Date_Format() |返回一个格式化的日期或时间串| +| Day()| 返回一个日期的天数部分| +| DayOfWeek() |对于一个日期,返回对应的星期几| +| Hour() |返回一个时间的小时部分| +| Minute() |返回一个时间的分钟部分| +| Month() |返回一个日期的月份部分| +| Now() |返回当前日期和时间| +| Second() |返回一个时间的秒部分| +| Time() |返回一个日期时间的时间部分| +| Year() |返回一个日期的年份部分| ```sql mysql> SELECT NOW(); @@ -310,34 +334,15 @@ mysql> SELECT NOW(); | 函数 | 说明 | | :---: | :---: | -| `SIN()` | 正弦 | -| `COS()` | 余弦 | -| `TAN()` | 正切 | -| `ABS()` | 绝对值 | -| `SQRT()` | 平方根 | -| `MOD()` | 余数 | -| `EXP()` | 指数 | -| `PI()` | 圆周率 | -| `RAND()` | 随机数 | - -## 汇总 - -|函 数 |说 明| -| :---: | :---: | -| `AVG()` | 返回某列的平均值 | -| `COUNT()` | 返回某列的行数 | -| `MAX()` | 返回某列的最大值 | -| `MIN()` | 返回某列的最小值 | -| `SUM()` |返回某列值之和 | - -AVG() 会忽略 NULL 行。 - -使用 DISTINCT 可以让汇总函数值汇总不同的值。 - -```sql -SELECT AVG(DISTINCT col1) AS avg_col -FROM mytable -``` +| SIN() | 正弦 | +| COS() | 余弦 | +| TAN() | 正切 | +| ABS() | 绝对值 | +| SQRT() | 平方根 | +| MOD() | 余数 | +| EXP() | 指数 | +| PI() | 圆周率 | +| RAND() | 随机数 | # 十三、分组 @@ -416,16 +421,16 @@ ORDER BY cust_name; 内连接又称等值连接,使用 INNER JOIN 关键字。 ```sql -SELECT a, b, c -FROM A INNER JOIN B +SELECT A.value, B.value +FROM tablea AS A INNER JOIN tableb AS B ON A.key = B.key; ``` 可以不明确使用 INNER JOIN,而使用普通查询并在 WHERE 中将两个表中要连接的列用等值方法连接起来。 ```sql -SELECT a, b, c -FROM A, B +SELECT A.value, B.value +FROM tablea AS A, tableb AS B WHERE A.key = B.key; ``` @@ -452,13 +457,11 @@ WHERE department = ( ```sql SELECT e1.name -FROM employee AS e1, employee AS e2 -WHERE e1.department = e2.department +FROM employee AS e1 INNER JOIN employee AS e2 +ON e1.department = e2.department AND e2.name = "Jim"; ``` -连接一般比子查询的效率高。 - ## 自然连接 自然连接是把同名列通过等值测试连接起来的,同名列可以有多个。 @@ -466,8 +469,8 @@ WHERE e1.department = e2.department 内连接和自然连接的区别:内连接提供连接的列,而自然连接自动连接所有同名列。 ```sql -SELECT * -FROM employee NATURAL JOIN department; +SELECT A.value, B.value +FROM tablea AS A NATURAL JOIN tableb AS B; ``` ## 外连接 @@ -482,15 +485,32 @@ FROM Customers LEFT OUTER JOIN Orders ON Customers.cust_id = Orders.cust_id; ``` -如果需要统计顾客的订单数,使用聚集函数。 +customers 表: -```sql -SELECT Customers.cust_id, - COUNT(Orders.order_num) AS num_ord -FROM Customers LEFT OUTER JOIN Orders -ON Customers.cust_id = Orders.cust_id -GROUP BY Customers.cust_id; -``` +| cust_id | cust_name | +| :---: | :---: | +| 1 | a | +| 2 | b | +| 3 | c | + +orders 表: + +| order_id | cust_id | +| :---: | :---: | +|1 | 1 | +|2 | 1 | +|3 | 3 | +|4 | 3 | + +结果: + +| cust_id | cust_name | order_id | +| :---: | :---: | :---: | +| 1 | a | 1 | +| 1 | a | 2 | +| 3 | c | 3 | +| 3 | c | 4 | +| 2 | b | Null | # 十六、组合查询 @@ -610,7 +630,7 @@ create procedure myprocedure(out ret int) 触发器会在某个表执行以下语句时而自动执行:DELETE、INSERT、UPDATE。 -触发器必须指定在语句执行之前还是之后自动执行,之前执行使用 BEFORE 关键字,之后执行使用 AFTER 关键字。BEFORE 用于数据验证和净化。 +触发器必须指定在语句执行之前还是之后自动执行,之前执行使用 BEFORE 关键字,之后执行使用 AFTER 关键字。BEFORE 用于数据验证和净化,AFTER 用于审计跟踪,将修改记录到另外一张表中。 INSERT 触发器包含一个名为 NEW 的虚拟表。 @@ -625,8 +645,6 @@ DELETE 触发器包含一个名为 OLD 的虚拟表,并且是只读的。 UPDATE 触发器包含一个名为 NEW 和一个名为 OLD 的虚拟表,其中 NEW 是可以被修改地,而 OLD 是只读的。 -可以使用触发器来进行审计跟踪,把修改记录到另外一张表中。 - MySQL 不允许在触发器中使用 CALL 语句,也就是不能调用存储过程。 # 二十一、事务处理 diff --git a/notes/数据库系统原理.md b/notes/数据库系统原理.md index 31adaef5..1bf22a52 100644 --- a/notes/数据库系统原理.md +++ b/notes/数据库系统原理.md @@ -81,7 +81,7 @@ - 在并发的情况下,多个事务并发执行,事务不仅要满足原子性,还需要满足隔离性,才能满足一致性。 - 事务满足持久化是为了能应对数据库奔溃的情况。 -
n1yA!QJC&=*^BQ z9Kku@vsprObutv|O)SQ=HH1BT^L0z!Mf+bTCE2H=U`HvZ9;Y{>o6Ypy-CUAvD%6bT zz;Cb3J>iaj=0L27-dCIxxE)WKje^vWGTPPL={I6FPG7p&eMc^^%RIcouV)^yZm=`E zxby9uji3KT(9lq2(or(~Y+sQP!x6&)4i*j}h>m$D=wN3rST^i$uk)aN`j@XDj}(`b zFf2I|8-gnCeG1EjOmgAsif`QZ>zk&`uL(|w$TP%<&LhUPTBg_>dArHBc*(Yk`=2AK zE5P9xvltmV@1D8#&d?KQLJeQH6tdDcy0Fkt9%%UtJ+mjN2~}v*5`~&@knfE-J1M(C z3<)t*j9+UPZF~u%184aiL%m44VW-V4Gu|9|Mq7W(b9WQD@wzzPXs-?Qx3Z!NX+M!p zY4`et6svlF?3d~SbCevv>1A}?&c7NY=(AQEDtPp znU+=RrJE)=!$a!_kK6nZ7S%oS@Y6Z`bVdjVV}^D_+ieq*_}3PrG2j&C2L6hspp8*q zNfBXfvTBbJYH8BM`{9p|Fzq;VX2E2+~w%TFUdUzkYmrQf}0GS?s>L;eJ87zhD{Y zZmKWGp2b(UCyHuX;=G`csd?Wqng}?L{Tu-e-7;Z*i3asIhV!%#k~8p^3ioyYw_Ffe zjW3Un9E dEd%!3L4|JM`zt$)h9sQtV!GA~T>mMQ?yGFM zx7%cVj^;n^%ZHrpCOp+}{Hb>CrtiYbvf2e4859ft%N+$<((Yqyfl7=W&cl>SR!$qj zDWRa?Zj&9(x+`~2IS@SFPa_%BP48J_ZlO_}_Ze+nSus>eSy`DcqGl=Y*Fx=LR1}+R zY~3_$q=hr&C+;Y|Vk%Z w}(-7f&hVt;*KOhT#|8)#iYHVV1;#q#`=Eny& zOw3k;9oQ3a$KfBP9(;X62Bp<^5jqBONv^8lDYI@2hSmozxAGxfDZ|iIAhpSLxKj94 z{IFZCFu%kkL>NghWJ)ejM8!Q$`k80(3xbTr@nr<|pzXn!X|2oBTCRB6809fe7lzpb zrTDQ6c#f5w=PB3ksp>nlK@lWXL%SjvsgJ}9?Um1hy&Vce{D8O*C7diB*d-taQiYM@ zEzx?jc3@iks|l2n|0*67?UUdka(UnwNnwfTv8sWFk@$!S-H#9G3%ngHc>_BHkg*yi z%xI$=8M0yxm^T^&RsrbR)zSq`i91P%>jzsI2eQfXejcms*8748tdq$q7(klgwCoX` z=?bg^5}?m2AkX5eFAAAfJa5`sj*l9nLw^EoK1$YX51(>`qXNGFMIGz!=+vj%3MNEO zkx{`d&*{!cE5FHjGF`}~+Unj0u_fcE@`}g)?iLvo{{>DInEXmZ<#w }@bx zSC?t6@@(NXIcr2e9c)G)JT#QI?_~3ptqeKXHz E33%{ZF^NX_U4m6P; ikj1lI_I4c#@H6|z`gISWzS16(Inyc2Wx#X zJNI9gI=*?I;@&VgU*h^nFHyvDWOA?|BUo;z%H4VuEP&0<$2M8z$|~K7912TK4ERiy zC!s9{p0>Zfe{f^nX8oS=qD@2idRA8kqd1F_JcbcY+7-Fw6>X;F(1tqR(WH&x;oo+o z=PT;nS))NDK;W@ dIth%Z4616U(XXNzstYksJzg+btoxEw;5xYec>!Bk?N4 zoy_V&Pd5dJ9MiE?BuO)bTFz~IeV+B) F|ymzq### zkJ&3v_Ak@~Zh6#6>kDksOM86#n>^4juJvJg1!WU!LxpO;5NzLAAFx4tTDM3mA7Vm( zeQx~|ZsR(tS1$!qR;DDOyBI&qk}C-*18Xw0zQV`8kq@5wa6?F8e{)>28H**q@Exo3 zTc9s%=*wEJ@tTRPjn@4bugJlu@W^uxU4^r`m7NFM%NoZuuqpWW372>mzF BsD>Sf-Jw*JX|qCG0IJ?^kc+a7P}%GAPXKg0#dzEXy!6EN0`h|%?*gX6Ye zndMUS7KaxJ+xc79@*rO!@RdQSS#6tVowMqWbM0EOT0u3%7d1AnZSCYUF=9*Wb{1+E z-al #|g6xFQ?JfXYl*` 5seD#~iNg2$83ozH>{DGCL^5Al3I*GI zXdG3>H#lW*Wn4iXN41NIKlrMpST~&>Ao6Hg#L%mTFstSr#|-gWtXqk4j$C;Lm;O)^ z@>c0!t7|DW#>8tT7@w`tYHyE!B8(nfHWhSAGJ?HrjK&42=vk}nD }zjdE+61?A*|;DMk}zlE>w3=OF3_aC}Ph)mBZ_I4wa z{~aqWAEVcdsb 5nP?X1hC+{b8)6||a7(_p@>WA{2P03@bw$BJ6jMmzQ c@Gp8S*Rc_CMzng#KOl+v1>y!0znfez9v*m mADT15zvE9g| zg3>!R<+qX~(y!aHQhxrTGRCStmTqZlI)g4fQ%F|ueY~~zD{6>< FL~-=fn$tI-hQh2G{65DjiG>m zxDIKSK^-krzv!*8;>3x?@CIZBIgx`anOG2L05)5f@(rX_TkO(vx|-Vx%7eEi6Ol7q z&Xf^bLe(eyI7IecEaIg0XLnisf?~fJZZ3!>7gFp8v|T@_2(#Aa-Y*pH0qH!2zFAQR zEyzz~=!crV0SMKj4v-y@M> uI@ZV-@o(-m+*HG2I+4@Q53W_TcF(=u@;qQIM@H!E4Ye!;D;A z`jqV6-l+TJf_ga(W$>QsJYCxm2M@nP7r1 zEo*&vI197I*wy%^@(_@;pj@tL?Qb}5J8^h<46Z&!3NRPLBy WzzD*~U{w&rgcj=xAV)F!pPy8g+!3N2kx zXSLIqQkpj@1VLscNLl|>opTiO%CG~Ae(d->g*I>`#;2k!s(2^OEU#BO`B18&S=Of7 zQGplCqO|FmD~#t(E+)>r(&RwFQaDx7`nR+aAUAL$4yrjD6{S _9O>{7q zP8p;1S=S8R(x1L5E$cTcB4e5ylbEd@eW)jF_w+c}oke4?`1Scmy-&_%jhCOgeEqJn zA)UWAbNP|Occ-BjI|>$z*6?8fjvN5|{=neHk)2X(a#E=4 POY6Lz 7e{A#S^m*m)&NN_k{g
c3pFw1puW~uN7&4t z|HHvG$>mSQCMDT`^0j!{vmV?w4sXdCulz&nGUq9P#7x->+QaGFmkld*l6)oc3{Dch zFzTFx !4j{AQ+*sA*YFh|BV4N0|1mHB7 qDFNK(^;@>_C)gr!rOlxy-$ zbBCC%=8B$~35=chK^h^?8w{3rg!Mjl?J@VT@Sao|Bsai%iP?Zn5pdyfgOXB2gtxgV zou0(W(f4+9y*yiX?Fo|P8)b+Ku72}2 B@I=CI;ML28;r3S zeVvG&mBd(?5Ta_M^We66dz;P2q+p`xi)^B6l414$y$b1y%F+1X2uXJKifzMQX7tHn zP6hvpIMH+AlAcpK8;IUjD 53C zeDB z* =3 zJO^ErxWQ6%WB-fbA5EV#^51k9*};Xq&c(A1Ctw%ioy6YHC*{U#8$saE_Irq*ZG&*n z6R0PMz`eDBvWx2V6|knCRE}ljv72a%;mk&XUwDO>TAz839GMXyP%fxnk_+={4f*(# zW}&>X;a8>W@YMc=O+c*a_tr2W=R|C_2D^f%7JPeqE1aIuW~~kGR*m{t=sO^|38xeH zZ@kU5m|QjT$TyH;6yBML(<2}{qtRC@_6(P(KMnX~Ip*?oMvvYs?(Cd%TKkHCr5?!D zr;erk3eim9@kESOW(~kHQq!&tj0htuyLex&2L#a<1eI^NhV-;2;_623sE{%tvmB~w zK8}S#Yj=qyW|)agfr}j_b`r 7@tY9JvJl%Dt#mg?_SN~~ z6GMw9KQCT|mtUe!PI%s$MD)nda59feE&AMnAiHolyS{HPYCPCm9M#(^n@oAn0~by* z6=jund+B_J1r|g aO7z~<6#L`N* zz;$!Sd8umD5H!}{PTeDX(9Fyk)5HQV5Azz2ya2SLKc pa0_-FZp-#t-Cnmi$&IuFMgt?GWoUn%@!qklaC@(VRCt-s zeP^w*hHa;fzEz42=@=O=<7^@%&3hLi1wrDD7sIlgUcnj*Ht7@7$L`Q?{C$kBuTZo{ zs%9oXB^%KGp;7v~y$A#eA`^Tj39G*K(MEOrOp>VSr1l-e>k8VCB#)d)ZERRS4>H1P zXJy;_t{paGe;=XkS}O}$qg G%6zb!C`n%b? RMV7?xy{Bep?3fdsgQY52%Q 3PkdcZ6yny&*`+C+Vs6vkLQc(OL)V z?gysMsiqoy#tM&DL=Tol%i^{5ocBK+z+qj9QRx+ZdA;36k8k??)S5CP`fz1AwmwCW z7~|@?KhZQa x*t_dU2O zVC)*23n@(u^fVM*o%!a~Ltij%wBb7|E>ghRP?;bDeH{gL?!PhE;{~{hzYV05`JF7C zj)( hu3Uhzhv9Kwr&|D}7+pvXkL z(jOA|&o0()ShZ3=fFOOx{Oltq`!QJyi9%JMtQ+4G$La&9pMlyq80$5d_>_|-X$lPa zgIFhLtyHCtr_=VN*rBO%J0=Io{@e)535lnbuVrW=qCUjjE)u%%d7_h9D5WdguY!X? zkwL{e+a-CAee>PcuAhr#C5G2 Sq zN?r#9K351k8lQhEtsnLAt%WY1`zN=g 706JQ!a9^{7vT8 zoN gwQW;2xsG z7QBs0QivHT>1Tn6?>Kd9QD2(2G8*@il|F@ALoMArh^(mM5I|8=jwrv#2_BIkg^P%h zZF9u93-mG;MCR<)%2U?|;8E*O@4m`uuQKH 99b)m8N zw}zEOiqrwrcE fOqY>Q(s}VPbQjz!KkTpZ^h=nW9y%ehx2Y1xhXF9Ei g6ao)z1`c%p zljitmE);@JOT`k&q5WvB-z>+utfo0l-K$7 z&bP*p5Q+Ou&nJ#A>m97>;ek3%-)JFAj(r<{C?sgZc{J@RmrF#h+@x^xV~ IHnJ=`zpZ1#9jIs2_u+~WyUgyDb zJ3Qdh=erD&$iYen9wdsy@X-jBq!bct=yvW|!T`0g;6(}!@4n(iujIFE3z%pY8Hm); zl`ezy0CIN*C6$QlD}2s(1mc+wd!5r2 # z`i?y|UAqmG>sg%XI}hhK5?`1o&C0ZbXDH6gtq1=4K%Ju)v<;z#spYT|fe$l7h{yhj z&vcVet~zNoP@TWcwzD=jeaoDmB~jGc=hKtHrCkSaZ~Z_)fqfp&poQXNe{OgZXPYlZ zpYe!<0$!|2>j(S@1>z6iN(i?M9RjPRSg?t_l>1mJTjQ*%9l%~HTSZUFS@EE7Lnck; z j}2Trmyc$W+wTo8&9NDa8U_ZTMn=%Oxqj#}TRb$R(X CX?%VJ?^jF9i?2p zeU}?r!%M6Yr-&Ja1IbdrNZn{EQnav?dT%GGyEw Mz%?WCavwcKObgOW494JB#Xv_wG1- z;ikOV)6chqPh;!Weh!K!1Bw_RDC`yLjv@;vxf<#1=50(jv$}ijoX!*Dit~zRps~PB zcI4_VUe0nnuhHM%FB#SU`2{m|^rF0m&B(T$|HLazQje w JbC=^UdrsNvnO44GB2(vV-6bB_|~qe z?@VpPV#sIWIL7CI7h~VPiFTX0;(KrPZa2lEW-FLIWlp#9G-~de#z7tQ+ipIw?a*e%1)Q`c3XyK1*wG0w| z^s9>YRqu`5sK5G&_sP|rsuk`m)C8h^{0GH=FNf-?;3Z4dG&ygl X97S-y;}?W{!vaRXm*{Iobq{fS+O;Lmcj;C(%&D zQW(kmFu804TQ`L@t-%qf^MC{8F5xy(&C*iRQ=rG`%T_gE^aHU`=eOeIJ(xr0;){$t zy+wW4T0mzH-Tc<@;w2q5zAbsp#M9_N!8w3gE+;lr7p~b4SGvNhcM~M9LXaOhtYS)^ zC9Dt! wgtryyDf<72p-pb=y5qGYEO{@*0|YQ1dqrZ7mPW?w!;-SE=N` z>cD5sLJK>HnZf4IC`972{jfR?mJwsUvVYm+-dN&sn|S*dd_wCTaG^pLgN~xwWjTX4 z?=9b3pY3no3+IT<)P63)T=dd(jN6JsE@0hd^@a8B$F&N&tsirkMxQEqhp+wJzkGEg z7wUU~awu-!*<|rdyD3pdmEtpqNS~x-dlUEumm~{Oihs=mOMpzWOS#<6!m;~-LgcLV z^BA4{`Jj~!>808jzJ^WG8EM 41UaG#UU)_>MUsyR!}7E|1fLtOY!a#|=aaP+!h+D$4WUj8DCA z^%i6jQ^CjIKeRkd+?T@57MH}{aB7O6s1E5Myl{ocXiDm%?*;R4;>`Yk2}Z= Q8Q5sUgm;LsmPf?-5E(9oycByyVE&PTQLWeJ*Vl z9Tj+4lnEqaUVYR~^|z}M-3jLmmf;8C2b}R+e|`5&zX{6P-4(LGlFQ~~VoY5Y@1Ma5 zoOu4yrlNo&J3RyAQ~wsFXl3vx8C$B~E boDf8=m|MNp2U1- z 2%9qS;f8zf}89&!8kG=qKCkPuUkPuEm5|AFCURw@a zsZ?_E?&ayL^9=z(p6(IgC--HcX+nG6gtLIO1^p<<$t)CUP2%RtUMw^o>`!cXNi2e} z1xp~N!DXy&(A6EJy4+Yn*rW6vXYxYVz&G-blZ|jhiM3=969rx6XlU7*Fbz|$ZRBTt zkdR;jaf816hxEQ6t)$LK$&kHHHav`Z_;B}kCrE_&rQ{FnF9rvq-V<)>I*Xu;c7GHh zJRAg}E5LWjhQ{&sUlLQpUn)D;#vIIU2Z2HNcpC&ZD9NZ-VL)sGPJD#uy$Gwt!S{TQ zy4o!e7(MUhxWGJ%l~qLIS#Mc9bETL~GXx!oXe8LpIlxgX;YHg(iy;j;$vHs-cIK;c zWIdQRSxae&`MK&dU-G4c`6m3p*d?u`nWA3yajlT}mIkr(? z6GN@tm~@T&B;AA(wL$!ZMehfsbMdMh(3n)R1TMzOd~WK1h(OF7QE|JY9__*lz7_>m zCH);wbsL3}2N2T`#Y)ThC#bug6-|+xN{U6y{dntx?SaD>M$gp#-cAmHR5kPNBh`3I z+WyM^j_?Fn)!QvR&zyi!zPf1rD*av!_*sdo;K_jE$P=1Xz@esUBskMvr0vk)r9 RJMdApKLn-ni@N>0zC0Tm^u<-a(}LIUub)K4l|w%;&G1&xew_J0xES#ygI3u z7?TZ`c;NT*U^zY^slnQ1fi>bN@fktB;JI{BB*NVxSYvpgVQUBBMv*;u+SS}aJO3u~ zr#3l4sN&*ZUDX6B8{^ry>b1Fnn?HIaS`$gI)DZJND ybBrbJwNg J&Gez^jCfu>etiDUG)E z`Qf pw?neuk=cYFN|_$C|ma+JDq1Dc2#! z0kC>d*(RxKj{xyxoa1Org~Jz0H1Nb^KJes0!fRqy)te$qS0{iIue5_uS<`$KF}*_3 z@lp|`^s-F%&ED%PG(gUS Yqec`QI+Lg#sfUw9p&G>HdS3 zQof`F@UqP?R;a(_4|Z2nT8kzMznTX3Q*xCP;i}-}Lf61Z674%iD>w&IL}{ ay4C1-Cg%q*86}6gX69#!GVlCWrqrD%5m+FJ zi}EYQ$AFBjCU~=2ZM9%NR#V2w6}>A+F}1L>(5469-rmE5Bm>jyOnFT^3ZO9j&C5XP ze_Z!h)90T epW z?L9|0G09J7-WXgj^d#QC`Q_!Zmy~ |TicEBSASi~Rba4WaH7BI@D7 gO&a{j1u_vqehj4 zgB7_ymdpEW9VpP5@^)N9(vipJ7T>oWrZ p2% zbi<$2N9+QHq-UNoXpA|u?j*6vdO&80jUn7xZ2*amek =FU4TcB(cxM~&q`v5cb3wL@`yQDm=5->nS9yd6Le z+RYM35U2rK5HyXc=KTe-a2gDJ@Y1! |LnTPJ=2{r;lm17H!0w++7TRX*mGW5_frdm-#rVZkKTtlz<9ueF?&a+UsaPB5#Jicese@=F!$Tw+k0wWU{r1v0(y2w ze0goaTGPF5DU8+A#F{ZnG%R0zW6W`M=wxDWW~_lyBrY0V)_7HcD;U70TL3FnGYDf5 z;fVKhFSY~w$`LKV+IRALIbTp*+%|t^@0uyCMU~sRU_$Pjt$s}KMb67x$575H6x8nP zi4DUUo}mO{LaFunlg-*4PF+Wj19G#3I3mcb;PTd~U(gqW*mhS%+j~xZMIJOs+#1r> z_#;PDpjX!^q1!5V`SY(r`i{o!2SSmaE$qHcnzuj#3UOI-SbG6fK?X|T2@e*`?06wF z+(2^vM&Icp`VwA5hr&r+x}~paH>)%_FKKI52{@#Haf87sNsm3cI=V5zW=*<9%X(=K z=YLY*cCg~o;?)~mVB>`D_dlWa*i_?qARX5h)c0%JX#I|?bL~k~QxfZ2fXoDC9c+FU zF?{>;TeZCGNwA&b@vTfgWoBW->r@?K;1;|0CsY|4w5O(@-`FsqyG3qA{-(!NRLPI! z$R@-vA8r$n{J(& tp(f^6ln!M+DhJ5#j1@8NK3~r bcK>pptMfk z(lRYoez?kgQEvDw)Q}^)y+rUyyk=0R%KC4Ovs<~3^neepu~+tNf?v;oStU5B&-MK8 zU=!FBqnx%n1T`{$dsjt2V)-A0S=s0Jwfej)$XrUM2x>H*6lTlcRRgAO+;UN=b?}zm z9se&Z6lH*ls?8Qus#Y3LFi}-#+5)0Dl@`(su^z?NvR`=robmk=ostebfrX)(r&*yx zyHDkv(ye6x#l{hjuTkVPTB^+Bf08?`hNB)&CkkTAZChh=>p*BbXZY1wN;rXXj`Kj7 zF8sCh$V0VNkjA3^To9Xm!_>rtXVO#}5+i&ly;Ajk@+AhDjrU~#i`G%LggBolr~2J# z{%>yjx_QL1DF!~$_Ysu6dh4ZD+d-d^-e>Glb4r$ijY^sQ4p^vW!F~ac*ub4M-_UHM z) u+;VpgiFwFs4@Yua^PfAwSXMU(Z()K)kDz`d2t1rOH zMbQ-MjXmy42}ywwK*cKMq6Lp)2@?dOctpdMQbntPdF(%O2GmsN?*i)7+G=2(!1YeR zkO_?Bz81h>m Npw96%P;NDi+GMlw%71tIz+D z>7b$#0K_QmQhc*w-!C9_))vT?l$1Q_T?F9_GKgeIj=guljWv=Ygt8~w6RD?{a$FtK z5WfD~-UF7*^CLCyn^(hb(MfN5e|)^DI}M^n_^p-caUu)c89I`5%p&{Mr<1q#%H|l@ z_x8fR%jbE37y`MWwgtE55R@#1*&cJ)m?GjblJ_UaI`FB~ytS?lxTv7L)d7$M;!JkK zNLuqFFpZ_3*ELph2i*PawnkVcv386=4hZ2yN2$*BR^<0t22sYZVXB wvcdyjah65r)Ii`h6o&7=HCuuq4TUzByAu^R`W7kM zdp>ak*&&iB5KVAF#hssd^m-(hD4w(wmyl4=l(g!Q+@y;+2 }7K#D>K@%mf(#v zib#m9Hatpd$<_I2t7?0cSN4psjR)kF`S!$5brL~IdSK6uKEY}VdmxQzmJlwO*_Tk_ zMMetfsU<8u(`k2P7Ys+k7A=y3Xs~w4^k7 rUpIjs0*BpM$-PT8A`10Bs{h-+0XqJ&^sE!B4?WBZ (R;Tiw_ieM7 z>SRznyInSensnb>=c1(L6J?;$h$dA&ug{2fmj FTxc3==_!2qLx8HGZ_h#%fijLyw%@R+UJ10(IZOrjry6-o7>FwwGcan+u z!-17S!%?W@y@keU_krkn%zS{Q@RQ(K=lWiWVdARSXqWVlgQ!vyMU5S&9g?2=VSyJ& z5VlB2y##>CWzcE&=?fU@q4AsyQnm84U5nN?&?Oh)_&`9L+5KJHr3;#huwApyDlFY< zCKDXM!jHF!R!Gosra{HM1+v@q8HErInh0V0(44JOjm{}3EOoD}kH>5%ta7gE;b1U1 zs5aGUM?dkJqk@#>$~T;v-LJ%VL0DI( N6rkQIk;*MBbv46qC=@Gj802$ z8EkBTT#OQ=7hsS&P+w>{uCp=|>)>FCh*lbn7Ddj?bnqbQ _-IowJBHXpzx~q0B!+S*#SK-v| zV6_u~U#?V$yS}G`fxUBmb31>)EU{^@@>=qP?Bw)xs|GCa9jS7=<3fGzr(Q?i2fIj6 z*wUoHqKh5Of(&4g3A5L}Ebim8X#g?DBzO?_ZE# Gk@rDE(_me2;D??{NbFFV>nCREdcux3b|NWt5VyKo z5*#*#b+EE%UjJNK kMB-kc+zT?*5)is~@Hnt6mRVrc_h z6UBmRZv2Ip_?+;H%5mRI=uHBCXT4U~J=B(zOUAmk ^p;umyuNlKm!uCO~%Y7xrlrG!r5?L*U)9TzNX7iP5cQ9GwtF z!Y~6(&A|iy61v<|nBK|~$5?KQXi Csr&O88gl(!2-XyF*09l@T62c&|T$+ol}7Wx5@HqEsn z|E!wPBJ~X}f~e#O13qM{-J0avmcs*qlXAw})p^n?UOFNW4^(M{r(dMr@3EZ|SLqF? zbc?%U$%1tqlAkHOwg!z8wkJ8flhbnVwZ JhhlcJ%~q{4?9as_zrM~K?&Pxe;4+!DjDOpBv>mBBs9pSaK^AvCpmL= zADA$l{vs4gzOEg-?>GF=P>5Rc17Xwsz)D(I`^6CX#VIog5~Pac z2X}bGdBKE@|1`E@1JVZ%@XJHY!Ztg(-i55MR=tKpgrW(KnE8!W99GA2t-qUs5syfW zB&4x<`$ BvrmrvdanY5vbE|RB7@oH5AY~ThJv!64RC3`wXB`vS%=|93N8TL zw6ztVe*T(=7tJ@Yb>WyR-5*H7V%i3e`X8-%08PN&qR}^{aW-I2M$Uh)V*HLdQd8+u z&${%(V=#5g+WP;!39nDxCBLHM5ehcy`cqB;J{0fTTLAw4< @OU DsB&dOQz+yaBC|40ACGdmcJPv3mdjqXB9_Tq-|MY&qB!17-LX;$MUE*5{4BKN-CA znR$HZap~_|K<05^VMn=D{|K9~-TGr<(cKHKv&r*Eq)N4Q({-1=6 zE3n@jfj^E*Eeyi<^* 8;Rq$LrYE7 ztsJ~PQ$PmWXLRA|U?b@Z%Kq!uIr6r9+iPWKP17%nKd8Q;TKR`>oa&owrev5I3e#^} z0xwlRww!JL{rYGdvP)s3J538tNjig@YKd6l7$Yx>^U9(Gjq-I+Q5*^^jQQ6z(zdk! z7^OMDpyCo?w`Kp0mvz4bjEJ?>Vn60iY)}B3e*c+GzEk~>OXT9jk>BTa{0;WkvU!7S zu58vUecs8JbWmf9TY9P6J79aB87?S%_s <4b#Rne+T zzIy05X8&92Hzs5Z2;qnfQ2{p&5GmgLLZO*dwz0q#<4=}B-bXW(Ex>y72w-zw4b#PQ zH;DfS-6E4-zXY?**SDk=k!Df?;%M;H=g}`gCmd1Ef2Ew4abI`(&+hdpkr1c1dmyKL zbF1g!ZNM|U{&&4XHgNM{9W#(mkAcj}onJtBsBOQ?;%UOo6pQ(zIy8eVnk4j5DqCg% z4n10#tpk6Epd1TJKpnjW!a1kg%>N-AT 0P LyP^Lt%>Vxd@lDU1 literal 0 HcmV?d00001