From a09441b38cbbc4d4356e4cd523b34fde8e43597d Mon Sep 17 00:00:00 2001 From: Christian Huffman Date: Thu, 4 Apr 2019 19:31:47 -0400 Subject: [PATCH] OSDOCS-294: Included CSI details. --- _topic_map.yml | 2 + images/csi-arch.png | Bin 0 -> 84885 bytes .../persistent-storage-csi-architecture.adoc | 22 ++ ...rsistent-storage-csi-driver-daemonset.adoc | 22 ++ ...tent-storage-csi-dynamic-provisioning.adoc | 34 +++ ...istent-storage-csi-example-deployment.adoc | 261 ++++++++++++++++++ ...tent-storage-csi-external-controllers.adoc | 41 +++ .../persistent-storage-csi-mysql-example.adoc | 31 +++ .../persistent-storage-csi.adoc | 36 +++ 9 files changed, 449 insertions(+) create mode 100644 images/csi-arch.png create mode 100644 modules/persistent-storage-csi-architecture.adoc create mode 100644 modules/persistent-storage-csi-driver-daemonset.adoc create mode 100644 modules/persistent-storage-csi-dynamic-provisioning.adoc create mode 100644 modules/persistent-storage-csi-example-deployment.adoc create mode 100644 modules/persistent-storage-csi-external-controllers.adoc create mode 100644 modules/persistent-storage-csi-mysql-example.adoc create mode 100644 storage/persistent-storage/persistent-storage-csi.adoc diff --git a/_topic_map.yml b/_topic_map.yml index 2072d0b6ed..eadd62163a 100644 --- a/_topic_map.yml +++ b/_topic_map.yml @@ -343,6 +343,8 @@ Topics: File: persistent-storage-aws - Name: Persistent Storage using iSCSI File: persistent-storage-iscsi + - Name: Persistent storage using Container Storage Interface (CSI) + File: persistent-storage-csi - Name: Dynamic provisioning File: dynamic-provisioning --- diff --git a/images/csi-arch.png b/images/csi-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..ffaa509ae5ab12ff61062db3e594d6cc8c7d83bc GIT binary patch literal 84885 zcmeFZbySpZ+cr9gVj)(%s!1ih|OOw8{X|N;fEiAkrnR0>aSUvCr}M zyzld^Z|!$~f9!Xy{jI(C{KGijbH{a^c^t<%uap&~Zd@a}hCm>0$Vf}5A`q805D3i8 zD;MAsz9Hgf_;b(g@e?;SM+-MkV;6ITsF|aQIfab9v8B1Hxv`nIbEmlgeB+_D`V+S& z3i5oWj`qyP=wq0@?497-2!w#Jmy@xnt+^Y8iMgeOOW#KdHLWy`ePPKiob`r z*$Ptrb5lss(HK}st(Hzz(87Ee!4X3s~=jxLrgY`na@EUfG-?CeZ% z1e2?`gPXAzlY=YOf1E+W+||^@+R4q@(SZVeMq?94cQ-*wxYK_g!QSaVPwU|NuVsP- zWAQR}Vqs%uML*Ji9H^l1e|@OE{eK?q>ZWS`@B95fJ+Z60x05-Gs=2G9yNfAooCOv7 zQcis0F6PE=jxOqsj&}dCipo}wZjP>2j!qQf;^+zbnPd;f>+{*RBqhR|>S(|F+@|7rf_4q)>xVBF!^>52#pX-pXjQFX8J zl__txyI(U}oV%?o+{hR4uf*K^ee-rQ&v)aNi%&mckxUqsn(}`n6dC(ZpK}bUKFyFOdZS8kXbjA{7PXR zqjMB+)|ZCLFDWTlv(`AztsDR8#&`PHK@o4rB~$--Ct`SI@t=2#*chb$yvw-%2J`Q` zH;*p5{qvDqND$87cR@Wj`!N2#>$`V>@1OtV6BoJs_nnC4|9`Uo#hTqwfR#Ebs;xcT zK@GOGwRzM}8L?u2y3Lo-qmnJzozCleaJ4$c1 zFX8l!q~&7*0VfB%u7BiHIp|nfW2RvFccRccRKuB*ljH5}4QEzRP@swLG-9o&uEs^J zMSY@}PY{!>rWFzj`13twFi$BuBEn1yqW&o*dbb+}Mn*h-eSTs3H7YSFX?)eAd~C&u zhmVhsl9H00ojootF2pGBvk~hLyDIpuVUyoj`S)^*ZX!V+4qto(V(}K*c>2QY>gqm! z{v1!MG+pB?o|mmJAcZ%!x)&4_R8dheR&J@3&ZB}~mW_c3iu!9tQw8te^Em&OP*G9w z_it=&Ztk~IpVf2YBad8e5XK4?wHcb8W=|)~LV<-edgy658d9JRm z60jJ+TGX6W>J(d)Yx7~3v2t*5FfrLrH+a_tn5etDZs)7zUAuPeTUQq;PH3l@i(6P& z*thTB(*=D!o;!P zxQs)>uK<2?-pQJ?ZxzSxC#`;DRv>{ar4@A7$oUo3meopFKM{JrxvQUF2Y7D2Wtvc|b~C zKgArF<@NhjMFqz{-`GGq<;IJuDz5OhcYm&W@Q_gD{RVS$eLH5CH1a{Gn3I!}gcyM^ zy7Jcmn%+z~CB((uCM6Y&`??{krq|&0@$FktgNqk0I@!VU+<%F-uY*8X^X)&~T^${S zzg9PnmP;RT!DX<`<+tF^+2;=_do{w6LkgC#Nzwlf2Gx47<-hWqnwoNR+jp;OzIye_ zMvRL*&F`9SNni>_b!L;o}IUfn%ef}S905G!_MoW zt!(Ds5|Bu0Z{MB8{@h%e)azj9SK=u#5kbaXD7S)8kFiycUZu(fZ#MKAEaLoif%L>PS5`)n3!lYGk-d8Pa$`9? zg;oF3aG`z{?In1+ER*N3^oufJZ3YIJQx3S-uGP8B%c`iv>c9f3 zJb6M$NVvGZo|TnlsHP^a3*mW^3;kRoO4wMz;8c6h9ph0-t-kXw7}pmUW1=H6tk7{~ zBBY4`PW!Rch=WBEI|NKRX6z}?f`gNp_4#au9*#q~__N9w=dX+J z?CgLEa&vM*jIq8me{g(Us$FgY{zel|2Z2HpLP|}>Uyqu8;kKnmcIS@xEIhq ztJv5H)${Z7-!U#iqr>vz zpoDv(-O&d-{4m`5hS=T*9vmTPqG|?z;Pp>_Ji9Qf*|d279*PQV`|Xrv_Ek9kd>>mr zx1pf{9Latuzx}Pv$y# z{Qd!_7r)v13IowXaQpUcy9{+R%je}2tM>Nx7#J7>j1^e$S7iw%n9JKO($DENkY`MLzo7zy0ukw+t`O0sCJ4bl67F`S%wH)b#Z9Vq#)6 z@~>GPryGz+q$tZ1e}8`igXvn=g@S^D-?OuM@+s_rXD5Aq%GGA7E6by$y_tgbp+)oz z467c;u>Tbgw)TQ?g*tkBadB~bdwMd3{Ofe4A&aER$;ZrGYmc!6Y=&}_nWvqR-Q0vTU(=M&QE7pbSf4nX3ji3wTFj?Pk&w(exILzc-R|Q(&px|K7BeM z$0E~nc6Qd;*?E3cdQN}6u%IB|XfR9hHS4c2%dFkpn7Hkkv(*`NuGP$9GYzqPmTVYs zc)CBsO%#a}I;(U_94yL}nvhW8Fjbc$mt2?Ycf4ACzAb$2I$mLYYJC$dQS|E-up7VS zKiz4<=ZC$$S;Eb3sDa((QCb?Bs>(_{JUsiUI(LZpa35t(%GWF^bqu}d6T=Bu942d= z=f5Ssefw5JLjxS>;Ab!{(n$E^7w!$LVA(N9rfO<;Zr<#34f*ux6Hcf&F&$MDDZd3* zTJ!PLx?-k)HoMk!1_p-h?d`#VfdHLjhk=~ z)i;cGYM7bL;RYUvhqm5NvAVwM;cH~{#*A=ErmJ}LM@(TugFvT5>e^7gT4ZFTv9WQc z_4vdDm=-g!i@q0>Y6OOUn-I2A_&pt@r8^K@SHLyjn4;r{-}{1sC5Sb|f<8Oh(Lx1} zT@&EtyH=Z*n`^N?-KbyUyE40mO`zrHKZXpGr$O#3dc41lBK$`uOO|aFmbVtC-eM`F5 zlt-3CL_`j#pPMe{T%4RT7_xG5wb5jVpj$6)p;tXd&ss}UvqYzoo{MW_dys#vW;QzT z#MIdMZMQ}F6UKmy^5K)c>gEhS_X52WavrBQA3w4|l}1H13mF_L$cp8<jRDS1X}pvmVU#Kll|2&PNk(4VD)zu+?#LxUKQ*`SXjN z+fW_)?yu=L`FZ!^!KNpFZa7*h^xa#rwzrRrh|v3B^eJ9R=-%DCb9ImD&SCW#5~rF2 z&o7hvDQjq$a}b@c&YX3l++>-+;Eu`9H_25iH#Ro1rJ`j`@(;vu1vzX-iq@)hm6etC z^#!3W+u3o;Uyr4d!e`c7^gsUE)>i4UMYGAoDXpLoIizKyqNQcYN@ym|pj9&Y!8n*J zLB?kP8$+qI?da%e^YL0eROaANu;&ZYUbB%=QBloj%gr7cuMgpY(zqQB%FH?i_a|ND zjFWl}zbD@DCCEYv_IRUCHw{GrN3~Op`IMUq1mC)YS!FSs&#c|NZ6F zoyU(KgJZflGhdG;$UN-i=~d#)ip3+&g#kF z*BY0lXYf^~ue2R4fi>$*=T+-c_Q+bvzd_99)f~uT(BQQ+l>hm&Sf^ST6LDP*@fZZf z>03~bw1f_I3rz`9K!c@R(q5`pJJ8qn<^rE&cE250^u0%a4i~brSdE`C#@g;0o-S$C zd#+EzMGQ}e4G-Ogw2r&EXA*XVkNTr4Iz6d3O9M}rS0}0i_v>dg zm8Gtq#H@c5On&mSBbEwR=->@kex#j>4f6B7xZbV#uJd`rv-!zdSC)p2XY_ey=$*}k zZjt=#7kLts?%vLzlH66_n*D;JBKg~vW@ggC(p9btJyQ+dt`Jg_TP=rf(kjTwb%l}# zpcm(HIDUTBZbYk(DEO9{# z>?OWzNS5E0jG|%`exJ3S-S^(!-o?4ovl~~g#AL8T&u2ZovEfu1ebA19V0A&aH-8u0 z;UiY$C!?6?IX*+?>R3xY|R zWyZ&EL)q8<3xb`dczdwyuj01uF~! z0s>4;XGuLL--dLWnVUmOncw);3KeDYLW4l_VYj2+`guV~2{Qy}3%`|*UmMa(zjk4% z%sM0KDlj-H>FI4wk9Jv_4t}Es^D6ym=^j0LRH^?4Cm3QKbnY2Yn3R+#-XMiS2y#^5 zQhwghj-bJsVP*Jw{kjld_u)G&%XfyC5iM6f3kN_pk$yqwQ&TA2ooULIrcY4!m;s8$ z_K16~5MSEc+o1;LydQ<+_1!C4rhoeMDO4G|ySq!zW_~$cynMO7orn4iQ z&WnBb=_a678j2el8iE*&hmUX29H2kNnaf5LIUqE^NUwXy!0Es7>GEi??&$o=W5MNG zQRE9-8ygc76J~>k#k!=5kh?AJ7cA&PR(Ptvo3k+LR9Fq>DyYUjkW1=_o1C1CiMd&v z3QJ&3?)~fZCl$1L-~VMTAEF>JeE%-rtCW_OHh&vn*UwCvzwuW#_V*!tFaQc*ZT%`L z%E8L&%9Sf#yTe*jza;=9C^;Oi;M5T+(ax{d7b=!{{`@(kVUqx4BU<6Z&dzvRR~MJH zrsFj-*?A`(>I4UuW3pvkOte)BetwLfNGKg+I)BKU26Jr@;rQThWh)L6Oq+>n+5x zfb*l0P4Iv|DRlWx4wp&{KYpkot>y6ueow9axen&gj)j>V>9&;VH^4*=CH)l?#W~`m>$mKzI z!f88F(=JOb>XnDV5@Hz)Ku7Q=$RahytyrUb`^zMp*$O&Ec;6rOel-26m?hK*&<9v$ zS)=#%AMl_2$CiF|fpE7U{`OPksqE&m^78T!I-pjUka#|kS6f>PbxKM~ip|#D$cc28 z;^Ja3yQYD}6iG}+!9i;feK<$->n>Bfb)$+d>*DUd3-!h9>@2y@;{ElkMGn*U2yh2@NPsU&^y@V>9j&c- zA&pNsHk01E_0bKbO3wK*q0f#hIUzw^Lt}V!v}+r?K<%scuIG7cj76fuNj2tG6|2drKB4PZTv8e9v&I_GdGvc=MHhTAU8Mn<40!zJ0VN? z79}<$-KbRvW0b4N_xKt~Ond3L+c5x*0(Dg(jhL92;xzR1CTF9CGgDIwir@b^a`&&Q zGhDbKTh<3aR;KQb-tSS~kIpVGWeF$X?8!RP_a-m!m2I><#Z--eAn#jc2`#OK#UC(W zs6Mi9dnFlOzAwZ2oS8QY+Jp z-+F+0bl!g&xH%&Uwm!fEe{unSN2{3r@ZrPv@84g+!BLcxLsyQfs&Tqy&^!d3AI}6r z&@C@7_go!E2cfTDzs@*+B`t9+vikT+JQRmiIN$_&K5#s3ZEg4l&Xp^DxAmad%gK4b z$*H0H(EK5!u;Th2AxNs!m-s!`((f_?7X0ABW3GigR=Z9q&4^d8oc*61K+$717}sp} zV+vm|`61x3C(sB&CpS1a2zPHVYFT*f-gA#S4bV{cv0Dx zH{L-mC*^SxSu$ZI%vH>&bNVGV8k*oaW>o@JVpw>1>*vn`TM7@s(x=Kt@memy4_IxQKc8 zY2g@zAqDz&q|GXIsvV}5_7{{NCj-C(nR9KbzO%L$y*LL~{@%{Jsd`T|1HhP+8K2Vq z2kKuRJol=#P!!_IAm_ zVWQi&KgYNO{bk3c>*@;8z(r4wq?j%6%rCwZs3VbALwn+H}{PMM+!=Lb@jUn&<=(Hh*won!TR|w0!sxzPI!ou*NZn6uVIi* z<}y6*>+1uMci=7pp$}mNIIs##1U7Sc+h=K+H~i0eozt8s(b3#V?sWnABF6u2VD*1L zj84AK6(O|l_=FLE93pzeLz+|oc-a0YCZ7*GvwGbtbQbAEp8F6qi;KYsW2Z85dz zhyRmdAPAqrJ+?S$8W@}b-c(UpITdpMwumR-4Zs5F1r#21A=nAA0gGjaIu&eVSDK2J zo42HCx7e}&F2u)|XMzZ9ODNqn3puH&pA)OHzWg6-W3uIsz`u>d@{7B1WP6Ju1Ug8h zMrLS^3fnS75o*){q)fEn9^s8=pME>>+`e-s``tS%t_d_!l+N=pC+7v56_vujjKiS| z8whc11qk6r5_)o>At8zxe2KX&tfs7ls;a71p|?6rKC&`iN3ee0Ov6G%T+us35Gwky zedPicT?~Rc`t`pv!|~s0H1djh@tQ%=gxFZsm=Uu#e)7LG_G{?B^3w~mC7HCwULG)u ziVJ?!tgPsEE#rkfm#(Irj} zF2mGIKf7>tQU*~#c5|f2AJJF6D!u6U)rzC4y4rT;CQ8+{0mJVyn_j&rkk(i5<#CPy z%)7wXy6zP(SZL7ol(w{3lL4+{emTTYDc6#wj%R~ZJa29K!cYDylbMbfQbM%c2*0tX zzd~hVA#uU$|0|M`c8NPJqa-+?C+>V19B4Wh>ZfNxIDTD5tWOw|Sa3M+Tm}{%{b{hR z-9b#Zg`BLc *bM7J{K@B-*y$IB@S;IEaU@Zm;0gNM=t(032WgIzhR#2PGevQ^D zotT)ghEf0$Zr^Bszj5`%4J`3Vz^;vh|N9RF3jDG$1 zs(vC~(GXtyhji|@N+5_*gb3AI6s5|qA!V7jx94%#RkDxzNX=9f^&pi9!PAJQ(k)^z z`35-IQqI(|P^mvwJyw6u*m2o*n$`L(-J|FmkPej`u$m&$X3pBHbGHvS$W6{v1I$ht`?O8c$)Y9&?L*|=27|`r|SABJ<^z?gk2F+@EdIGbivmd1MPCw2wLij<0yNxx-DJxAk6h?3 zGRI)b-IKcUuDFiK_*+<#{QORvN?C6tA5?sxN+9KSNOv1jUzcU~-tOkkd9VAv9SR=DvZHpT`wG`QUb@E-zK(g&KI^NO{F(5T2w!@K}$3G$|Gv80_D?so4u0_~G;0 zy~2U3m7~ZxRlEG`5q7N-z1SD3U%!(1%GV*w)|Zx-8|m^47nGjaxRz-KUK`8OUq7uY zYXc~IpY>)tCj)N>Fv7spAQklLI|Q}V#sN3m+iyPi2kMP4Nj?Ml9u!EhgwVaEK?fgl zgBVK6id)>%>Z0^QrtR4I^(2Z*JUb^B_H_JL3vVE(zENaO`wBjmqX8KhbPcsd%;tk3 zOHMw}JOxEn58*W}an!WaAp_qqRXQ&%_5lBiQ+;JsDU2*!Zs`rEV| z`~I|@clr6&T}ey>;oo|CJdR%|EMtPs=HjJG`RO@Ec}iI&B_&CPCe;`?A&S8Lq2(KH zpHI#N9JC_^Rgh(l4V#i)UNvs(6=`|M7z3Q=BUoEIXjhhXuhaWj&!LLQKL)Xgj*1F! zOe^~f$H*b6vaY$d7uN}>KUG6XQ&Yn;nlWuF^3^?hKQ9Jzn5S_M<*WEJ71VT7BgMLa z6=`dCxwHCtYQ&5J%rg)HdX|EWQ@+50M0bsKL+MVaiF4)*&yPlj=dK%QisGRBkN0GH z&|J?v|Dw+i-{$590TT?PgMWFyj5h#%-D%v(iHXIA&C`|A>C+g9zU!nXCGXbsk7miw z(XxQhl3+LgqNzof7^h@ZCF}FMKY;{Z+G?UbT>SjvI-Dh9mapA3GRczkE_3_GO5GAayoeSl8LWRrjFEB65 zN8)myDfv`M__SgfSGjS?K^1RUN+sJ@&vjegkptc7LhMA|$;Ij!8X1vY2WY#8$%OK7 zZhpQ~Y}6n&VGnwF2q~@%RYWFCyoI$-ftW<=->%-Fk@ltzM6LRtY<`V1=)S40rIj2L zLqT4wUtd*Qt9{ASi~&>)ajFK=$;`k)^YilqB5VJ6BrH1GlR-YvW;9e^Q&pAn2IXVb zG%`>g0{;sPJ@tbIzr(FG$0qOD_8WMEv0K39=H=uF9?r#&N5`uY=4TA4baSAIV!-?g zRr87Gk^RV2OwJ$m!jXfm#(ze6Go@|(HhIW;MUNln*fg%memIE_l6pkK9tGXJ!nK44MzxSmu6fmMrC9 zs;j8{nvS9w1c3plMM^_h-_yDl3TXm_4LQcfra)I15CNGf4r$zxlZ;f5WbLDz~RC&P z5Sy|O++!0Uv zuDA}R*Bjfn*=4e&zkzv6=#q0>TV8v*ljVR)Dnu{THwh^z+s1p^zwh4%t{~ ziaaVnR$JAT>sr{P_vp))FLpmZh~9V`XD@>TcDUmrov_DbDldedo5L z{y3fV_wS2puCEd4`reLTj)MhBO(hyGjf;xao2$2fT(S*P?wa$|`k9OlN0CM-aDMKzxX)EI@V~j&Clny*WX34NV zege#G_H=S%kTO(&6n&qqa(wcJ-nuwrA!4%Q!$nge+4;-eMpmYSLhpwYZA0Xn8$ zS;Qtpl}e8S%mkHHmpQVb24q|S&XNOLzZNj+@}O|;&mS^C*>z1Sb+UYx@_~PJ^Y)Ce zL`d&iP~UMMjNI`ZvgauwSSm||LhL;%#=O?;gGEm|T_btzK{8ofD$(J}SUGI;$OXOu z+VJRT(10KEuQy~*ePMnT?H)(prLhB&Ctin19vNQcsobXF5=Ua2H6$D@1OX+pa?#~v z&j_V7TSID5)`e^WjkTYr>5%W*vK+xVNONtxlI@&<;{vf;*@rH6ZgnPc2joqxQ$^t-1ZrV(k=SQlCZu4SKTX*$g~){F$tg(NAD#z)nf- z-9sthEY)T@oKml2ij33Ss6X2=G8=Sxwd_$J&qZ3+Z4s{od>2zGh^Odl^L5_~S^ZuY+o>1my@QsvQi`Mz4R2>d`j`2 zd8`I?W6`|%rderQdwX5+gt^Ql+4#WJ_AG{x8Iet%XD3rp{Eqn0feD>b@_8RG^dzii zC?gzF6lSN!PJu?@(2I(?1wUBtCGH#pt^IVuoQ0n+>(<*N>yXuBcEFAR>6~1x<0baZ zX|_G`Isx;04%I49g2>FsC9ypDATpxC{quc(tp2)2?7V6f0Q&*Q6Em6oo+ZeHfY)|n zVYKEkLg_=EP{)A#uKwaW)^#teTvn2oVkjpX7u<=iIOFIMQP|85X)1*SKw!NTl+1pY zfB+XW&_OV{zSJ2w947VBpnCyQnb&8mYQw9S>nf{SulMTqMLyLKQ2Bsz z;A}MTG}-4%5vYB$1$lUW*l!Va8b+~MTPDhn*FtaD_fC3FP#)Pi| zsj_>NowOqWGPN3qDZbHVCzOi2r(EoEVr{DW;}VNXOL;R(OKATZp-tR%(K>o^cnF=> zNn%sKW8ksw@MtVa#pO_6MOcc0`jH&FEp9e8XUN@PmGM5Ld~OeEX{8h{G0|;rZT*2# zfTG(=u5$ahtN)&U)NL1HLF9nk+1m_ccK#YcJut@>7P-1ws*xV3b81n42D5YGywKL7 zEG3O(KbSAkEHyao;a`6rd+737CUm-(yR@==&#Q84YYPg9UW58ncC}(kEu8!J@7qwk z=C=3U{QcN|YD3XsSJnA@URJ=kd(RuPCUXR<$&HM``W+F_;5$q=`>r1GXW~Cpahczs*_t$mrAJ6dk3w>|6f1?bP|GZ*=l0L{dW5(35c^Fes z9wsPrDLgDJiN$bDN734b*K4k2kSvjMh6=S=C^ft%UsZVRO#oj~_XAqm%a<jyGddAJe6;kw$mJfd|B)LC>u_i6 z+IXV3n%W=;UoF4Ce#=EWTCu=a8x@{()(27%Q0*_pbY7RS^L#sP^D3H5ke-wZ^?Z0} z=wwN&*$0)A3}ORMPz)Uw=1!?l@l)sM@!IOfW{!xsBOUTR0y3IM^P95W&gRs#<)*IF zAbSZ&NT50n0GPl&C@xh*OEcCC`k#UyahA|Y0a0l7@rhaOQghS!*)e&*!7m^i0?xLx z9A}#JQ*(N^FYXq{oH~+d>Gw3xa^31>QW5?LSc!`4#FYOF8~HP&Onik0GjtVQUGX@L zsbRWN54CH6YIC2-(t$)xr_WWXi#Hd9mPD-wp8M_&ek^)e?+8eTJ`TTXxy4@J1^IVZ z5&!f#UG!Tl2OtAmy0@^jwhjuH-Ys;`46BDKtXb+*21@}vMXT}VjLJ5_G*ms1IaH}Q z=eEv3B><1KM9YrCm62M41Ur840#-8Q#fw^l&4N5dbTYqgZ!-tH3fASz+#DRzAxp_H z8tBon47nGI3)N}aRKS)*+~bB`-sXIH|I`OVepI=B?kJb2*EoBMs&D*0W&VVB`_gLgT-WU}ac7zgn` zLgmFhxgm<~dmrj=Lr>K8cKFAS1CXtQyje~#TS8Dt@X@2e@}m+B-j!H{XjU&i8&qG2yyc52O)haG}uhAn2c^wu|Q>%B2EhPE9x8^{WJj6q){qP() zv_Xz8sBiXd-bb-X&&-3WCjiV1bfyj7-!uZH|F+K1$^j`He-^*vg_ekexB^C{IQw!z z+*DPidC7ckkT%oH1faSStp*UgyU3gjW}T^@)hR}jkdZaH%zryS%sN;3h^c)Fsw94w zxtDGoNL)0Am7h@;lQcOnI2arpEV%BvX}vm>JAc7o`kRXk#XP8IUN=Bd8OJV{3JMKb z>&gWYb93`fDI4|h9Xgn`0cF|ITKzf}z#2VUtRH|)TJ zR&pT-P|z9jhN(+PRyMCBKiQIl1JzR3V_QpJb;=@70&%Z&7Uj?f7iL4NQ3L`q~`VXd2UdlV_d zXwtNRLwVNFx&@HKHbD^$NhJeNS!qarcIPw0(|j2n?dag(;a``Bgt4dB(2XAT%ZFoh zPC%GN%ahQMMy~0{CrDQhPz*zRAV)L)qC#CW?$G4IXEK|-2Qenn!Yl#;dXL$VF{=5H zA;3V<6A;54rLG6$aGIY1dvs)vdL*w_?Lj&f}iQ{gb#o;~^@)EY|C}XQG!Mv_Sxn(FJCgH(#cD^u0rZz}!(yR@O`*gzO zIWGf4A+*x&iO}mouSt0Kt{W8pzki!(sCSCisp$*l>m&h*uQpYcO{T7*to$bPv;qno z=mo!t<@Xctw^|L=X~(_QlLig=UMFoLzFatDZ2%i5!`2 z)padK*P&Ys-z>e}B!U zsy&vZ{>h%ZmMmaeua~v;LeMR%n@a2YV7#wK-YdfRTufPKpiHlkAi7<0yMuQGBaD}w zw;?Q+;GT>yS5@+As-KHT);j4{hjJ`^Wmt8o8x`ei%=Ki-lckc+(5p9}ij3`d&>a0t zGG5HEMCGjlt+bX_-UU9WxCh3r!GwqGuCkY-PCoQR?2&U+rybD2!;Ixv($0k(Vp>uK zZLR6O$t*SVnBO2plud+**M>39>N@gc<$qQK4d#*|XB8BD6|%9~yF%uksAh+$M;j{8 z4$c4Sx5e|Z@)&I`)tX)rI(X)H308W$%kWIq0ET1&*L`P93$7o$OgEl0V>qu3(fKr& z@MC0TWZ^R1-XQP_0D$lJ+4r@fGUACvl&}alGUe^;it6+wsgjenvP!ZVuXJh)=DD=E z?h)_E#PajGdt*#4dsc>WRP)Wsm!br_=oDu3f7MUEn2Hqd7YYMHH7ZI|Ja^djn{URY zu{6yk-PJldDk)<>KR-aM=<|py-Q=KKdRMeK|LQ<<-;^AH{`PwYjG!8Y^Q`^?NiTqQqin#%y+O(O$~4fW<_2c@v7xj+ z@vq^_2=oC)&wq}AE)MLJ0)=BaXx4W6#8%_^ic2 zjqq6Ha?^uTrt+~OJ`Ioh3@qRsrwfaVfenR2-QTvEfMcj$2mTU7;dWeU6JZ0JSFT;V zhK)^~i-{mCxw6<28X;*4V7#|?Z3E8Lt1>VXGL6>_W2OxtbrL#WDG$Dk3+c1A-5eWB z+}F4Ms7<==p78Nl@8mnKff=;)8|EyK$M@;1Wk9nG1Cm12f=t8Raic&Jq9-JVZF00h zaE#NAD0drvA(Y_S@H0Nv7U)ANKAn4-h+X6Qd~p}Ydf-IWAl~; z2bP^nRnXfmo5~&lR6+9Jh%?~Kmw_K{4xlBF!UCb7cU(cMz2JiLZhVoFvs0ck zq$DJhuCLqSOAvk_}+Ca@d{rynKAT@gztDkeiQz8`F6gd z+}Pc55JuF0_ZYoekAk^EqXtpP-B3Zxe`zWVK|savS@~cOm-r@W5yt|2#|iC?i=h0)ZD;@KEY!5fuHNlBpE;1dt_y(A`lxmCv0G<(XSx!V%2 zN$L%4D{pA-;weA-6Ji`}Y>u?qf}PE%pI@DTJXQ!Y{hT7=g`0^B67Zg5QStf8yst*wA9T z(ANHu5gHaydKRNK4?%@jjYMwtJ#_@q_+-UWIGz9ulYd#>BMTx`f#HJLfG@3YGpw{mg04FDC&g@}Yd$ zlcyk0Oh_OR4)6o8>ej7W)p_dB;2oc?2R2*vQ_>}N4wX*-c`F_YeJy&J08sPnenL{x zjJUWmm=gZ}{re~TL%5IXnSf)kbr>)K4+DWdfPnFmFf8{m2_nNR{B{XYw!ScsiDt9? zT{{gXU?LZSN?K|vAY+;Sdt>!$b#h72umbE1-K>lWP5{KVtBV|CsmzlCwj2kZhxx5z zY&0k5KlpJEa+g-0a`U5P_cPtrlN29jn&tGF4-pkp`jfa;E<=|Bl zh-GB_=y}TZDHbRGhFkrfVoay`RXof5yGz)kW1icRivgZDFN)rjAOJ-i#DbqKfFzoV ze0-}JI|y!2ZhY#D+}zbQHLt(U(lLxoOdJnu8Gd4V zQfV_B^98zaudO+mk55)mD7yI0y88N82~ckGx-SiZ8X;QgjPzao)oa$OwsBp2vImrz zZ1Jn6D1uqOI|A1$&G=G3&1dB3VMw9MJ9g*Xu8}ri>r&Mldy5D*PamW_HZR`LZGFSO zE*vdik|)J(Lim)xLYkYXw>K?HsULIY9VKC3?Twt(HYHN+)^{k|HMh2t;{H-WLFZHD z@>4oX?i10fZ2^LrbFrUS>YBTcwj?&mZD~uI?K^(@3=ZS6G;8&1(%-?2zB|kv5 zUc0w?dwrgmlB>|;YGTIxx`9vmhg~cZxp~z%vR7icBz4Y4af1n?xo2IHImf*EKEKO{ zaDV;$I^V2NaedGLp^p`JY(71rhaS#;)1#o_L>Ldgj4lb@F#k@Oozk)s)SrMFxIDaZ$SzU$NH~{n` zj7&_wBpG_eLp*sFt<$sXuhNgkpF8dHZ(M3g1S{N#6?>OX$6tAVguC3z&Ai?CKsqn` z-igf8<@{k8*{l~=7GIZrCmB<`E|C1)BkMA`yJHu3is4FgQ?eLk*X|D4b)TiP?T(j0 zQ6FoYyx;48p+A?>lc$ZSUa*&jZAHDK%k=3+*>&ZqSlQ*~=harnzq$3Y2sq10&n?WReXnUCXW`EmDHbX@RZ0Bz zcuExQkEC>rjCNL5A5;;S0sY1tyxD&dfwQL5HaRsld=mCJ+ zc2jj4_qq=!R3F5LQZv_RyVUA|=YIKeaV>*gQ7XItrvR2)NOz2U-;4vv0oS%%zTP!S zD#8{ctY9{5E$0`L8Off=A?o};McMbhzhR}g5#LTN=J(U&CGuTvW=K&8!vsrXEmMH0 zoa5k4gFDXT0=RwnA6VDrqKleiNkj==e+u0S)CM*%`$cH`1QjrjioRaT@K}pGs_akB4UXlbQ*t)|d`GGCp_W z@L0mz1*_UM?b&~0c=nLz?lPZkfh#t(VnNfBaZQOlHZeOf!}OD|%BPXa^v_Gyn(t+e zgnNw=m3Q%X`7xb_>I`qsTb?}>xHv@{|M~efdCy35qXPis6o5B%Bk6nZQepryMUEKMB;s<*8z zmyPqsl>NZC?CkD#fB$Z0Z~y9|pr9Zq69BjYcO4(+Q-5l622(By3JOpeq_+cV%LCH& zbod#K&`>G(6zCoJ)h3`WqoaEP@7BPS{PJQW5nR`j&@2(_(;51O;%hd+L+{3a#lm5VuLjJ>-0P)k({ z=~H=-eNjLMo*#By;s#z&+J)WFG`WZtN{4$$)aq(Zzm*eWmo~l=G*+IE6!#HtAf{Js zZoZqLGh?s8gpjG^nQ`^<&&T8)$0&(@m5=IfB?19q+dIaW5|LOOtx}j-19`-Ys7`Yi zZEq4XQulD<>L|n+W%P z+z`!to`um((PR3F$9q~5MMtE|O#cic<32^KEaeJq@l`*&i-NATnIv__G>M$AKNqZ) z{JBzh|7qh#%rxtF52_(t7~C3d`x4nb^nu#g+|s-H&2^5lI}>d|C8Dpy6;geO_zzZZ z=M(ZFbg6tzLpE8767~EyCFRIoNZ?dlJ!Ewtkn87AOByRTK1U44==dJSw$MJa6LT1; zjS$OyW;7aVzr%5EtL~b9?04NioWb4t(bS(h9RE3_G9^z!;G6SmF~NZ(-EJ?V7r z(X2V1ujnT~)V<8SXCQfBZRoc$#gc&vONN-I5q~PHLS^#1$C=nmhPk+rMfT5ev^w%v z3RvF}*QeAL`d{LH7dc9q*d_m(rX<(F^9=da!f}pEB--IKyE~gRsX;MVbByz2_-Utr z0HN?UKnpIGp1~;N#w|siCr?i1<#zU(Knnx|pD?vJH8q8v^UCTq1oMIksGYm~524hu z1VC9eKS7$DoLm^F3mC~KkD+y@0kUp?ZOY^SpzAB3s#?2fr4i{)r9=clNdf7S?ovSz z4lOAylF}d`Ez;7G5&}|!QVK|SN{4jETgQ9<|9|6+@y1|`JMO)(_c?oi-}=^?Ypyw6 z&ie~#XlOccU|B+&&U^6(m4HZNLU>YAQXq-41XhwX zBZD!m+60uBP@iTy2oY;3v69x-)L80Mvce=*XD5JK`2_``*vsN3AUHBQF#&p4hK7c! zylgPqar34rq=*VhfRTA#94~<&MQ4UcFJayiOmm7$%f=pyBO9K^Wt0U8z+`y;{tUFl zq%vByp~VM-jXr+J=}{1-z(hy4NYcj?{4-u%0t2n36I$Oec6@Qf>wdsIsq4l!3d7e3 zV4(R0Qqs`)FGJt%D}sAA+^QXyN`j;!WqPXPPgLiJiy;a2^BW8re)*RriHFZ|pQkA4 zOKt?#i27)8@*yZi$iL{M9aMWeWZgWxB)-({$*&(vbp9|?-R3{MYK;DvO0SWwZXVzN zF4IDn#diBiYtOm;Mjcv>ShU>lKjjxRn}pd_JJ)!N;)eT}X8fill*H?Hal$?@+GCxx zdcHtYymeq$a@7qBl8I<7?Bdqf%{D6x$8=HVHm-Py+lwdUR(v<6G@Zuzr-o!??xpht z`cjC$L~Tesbm%;V?30vuza}{1LdUoD*hHo=jr{>0r^n}4zj>a~c>O#T%s(-v%l#f@ zHZnMTygI79HRi+VCU}xIkgV>ryRh9jc~nzS=*Ry1>l(t;qQ3p*XqJR3TMN3#*Hl%F z%l?7>8EZ0eCQa`yu`6TE%_9zLzlU=KRK;|!Up}0DMjcSwZoP6G$}<{~B!Y_ndmb_O zMbvZNDS@iMYEJ*rSwQC}yors*KL!*ruWO%|e-% zm@3yrAzd??^7>3COhnL7$zSnkrt=Hx!qt>S=7T z*lF*Mls>c|Oj*=gorbBleM~(pynfoH>Q`y!${q$dP9{eB)I1UAMSep;jWZ@IxkJ1hm6EVYzcTk+35%k&pv$26k7g6`Jk${O5r}20(8Af;j z%m)QT;59;D4LWBAU)+8T3^;9!HNKZ;iz_H8=~-}OXa)_b)4C5YmZ)iH0Eogi?vgIQUMGv@<7U>A7KBPx3G0V-h$(fQi~sx zv>ImTO&x5F7C)G-(n6MXP&sdeJP~1aJ23e6EQjEC?)j`47ASL zi~E?Fnb~{u;b2h_k;Ka8Xtwj>g!GM#PjuUT>a9Lolke|Gd$56TjT-q{yf2r!7e#R= z4fxw0CpR2x*4=(Z2TUm{lS!a&$kK0fFryKCo18$SeIKdmvWNXrYU69ui8cpU#@UbP zuToLRwWUif8(Ffg3BM+p{Dm3`YbxJpChNsrxtv#2mAvf{npSx2iJdsf&bt!Vy-E@k zI{ugqn-we>f#lD5rZ2~Frk$`X95#37yHpnW4M-HwpXbQGZ}Y<=O1``!h?!7*P!;?^ z(u8GvxbO0t{P@Jr`oL9J)^BrmbO>|A;fu}4pCZcVja}TM{RZYXse9#)7|YLuWyZ#j ztfwwMtSXKfXrZGCnb3@FTsM97&Noe)p367p?&7OTi~C>L$WlxV4UfMB41YB%y)RS$ zVYrb-UG$3zzbrp54jrk4f-fNt5=-G3%fDo zBiMeU)m~xS{d4W|%w;?BX}qX(%C*OKXSa^0dz+=IqR>K=0z0v5oYS(suH4YU!hI%9 z{IDs1{SMaoO1p~&=BEM1hJqUzE#uy=?xrYAr<^;BRNF=$YTSKsqq2-g3PY<(j%~GC zk#`>*ElaTR_r`c!6$$SRCoiK234&iEnwQRtOMH`qc5My0wDx&n!tR+5BiH%Gi4$(45!E=Y?4~ z%Ezc!0RaKP&`%P1$w#PWI+RD`;RRQ%Y%DgO&-HcN6)g?f3RXUIZpw;&6H|oy@nMMv zL)9|?N!}K44mnsUj)$gy9;fzgt+wBKJ|cE9O%X4nYp5%0U`3bfQ8R6|n>>rAM$r}) z$*gNw!BtUt-;rKrs^%__*7d8NjFl{pI4N?5vxSNG(6^KK5~$Mr(lEZ}Mm0IzlDa*K zWAZs}cxS=yGHLAz>)qk(uL=$ed`tELv|s6F6pv<3;wmWMXXo3iC}I_yR=}kOB@*moJ&d@uc%xJ7in5!@NuBhoz!TERstC1A7YedwpY9RN z)SbsFKlgL2y_4wu*LCo5Ha#>CMtAzthX|G~PxN{<>-xknC!0UqON$&?x0}4NxK*~7 zydhfhMze*;iOcdt^SNKh)~z!2`(OH|&Ad=nfA#gAY^UeGx^vE6*Li4oi9&lJhJ&x_ z@Fv9NT@H4`+eED#(VthQxJ)o#DmTraIQe%ChO}O3Ot#J~6BqohlF0Xq^Na4ti-tK| zL?8RAh`#++QDUR)?bF9656V**f@G!$+#elD)@&VI?-s+x@+Q6hbf!}JFyhLC)3G`X zgY*n~DJD9z=gN-ZsSD&3h9|cM&McbkaurqG9=WMHr*e&Rberjov!l`vUKEwfks6Rs z-~Myw9BQ?EQnp8t!aw!~^Y(O~krc&CkKymD~Xq zii+P*1^4v3c-0|F-jJlmow;qCPUO(CL|pCp!9A_bi?acM5d~Yf%hq^9$JyNO@igIN z;K5@CKy2otpjL!K7!3_=A(I2Z74M5nK$8gMfMGai_VGdhG#r39+*wq~x3{>k0Nc!d z1B%7CXV)07^X3H<=p7~`rezZuYYa9m_!<~orqA1^2pS384t`ZO+X~E+3GrPx~WG}854>GiiL0Ev&v(*tuc+ju}vByWw z28edZ3g)V6^1u0DPVq4|$bM}1FKMz!PB-!wAvy4zU7OygIdpAJo#75lW9y%WEP#{Z=@`)x`wD<#L@4mN&( zRjg}lTou_(9fK<+5ubJ1a7a*5`X4jK{BTISVL_rXsqJ2TR-wsGLbODUdO@&g82)<#ZUh zMY_@_yYaWc({$nb1bkm&9!k*_T;d7d?k^U$(hn$q@p}uiriyUk5AV|?~BuW3;rodDS zQ>!S7p4`r4qRp3MC0gWLTI78yl6crpoJOV^_>o3dDI;K*F-CDzsfv^6CLxPz>)MTA zQh+1n$8Gt&=MEI@qUD);zX6b1P>hpfkXj{M^x5GEn%%}fner`=lz}o5D!I;Abx^a`fB7_@KM3vBaub7aK{Gyi7{)QkxkzB_k%r+&Rf2p$L1Ce`6f+!M zJxjZ8!h@b#Ox$Ww@dYYsrS`L5LGo}OR3f3}3j}ju25Bf~z4Jeqi27wB$HMw7?iKf+ zMr3N0&UfQ!z|hoU%+0o@GJ-O^SNvxfM`Ck)PJGU{<}iL%Z#rk!5ebZ1z6ndYA&5{*zE^2&$oYU$RlG zGx_7m9Wn_8Nwn45jLQXerd_{xj<1Ksb)i6|RFnKN)Red(c$)oUyfoN85h2cFu~6v~ zGd-e7pp8?WgpJeqaHOB<_v(~=5^6n)W?@CTD$fY%{?2BQ7v}zk<)(}h{v3AgWy1dS zaF6Xmh`SV7gEUuo6uLJ3q}l!r!u^PN{UbXYgp^X{&BO)%`y>3Mn<^r?IyOIYId@*G zY?nOYX%AJ5+Linh6npYc&l0;f&Bg1%@5c61h6Rn@t-<-`H92N(eeMB4wFSCtj{2YU zLD>z3S|%D{ui`tJwaBiq33b^%VF%b3LCYAY0EiqFuI$5yK!blURVQz4%^uV7x+Hdu zmSC*K5AVZmbSbCw)@rMexVF}Zl`++PVzEhU!7(u;0h0M8CBp(+SdYg*CnH+}nl5%G zD{NzOTH?&a%@03U$pwG_^ie0M6x$s1M^WeH>J2S{$jZU?cC;Kbfd14N#V>8!EdZ4( zVE!Sxv-a(!>yHb!+BGGTc&akujlu6fIC4`}^8_Bu@oA}?GUf#0wP089R1s9*2j<=> zIrd~8E;5^Vn6nAK2FDlmipnvZkW*Ofc(K=$rVDA`fm zt-Hg_*J~Zp-)MG`>~rVA$mE+dGSNZ-pM zki|)cj*nMX@4S=1x$}j?%K8r)z%qEl2li0~be`nXJ$mliE4}8bRSwASVXI)jTaL&^o3)+rVR^uVNeiEEr2{ zEDLj{DXa1sY9phg@+>g`C_k+F%EH1D#Szp3ivaDGyk#qpUfSF9KyeGC3NOx%t)>AN zaH!D-wC?`>{dyMdwnlLWwY+i}sEm8R!(i+8Z{PA|^qQ1PtA?E2N#&*|Cf>tpBqz_A z$PaCrnz}%a(fGfLIz^vUR?|+@TD(&&a8$T7)=;Mf5TIRC~B8lrwKHX7O9JgXvFNT_zx_ZP*lyZAXo1dp#QGIeJ zt~akDek$kH@L`_UxAc1-Jh**7MA~<2Kk(w9Vw)amCcad6TW;z4BX3G9C;wbix2Gte z9J)P-8 zFP{^eWPa(#PXlcV6N@8!5qIeo!0Hre zeD_}JXID9yJ$ZDGPA^NK}H26Si#hL0IQ8R!_y}g9oJzZVN z0^23iGDtXvJ4qN!BqFk&18E2q6%}|SFp9o8KcDqDdwqTV=*Vq(8Y!~!9W?6R35$q? z%tI4?b=3-5#>RN`?Igu;G-~p@yJ4gIA+>)2WCGk~0yGdE52zyBV7w($jny@=@j&lw z>d>f7dvIbpwZlCZPu}JH<5WdBX<+K*qs~)n$Ng`7D3Osycwu8ZS6}u_jXWEXHTo$~j-3AwkCUr+tcuLPPi)SW$r1LrhM#e4dHT;e6oyJZ##n{+PP# zK6bvhjNee-fw8?_JM(IafMLO$#`VI~*Lzk8xGjIwNWwS|ElP7OC~c&pu# zVVm73IYPPc!j zy?yI=u>Qy*EG;eV`&^TX8;B&r+lNJiMB8Cf63iUJq!}&7Al3j60SX=ZLSKnO7_P{u zub&(qt}ZU#1eU4rbvuv+mL>u&CqyO?`#e4TgLMpOMEeqSE~0?m61@4-_nL%)S~WE0 zK=!!p`*)C;^EX1OFN5H=g#{2!L=;>byFMdeu3Z;#TekJPFb$Uv zFx|L072i;xIj{UEM-{!K>tj!P6zl%`TB48Fb=#E-8l+jGahGMM&g;@~Nl0?!gAMd- zT%FaQcxmgJ>a>t0>91M|HTMW@r5R{_>&pdR&O=Y8j=`KpaWu_C|tm5#|Cj+}3PyRWZ2IX6K8$s9Fz z_?>+YcA?IKIyURt!kIHenJ#8s8lKrErRg7En;b{V>E7*6w!v*h+CmH*PlrDEG8v|MDF`dp7IChgJ~VHNizyfwu)xbyDRp zy(C})oC}>RDsipl;woA+Hi(!IrW8H0l`W7QX=DC_M;UGBV$weHuKMr?uLbtr%D5gx3mc!)rrD z$eujNmV$U{T;Xg}0Km?`n4%RB4nh?rO8R2nbDfcEVCd&hyigX=vC&Z=^sNKM{RGqp zpg<50g!-8tMd0$+!y80T3@xA2)3#6vl$=R;0e^dI8|Y5MWP}`kyYwS42_h*dtk5=r ziDPd>jq2@v3I0W}9pL+e#w{UB15ws9Kfeywob}&5!`^rP+;M-k`heiLSncOSW|B!< zUfli|R1&R?$De;qBQ~MC8NJrgq~lssqd&iuxWRwFVNbOovGLEz=FS_9E$W=wRyKbk z*X9JO0O>g+VGq55_WXlvvBCpRG$@4c!)gEUH*8 zsSdk56i{;1eIy@*{f2E3@hfhOoHsTyd%E)b$G25qp%yl=!#8}L360!}k7F-xarnO- zcifjB->L0hdbZ%5<-*{j*O?G{iZ{oTx;?yalm?msjJl_ggkjIl6OFze5-K#=xq+yQjm;UkTSPu&#ckW62)QIbc1&@Mbrw%l0L6 zQW4WXud2vGZ=HL#X_F!L-Upv+$V~3nJypdUG)#5zso$YypDjzuT@KxOvU8w+9xs^_ zwcq|MRA(7K@mh{jKj*jdiCKL0PV+k@3qnqoE!Gr%^w>L1{bOU)goIb#)JH`8Y_fx{ z57OKzElqXZMCLUmAh@n`tye|U?4CX2a@{nv4mdeJMk+A?dl*`pk{P}2?I2fR0lL1O zMRh2w;GfmkGH=%(ESn|q3n-X?L_L0sCpbU~(kQ^5lR=LM$b<~$c}?JEqjmo_@KdQ$ zRK)(;P1%4h3id5#W(2To)oyU$y`BfP^{67pSwvn3jQ`Gz{r>$MxPMU`*u5Pcw^>+Z zom~>&)Zmd0H}Rs|zktLvW3e|B>K7opdNRqjplg5Lo}=NY3B+x=%k84@drr`HHzMhr z{ezFqmj|abTeqb(qB+OYtiu<5W+%I?W7x**Z;4=^FqsP3J=hLUCoyD(~ zAt=RnulDX!H@qK}i0p!(jgZMxkT8AEdU6h07)d9a zxEewM$Ib71-YdPIHF=>r@A~L6Zlyzy_k4f$?$IL*QSu5G-IH!kiKT>V4|4!r?&;IhsDf^O1iS0$h(ws>^V;CZnAZEI7r2xMQZ)0^$;ISKP_3;?g z;{Z|8HOmT?(%Ik^CBIBoCB1wmejm3CZ;i-dUhz_?xB-2GEEq%TXYXjM=|<~*TJ9_K zgv+cs3~L}g?@3UxBkXE@gs01&>S^YegvHzF zKdm#WEunGdSux;B#%1OxCrnhnX=P$2V-Dj82bG`hdOSM1m-nNfI5d9BERT%$#YXE= za2?^2=q2E{&`5rSx6+g5))~Dq(QH?;e&<%qiT9`;*;f0#SY7XG3C0#fE9JLo+1~Om z%aUsz9&LQ(g8lLBsbXX8j$nY&`PR-Q-Ca@1+~`j`FC!vJ7W~b) za@nV-h@%WAQjS@};Mv0tQj7v~TwGj!yD86c1X|DD;fI_Yq={Gj9Pd}NPZVrXa?HK{ z*3-LB*y0{PdIYQqu$~H38v2q%gx~}1>cz!HI98aLm_XEJ(D@x7fA8q1I~4b5pLW#J zvt@)9`PKCO<3LdmwlLPu*7}~HpiP!#{YV+h%G>6hDt>8~z=?wc`4fLdoZL4ug9TcN z`?N=ok5ye#g=qhTDPgqD#(hd=J?FYsqr_=F%g0V`j&k{a+i`DAt?x-!cSN~bn!9FVHhFD)BdcU)_EmJU7U)0kTDXSR|V%RrNDV_`ip)QZen@#s1BuS0poQnu8hFD zi`TUI`!pG&LqdcKInpsgW{E#XVK=-h`*CB(U|;5>P5;>;Fb1PY3yb9t#8S1<;&*&# zwJ1&)xnn1685k_+Rey}X-0-GPDkygBMLj3ixOBTw|H#(CPRX0Xsnw7r-QcK>N9>4s z0WHd^I-R{x)WC~}UXrOFTJWVnL9ltkOURB^NcYL5A#O{-@?n`CONSOhafKplBGL5V zq@r5N?t4ZNo=uhV@zSNiiS9$ghmZ<7>t>hlnYUbI)M}=`*%{DWkF+SZL%}(bRopxw zQ9ZzU>80nPmcSxReMYKxWvNp&Ozy+S6ZR;EI3?d$QF5>3%&OaM-j-j8&{V%l?dTun zl)vfo8=|q~>sYD0-FlZFy3Wu%Rd&_(aqd;a2t(3B{WHjas>>X1bq3%2GUqgUU6C^( z?A!VI#{;(@Se9i%Eh_7@Xz|@ zHXYlv4|SE8E|zJZy$db3mf{|~e|viVBD6YtI&h1EiT2jY+}(+TaViqC8$Tx7DE7yj zxHx$R0?)#O?`CB^#7vU1eICE!dHJm;z)ow@0Fm1EHRfAeK^=Q@u}y1ifq#Mus_74w*%d8aOA)dT&36H}IBB7H|=MQXk zY%?{HDfjx{n{La^82ZxSB$eM@z4_MoEkgZ?sBSw$RmzjaI=0-~4|2I^c1rom)7JM6 zC2vKdi$43xD;RsJD3bezecepsQ9P#3r^!W8>b=+<)2x`4UiJ~{QHaU7ALHuFmp1sgzFAdMJ{I^d)jRKGG@>!OtO{O)XN8ckisqH>I7(tmcUQ+z zT4aZ~Jj+#h<8QVSvz5MAad$>|RQDE2tD zSt_>P!Myjg2Qeu*ocjjy&(ZQ1WG#fRPJYkbZ8%|hF$^WP%Tt;OXYSkgi1(E_Ny3%28T+6--OMMiKz~I= zCtQAU!w)*M@H{eUa|Oy$2K%1SjCoO3uXTm1hK<=e9Xfx?J9$dp4LyYf*Vv&K)`K{M z*pzh|jInZ1v?@ zrL7fmr>@@`OtoAQ+;4}7ql;D&aBy4v?zAOB{fNXV4|A7t z&h~`+ao$ETpq@s3iEqAlV>c5!YxWTT1wXh6(dY{@ z3a*K`)#*nF;Ntiv#%B{zC-FD`INuyVpYoi4#!;U`#}b!+8mk!dOZ}aYnPTp}ANy2H z+N{eB57fO`l=_KcuPhtuV^ATfuz_|gR5W&zwPXuE;el6$wEW$19qzxP;t)s@SUU<^ zG$`C^KcSQI2z9c|f_^oXZj?GYgev%HPsB`!Ltf!K17$Drpa1!xGBFbW%d-9VKOn*Z zwEExwmWblQ#B}=4FaNy&<>xN4f37Kzos$#TGK-YD8yU%aH8?djH86kxio^Q4=Mu(M zbU$!T1BxKHRy^pyDu_)=dZe!2ytJD!2C}BmFT%x~FP2y0OaQx+A{anpVZn6Gc?h@K z+LDG7E5IZ`WWBLP16s3UC(BGgiU1*iDS6SW zSFeg)p1lD3nw=k@L;yWt5E^^_?3sfrvkn-30t;jJ*i#@CXk4O_$Oj_=44n47aS@|C zUwwmu+Q9qa4Jz_`Mx9~_rPv}61HHZWFzJUZEXir26@ZMz#El)$G8-Eo?{`z2F*-0s z9_m++jmJQh096_AhRv{rDFG0j0Xm6V2Pn1Ev3XK3V=e$~7(Dipl9T6m{ppvL>D%iu z;Lgi^#u8=Lx9r!Jytf9B@=RPp`N@B7jp#$&Oi$0R4e1OX19qQSuMcK|0@ zNp-ZfI}qFpJra&JwCh)CXp$eiZ^Q$YJ!e-})ntCWH{cEeG-QxA02Jt%=LgI&dl+!I zN3KqdTt$vIzJjkDZ8wNHodLtW*P>!P$IiwElxov8@}WZwv=!=p`@95u39O2d zE7Cef93x|6`0;VvQukJsl$EuMK2zcF=1^dxtD%Ud^_YFi!1p&D@9)(}T3!xiv` zgg^CtWnpE7L#783WgyqxXE6bO$>!$fPELEEbdfH2a&iJt$NJh@o!hptp56$6{c(>Z zNSe0%9l@^^eI>*?V+Zc2%SkagIEayBWNXV=fzfJgYRYHcO=}UhsV&)S2rG&Tlc2k5 z0qIqE_wM2LHp+tHdzAAo1UD6KAUxo(uxn1WMjA~?FpdpsAZfzxjw7bpy1MWS*_LxN zGgmqv-yu&Ea6s*z*F<(e=-c&Ba4B6~T^Ud8K{^8x@MaCawbQiAvs;3KHPzL_{rx2C zg|H03mvSNOZUZFnod_&~>l4*>5Cr@qBJh|&dn6<>GFOeY;1Nt-itB*20ERUO8(U{j zPf30K`BIwq1!!R1PrQxM0SJr$Exw+^jITcfmY}uL)dNZ`;4oT!eSH-?mEkT(&Xm5q zd`Ni*%yIxV^Au_3Yh~3W8mo}4hGL-(WGIlCsL?Oxu7)KkfHn*}kgeorXD2EH;Z=0h z=38l=s5UE`n+IE4APN$w*pwvZc~ts;J-T*mx_eAbU!uAeU=c8U-B6Hb{KeBFjCO$T zd5x{Eu<+XR06#y}QjQ#uH+^OQ$H>P@Cu~SHMTktuu^pxhoMIQ#n2;OCFC5e84u@VT zJr~#Z$^Kg7#mO4*xp`SY1y#?~G#g+CfX;3Z64I06fbs+O3Rq-jW@R;F`tyQH0cfXU zDp~^33e?yzr3%5z28M)mOP*@~T!qC5zAaaAaK=76FbUKeeUMl&%7Bpv5DBx=CuxJ( zBIMlO;pWedjvAK@YOQ_nj|29WT4;TJz17(Qh!v>$!b5O`fCJ-4FzE++NIyC|g*=b8 zXzad7u*5WnqG4Tc@Vf*HGe$jIF!cd6127G6b_NnUJaiaAWZ{M>!r%4+ATk4ej@Oq2 zy1p$Xw2bI17EhmE*Mg(U8DuDlvC)wSDm2e*Y&fvVtuhtkwiu+nQJ^z>hUo+m9Ka0; zK9G+93cbgu9?CWmK0F{DSocFim?`%i8Zt5%Zr;q!%=DAYaC3JDJ3<)qP~s!GhqTOy zN>093K;^`>hh>E`1}meZ<0`R_yDtv)-zd)YT8r&wOoyuQwlo+H174X$nwJf{I-}p> z<|J^WL66wq8QqdTyQJjqZ`trp2LR&BjG-@=!(Et~n)?1d zEqPd_%f@5l+f<+L@$-`x2Yj5lGzy~y9HkM=S)k(!Qf2UTARPiR2rzH%gqI$-od7%{ zn3V=?Fi=(_G6zaKQgWsAJlz?FL^{drTaC9t6_$yS5&JYs0H_O~|A_uGiPw^N0Eb!X zbtb)c#50Ogo(yR@Ok1(CcLWvJR?*(77r*=XGLCSM0uGPwCgNBXJd{|y4r3!D7QC8T zVv-N9t!n3pt8TY+!7+qae|wu~JrV4GVDuA0SBzZG{I)1any#-uZ^s%C+1rM<3q$pM zs=e#*D$~=!n<%(fRP@O|OPHalB|I$b6u?y^SNVF$80X9e4t$Bh_{-q%a3wi8h-dI7 z`-g|IVsLRYe0;8eZbSk2PC*~Tj|T><479X92ot38>%&lDUiMoAx1b)1+nCX(Z*6T- zMGeP`G=M(o>gvh?3Uw{X2dnrUPuX)kebk!;vZ|OugT3!TrI;vH_`~Z(P%;@A9|!jU ztB(X}J#YdA5c~W2Y0+c~T|vnG8~A>uU@@on_x6fE_e^(?`>-nH+51OwnxKGO$P3^C z&V*Aq=UtqgfoDyWu?Gfk?KYrAcX@Hxc$EY9+(So)-024_rKolA3@$h?BZi3$wSJ>4 zaU!c00iwUz(WW=7P)rvUclTqEYii2Ta2CKoMbQ&563yp${M^h8v!lt6I7Axa_{_Z) z`FkB&{e;#(3#d(^XlTK4&%l|Bh&lrEMl;t?b^+`twQ+FE0HG&dK0cTzCqYT+?p7(C z27AAYvt3n?I!)CwG`yju!58D}Z`;(jdvE{}ML6xxVB^|fshWdH`GLnDr0P6}3I>;;fFrZI;gl5w!`J$0pnckf($>sqr5UonRHH3+IBTi1~^-C=ZvLT~a8u@Sn zY53WFsFY)s*fBaPC?G)jyaooTOhuZfVKyB-_c33T^!l?8{N%D6 zeIIhMw|%7Wt8NG^f$E_Ydlb`EMPVFz6nG)DMb z1iYalc6D(fHgHr`CD6O~I!Q9!v_zsD)w2{r3M3F=KGnxtEd(&QRuEB+@&x-%9xQ3F zjfAWYoT(*L%O>m`9l7;H;d!(+B|%#cRC@icQ;S=#ei0Zre;7 zD3mCtiKfUcE-l@+?E8RJ%!RKFuM-MRSQnsDRKP`KANWtB0Xd{qS~ByveHC0>qmBXV zA0#)>shxxT?$7EfOgNr^rE60^<~YHZW$?h9ntGb&$5&Be;oBq8IGeU#eN&>8q z=?hHN!CBsG73Gtkzv72+4H`XJ|2=Z;#Ib}7mMQ9LYd`C6MlEKkycZw}zuH>_Lu!x9 z5mzmyV5bnCJ|s4Am9X|dM#VXShPsmwup~haVlBNFtGltNpa69om2*IVj{=#m5dQW; zYF~i`8W{R$-zUr;NO;A}t+V<-pL`mpHExwQ|crK;5c6N1LEfWwF933Ag$p7~MYMDW~y6i)A#iIti z!UPR5ESD@79n@)jXtTqr0I5MZPN2cK9gQ4sL;mbhAS*;fMTV$cgga;^fk=^3hT5iM z&B4I|6ed?DZJs^zjU@g1ys`b@ScNK_9%lc^dO?Wk@z4Q{$Q{y|mJdV=Q-o;uZKVm( zrzQSg7_xdrOo>1&G8vz6Y{?8Y8$(se%TQ^?IX#vb`D~3!I&|^7EmU%{*>hRJ^hfxN zf1_$V?qhE3O!lJ*5Xy&{6mBF{Gw>bG=Gq#Q3QW~B><>M$VoU68Oy;-g`^>}Y_y7DM z5$-ZQla#b{>-K!xH{-I$2m`9S05L$3QeX)5yX%o);1{HL&V=3I|Mzz3H~r&r{cx{x zhhCu~g47gFNamQ10W{_F2Yxf&n|;!$L0w_?|geBR*W;YEaoN`@dm`ag#jx)vK!|HYz%KKKpt z4$pvB1|=p2YO~Q*$i-qh(9=N2BIEP_?ofdsL{K7s)m^;4eDry~R>Ag@-foaNuz&GF zO5%T4hD)|@HTmFk??6Vt30l$f6S^VN#(+tA9y`Vo`+;p05;?&3Lq2dCcu!eh!9n_c zN(z>(5Vm>zokzx2R-ufNgq~RcnHi%6HTm9e2yS=yzD`1P0sjA8EAZCoT~RTe zqSRkjwf~0V55go&apmgOgV!l)EVlxt#OCY+N^0uRw}0OtLP?LCUFV~?9jZh{Jqs%; zVsGo<;7vpX#=^D7Bkk=LaD&e^^nMfLu7sxlgeAS^wzgYFJ)3E>Upm2lt619|_|9l?JRh z1#N>a5{d7u%*67H(do2=@NRyK{)H`hp#5)WX9ot1ng9O2K$Gxwf(0L8xkz4oA*s!x zoAYaHVaQwj{e2Szf|QWZ2f#+;#q|Z7SkVFLj4nrj(}x;9HaDTZ)c*$zMyyLPM(1hK zK7RvWA>8m@y8l0~HJpzmUTJX`IR;AEk9=(3ISAw^MwotwA{gIZ@78@7#lSQiL-Q+Q znG_RNBex5L2`anZl|4Yhppesj>J9`*HMY1+CBh1A!rxCHaX-gQR>;X<-4sRU@cFsX z?7ySr1!k}%0>hO!U+}%)G3VN%la4Ao#b<0kDmTm@fNcjZNgz;lblEFK@C?vwFhJhS zxH)gSVj|t<(_Ozzcq81*$BN}*>kVW3z0bRbg~$uML|))C0199YRZ(5NwzhWb=1rLD z1tL+%H{)2`%&;QV?pq3I60+ZYR;K%-U&sFtK{u!SH~yMn3Z*<%SBD7QY;><30m*X@ zBsQr~(A%^Bb`ycRjp=fA(Yhh>tX*e0Cp%>%;wh zF3NKfvRQA4IdGVO511OOG!esCbcgAi=eJ(HLkUHd*nA)QhWkw^&4N8a^D)tXuhDFT z)WApcb$al!G#)hGbum)eWCN{ux$UizR4A#l+?sTy(do;v-1CBXX>+1;j1CZi|qm^ z|NS24_z|+!AX22HL`(VeS6xl?F*tqmdHwB>5-|S<$Cuc&mc!{z6Puo#6d9qUh3me3 ztD&u(t^f4zYP&OB4LtzX7Iph_o2>#pDsPTTr4e)sqND@>}w!%5ofhY$Gt!P^0lSJgZ zBoH1MM6wm&=kPWuPBt8qkcA6jS}Z$x0Q#n&fP>$MyzzCn|9!?>fWDy(0g_HI%YAwi zT#z9<7(6FNo_~KMIPwn&(Q9sG{IY;+Kt}?>{m7G@IOMe)Q$p8Z!`lu7R4{-IF&=!E z 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

>7p=Ce?2{)d% zm$$sp2Ge)9C!nT><(3+<8tehuXF^#rbR&8u)WY*M5zO58GOGXqda9#xjMhwj|1vSR+4{dFAaM?t1 zfM?A2g(Z!UBEI>m#uGc9QY_b?dC>I;kw!!Q$9mP?((=xA@98ieOstE24);3~Pg)+& z;uC1e3@i37Yj<~cYEFXxv5lgXl>f?hFmn>5mTIQc3-%Nj@G9sEHPj#rE;Bhh9D!1& zq5YF(on-(7Bi}ii>0ag3$8d@5q`snGNdb;(rNSoq1=;vEa0|*s;3gmjsZ(B_K0j-j zH52sXZUr?S?d^w(ThMU=wv0r{Y5mUtqQPGUba`F#)`}xGoe8X#{U5RtphrB3Nioce zdT<6TU}skg$7r3qMh z>yi;}E#aA>@5AP>Lj%HbGK*(@vRCSVek=+On-0nsFXd;UO{5c0Z|u z`~eu;GWo^eV*i0fUrN@SDL`u?#}mw_QO@L$9jVyesWRZ6!RWIvK;{+$;V?7C*m|}J zf=jCHHPSz@zcl>`qYB;0Ri3D(4=XZz(GqG%W3un@gVmHZLUO z4+S^1#G}uFU%be6bFVFeX@gGCgvVSslT)t8xMmigQnrB}gJyM+sc}?67wEsNK>2NT z^oEKjYnQCz$TBsUW{h2J?fZ8#>w(TBF_FzmC00rNwNG9jm27*m=0EKY8$j+4F%?#Y zpFBq|?-9-msqJD^w02GFWN#N=)ZuF;4H@;WoLqwuv&xzYvpnvhMr~)vp@%DyS>G=d zN5t~xkCl+z9TOf_?(6OS4Ra5)QRBApH01=z-kRUykDTd9h^;M71lP#-8x_aN8%JDqihtFmEYWu3ql>P=BTB2 zl2PEW;$hT)y6BumjP@yu8V;>-t3du|=LJ+=pgcDXXJcVCm_+*~56^(;kB7UxQ-uQX zZ6U?)hI9f_yx+_q`3-rjI9vfJt>J{B(Mf3Cz&5iw3Cr!(|Hx;PfhEAtpVzcNBIO-! zE%(mX*f^=OVw8|@S<5w~Udt#;xwb57D6RbIkRaR%72YrefY3UQbUOSn7C+V1)ulw6 zs}rfNS)GYxiN49-r#$YtZyx_6Y3L?zL82`2QIgj>H;+ol8D7yrtZhNfjslND7#@rn zjyp_F)!PV%QpNKt7k80-rtihqII7Tm=6rpWdN(QLh{u0D?yLzEX4kc=E-O<%YWQ0I zgS?B_uQOX84(KSch;bSLK%mfj=}Ufdn)>>OU{YimV_5Sna}Vjgy<+eq3!P?UHI%0% zyc$c6H-0Pym3xW`v&&_!+@5SlPVRe(A<2Cu&Wp;pwuD9njt|vTA5Y0AawwT&#e?;* zv(l^Gayp)EOgakEF(C=i$jh+=HMv4pDosQ^laK0k4I`t(1zVpro#&Z4XwfTXkfmvt z*d=|9x*C#ii>wHcp-|!JqwTcLYdivhJjK{M%@g)=xL)fui_z?QkChzW8xHF|q$~Ea z$*aQ52w*jRp|S^^nUlKd6Xj&^L2@p_7L3FVYXP?sR>`)4UFxtc)A9vU5;$H!67KTCx1p ziGoRFyzPCR$}%B3xu^q3oIsYx3l!O5qU!Kb!A5VaH~7-)xcK1h3O?v`T2H2Ye^BQ# z(OoAnPPwLMr#O(4YvR%;n}@@8a)snowqo3SL2|SrRYj-7@yx}sW`~A@1?O%d`7SR^ zhhYc`&n(x9s)?cz-F{}~lv_+L(5N3Qfg;)g{LTzNf4LW2nMhgK6;s_|8D{=8s?imb z7naQ3vQ7epPKu|AM&}bALv;YrEBKAaSb8#4iojSkRb&r zE!h@fx#g1Qo2^&&yG$72QYT1!BRD(wNIm7f;M4?}wA$O<$hrePkt8H-4qWUJU+_^#mLGVf{{<#JLNFW~<=7ZWE!Dfr;+OmD_i8q5T4b-$H}0v9=?aqUJ|kZSB}i7dW;Q zmvi&@1coYaxH(5e4R`YS5vGy3zXI=HC1(wuJLEZ1$|&CU1mr-g+f@B%rDYF9U>L#E zM_7QWxgF(H0)v3()|2fY?2+W7ARC2RvXD5^F=v0xKg}~ z&LLGkLrtFyp7ig8TrFfMnuc2ppWefCFh>pJsdssC`(Uu}0uB~t?MqEy;#CvW27L@@ z>*~oWXXZk)Rj|L22?^FeG4R_1`KN=9MIx8H3Nr<WZ(hOy0XL1OsG|iJZ#J|^kPQB;d3VC7v7E|=b)DtQ zv1*0QNRwzzqr7lFSZxl0ZCG z;uOPcu9qtuVWLTN`n!u_J8$)?^FC*Aj2YOE*eG_XcMO?BH?xY@c1y(fpu^<-th@KH zTI-l(uzPENh-Hi#PL9V=SYKNVyIxvU{qa_ZQeN%9oqeX(jp~Ak@`g6x6I?`EzZ!EM z>h3ztPuy?0D1j;EG3gAZIJGXt2+u)b@A~@VdV=dpuI8B7G@KQ>&{I(6(|LNdoqSdh zu$({oyg2T&jfB#1J+ye6jD>|{vU76opNl}s+9e(LQ-IagCh%QMd{11vp1^>f&6`GU&p=j3+TRq$~l4-R=$PSUEQd_aKqq4&r*= zJkd5N`hN7m^zFNvJ2^i(Yu%e*sHrK6);avxE&TA-0SLZlP>gtJcqrNW1nP)pMX;&! zT|v6ku5;XO@;R7~p*V$x&ArrObDytN7P0b|T}y5#Y>uboJkw;weG7%`z=CQiG+zy! zyI!@ADnq>E`0XVB|Yz2XUF z+HiUzQcNopHH>@3(6sxJLPm~(YuX{d8Z(@Q+aw3 z2CbJE<#NP8$4!r+X7ejemsa4IwZ2Q}cmd`@5yM<4UeOOu<3YNu;b>h$MyusVxmBci z8gATbq5f-yg6B{i+-7J0H1|eiC(nJ_d*6scQ7a>0`Hv}mxCLe3!n26nubr8SWB57+ zx~W?^Ifr1$1r9u2L8j)|Ph0hp`yW`vsNK#vDsenq5j7kb#BiR3VHvCly`8thWzh%?q~N5O)i701*`)w-A8Q@r)?Nw=4mQSn#>G}{VrslYr~%U8^A@JH#o*oRCM_pTL+kUZhpWr8Hphvy1TZcL?VGnVVZ<#&~wevi!y zKf?)e-@RKQ9An~BgY-IlO`*T|>(>Odr7-n2gup+l~3aKck9Offg5n(+K z&=%AXmDY%MD-ECZhXZ%mpDWr$#`XFS2Rj{VmzfId((aP8t<1r-79!ns0n*ZYA%SNH z$!B`xp#7&^ujTs2p?c;eTT%7r&b&E_OF_l@iI}+?rt_|t-(w8H+q}k{qM#tq9Mdsn z{i^NZfb!>`g=QY+nsfE#Yk^X`3#k|(yq1x<(% z;k#4<_6d1|wqJ@Ip4vUGcpJxK!IZ?>{~02cOzKW5I; zi7Dr^t$iB*XxEqYbhtnddhXB|<#&HM++DON^lGeEWXJ07Lh6_57K=jVMGHOpj1xX6 zZeU>G^|R?*eZE6Iv`tn_=;(K?8>AAP%$pu8<#^gmkCZf+l+&OLn$gCFwq(dbAziXs zz}#DDvY})QX%H4oiAc~znauG4w|AQcy=Zwdh^(h$2nO}KP=&+nuGR!_`EF$^TtaX-|axH&UMDXL% zzRszT2;U+vr8%tM^vSyWiO*T%*->Lvb-w+qTO)Mm$^|g33eX`_{gY9h^TJT>N_^X9 zPi0qhR$RHKGhuz^CdYb(nubO?ciT>HLeXICCurrNOd)H9D|`cL!GAsrL7Dx$;rj(aYB6kqR~YaFfjo5f)x2Qj5_FOWgxvo zGVQY%^e=nks9PJh4d`B>O(bo1Vs;1@j`eI~>*rbz)G>QN>ovIP0h#^f^DOEs*NRH$ z51x?STASos&>cVc`xV_39b6fE#-peo9`2AA)b^bY%#C?f)kph^);(%_h@;H7_Q1ZX z?nRq^T%}#&C}=@b&%#UrdPSX+WjoYiFbo1;1?q6?yUzMbH_5D=L`0qGld1SGk}8HU z+iPB^KYT7uSE0C|*+#m3YkvQzE|y^E5oq@lvr6vUUxup45$T%LI|_R3wI(od3`94z zZ#UyJ6d2dn=HytyA)!;$R#PkWJv(L5$SU{wHLxkD@NtcRFZyyLQH1oDfp`r(WMomc z#3!fWTd#sYJ8_T+50~)iVGtJ#$r_b6;4z7*{x_4T1#8?DB0&YXWVvC`7s}O8Jx8tu zUkL{MV(#k`a}iIJn{BhJ7KHK#Pp3p>eyjcrXclh= za-H1ls$?FFz43MK(?=1%y;!f7Mi^rn7YlH4IY1K>hUe{2-+uchn053h@wa-M#W++m zQ86(L@Fq7nuU?S5aYtY_A$}1rf5~So~-Ub90#L4vSvM50boQN`LQZl8|dbXNCUb_11yG!6)=uK08Zl zXk{_LWTBcAH};QU@Qn|Z{o^mMp~KpriNW!`h-Za|I|+~zye|MF1p6ROFs~aPjs~bA zd`fXJ6igB;Bo{`yL#1I~H9r3gwAUkzH(@3|Fcm3K@d4({n6dlsXWN}ys<$uyxi|X- z230V*0f`PI2OP#x=zsyx_1hfGdyKQTd0aXXjnC3`wrVtJ6&NP@y7PPaO`U!-|+M%PAJKn;xASMR$34x;_>GoD~4GFj0n=?R-(R!({}3 zwca}KgkHU}C+#5FYA_vN0*CUKi`&}RE~M|(t#vDbxdLtjN&+xKR*PC{A6|X#*8a6I z!$W^+;QD0(E&MmgN#pucbe@PPr%EURN;-VxO(O=#KX@IHK)S*+0Z)I$RJW%*xrvS%BzJ`N} zo2P~-ORz5oXN~oyeHq)qu$B9-BcdEhSZW|aZAEl+fWAy}WF&d;z1lzRV29FvD+bPk zdT>cl=qnR`*WR5hM~y4lBOg$w{g<3`0aOZqr?MRpsBCOJ1)vWDQPwoER8>nzbWusv zfkxE{Ma7EsLyKFoW_`-c!@TX?zqk@TL&ar>FvtW15~U)Bcnqa5v!O=9R+gWWU-)3mx1i7Z7pc)}CS(x7%E_4|=H&)hcXSnC z?##^>V0t6l+T5TnmTMAbqD=A7+S}@pBBKN9li*~$lf59R_zSDWhE?dyZgb!aOw&{%h0r*~jF&T1q4*RNk7$Xsj4xqW^c zb`Deu00(-(DpOo)xfO%|^zzH})QkvvEqdy=;=i{e8}3&iB;yr*uaO0pd&Y=~Jz}InXecJfwFlopj|M) zGN?(}^l`)0;-FC~0yQ;1?CKK6S2Z^qupx@UEp^gqAujVYRfn+cGn@GHXZFicoUcO1 z5PolD)B7+pw2Bd9HZCrmE1xexE2$9>B7h-+sBbOE!}F1OA}Xt<2EaP{ld&*E2FQyf zF2ByZd|PPS0G1zs64ZB05&z&(7crz2zkATCg0A`$1n36uBgN=@hMX}2%bl-b^4;Fi zF<=A8w+9a%= z6wib6WV%xnQyF+6;*ET1I< zs#UMZUp^5=Dz*p?5G*{<5vcEYQbtaf_OrdgVc3_ZB`F@s*MS(0HOsoN3~0J3bGpRLu0*UbNiqomGDjiJ9_Al$jR1qHk@;xH%^;N!!^ z@;AMcqmzI12(RFiqL*S86H8JxH#TQX$Kp18La+KM7(zBqJJ3re0eJ;b`k>2=LVd4< zpj3bLFVm_&ZhS(QAW`+UCO8oX--BYdOG|TYR{?HLAa&pYx@&r4q!9_+6-YmXghm&) zt^B9~apq0@@4O=?b%4=he)j(JG79IiAf7JG02tvIj`jMFQn2oVw!{;l&%hE|ij6{> zOkG1`puZp4%!)~)^76hfAODHT)@9Ff1s7dkd;4_-{aLF5vBJd4jTEUDTie@K02faQ zrCpIxg|M@uc!59qTT3#X^r&)c{-Ppm6dFvlCv_0nf7G%Fr; zL-a;2dl=9`lD{JhCI=YQi1+eMWw`4B2TR_zWOIMOqkihkJ2=uaj@4bocanQ7Uh*+? zb#3h1kZ@4K;47safD_~vIb7+7he+b=tSoa23pC%R1}gr0a&+|YWBbDp4E@Oiou9G$ zfi6ay9L>0vxRy$wuc>yW;&$w*Rz;Oi<}mN3mui%Tnp)}&s~UJ*d4y;Viv9v4no;5^ z5rAG_u#wU?3?(RkO{tYPo7)X0t%_8GS8JV$?C~=z^o`<&#%mvI*;a&81`XnC-RILU ze5b9t4ITu{K;7^IT2-p*612yY?>-Hoa)u_r!u&j>tQCSW_r#=k&5#4N`O`wskAfma z&y14O&;yo_-K60d2B&aC?-3XdFBgh&)XI*~A{_7Drk|>D&c>SiC3uoAcmNhz5Hz#{ zZD+Rurw}hW7RF7G2qY57!wpzs;g2n~3uX4fq_eB{7@Tj7Int`DJphQrp^gCmg+UK= zf`(Eh==S4o6K+*Zz^DSy6m5F?q?N`z>F7u|Htk^Edj!$EIpsZH$a20ZpjX{DxL2?eWbd6Wi#_d6+bDP4-#j0S*~itIiM4Ry4syqmM@}pg@~$dfy~b$?mtmh+IjkD-i0?az}oxCm)DofvFcZBbWDUH^r958gXMj^ zHI}ZKz{nEFSzXi5wUf&ppQ_%@*uYgPh(oi<@$`+9KFGfa(w)SU?HLF=GQ&X>R$`fe?eD9qVxZrJOy<12U)?f`Y@$_0& z78V61r6B{DU5$)XeT}{RvL@MdmP%M(!#k56C;+968JvOQcY!(br8W1CcEu7S2E2F! zC`w&a+|(aoSJ|B}beR3RQf=1jWEBo=!{~JG!zq=5=lPF^YImeu@9;hi9dK5}W0sIG z8D9tWp@mXCEdv?{_Lv9ZbhpcKg|REGh@!EiQIvsfFBAjr-n@2`$xlYrEbRJgDYEc$ zRHxT2krI6I!@BEoEkpJtUMh#Wz7$r4DgFa|;fpS&gBzPhPQD_GpS-6vZtF~WB~LSC zOio%PSBwZH>?XMG`Ndb(*Bgc1(^%rd#kn3xy7h~UipukFXBikTQgtrTF96N~8H4}# zK)F${mI@^L)nVXJf6EH%exO6+$sV*_p;6a+PPJ46(spPf3e!qIf%*wJJJ$C0V5l1u zK+FC33+RGjiK(fpzfVYbKL4G9mdF!-^wO0pRUVs}IbY$zp$d2#XGOu);5ZEfu^92i^yGV|qFWMFrOLL_Fq zF^brN><)r5ST>}*Aq!BhLr65yfOjTff46#fQMlIBfhP&aQSj^cRW6D`P;M(&#ppVY%9%~ z^XM+SJFmOBGXvv+rQSV+HP6aD@DSUq!O_vNwxVvJ<0))k~% z$)8bvO9*TM@b+{piNUJ9@HFU1%6loGCpE>9r^!5&fG&HObr*~Ak()&>cN`I(V<@$` zdAna(O3JlM5`ve)pu9Iv4;zHVH!W3A|S7($WFfRc6eOgmIPu zNRBNq-gfIa|Ch9l4H~{brs#uA4+B`KsX2glC?v8$9w;%d%DfkZq^P&?fRGG~Z8DMN z1wY)|M}wEf)ZB5rBImq;`M? zmb%XRQ^&=5=5r8USGaEkty7`st3GeyZcG+jY#>jboysaPjfy3>|GP zh5+{mw9S>dx%4c$nZca1Fk&s@=E;$feP~mYiXL_fLX^h6VFe=14^kvA$Gxh(+GGOB zDsj+nA!&&xVX_wb<&?zVbql*u$YH$Bm*`I4C{M@3$*r^OxidTI^Vfd`<9>I5Ry4#M zL1?1Ez!DNI3{?pxG|;-p5yl|mpmJP<2|9qHyn)Abcjo@R763p(lEti&^vQPgt^!pU zgT(2_9&r(m-=?q|o_`Bq_j~R?=mB}nrjEe)?WaPtjR35_!OHqTc?YD0y#T8VSZ1PM z1?OiOe2+K5GIJnXMF%?oAf6>YC&>G3nfxiPpbCD4l=L^W+Vk2~FI~C>)dwYadS0a1PvovXfBlhWxH3>vy1mq_ z4dx`#v9W)kyvyO|brZM%iLILe`kN?qqX81SvAarj*D)vlKQkm>?X1|Tk$-s8m(+`x%xF$J0&<{^6? z?b$g?`<_MlH!F4E;wD!H3ANLhx1Ra8$E;no74O;ZO}yg1qia48UtBgB zmE`U1{WOzVkdRqg15%>0G;(r?NYdXTNp^Yx4F}l>bke{W3Rp{y3!QPeM3jmNf@-Ya zviUDLAI>(Y@&Gj&HY)J9HMY1#MV~|B4UA?!{TQva~4 zfVl&9;&pdZim@IL{5*nZr_CJx`t|G3P&N(@t-W;do2!64+{v^veR1;z*d>S<4B+!a zXYof#fT^x-?2H%6j8V-8wjByZ?V(t>!2`D+kUyz!^3^(mVl9+K9?w8D`;hQFWgTMo zC4Ur+)Z@pqkWp!t;Ze>C!^Uuj4)b?2OCEmyJs=-^8X~ykUu_0p24Wyx-)cgGUZ8^k?7iHPH|pdnFudMGaD~&c}~vxjTH~C{mo6Ok`fw* zKI+cik!F7dIIh~ygtZI2?>UCNe@}Lmp#EGW?S*ass;7hR#XrqA5Ic*@K4Vyj+MTc^ z;+SJUckUeWI`z959#X{Jb%L)Ro}N;&E|ryuh9-vBswZbrQp1H&EIQQLx z{1i(yQ4TubP+i}1cU*fy!~Tt9`TV~vnak9D8d3!yGXVB%yzD8_J+Ne)>l9Ww32V9- zg^g>aDpa=E3h9ySL8dRmz`O$#;&3dWfZllk^l=-Te6j#bhI!JgmtEH`pwzV^rBYX~ zrmdt%-Dc+P*OSJ7j}acXzE1z`O1b0KuXZ>>jZl!}ZM+G;jO{4gf)v9e2t8DN2?GGS*k`rxBy3%x8{a;Q`&3|| z@cZq^71^&mhCLrsNTwE{0iC#x7ZiPBd+p24`sBF%Pnka$v(TT>vW}bBQ@<|Vb%}S9 z6N}@J}cc)&XV-y%#WBg!vC{3!bhp81#~+3x2s{ zK>tc|Uy_CTnVh-PN1#eUk^lu5u;rw9W-Kfj`Fye`@$`9UZB*mHIh3BB9%en^GcD9l zhjq))F*6Pmg$ZtS6IQc2+jm}bW6Cd z34_>T(0z}Io#9PDn1+f~cs($$kK$H~pb(#B0JV8+H z2*I$d;bH*?Cug*4L0m69c4@;f4CC>?w0Gt2Q1)M#8C#Z2Qig0}-$M4LPz0H(K5olTsl|@{Y1(36Z>K@=tt!`2Oa(TytH| z^*rY}pZlD1-}f0Afkw20IRD4`8e@^s<$;(q3n_oER-X^8& z@PZm0ZG^8DQ6dA65=v8mq~Oy~oTFAEHEKBA9UzEem2+EC_8yni?-37GHy&KUb50mh z<8$5LRaL*du8IQwcsMAFAY+NAOV_5%E-fyCd|ji|(!zrO>6Bmkh|ZiNv<2Dh6Mfpj zP5WRE9UiYp({H>(siOr1vad?}AHNHjkwT?5g(wI8={lOZmHB#n6@1~ltxedP8Qo~f z2&{zeyF0pMVD#_bx3AMBI@;!EUx|tFTaMG5_4skgJwpbqstxVn`{CfCbEoV%zF|KM zvAU%Cob*mQq@o-oVj_3Thk?~d2-#rvF;i&#ppJVHqrUzeBnOMDe|90e9U(pRZ~p`9 zmglAgE9T2TaODwtW@a-0n`4*ZD{|Y^c*86WBjNvU?CaOuoSb)C?XIX`aR{uX+}uR3 zyOjleY!mDQ_+QR;FP!%5Y3+t086@^B7Atg|=5%?3gTxp`OGWdh=jI7RcR_Cmw-=fSz9abgSA0CzkVP!5j%kXjSA)xx9g=hKq_4EX(YQ1}=ED zc=J5m7K=3kRd`wp>7g{K_~}EbH_aii#S;A@P(``bpv6YYSWj|mrHIz>?p0Id!e#{p zdzkYBR$$aWt=^x_=29D6KSa9id0H@JN8iu%2={SOmy{6To^_&1paK9dYrQM@jq>d{s69yPE;J?ZH6QJnvl~nlgR{49pIwZU*U&* z4NC(9Ne2<#2WBFi=1X`ly*xd;&nbv{I$O%h%4Y2UILP`|LlSBG*bsqC1qRn5rg}Sp`&Js4 z%%Up~5GeJB+c+9t{b%Xx1=SrLF}58%MBqa|4|GX5_*Jb!&_r>qL7-1S%mNa>b6FAg zp6hD;R{#-$)!o$Zx&hC~7lhd#fen~@M)($kA@GQR87I#u{uwVJ*aY;-ynzVrLD&|{~9?A4k-R6%~$YaiCFsb5z0P znV`uIMBwo7Z>^WIahYaDMWdtPeC=Tcqiu22QzX(7a95IOG{2O6b6}pJao@A>-EzlF zt<2fK5d|^NQheeUCJDGhO%E>GonP{9qHv%$KVkHqi2R)5p?|b}V$wpkdAA(D((x}C zdRX@w4<6z5^+^xOD=GaaNCt1d_qN9v*C{ySQ_Kf9?eA887XyTavK{^@(wS8J?9+#a zezX~tu})tZ_#Vcgy$M|iMkGis}V5`OaJNl?YgL?I9e z!LHGkoSYnZe^W4&0wN}4Za^y#Y2YUWx*moc3bjqo`od2|Fb{%C5Q3%w71>Wz+liO`NN0Jo?^16|(pnR5dW3dfrFH*)z#+zdAZnDT?;-5AB5hf$|*G z{x-^urdTW%+EfEGWse@IOgJ``exD~FzmlJSetsO!KX{4()!y)~(i@-w|KfWSS}WI} zLKWSJM%zFQ1}6ZF!opzN98`Dig!>p16In?yT_w9Xo5sPx3g8w1(<14G$8(>udDH*a4KKtNq}1~ByWx8JPN!@d964pbI>RQK(y@Y zhQ{p5%1T6)pJ_MiiJt%nA?ZjudS_)IPtvD+y1-~zeC*1G%X0|{Lfl=s1XS=h%9+1Y z2G84BSR9kX0ug_gk?9m2XnV)-__D%bcnf-oF{LJkO_(nj{#Pcm<}C_`N) zuoW}<>uK*znQXRnV~KeH(M;ZZx<_f-A=_jIyb7G4b}E)iRrtxZ}`)?n|RO zZdPrniVSEk(p|%$ynMDNx17Zy0{6DkY+oLfaI5lWaYuZbIrkpV6b`{BX21+6crs@% zTDjrj(B$MtXmzD}onD{42%|Iu=4{R%Np+!|zNpZ;s#Zci>5|XjvrIapKy3ILL_da3 zMs~VFWeT%Vps3_yqsr|l`M+Vq7qQR^Bd6ikqhq`z?4QgiYs#e7ad0G8vQ^pKA zUDfKBIib#f;x@SrdRUdIYxu2QQy32&%1OxOFtGy{6{xZy?lOC=0104LEkQY``J$IF z{sV~e5;8I?Q@NJoa)i;fo7rgqMjpW0PHL#CzOeZ>9L!)a*55QHD!{?i)O4Wg<>f7F z&qZ+W0 +kind: Secret +metadata: + creationTimestamp: null + name: cloudconfig +--- +kind: Deployment +apiVersion: apps/v1 +metadata: + name: cinder-csi-controller +spec: + replicas: 2 + selector: + matchLabels: + app: cinder-csi-controllers + template: + metadata: + labels: + app: cinder-csi-controllers + spec: + serviceAccount: cinder-csi + containers: + - name: csi-attacher + image: registry.redhat.io/openshift/csi-attacher:v4.0 + args: + - "--v=5" + - "--csi-address=$(ADDRESS)" + - "--leader-election" + - "--leader-election-namespace=$(MY_NAMESPACE)" + - "--leader-election-identity=$(MY_NAME)" + env: + - name: MY_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: csi-provisioner + image: registry.redhat.io/openshift/csi-provisioner:v4.0 + args: + - "--v=5" + - "--provisioner=csi-cinderplugin" + - "--csi-address=$(ADDRESS)" + env: + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: cinder-driver + image: k8scloudprovider/cinder-csi-plugin:v0.3.0 + command: [ "/bin/cinder-csi-plugin" ] + args: + - "--nodeid=$(NODEID)" + - "--endpoint=unix://$(ADDRESS)" + - "--cloud-config=/etc/cloudconfig/cloud.conf" + env: + - name: NODEID + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: cloudconfig + mountPath: /etc/cloudconfig + volumes: + - name: socket-dir + emptyDir: + - name: cloudconfig + secret: + secretName: cloudconfig + +--- + +kind: DaemonSet +apiVersion: apps/v1 +metadata: + name: cinder-csi-ds +spec: + selector: + matchLabels: + app: cinder-csi-driver + template: + metadata: + labels: + app: cinder-csi-driver + spec: + <2> + serviceAccount: cinder-csi + containers: + - name: csi-driver-registrar + image: registry.redhat.io/openshift/csi-driver-registrar:v4.0 + securityContext: + privileged: true + args: + - "--v=5" + - "--csi-address=$(ADDRESS)" + env: + - name: ADDRESS + value: /csi/csi.sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: cinder-driver + securityContext: + privileged: true + capabilities: + add: ["SYS_ADMIN"] + allowPrivilegeEscalation: true + image: k8scloudprovider/cinder-csi-plugin:v0.3.0 + command: [ "/bin/cinder-csi-plugin" ] + args: + - "--nodeid=$(NODEID)" + - "--endpoint=unix://$(ADDRESS)" + - "--cloud-config=/etc/cloudconfig/cloud.conf" + env: + - name: NODEID + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: cloudconfig + mountPath: /etc/cloudconfig + - name: mountpoint-dir + mountPath: /var/lib/origin/openshift.local.volumes/pods/ + mountPropagation: "Bidirectional" + - name: cloud-metadata + mountPath: /var/lib/cloud/data/ + - name: dev + mountPath: /dev + volumes: + - name: cloud-metadata + hostPath: + path: /var/lib/cloud/data/ + - name: socket-dir + hostPath: + path: /var/lib/kubelet/plugins/csi-cinderplugin + type: DirectoryOrCreate + - name: mountpoint-dir + hostPath: + path: /var/lib/origin/openshift.local.volumes/pods/ + type: Directory + - name: cloudconfig + secret: + secretName: cloudconfig + - name: dev + hostPath: + path: /dev +---- +<1> Replace with `cloud.conf` for your OpenStack deployment. +For example, the Secret can be generated using the `oc create secret +generic cloudconfig --from-file cloud.conf --dry-run -o yaml`. +<2> Optionally, add `nodeSelector` to the CSI driver pod template to +configure the nodes on which the CSI driver starts. Only nodes matching +the selector run pods that use volumes that are served by the CSI driver. +Without `nodeSelector`, the driver runs on all nodes in the cluster. diff --git a/modules/persistent-storage-csi-external-controllers.adoc b/modules/persistent-storage-csi-external-controllers.adoc new file mode 100644 index 0000000000..262bfd8a00 --- /dev/null +++ b/modules/persistent-storage-csi-external-controllers.adoc @@ -0,0 +1,41 @@ +// Module included in the following assemblies: +// +// * storage/persistent-storage/persistent-storage-csi.adoc + +[id="external-csi-contollers-{context}"] += External CSI controllers + +External CSI Controllers is a deployment that deploys one or more pods +with three containers: + +* An external CSI attacher container translates `attach` and `detach` +calls from {product-title} to respective `ControllerPublish` and +`ControllerUnpublish` calls to the CSI driver. +* An external CSI provisioner container that translates `provision` and +`delete` calls from {product-title} to respective `CreateVolume` and +`DeleteVolume` calls to the CSI driver. +* A CSI driver container + +The CSI attacher and CSI provisioner containers communicate with the CSI +driver container using UNIX Domain Sockets, ensuring that no CSI +communication leaves the pod. The CSI driver is not accessible from +outside of the pod. + +[NOTE] +==== +`attach`, `detach`, `provision`, and `delete` operations typically require +the CSI driver to use credentials to the storage backend. Run the CSI +controller pods on infrastructure nodes so the credentials are never leaked +to user processes, even in the event of a catastrophic security breach +on a compute node. +==== + +[NOTE] +==== +The external attacher must also run for CSI drivers that do not support +third-party `attach` or `detach` operations. The external attacher will +not issue any `ControllerPublish` or `ControllerUnpublish` operations to +the CSI driver. However, it still must run to implement the necessary +{product-title} attachment API. +==== + diff --git a/modules/persistent-storage-csi-mysql-example.adoc b/modules/persistent-storage-csi-mysql-example.adoc new file mode 100644 index 0000000000..5d868dfd47 --- /dev/null +++ b/modules/persistent-storage-csi-mysql-example.adoc @@ -0,0 +1,31 @@ +// Module included in the following assemblies +// +// * storage/persistent-storage/persistent-storage-csi.adoc + +[id="csi-example-usage-{context}"] += Example using the CSI driver + +The following example installs a default MySQL template without any +changes to the template. + +.Prerequisites + +* The CSI driver has been deployed. +* A StorageClass has been created for dynamic provisioning. + +.Procedure + +* Create the MySQL template: ++ +---- +# oc new-app mysql-persistent +--> Deploying template "openshift/mysql-persistent" to project default +... + +# oc get pvc +NAME STATUS VOLUME CAPACITY +ACCESS MODES STORAGECLASS AGE +mysql Bound kubernetes-dynamic-pv-3271ffcb4e1811e8 1Gi +RWO cinder 3s +---- + diff --git a/storage/persistent-storage/persistent-storage-csi.adoc b/storage/persistent-storage/persistent-storage-csi.adoc new file mode 100644 index 0000000000..c7c042edde --- /dev/null +++ b/storage/persistent-storage/persistent-storage-csi.adoc @@ -0,0 +1,36 @@ +[id="persistent-storage-using-csi"] += Persistent storage using the Container Storage Interface (CSI) +include::modules/common-attributes.adoc[] +:context: persistent-storage-csi + +toc::[] + +The Container Storage Interface (CSI) allows {product-title} to consume +storage from storage backends that implement the +link:https://github.com/container-storage-interface/spec[CSI interface] +as persistent storage. + +:FeatureName: Container Storage Interface +include::modules/technology-preview.adoc[leveloffset=+0] + +[NOTE] +==== +{product-title} does not ship with any CSI drivers. It is recommended to +use the CSI drivers provided by +link:https://kubernetes-csi.github.io/docs/Drivers.html[community or storage vendors]. + +{product-title} {product-version} supports version 0.4.0 of the +link:https://github.com/container-storage-interface/spec[CSI specification]. +==== + +include::modules/persistent-storage-csi-architecture.adoc[leveloffset=+1] + +include::modules/persistent-storage-csi-external-controllers.adoc[leveloffset=+2] + +include::modules/persistent-storage-csi-driver-daemonset.adoc[leveloffset=+2] + +include::modules/persistent-storage-csi-example-deployment.adoc[leveloffset=+1] + +include::modules/persistent-storage-csi-dynamic-provisioning.adoc[leveloffset=+1] + +include::modules/persistent-storage-csi-mysql-example.adoc[leveloffset=+1]