From 28a8532422d47dbb31f0f32967d260d55fcebf2b Mon Sep 17 00:00:00 2001 From: jiulinxiri Date: Thu, 6 Jan 2022 23:03:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E6=9E=84=E4=BD=93=E4=B8=8E=E7=B1=BB?= =?UTF-8?q?=E7=9A=84=E5=8C=BA=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 0 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 11937 -> 12084 bytes .../xcschemes/xcschememanagement.plist | 16 +++++ 07 结构体.playground/Contents.swift | 58 ++++++++++++++++++ 07 结构体.playground/contents.xcplayground | 4 ++ .../contents.xcworkspacedata | 7 +++ .../UserInterfaceState.xcuserstate | Bin 0 -> 12083 bytes .../xcschemes/xcschememanagement.plist | 16 +++++ 08 类.playground/Contents.swift | 16 +++++ 08 类.playground/Resources/README.md | 32 ++++++++++ 08 类.playground/contents.xcplayground | 4 ++ .../contents.xcworkspacedata | 7 +++ .../UserInterfaceState.xcuserstate | Bin 0 -> 14454 bytes 13 files changed, 160 insertions(+) create mode 100644 .DS_Store create mode 100644 06 可选项.playground/xcuserdata/jiulinxiri.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 07 结构体.playground/Contents.swift create mode 100644 07 结构体.playground/contents.xcplayground create mode 100644 07 结构体.playground/playground.xcworkspace/contents.xcworkspacedata create mode 100644 07 结构体.playground/playground.xcworkspace/xcuserdata/jiulinxiri.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 07 结构体.playground/xcuserdata/jiulinxiri.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 08 类.playground/Contents.swift create mode 100644 08 类.playground/Resources/README.md create mode 100644 08 类.playground/contents.xcplayground create mode 100644 08 类.playground/playground.xcworkspace/contents.xcworkspacedata create mode 100644 08 类.playground/playground.xcworkspace/xcuserdata/jiulinxiri.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..347ecb125ad932326797488702520c4e7e244bb7 GIT binary patch literal 6148 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 delta 4623 zcmZuz34Baf`#$Hr!OX#*dnNJpx#bnF05+!tq945!fd2)eVB$vo#a)ta!?vi`tJ|*Na4Wm`4 zo{H2)9n?d;v?dMEAgxF1(-_)>zDWN=V`&_Ho%Wy!v?uLF-=e)~ADTi3(m`}6eV2}- z6X+y5nNFe8=$CXh&7pJXT$)E0(8Y8mT}ywgPB+t^XffSNPtsG`2r7oI(?985`j9@N zkD)451094zbua=CX0U)8Jm3W%L_&RN0MXD8VxTE`1kE58T0uwX1U;b_q`@#qhv6^+ zG9VMOU<@G4h8&m!b73BQ1-Xz1`A`7!VF4_LZ($9rh4t_&Y=iC1pagcnPS^#dupdsq z?{E@M!D%=HSK%65hg%%Sg>hB5s$4Zr$5rPdIDxZr4$j4SwYJcl78Ohc4u&@@np`D? z)7Qm%*bt2vqdm|S=zEbwRMCO8iwgC1p^BJO`t>R8aQG`c`?hFTOpD@G;=HzvuNV2N zPoYv7F%q6c5RFVHQF-JGtdmE2p+mc3d?_M_%q^drgZ1;sJZzvf;p_CtCk43}y_Ym4 z&By|>uuq5h_Ssp9{f8#E$jC?>UBKoFN%QU<;wx?=V@HsR>)9zw$oC{_8Cgn}k*~=& zWI6ektRO2%5m`l6lke~aZ6j}sUPjiCwPYRnfvhJ#k_}`d*~IRCBE=YsEwDXyz)sj1 zyI?%_XLkcIw@4S!m-Z_o`^%%zIZbQ@r$w8*;Sb0|M(88*m^{&Xo9evPv4Sm1DfH?P-)2}+@~BRUS%dN^N1Fe0 zqG!k9$-~+V>zdd<^Jzr1Dy>GMa&s~205#BXTAf5tBjsrX6{v}tsfAj#v!=n}y|5eh z!9?teJ++?Z7vm&q&!aNFi3w#?p-#3+CF`lXXPcztVOgmusmU4LD#F0-jL9A;qycG6 zJn`42>SvCw4An;?wfkl_mrrYGcg+D;A@%2%>uL!-sl3W)Ew*bEtxfCDy4uSYiF*rs zYuznLTmu@dZLr8(L(-gm+T^|Lxff_7+PLR%20A_~BX!t7?1z1|YSz)Un$l*ym_)5p zhbC82@)D!u9}|_)yiA*Gi>-C(E80P8qn<5j%Suivq@=A#K^|?5Nq@;m+t5xVY9aZW zwx#W8d)k3^#KxG6DL4=ZVd_HKnRcP^Z0tsA;9wkr@3QeLCSH^_LL4UbrTs}%KJ7;n zaVVzc(*a~X4#Q5`9kD^})N)=2V>%`rqG@y(O{c>dx)C&kX3{L0P3zK;bQBxM(08=X zw&mT&;3ycjGr#$(3c3VvL!AZC^erah5m z*FX42#yyfU`Z)_mW5-XYwY4ddB#y+lDhZrPXLaik->pl#d^%HGEA{2((XTW`w$og# zk?an!lFp+A_#P{3x{&QrNEh`L9rPob~D53vqD#XhbQ`?_-MKj7HEv2Uor{=qZsq35wz zni&0+?juo4={CBZme3t^C*4I$>2A7*?xkh;5l+C5@e`bglW;Ol!B6osoVt|mXVuGI z^e{a_k21%pL64IlPGbpC{`vx^;|zAN5x-;}z%0cPpI$V>o<;{>DG&21evS#1Vc($k z`Sd1>l)X`7OUmB~!n$X*e2?BIHdf1#ksGg9nqp*ZQtm(9kv;(+wtOH!aVE~nX9gdJ zvoS|YS5&>8+H*0%6s~F06^|_J z=3zb-;QaaE00o?&;sRWP%kXQA>d`JarNST+x}**qRPn86yTsAy*;(z=laecs`O8G( zlKW>5Y>|n1&=nZ|K zFZ6>%=nn&M6|Tnb@OxZ?YjIs6Tb}|0VGyLkU>L&o`2ly~MZAPp@G5EzT{}YAFp|My z1u{AhM&WvldWQEMc(442G5B^KypKQr{li$8!g3lufN}64jE9e40(=agz(kk?lW_xX z#7(#vf5Kw?8MojsxD|h03ZGWyG)bdJ*#8&HY50;J#cgObGdYatV@WMD0gPCJGm194 zvuJ1`%VsFV?N75Ami)ij{4CfNu&Odqi&&!W$cNP|QFmevM)pZcACR5KY@=QBuz^{F zDm7yT%~JQ-+8^Pk@`Tv{8(|Y{#!}pkd(gahJ`}^xumyg>GTevz@qqTTcVfpL(J?Ke z8^kn75-wKmwVM7m2oK|t0yqlCpcs$hF}5kI zUB7n2=hD{rvfXFl!gCK_giCN4kK+maU27L9(;G#}k!QFjx8VW%J7N3Yfj{9e+=KgU z_fvQpkKh?RyAU3-YI+P$*yzM_tfKzF3v67bVPI)UPa-%27tY$DdReJy$&ux)SI)hX z9(caOm^mZIzu6%^E-@=PpEHu?eY&P6C64waW_cPkZ5Gp@0x@S|$`BL6Ukq|0CzY25 zo6F;5y!^B@IEC4G#e=LnV;vpmCf3SUt^CGU?p7?hFhSc8ltQntF18EnVUuAf>s~V< zoAs{m!uza$Eo91+z!65=an_WcVh!mzIM0yZg9q>ko^X^krd3!|YU5tv26Icfo!o`6 zurPO+C#+Ujv@S`PqD$9}(T&qh)6LX5%TM z?hoAs-6h=>-8J0}eVAU-*VZ@JchM*7Gxb^evHFko6ZMnzpX#UUztqpt=ji9^H|h83 z&*^XJAL<_)hye^?2BRUuU@}+?qCqm$Gqg1HGQ4dVXZX-C-Y~&1)iBqPZ}`!$-LTV8 zYS?SoXEY;Vji>qI*e#_`Ijx|m+<{Ar)tBl_p*BaLwHyAe=&l_(T zAM=#w_^P~)H}LiNCj5(hGyYY+3!lIz@`L%2{8avP{tJEvKa-!$&*A6sxqLo9pI^u? z;y3ff{1$#Izl|^9ck-qD9=?p<&mZIu^GEr|5#|UrA~qC}77>b=9`QrO@rWxz6+sai z2rmn=lj* z=Y?y+4dIsXU*Vzf*hEZV3NzVEZj;wk&(zY?&D7nLVCrQ`G7UFno5q?Zn`W72n{rH{ zxu)+-+f0W{*Ug;SZT6ZY%{9#db1idib8mBsIn_MGoMs+l9&esxo?`yYJk31MTxkBq zTw=axzGc2^p%&iau+*^lEkR3^lo_- z>k{jJ>nZDL>ly1g>ox05>uu|ukjROGXcn!aO_W84=oD*-wZ*z(eKA^$5gUn3#I|Ch zm@d8}=7@8}CE{{%g;*r65!Z?9#SLPacuu?~-V|?(cWja^#@5}IYMWrou@&03*tXiX z*-C6XZKbw7wldp(+g00j+fCbT+a23o+kJ_Xs!BS^AcZ8!E-8{KMM*JItkhD9lUhsh zQZH$slqwC8(xkVgccrmXj#MHYl1@r@rAM+=R%MUulWWLz<=5pm}~9A?d|Oy?VauM_HOp>_AI+*|K5Js z{>TyOh;s~bOmHl86gze}N*#L~WsYNxvyML;7aW%yR~*+IHyn>0PZXkn60TSkui{sN zN|aJxiB@8iMoQ=<8iY`Bq%9Lrt+@xg)&Q7p%g2-mBY$Woe9of&e6^p&b7|H&J)g4&NI$G zoEMyzoKMv1YJ_T1t*T9xRj=w-gKCsoM{OEXW7U>woZ4D#uXa>BtMO_#wU0VP%}}${ zx7ATOu9edfjDo z#k#t<(p_U+b6ksE%Us{MR=A2>t6e|2wz#&sw!3z?cDataZn|!}?zrx{Lib${U60+w z4el^^RkzOVc6;5C?wam^yOz7QyRN&wJK7!NZscy_?&{8Tf9YQ9{>{UAJf1ku0M7@W z0?#tfa?c7+k!QVUi)X86o2SIH(^Kj><~iv(?K$hY=(+5<>bdTD;?;Te-f*w%^?D<{ zHN63EEpJ2b3*N>d?~C4M-v4;Jd53!^c{g}}_U`nSdJlO|cu#syd(V3R@ZR=5@ILZB z@ll`7XYf_`@jk)V)Hl$l`R4fM`Ih=t`d0bA^R4l1^lkPP`?mPD`gZ#c`hNGX@vrl5 z_3!f^@E`IY@gMUa_y6v{;=ks<;lJhoum4Z~J^zD%C(yT5AU!ZEkRMnYC + + + + SchemeUserState + + 06 可选项 (Playground).xcscheme + + isShown + + orderHint + 0 + + + + diff --git a/07 结构体.playground/Contents.swift b/07 结构体.playground/Contents.swift new file mode 100644 index 0000000..6066923 --- /dev/null +++ b/07 结构体.playground/Contents.swift @@ -0,0 +1,58 @@ +import UIKit + +var greeting = "Hello, playground" + +//: ### 结构体 +/** + 在 Swift 标准库中,绝大多数的公开类型都是结构体,而枚举和类只占很小一部分,比如Bool、Int、Double、 String、Array、Dictionary等常见类型都是结构体 + + - 所有的结构体都有一个编译器自动生成的初始化器(initializer,初始化方法、构造器、构造方法) + - 编译器会根据情况,可能会为结构体生成多个初始化器,宗旨是:保证所有成员都有初始值 + */ +struct Date { + // 存储属性 + var year: Int + var month: Int + var day: Int +} + +// 默认的初始化器 +var date = Date(year: 2021, month: 12, day: 14) + +struct Point { + var x: Int = 0 + var y: Int +} + +var p1 = Point(x: 10, y: 10) +// p2使用的初始化方法 Point(y), x会采用默认的值 +var p2 = Point(y: 10) + +//: #### 自定义初始化器 +/*: + 自定义初始化器 + - 一旦在定义结构体时自定义了初始化器,编译器就不会再帮它自动生成其他初始化器 + */ +struct PointA { + var x: Int = 0 + var y: Int = 0 + + init(x: Int, y: Int) { + self.x = x + self.y = y + } +} + +// 结构体 PointA 只有一个自定义的初始化器 +var p3 = PointA(x: 12, y: 12) + +//: #### 结构体内存结构 +struct PointB { + var x: Int = 0 // 8个字节 + var y: Int = 0 + var origin: Bool = false +} + +print(MemoryLayout.alignment) // 8 +print(MemoryLayout.stride) // 24 +print(MemoryLayout.size) // 17 diff --git a/07 结构体.playground/contents.xcplayground b/07 结构体.playground/contents.xcplayground new file mode 100644 index 0000000..cf026f2 --- /dev/null +++ b/07 结构体.playground/contents.xcplayground @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/07 结构体.playground/playground.xcworkspace/contents.xcworkspacedata b/07 结构体.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ca3329e --- /dev/null +++ b/07 结构体.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/07 结构体.playground/playground.xcworkspace/xcuserdata/jiulinxiri.xcuserdatad/UserInterfaceState.xcuserstate b/07 结构体.playground/playground.xcworkspace/xcuserdata/jiulinxiri.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..ce49906980f68bb1f29d64f720b83a4d9342f43d GIT binary patch literal 12083 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 literal 0 HcmV?d00001 diff --git a/07 结构体.playground/xcuserdata/jiulinxiri.xcuserdatad/xcschemes/xcschememanagement.plist b/07 结构体.playground/xcuserdata/jiulinxiri.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..157ef89 --- /dev/null +++ b/07 结构体.playground/xcuserdata/jiulinxiri.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,16 @@ + + + + + SchemeUserState + + 07 结构体 (Playground).xcscheme + + isShown + + orderHint + 0 + + + + diff --git a/08 类.playground/Contents.swift b/08 类.playground/Contents.swift new file mode 100644 index 0000000..89a6622 --- /dev/null +++ b/08 类.playground/Contents.swift @@ -0,0 +1,16 @@ +import UIKit + +//: ### 类 +/*: + 类的定义于结构体类似,编译器并没有为类自动生成可以传入成员值的初始化器 + 初始化器 + - 类必须要有初始化器 + - 如果类的所有成员都在定义的时候指定了初始值,编译器会为类生成无参的初始化器 + - 成员的初始化是在这个初始化器中完成的 + */ +class Point { + var x: Int = 0 + var y: Int = 0 +} +// 无参的初始化器 +let p1 = Point() diff --git a/08 类.playground/Resources/README.md b/08 类.playground/Resources/README.md new file mode 100644 index 0000000..23ce721 --- /dev/null +++ b/08 类.playground/Resources/README.md @@ -0,0 +1,32 @@ +### 结构体与类的本质区别 +* 结构体是值类型(枚举也是值类型),类是引用类型(指针类型) +值类型存储在栈空间,引用类型存储在堆空间 +```swift +// 类 +class Size { + var width = 1 + var height = 2 +} +// 结构体 +struct Point { + var x = 3 + var y = 4 +} +// 方法体 +func test() { + var size = Size() + var point = Point() +} +``` + +test()方法在内存中的存储结构 +![jiulinxiri_20220106223910.png](https://vip1.loli.io/2022/01/06/5nON1A42PkVFijr.png) +* point结构体是值类型,在内存中存储的是值 +* size类是引用类型,在内存中存储的是Size对象的内存地址 + +![jiulinxiri_20220106224431.png](https://vip1.loli.io/2022/01/06/TRshqXCfrilFnQu.png) +* 前边16个字节存储的是指向类型信息以及引用计数 +* 后边的16个字节存储的是成员变量 + + + diff --git a/08 类.playground/contents.xcplayground b/08 类.playground/contents.xcplayground new file mode 100644 index 0000000..cf026f2 --- /dev/null +++ b/08 类.playground/contents.xcplayground @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/08 类.playground/playground.xcworkspace/contents.xcworkspacedata b/08 类.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ca3329e --- /dev/null +++ b/08 类.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/08 类.playground/playground.xcworkspace/xcuserdata/jiulinxiri.xcuserdatad/UserInterfaceState.xcuserstate b/08 类.playground/playground.xcworkspace/xcuserdata/jiulinxiri.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..c1e45bc7bb40ee5366faaa174468fa31a6f574de GIT binary patch literal 14454 zcmeHt33yZ0*7hFSLYt;ZnkH!ygfvZ>Hqa(5l(ry3N2x$tnzobzjcI#Y0&P-~6sQR9 zIH4kXRrIQW(iBla#d+X5BhC{A1O-8yuX3GHQPgjpbCR?LKCl1x+~@zF=X-wokTz%U zv!}K8TJO8oYU%ED`vZ3SUW5@r6vd!e6o*Ejghta+&gXY~J#$SiU+Y3Qe5*4Byxol^ zZ_6UCHQ-N1`0`Coxva`DgX`tmio>0Dqmd}S-VtyGIEJ??@K_{4iAaM|krs_b<4`ur zK{jMZxhM~fN9Cvjor|WUN^~BYfo7svXbx&bb5Rp&M;&M(a-&7ag94}rtw0wdhJxsF zbS1h9{S94*u17bcThIoy3H6~6dKx{0o<+~0=h05|0@{UML@%M2(JSax^cvcY2GD+V z6n%(3LLZ|~(5L7d^ey@heUDC{pU`jUcT8{+mSGjv<5AdvP3T8###z{k$KgCY9v9%r z_-s54m*MGnCZ3NM;AZT^=VKRc!L4{P?!;Z#hcCug;4KIKaQWq&*Po=CHyje9lwEh<9+xYydNLH@8b9IQTzq|7XO5Q#U}|On8cDel0b|k zotTK3WDpCXh zSxT0X3(4hVHMxRZPi`Q$kXy-ZBt#x2kB~>nW8`u21ld9UL3WZC$gAXI@(KBrd`3Pe z|0G|KFUc|TFY*=nntV@wA-|H7G=|2~ku;tr&}6En8fv3(d+3AbRE5s-b6RhE%Z)$ z7rmQqrQ7Hu^ild4-9cZauhG}(8}v>37TrVNq5J7UdX#=bKd(1=dOADzASp^hG9*Vz zq@Gjd$XU$w`kUZ)SVtR7t(`8vKZF!0nGr@qC9e@|4Q5@;P4LVt==*l`HeM_H=QcKxASaG9v4p zNRLLLv(RWX1{qKqi)C?a1RKfXSpt*XiPDh?nNbFG$wX$B$fPWny#!rU@Y~YNkM8!g zd6!lATwR<~e$LS8>Rc_QUQfX1?d;@y&cc$sqQbI@iP^a&CHdJC?4_mICAr1L*%ieV z6AB9R$_k20ik$L{=!o!kiOV;~Kp(&O(2bLaI9c8k6_q#Hj$^z{WWR(YE{{8D^mFIA`(S^H5nszI}v zhNUuXKXRZtRL^uQlV$O1H8i$*+qfKfe}+4d6P+k0dhD=J2iFM;;@YCEV1&>0d3(CW z1~A$F$c*#Q`N+B%%|{DRGjcLL8^z9Iqc?!IeeVRdKRNjq~5fN83vFSb)zN7*CgIh z59ofQ_$TL|U*#xsgSL4+E?;j5difix9Myu?5tV7!dK_Mm8FY-yu@o&w>OQoLrT3v; zX5w!;uYhNKX8>%+O0)`Hx^7os;aso*-16yePau>aX#@XQhzu95mckaBkx#}T_9Kq;HMPEvEv;nmy^{4w+2pDEu#!VM(91MEsII?UDn+Uwv6HuT{}MRx&O+aUCcY2f#uB zmNo}X0jN+5Kw&lFj$2yK{ug0(0%BB^ay$kfWR(v0DT5-{y6#>V;m3eJq_D& z5iY^y;KXO+I&k9ccp*6MCHMky1q6qel^y;a{)I0Rwe@0j30T+i<=vg4eXQ;Ybhf*)Re!kXWYE=89i|6lI!l(#tR0_T=Cz*c@Ze*kz(2e{^>sWRlx{2lR zBc=8DIbV&BYv+7EuB{YqREO8sTfRKN3Cdns<{uDz|E*~KCT0`&wh`Ud9Nk&5&*$px zM;p=Y$Pd^+_!?EWk&&7EL1nD>pv|B?ThN{8E_65AingJ9(7m8d+u3+Ff#tJ_tbi4= zA~uOlW@oc0?3{bh1L#5Y5PBHY?NLy;$I%n;?H}k#HkD0dGubRw&1%?eR?9f}*3KRh zjJxO)X7zLi+}+?`!JGtYeC{qVUNc?2-kt!M+cK`Dr=tVxFyF|lR#W&T!SWg+wtvvO z2pubV<52@<#3{FyaP3|nSL*HRcKO_XuSc-i^>CJ96fkr=S=cHH#-q0rY`e0i)79Gn z-o(=;EJgHs>D}ToBhw0epl!I71idNa+Fh`@8lE`#K~AUGQGfF+*K&84`vR^lY&2Do z0Xdhj58*Lrpb`vrc(5U>NDiOUOs+jp=dE>jER5o?*U_82{=C78`_Nmggg=ezekSMX5KzmIXAQ2-9!`$sh*gO<!Y-JDB1a9E)T)4v)Yi!Kx-;2~I?hfLDqD zCyfOXLK9QNzuo3In zT-L--6mj{H#teR0Y(Bq=s6!Nmc{?5(;;q{roDIv*!8UMlx%1k>9HqW?=G=h03-G+F ztD8C5`3yPb^8mSVlWaB{ZxQ^qMeZK(VaweSiTp47x+A@LwtD{Jw} zCql5G9{CXme%=p%F9MI>11QoBVS(j>_jkk7GJun<@VpE9@!d*>wz$aZL?B*HXSTE_+5C|y4b%! ze8#(!-0@@Q@waV;+tVg6g|mPH^>nuJM5qR+c`di32UHLI5YLzWavIrE8}2~X5aw_@ z>t;(rfWeH+2bvEiJDE2-#s2V=g3Sig67hM^C|oY_C_FeNguS?%`B{)HIDq{)fP3&# zP^4veIqt<5;1xI*uf(h1li?s(mB_sqCV(n|bf@vRf~UGXs><;T7kRh=u_ke!ghqvSV*){BH*v-Wtv1{2HwsyG09>fntd?mYzT@rC&qQsuy9nuc`5Bwy% zlwHoQ7?j*Ig5)k6?tda~;RV5GtUj~Pctv>g%3(5(h+6OxqCXfaAe$fzC$H9AAg2w$ zqoRu|5`J{cJP4gKgPLGyoalhv>;D;2>r)24%84!Lai`TiG_4HkaK4&=t(8 zZcrZL$>xZ$2tfUSPfl+H3qH&30bbG#EbNTUyl6|kkP>ip0B0C;#y*vvrDE6-?$qg{ z0FVH}6E%I%C;jwMgaC@*j&i*1?S2jj(&;0KVHU9$&&U6}Efx0!7J7X!(dj$pV{R4R z&Nk5aGo98lpR0Q&j4TpPk_{G?e!_sKX;gWRe*4 zN`K}X0mTD|7sA%$98!$bAu^RrWB0QALZpP0vhD1CW~gt6)%cqu9zsO+;%w7#$|klz zL9zv_NoJB+PPyt-lLe>Ix;R9tczbr{MxJDZy|+_TipZj7lLm+xl3L;*b)=p>%pPHn zvd1=)IiwLANfUdVJp~HCi&+|Z9>%jCagHe0iZZq)k+1P+VXnZ|_|B1OT%?_!riHYU zHo~zd*bep&_T*;J=|@Nj=yEO`;&xGg^$lQ*_*exHE^ZkQF#NTyWdgN<{pp6chNEnb zR&O_`f?-&r@VeI*DC0nB+}(g{;C=P5F2d+M3W%(83GoB7BtG_Z9|^E${)AbQ<-jaS zFS&p{%XUT)8d*t#r}8~=G0G&DvgcrX&oe{x9Mh-ubPuJ9@}$ zlSfAt)sd&WjsOHZX1V-}fsRDxjPldUGI82-eci%5Jnn2;4sj)MZB;#8Eu4>GMp@j* zct+wO*Av4M6p)jMWhru`z#ZG=DobXTb?mt8ocxJrmz_6bW_5kToTde0(#k163vwQO z%EJKp4nEys;D2%_Ot2dY3-S&1u;59BgPs#`G2HLy^2Alth?gz`dj_*adu;aHyzvvl znXkrW0MEV4D$4-ZbVtK7gA|v=%VXHc27boef`Njgy}ZMD_=p9^T}Du#u2FOM=W@#e|6yD<8E+I>;+#K^DCLvgeC{3^TM2f&q6z*zz&RdcTAIiH<{fMvccnWWWx2Y#`=% zqCm4J<0*J5gu=^k1q8!qKn~jtx$A53EdrK(3BL)s>BIOq20E*}#<2;p2 zhfMPvFxqXToh&4aAk*w8*N}d42f35nP2MJl$WihQpD%{|a3P&U&!*?lxpWC#N-v{V z(6#hdx>0n2(O`SC_&xGT?_n>Cp6zzB2@FLfN)1M;pWIIRkRJ>H&(tFJxu0x<1R>cB zOV|R7xC@rCmA%SdW3RI}*qiJv_BJF4$-U%0vYp&d9v}~b<=h>_2|=6@#Fik=3Suj7 zB~wZu(6+eS3mF){km>}o*9P7t9EKEqq<}K~6<#0E6mT7OJ~_rmT01%DJa|DItqZv> zt^~+Vn=q6+&3TA9YA9UgH^`ghEs*|hGC=l_y<{JGhwWqUu>I@+dzZb(4zfe+eRh}~*+veCuobxg zwq^>z^(gs}eIUTrT*yRj1M%?C^<(xqzvBN*(Dn4aM1kf14O~0=bbRe@19s=jS;l9( zMRfTMk8QtYM2Au6MCc8vWB$~G87peli)e(97q{D%S* zL!y{~jv|6#h8k!ZHL`!Puh`e@8}=>xj(yL5V8_{yTPa`P z!T<0|4P1|V66aVE~l&M6+tWs;=~}926576 zdKFzmucm8*SQf5Us`0Be<7H8`ggRxpWaMwp|=LHGKjT7d{&gO z(v7qa%9QAB^me)_h*N@C6~yX(8lwI5svy<`aVl()-x*(NHhcraW`@+Z*9XwYDIfdi z9ZMis;ou-$Ef!~G{dsS34uSorPYc7w*@lRK?xB#*KYj5J&)7HdZU>-cy{LW zaZCe>oKwt4;~l+_+V85bKOVoX=z9>o0U}?=Kd<0ieA$SD3j`oW=O5Aq2&CAhzOvpA(a31ifI4Z? z*?oMiU2EFFYMH@q4dnXjqy`UaUXBp{-#d^~8dMULcg1HkEL zorx+BCvG#V;FQJ6HF%?DHn6=gp%IHyYHF)Mc*5U+^~H_wXDVz3-l%U7!y9k}g9jU$ zQ+0-?(0guESlFStRq%EG0)a$FPozy$tWYz&4&?gO=cjSXnP@hoPWja6g;2|MHPl+K z7m8`_hKiZTp~`v}R9L?P)zxo6HN_FAss0+BgaUy?EW-+{gj(txsGP2WjAR|22i4Lp zV3{27%*9Z0<%OcF)sR2gg`F%={`^yev%N~i~P-XPy^X(a0Lu`d6Om-ioW6ixKyM7(-VbJhv;D-g#5EU zdL)RU?n~_XA>?#~o=}YiIUf3HxH60X`=5MnP}4gV zbgco+N6k=?{xo?FSma@-MgIaS(7%Fc!g2BwIROB?04mEJ0Kw)!Oko~fK%LY@yQz-` zAil61>dG&qt0;rY^0(=U7*k9|OiRqln44qnhT@$-D z_WsxxV&94VDE3(FSFzv3ei!>g>~FDu#Njv^7aKPsZggB;+>E&PIDcFqt|x9;9E)2M zw=S+PZcE(uxL4!$$GsPKDDFty(YTM|ejhPnglR;^h|G9%d`|qF_~!W4@yFtiCrA>K z6Y>*E63P?KO*k)MWf%;ktx%2{$F&obY7Au7np8UQXDZ@Ik_73127t zoNz)CCmAD2lcY<`5{o2DGFFl;u}N|z<0bi$0!fXeR#GQvkTgn~B=aTBlJg}kk~T@Z zWT9k{WUZu6a*yOK$;rf|L{s8xpkA?oQmB_)g-1#AAua6MsoO znfSXDNu|;hsal#U)k)K&=~A=QBF&N(NXw*iq%P?q=`!gmDU)6-y;QnJx>kCv^g8Jc z(mSO0N$;0FCEYFkSo*2-bLkh-@1=hv#U#m-^hudXSxMHUaY^M#jY%Cz7bRVvbYIf_ zNe?DHob+hY<4HS`jwKyWI+^sl3>k;Dvd3i4%67>HWQS#+%f65ulYJ$hDX*6=mUqi9mtQNtRlY%fn?kBk zD~t+@V!YyPMTeqO@pr{$#T|+*in|mKC>~Zks(4(nOEI9>t9VCoK=Gd9km9i7OU1tw zUn{;r(J zQ$9@jGUW%AL zH>hq@g;bkWTU2+c9#lP}dQP=dwM+Gu>X7QN>I2n>sxMVPtA0_PRQ;}&sHJL|TA{Y7 zooct*r(U66rDp1j)oavS)OV@3s$WyTp?*ufTfIlUPrYCLuKJ+*2lbEYpVhypPpW^{ zAWghRu1VIUXdnfkF>5TEEX`O=zNSP|rm4_O*VJm98keS3!)ZL46`GZri!?#aHJX0S z9hy5ecWbt3?$vD9JfL|<^N8j#&Fh*sHE(MMG{Z=d2W@{&Ei?oxqQ?wP@YVB;TLtC$%qn)drr(LLZYZqxdwLRL4wX3yP zYS(E0roCRfPJ5GfgLa$tVeKQ@$Fw`NJGBS3A83EpCFnFdgU+Zk=`wVgx?J6OUB0eB zSEQS)E7Q%_b?BDpR_RvjuGFp3t<_ztyIFUuZiDVN-6mZ~_pI)HJ<@CS8Tu^!SbdJ( zuFum~=&SX0`UZWYzDeJq_vpLzK7ByHLcdafkv^!uM1QsZMtw+sw|<-cUj26cqx#47 zJM>TLpVq&u-={yIe^39u{)qml{m(D1(D zh~cQ=Bg1!w9}GVlP8d!a{zxNfv1udHMyE|q^Q5t~jcMD{UQOGdb|~#|+6QT$qtTEeYH|7~97>kXK#wO!@W3%ymV~erP*lt{CTx9GtdW@GDR~xT1t}(7P zUTeJ0c!Tjqoql=x*7R4>KR3mjl1(a;#-ueFO=C^j zCYveOG~SeNDliq9Dois>vrN^dI#YwG(bQyen|vm}smHX;#7t{V*PGUvZZfSmZ8Y6( z>NDMEy5IDm>0z_ftTWrpx#scad~<=h$UNCR#XQwqY%Vo7nw!k?&CTZX%`N6ObGvz= zd6Bu(>@lw~Z#BPZ{w5$Kh8Bb(9pRp_BrHofH1~Lw2yq|F-<7mc58J}c) zm+@1^iHu(@$U-bJmN<*bVzd-kiY${YQ!G<0C6;o_bju7&m1VZ2-Qu<^wscv%mL(Ry zrN^?&a)ISS%PPxy%MQ!oOq6NLJTKFexi<5j%vUl8GWTU3$b2vJqs(KOUuAxi`CaA@ znLlRHtdUs>S<rGx30qsWr|TZ