From 746e452c2bfbb623df0285a53793cf791f3539f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 12 Aug 2017 18:20:45 +0300 Subject: [PATCH] #590 Add new presentation for Singleton --- singleton/README.md | 29 ++++++++- singleton/etc/singleton.png | Bin 22292 -> 0 bytes singleton/etc/singleton.ucls | 104 ------------------------------- singleton/etc/singleton.urm.puml | 43 ------------- singleton/etc/singleton_1.png | Bin 16417 -> 0 bytes 5 files changed, 27 insertions(+), 149 deletions(-) delete mode 100644 singleton/etc/singleton.png delete mode 100644 singleton/etc/singleton.ucls delete mode 100644 singleton/etc/singleton.urm.puml delete mode 100644 singleton/etc/singleton_1.png diff --git a/singleton/README.md b/singleton/README.md index 4032ffaed..0a81ba0fc 100644 --- a/singleton/README.md +++ b/singleton/README.md @@ -15,7 +15,32 @@ tags: Ensure a class only has one instance, and provide a global point of access to it. -![alt text](./etc/singleton_1.png "Singleton") + +## Explanation +Real world example +> There can only be one ivory tower where the wizards study their magic. The same enchanted ivory tower is always used by the wizards. Ivory tower here is singleton. + +In plain words +> Ensures that only one object of a particular class is ever created. + +Wikipedia says +> In software engineering, the singleton pattern is a software design pattern that restricts the instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system. + +**Programmatic Example** + +Joshua Bloch, Effective Java 2nd Edition p.18 +> A single-element enum type is the best way to implement a singleton +``` +public enum EnumIvoryTower { + INSTANCE; +} +``` +Then in order to use +``` +EnumIvoryTower enumIvoryTower1 = EnumIvoryTower.INSTANCE; +EnumIvoryTower enumIvoryTower2 = EnumIvoryTower.INSTANCE; +assertEquals(enumIvoryTower1, enumIvoryTower2); // true +``` ## Applicability Use the Singleton pattern when @@ -40,7 +65,7 @@ Use the Singleton pattern when * Violates Single Responsibility Principle (SRP) by controlling their own creation and lifecycle. * Encourages using a global shared instance which prevents an object and resources used by this object from being deallocated. -* Creates tightly coupled code that is difficult to test. +* Creates tightly coupled code. The clients of the Singleton become difficult to test. * Makes it almost impossible to subclass a Singleton. ## Credits diff --git a/singleton/etc/singleton.png b/singleton/etc/singleton.png deleted file mode 100644 index 0bf0c9b283b751a3b32179e3e7bd3e2927ff49db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22292 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

WR8<5D*{^GczS48yE-=>C)RQClp=7 zov}X|P|9jI6}phh2Re|g=evBWTF@Euv~$EX&J?BFe(?q3$U=p~ALVSi?b@>bDH8EA z4r|y@{YFwbsQTq~HwJF@UE3wo!!ItRPS5b$ng&?KlIKLvvTJ#T$tE{IGbq#hOOb{C zc4X)>YsevJ$kYB(t>?N8_I8(-)XD=VK3$s#9erCH+VGYfg)gYSdNYJSCJsZJkhC~X zw>X?8nqZTTOK%uxaxsdIyNEBQZ$s3|i8a99qh~vWLa@Fb)%INA)fu3^{O@%Jj;5fo z&*@5KQ6};o-MIF9S|@2C#vvP=$35Psm}lJ55^IQKq5~QV^2&6^U!kS9wHj6 zA_DsYzrSGNcTe3VN{+`$|C3ryFQpq}FqbyL$rZ@B?DKxgHr!8GZ-hRZm@Ny=^R1Me z8N;4|R(N(DrAC-vR|agMuWB%?mDk>y?VRbV+_L^>qcVYu9a|XK5z_d*s@^If!Lr7iLl&NFc0n+DUcLE}c9v8;gH9yqyIJQ__ zKW};zu~^pAEqx6kHhxLv%qhe@;V(&JTpL{oUkSVMO{NLY)kee1MxN)%b6tYva7Yc3 zLj`%t7}i=LWUk+lXb9dyo$t*W;852Sq(Z-R3|}>JI~V4678$0y&ib8zQY8OMS*KoZ(ZC&OUh7U_U>uI ztf#5;(H(_dj){b*kDHpuJjXEF7(qYj2?U;eS*NoZj<)jnnAkjCU1z9{z_?yF;btKP!#o!n%OvR6rEud_>1CWuBM#G8y;=0+ zW4gR^sEy)?`n^+lhD+KGJnTV5AOX<|U7dGR^RyemHh7*zi5Pn9WQ5t$!`*L`#;*o+ z-B@_+*0?p#)vlHNTK+a$9q!Bq>g@K4iG?_cb}&leqLZOD9-En}y2V!hl1BV;m7;o- zNKmRO>ds}GWY<}mk^o6Tf0BB2khZHa%G4}7w3)Y!#}}3iwRDUib+0Z&;zR(9aBiT~ zhU7nLjn({k7Us^=g8vMle~)soZcLv2M%bqhaGNCqM;IT%z8S!MMYCT;ffZtvE8v%F z?u8(jef|oo9i#I>117xh|5@;8C`!U}F1>5zyrAvNU8oz)nD6Rt@o;-;@r4ajndDOo z^}4b|{Kp!_aEU^a6bqIw*Xotr7=nmL-K{Puuq0PQ(@Jyg#&M(a;)7y-*2N{|q~9+V zypx&%70=FSF#%VK6xW(;DuUlQEd)hdDIS4t<>)PAdL~ZD;Y~*HFw`QTxX;{7u$W0s zG0%=#+4cxJ`h;&kB7)oDHM|5NgP}eWVN;;!RMHHS@aDM0n(% z(+SxwO4-{-$&$}KK_%zoC4SJ{=W~Op#@iAD`|*(U+6bxcp)8Q6Ca=Fb} zj3K3pm=K^8k4_jnFl${qL7(J7uhcEm=BiGUS? zhH#kIj=a`Amt`!ou$q(d4*Um#o2w&g?XLTN(~^CMjC!x(Yr=0k7(0xw-CB=%=3t^0 zy^~Ts9<@(ura34RmQ}~9BfW|C4w*_tbosK`v7K{7IURlue=bq&C_ze;gx1QpylCLu zh|zTJtM2z>&^1pP(^At4B*E6pDryexhP;6z$OZV=&`lXiH*fnA7O<5OqAtx)L2n_$1WC)P2igZTeO-r;JL4qErWf5AP&NO#tl$@>Y z;05h0NO|Fn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/singleton/etc/singleton.urm.puml b/singleton/etc/singleton.urm.puml deleted file mode 100644 index f61377e17..000000000 --- a/singleton/etc/singleton.urm.puml +++ /dev/null @@ -1,43 +0,0 @@ -@startuml -package com.iluwatar.singleton { - class App { - - LOGGER : Logger {static} - + App() - + main(args : String[]) {static} - } - enum EnumIvoryTower { - + INSTANCE {static} - + toString() : String - + valueOf(name : String) : EnumIvoryTower {static} - + values() : EnumIvoryTower[] {static} - } - class InitializingOnDemandHolderIdiom { - - InitializingOnDemandHolderIdiom() - + getInstance() : InitializingOnDemandHolderIdiom {static} - } - -class HelperHolder { - - INSTANCE : InitializingOnDemandHolderIdiom {static} - - HelperHolder() - } - class IvoryTower { - - INSTANCE : IvoryTower {static} - - IvoryTower() - + getInstance() : IvoryTower {static} - } - class ThreadSafeDoubleCheckLocking { - - instance : ThreadSafeDoubleCheckLocking {static} - - ThreadSafeDoubleCheckLocking() - + getInstance() : ThreadSafeDoubleCheckLocking {static} - } - class ThreadSafeLazyLoadedIvoryTower { - - instance : ThreadSafeLazyLoadedIvoryTower {static} - - ThreadSafeLazyLoadedIvoryTower() - + getInstance() : ThreadSafeLazyLoadedIvoryTower {static} - } -} -IvoryTower --> "-INSTANCE" IvoryTower -ThreadSafeDoubleCheckLocking --> "-instance" ThreadSafeDoubleCheckLocking -ThreadSafeLazyLoadedIvoryTower --> "-instance" ThreadSafeLazyLoadedIvoryTower -HelperHolder ..+ InitializingOnDemandHolderIdiom -HelperHolder --> "-INSTANCE" InitializingOnDemandHolderIdiom -@enduml \ No newline at end of file diff --git a/singleton/etc/singleton_1.png b/singleton/etc/singleton_1.png deleted file mode 100644 index 58dc440a9ca9167260bc6b81f7b710213d046e1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16417 zcmeIZWmJ`2+b#^!-M#2WIu|01fD($*-5m>%?iQp|T2d5{lI}&fA|fT-(k;0s_kBOl zyZ0W?*!vyd_{R6^a}53ATI-tEob#OLc^v0)%*Yq23OJaQmZSb@ezaV- z@msDbe5xtMviGQJglgDq>1&J8bgBir)1nOcr;89In(sS&=5r?TV+CAQ?I3!J|AQ!BsG;p7{1U-fkOKt z!%9sdHYo{py6ExSRIbd7Oc6wdxV`hEHR)9=t3F*l5wdIF$QGt0x?4#sEIg;#y2Ys~ z=#O+}ZisAzyQ|0k!NHPaVXpYl_T-4k@Vnc@MEuy5zMpxA&@c~6LLp`hv_osd`T5Pw zDlT2Y!$aprZ=okoidWm=1hkUB;P67rk!^?B3;|~h+_UKxFWiUe8BKI-{cr2v?c|lJ zf4pAoA;|ZvO0Yz03<2qOyoiY;9U{8a!5zK&>cb=>PEg>_z*cAHS3W13{m;&JXDv>* z*;{&`d$aZMiHUdh4q31R-Kj4&bxBDMs-t^YWQ2A<#v6UT-kRdpglsd)d#=2Oy@U#p zq|2Q?g{$Q?S`0l_zEDbw4Y;|C-&T&zf*ChS1o#)oUA`cy5usXbY^3n^e)K$NrzgL_ z-NArU%JZ#rw{?9L---hjE2M=qF=<2Ad3>C-&C?lSb!6!cQRmiTVPfL?r%|R)PYGkA zMo&(9Vq@z@GAMZT&fNU{Q=^pSRiRN)vC6p;!*eZ9Lr}xn=00f%Xm$(@vGegg=xWdt zL5n<@W_9B0UGTqBQ&6C?Xn+*nU6>`w$wNK4h)HR1v8Zg#)v4@~zJ6_cf!PBgmR)hi zgc7KCKdq8I09(cYwhRZ4CVFe;w5G}J6pvbWB$I+l%;M&fqQAxMVY%%O4zLM_hu^ul zRQQgV$NMNWHH*tg)eDRye+D7_60v{Bo*GR+IfI7V4HJELMcgRs*W2djCpPOd zwI(2Vq;C_M&Ad-t5*5WC(9)8nV&p3q$jg&oYgd-A^*Z-NVX&~^jAlKJS5&AC3meD~ zT2M593`PT6ZD25K(io(S7x$c=C`!~?n3Bf>IS=mL``@(OmLka`3{^qoOhX-^yjE@s-uo>^N}w;ko%;_GGdM8?x$Tn)8LEH zrUZi%Mp7pI>u540l<+-;zLCrC{r3kE?Kz_SOpf~JMTog0$9rexlH>gZEv0X|k7NmP zz2xnUFk8`YO@>#K*`pN$2)_~isqQgsmpIwhsAHI({myAHlO18U#OBh@=5@H-ad%s< zbE=hD9U7*TmPou%j*sTWlOV4#`2L~Bg3?+N6XcG5qLX{hZ1QYtcGO-J#(aG6Bjh4l zvYN%$r(v4ON@sU-`g?-N<#CSq(3C~Fo>u!8F{gz#66lL||IhZvgDJWC`ZJp4x?#12 zDw(8ccx@}?+rOIIzkmBCZ({I^l0#mr#*ISN=yiZAC$EBp4NpqNQ zYc*g9g%J~*i#X`E%j4|!yjA#6%>7O>zn-Vibi9t!T~?^ zcWz9(%o}z0_NZZBcW2243^dXEQn`*fIhCWMZR4mmB7(RQ+PrKWem!O?^mq|ZcC@lw ze0y^qJKrisMLuEsEq|cJi&1p{q&w16QnLQ?6em;gy6PdPTEKs@kgfqw>veH zL#civzn1T=Ybstcm&Zwbin_{4QGRX|janJiGTG9ao!)HXIB!0hMbNJ{Nlt>4`SWNn zg~&OhT256;%7ZBuqBF$7txp~`(%p^z;m&2o?Agv>|+{@JGFR8sKmmuvBn!_ z21m6HS(ujCQeh1WS681;;>22L+&|CV3DE5+^?r>pQ?N%zMC(S)kIsOr6+K(?KE?jp zyy;|rdm!5&cR4ROet`8(EIy&?i-Vr)>K7*`3=ir^aJrbs-D-=9KGwMlf#bDlw(8?O zBQVquR5@K~VxVqvC(#pwIl2<|@o5rjuGl%!kd~#2Dio%5C@kO8p=n7Wn=g$dYqs*p zn$?cbCBLAL;qde)lFl#9@{GJ25y!$$q_H1gAx(V^LuL#LBY%rXFZ`+XEgH9V+* z&ct*aVN3FMD%6*iRqsbk^6$M&kyj}Oh!*FGm@D>A!zdoa$aTf{TF7~H3CK|9Bvc=# z*rmunk9`Wg5RZ*LZe{r}9Fa}cSZ|Q;o4w%^LglYA?c&|MF!LhLTJlsJ_k{UMP1EJb z*S>l)vutcJq|y{7UG-<{LwRo;ErPJ4edvf@{W#Njr4|N;02=P=zLuC_`IzYVKPz!H z@!0{QewaI66{KjRX}utYKk=a8MS&8DCgZ=-1j3x-4S5CUH2Lu4YNL zCydNrsB=Ns*%SJ$5QCUrvg#{cLed)NG7K3kSWEJw<^*s-$q=Rujlfed-JRjRpRgl| zmeh1>Asp(gLHJ^H6LF~-}VrxZAMT@WoeNn)^WBDA+syud^t2EGnJ81wleaRwO6$7 zp_V`V@pq61INcvVmI%Y_$m`)ZWWccrIl8?y&~f98Yt(}%EvOZES7`GE*&(en>`;r< zwe#D#!1K!ZI8f^_ho+~i$ej*K1q8HUYgJj6xB|U+>xO$vx%^i!ws=X;O4ix#6Z8;T zKXsC%RUiGoC!GZ=EN`YvRe zmo?p$0+t4mY{T^*-2UOjB7Vk$h)3J@5iZ{ogv6)lY9baA;@7ZEo~!utQ&EU)Wh)YD zgU!>QO@n0v7!lRICFE0soMyUqUpw$Kt7TXcP;q`tezvr*h|1es9!~{l{%%Y%skZPf zy0Gfh$!xI-)_(=D3q0s44KDEvqHJ#dGo-Mq^{b+19i`4?)g-i zPEAvNy?`T@dta_-();0zEEt;|wn(Me>q?i`U)Ip;b8>42GnK8*r17Kg=)i5KAyR{c`Jrm+p8)R^?>;{Uiu& z=wzbNO7c=qmKHu~Bx$FdH_HvGzR)3gvJ{BV*f-S>yCd+#B4(93zeP)`r?qexYIb#& z+HbY6WjauNde%%rvY`a;%v%j89cN`Je3fjJ7KU^v>gn+DP7}p1@=BJQ2us)Ea36-o zhE;NU{l~w|jKqju%S0u+x8(h0Dzj6o-DsLx5u=Ua#PT&tg4#8N9EJK-4wEyst3Xv+`xYwNbR<)!Pagki~|IAI$Enf{wM z{ReQS?XLVRL(F;keQ0Ru;?OlTxhcf)n6G37=yx-m_)?|ZL{_nnCtI@&2K!=XG5tfW4Q}#32jfk z_6@xOBop^}RA=)&xK%JxSkTe_i~mjZ+#GhJ!E7Cul-ck|rnxyMSHde64#xXe>g`dX z7A`|0B;#S}=~g!U!uEQiWPYk8AmBr`fl}m&l{)98tf^^eO3FvM%kRw{9W+@e(?ysY z9#YV$-(w~wvTBDNLFDLY(JO2c65On+-A>c|&lzG$Y;FGZvTQiB?aegsEgz4~V)^HB zJOCJX+XWsPL?t}DDjb2gU+ZQ^tW@vhtpD5AQ(4(a_||%ZE#$@6D^6pYP8UDD+8(Jk~~ss6vT7@*b1rz19A7 z5ABBlX`CLLsxX+n1mJ+Lg;j-;Ga+0|h_^)JMLf=uu_!+7x^)RYE);7=B%Aelud8H3 zFoLL9eWz^?DE=3#1BPq_Z{3k}Oz4>^qfFXYUe2K`1@58$YZip#_{6Jgzh^P_IuaP| zs=7M{QJReH?0RJ`*ok7>@8&xh_69H&0RE?<61c!UpqzT9z~E-%m9Cil#5{(UMe}+Zzmu?4;_Dinh}W9 zRwzY-mY`icL73hr4Sto1_&;-vSN3peJOzwUegts{Gax0el+0<+z*DtR|K=h!3|JA} z?soN-Cc6?j-y~L+^3L0W7o` z|H6a3v6-FBDmvfMv9z3=nrcwZe&n6&YwEnN92^y8WuE6wEo#)Gq+n=3J;7Cq+iz;Lj$k^yb)3URR@F%&t!IqHbwhO{W9 z^v1+!w*(waRW-aMiB03dqa>f0Y4&K8qa53wb?U1=NFUU0uG{N*`?RH55jy{LI)@7< z2Oy2N+ilKfa<5OO#>G-A%e3Kq&KvbVEZu5#2m(Xp{&cB{E?r!#gd6$&Ks+>@gwd}aAf1Ery%s>gn@-RtVIrsdjYu7OZS=#MS#xNa%l=xP*)^K|Z5T?L zgF`i`!798Q(T~Xl5hrS+$q-!Ha9!ww+>&D04{BdLe=52ZI3nsQzt{`s>Nj<#6|Js& zmNF<{hO9Ycq6ZY%&ve6ilV-)qoZmtt|G+dnjm^_+^PZ+CW<1aDAmB4s)V z8Ak8?y?B~hY^IWf4Ye=g=gf~%cF={B``8J7Nhg(&fKdarFsY+io}@OBZzi& zwp;CeN<1&zfA(e>#13Z#_2xt{iV;1Z*AYIsIl}`KQ9o}arxlC1w<^RP${p070i3>g z5sY^(}7TnW;=_IgLJ*O(~1C2TEJR;wOWX+@&9yWf!v8=!O|foYIY!WlgO z9FdZ4(b}9DnZJWAR)FT36*Hh{mAd`Or}F_fr&r$!uF^9owLa_H3?%Xmat1>8T79-! z(AKE82X_L=H(zsECaZEW<94@ zEUo%n0`R-guRx_jpL{(vS|z}2ooteO}wcSt?Kl^p+OI z+4f&(Sz7f*o8Y_AQ4=npu|l6Dx-3Vk|{A|YaW7K&8L@%*_@YHzaP$3)T=?0-)P z9+Wp*k^8$NXm2NA)pM3^mN9ArK3mh`9v?m_Cm-IS<9T3AHi$-c&Dnb`!y3#D) zns5d#m6%m_;#dZ}dgC+H*H`r9t%$_XbPYyB)uM_qMYK+G4E|hM2@L^3C^Cm>YS$ne ztCh&VW=FLRD_VO7oI6%qMaG8j!EVA$sShov`Sd(-;o z=W;A8I=u&h2Lp|g4(qky*PzK#GF$jmJX($MWGr_A58eRGPN7>;|mQQ>cwJ z31WX8H^zk9G$GY9c$i$|i4OaDR?7Vx-JETPrXxm|F=bDY@5Az(2v@NqTg+pE=kD^< z4zl^@cw^t0)9wA<&nmN*WR(?W32f89-wdER2J5r9@MaEJw0WnDT+Oqx2=4uU`h!%R zHaYFnE)2roP2{>I_SQs^c;oL(U_B9@_=t=|-EX970!|rGB;pvoIKI4ch0zB_5P$qQ z9_q1|)!u%$`K-u7;Us)ngwFk6^goIR89rhz8PhPOc55xw^VKzi;-~H*E1FNOazw_^1#^gMxz6*xdY3AQ}o*~_@Q zb7u7wGTpLTFB>0*6}a!ta1!lFm1>s9E2^pr3kj(xDf!Tc$yt6(OiM#^LJ^Ill?*4< z*3)|^Q0;ZRK3T3;Gn^^nlmh@f3rp|(yu@?NHw1H}gt!c9Y<$jQlJQwb~A zA%ZmssUMd@t#|yz0J_E~?=RubHdF;<8GAntXZilJt9339oe9I5xXKcT_^@*Vr z;?{2n6r4*<7qF6vJ2^Q4fGsR5G!&WB74~KsJz{mlM>eHgnyIihY#)!|FvQpf9nBY~ zBqTEO=}K=*v-|Gl>Hv|sx3@QF9}7KvI5avs+S`lj-#6Fj>gMKle0=N`gYfO!H|@-K z>FIfns;aSa+u?L*5p}h-;;%Qqw!0kq!x0CJYv)-)|9<>dtLPw2*x>qOzsqFi_YcCt z!nVnSP{Gn`3!@pL5)tSSYeDB_E^gUah8!-~qnudyHIubQ|7e#Lfz;A9g(of;Bhsb8 ziSr3v^2y=Ivw@67lc+)dHVTE)FviD^^#^hvVW0|r)P{FTe=ovxgqDlo`JCH%qxEZY zI)9?@k6O-5DHG}p3o*0l6Gg{e|Zkx^dLlJ)4`I z$q=$NCngaZ1e~z6i2VHH^W0Hgr}o5kA$mEp)yP*sbg994 zrMEK#jf_)!ab=}zK2GXEWqDD6c^JCrRQ-T1yUj-r2Yd-YKn>bWAp&aJ`wV9C<;*;w$j z@u#2!K$iixFmBIW|*WyGZrBMfuOxM-n9FX@Y9=vSHug->DX$%0wjkc#9^`wenK@M8PU_z z|Ew^Id;1mya_OrNv0-67Akzli{@Ku~FvMU&-_AE@2wY-t$tzi`;aggax$1rhnPXn> zeOydHddDK}$5$pj(HPZozmA+n5<#vipz1yeIR5v5uou1pjlB=$MH7f{7YCA9_xAR3 za&mV3%JcK{lUSdR=1R7^Zj93Uog~n?yq9>!@_-yw^t!jzC(R7secQY*G(=>NX#Ab1 zjubTsJcy*M)J`l}fp&2(2nHkZx{s|tH|O1yLSJ^hlDJ7cOd>5tK>Z2_fFPE=EZg+NK*e%|N4GumGjwKmZOL*?^wiw>&!x`mN zykp)&4Hg*2%c)b{JvF5*+>xdjDtq)9-B_!lcxSpMx@f801me;RV&o$QNvt^LT6u}3 zF*ggcOTccyRN*+*-?5Mm@p?ipBqYSavE3e0rC(s~PyIF>IfI%;0`l@#S$fs7){C_) z64vYFVi1|ks%~<5`RHg&vRztQ7@?Sm*fIP>vHAH7dsh2JI8l9oNwW(P#tsh;$5M-B zWMp{z_(*!6C_YJn!{HKsm&0K3-$lJ=QG~wf<}bR0A1-zxnVGHBSdF!LpW4nfI0pp< z4G!i)o#7zAb#w#*F_4(`2U#pY0q$GlVQc!W-Wo@WRzTCL+YeqK8JIVt?_#Q~C%4MQMMCr`=ri$&)Aj>NoFX z$(QKxIrteE86)s$M{k4WV7yD(t=_e{xwJzALqny8txemyOb}!l9VEM;=^864Dyrtj z#@(r^kSkgQ>5fpOk;?jdD^aVl91Fxj4e+v3_^3QaZF7|-va@v#dUf`VKpHNIq#H4Y zA1?R21*Kwlx&{p+AmEPuRdHo&dV2bflYS#I5(Zij9q-xx!v5~A!3R}pY^}Zhp+Rh2 zC))Qc%*2)H0i7czbkibZS7x8Za$~m zDe37t)xA%__xV=93RP8Ak&=?u)zuvy9)gwNB&fMxzOatZ2F;HjKi>XPDq=TTw%mRL zS}t_zbk~P{v_}4aEI`4Gy75VUCX+iTCIvph7eob1BK4IV{P=;iSv(9lJ!0;E^8bJE z|KXCn(S&knj5E9;+0@V5uZY6^=8oXV6S>N!mYnR)Ev@*b4oMLz2Rt;L^fS10OZY&n zM~<)-dvA)__m`zcmLfh>76!gGSOa_PeS(z{F_y@$t^V44eV9kL&feB>9vLXH3qxsW z3Ax$Sb`HPv501H<6Jh9Jpg=mfnzpCsY#mBpY|qD0PUj`^M_)3VeIg?8JQ#0454qkE z7ZBmJHQS4URuQI>X(=W;y}r8B2BWXioc>%~Aw}|1@|3i~a8E_A=aXyBS3QzQx2v4%)<@x0iM~Sk9_pT7b7)stGnMN#*FfElp z?+3o=`WAv_*5rOu=4fyu8=-k@+1snC1I!BiPQRX&>efD!mUaibsHF5N+BfpVIUJZD zN>P4n{v2~#lsdTB$5%z)BnyfLjj%RR5gVIZU*w3#KJ}Nd7JYAud7E-^cbp9qzzT+3vr;7+6gfYcvL- zAQbt0H6A#&?&WbcNo%u;F3~IZ^zW3wX14TZs*Tv2;JWMG0Q)QQgj=S3)}ys&U~_O% zZOwqx-yO@KF#U5}()#a1FQtQt_J48Q^pB0nbbZn&efep3>)w0=y#VGLWZGk9nSaI< zSnBXbZtE3cPdYakjJNB`dE5MnIOAf z)ZRF44|5?g$KE@4|9YoyXRfpHZ8<&;x1SrQu6n`;$}0czi~xg6*44K@U^=OyAQMS( zkbe@h{k8KM=wsKoW`ZtF^)S$vk})v0sEJoC%+;IC6sYWJM33%#$hfh4EKN<3e+qk? z<3i`ocHgef4BNE;j^i-%#h9mtNBe+8xu;iE`f@ZoHvt!YGxh|uF*koT*91wIlX7JM z6q8u)x2oHd{Qx844M@HqA;99!&JDI`Jv_y6z1MDY5uJ_r!yO@Frn2ZzI$?YZ;;5GQ;8n^P&v zJdIMzO4y40C)=eLmJs(!3?~#DpDRtp8c!LZS;;+OU_j^pR#z@MzB{WYY-btWJ=fS7 zRn8FttRWGL_oq4?X3RWp8SZn^CPLHKDH%|kzGo@E>xv%Z9L_-w%#Vd+#FaFZgZY! z)yw~Cx~wpwO|&C%+F>BXO}NkDsWb|Ge+-jet*^WnadB#v`}1h*9985xqk8Scy}dS% z=9_;D4cg|)O0Y_q5WFjbvC7?nod4BJh6GD`U#9Vt2f}>M_`;|0dk90s9)YPJcNYEdk+Y) z-V->z_kG<|hPF-dPK%Du1~@3rAG1RDa_*?fQ^@Pg_o>iU506{u?PPtmPasjazWfD7gw=VjJa>Xi&f2xM2tKiF}L#k z$WRL+Agp>#cyqF^zz?b3s7YC zn}?+TK?l(t-(v9TUFIEC|Hk2p_{_|YvNC0p?>$B3`m=x@hB?E2HQ7v+8Qw601b;zi zO*NhsX4bbHzxQ)2<@7KTym4H|5PI)cW+atS;>uYuEQ7!Ho` z0y~5Qm_AbP{3WQEHyY+Syg^MN~<;duhV#PJN)Y57r!eO%svJympL}Q{u5dr ztqA3y`y1O3Ze zi=)BBe?XWabTG%~oI7H_gGP2|s!HzQESch;{Lg@{Am2L%5%AI;Xw49tjJ9O-qdf#M@A1v*1|03Pj*yx`JXH`xbGB^}+issS%Z zRI{*S^u_h@S+EfsVXO-Pz*1m2fKAD9iZ^K%BGK}5vRsYxS6l1a>F-%O2*?%jiVK() z-!4^i=NET(%XFbf$2IR@9d9WfPq_{f-{tyeY%Cqxn46=Af}Zi~fV;}S)#TgxU>DU)2l-0f z$wQ2xAbL*Dl^+0F;>vVpNzkjSNb`dfhoWiJeHFzzsYNEBoypm2@H1@PwqA z+1_64Hl!BRy72_X>1qXNKZ%XkZ8`9upLY1TaGP|WA-^;X?v1?j?l-wGGgm7Sj+uqPjkXTw3YvkJOofg z|6vYH5C)dNYgRn$4e$@#Z+}Pd9-$n@>(5`$wVr^PNWFcGd-xLkllQ-{p8oF(t)Hoc%9=LU>eW=b(~eo^9v*!4Ss3Z&XZ-thN_ZgI?%2kO1b*T)7@Z0z zhuQzYHI*>g;!g)iE3JQ)dx8|={7rI$MT$=p|0Y5`#IeOHzxQYB^X2wjK&Gp;-3m>n^>%B}J21r!RbiQTtIdC8u) z*Yeynm%T9r-@cil&@L6p{R6qyyVO`9ot+YyB4Z|^A3tIR2e-s`ES?`a^YNCf0bB36 z<0BW~LI(s+@8{>-TKnmf(u&J6onxHR#Pmkfe*EVa@I32(>+BtBdU`cKD;5MT_vRKG z8a|e_#Kfex`KwHL9~h_2Ip<1@?0{<(8>7~i*V8p+0NQ^d(m0T1`e&K&V~xbK*4SR{ z1Le}VyV`ou_;0r5a%vlulQY`n_T6z_`S{os+|md%P>3xn2ZV1p-N+tTiT)*#<7YUv z-+0WVk>DDNef@}n)h1&Ka5rzi95SZM4fH&1TA*hD*pc1;Iq zLE}3fG4Sy*h>ENBidNc zx2QdPW`1{@yYh9%DIItZL*)gnjr$KL%LV_@l*{4&(v+DX`Jv#jgux&V-?;-`dK!*( zKKI7$WgYJa!9w12bJ>Us*&MwMayZ-J5f|Upp=clhkty!qf`;_&#(;69&H=0Pg#2%v zI2q7m>cTuB(A|fT(mb9DJL(EQHOA8cmqeNx-4>NQ+XJZ>eDpcJz#W)D8pjTV`l%`Q zU_2K>Ts4_5)bF1`IcFuZ#IGEsI(`L8;cpeBI;;-D;D;wRmf*I8HczD_t*AREuD~5A z5#T=0SO&>N(`g^!R-&{f)UXA(`P=AQP|GC#dW*;tHMZ?)M7+%KaPOTM?6Q;x=p%NZA zo^zjpe){Oqj7r8tmvuY1V3Q9E)HY(fb*q`H=ZJD=8V?APAL7whOjgWIaT(L;TpMDQ zvIEYwshJGwM_+Ug8-Ni;^a@ydYVCf@+$*SS3Q#&kkG(my_Uqq2E1chNjODiXRmsI+ zvO{_`qb4?cdn$(qrpxm?;^}h^u%et4Vh{M$lkb3-uf0-v0#3TVuCK4;5;WkpB?4Tq z+8E6~K0l`w_x_TXmseg6TA5Y}Ixk+}larTJR4jb4`QG2JxC#_IG_>HPqs7jUiwjRI zthX6Lc6AQ3XH!*XgV6|A=ldQo7_YD}ji?I~QFd7wCupf^pB)|seI#t^M3H|&9Q*SA zvWtAoHcmSNRw}>5Yqf6#pw0jXJHzg#wa>9-#v)@&vi5Khro2BODqUS&OM%E}Xh4gj zPR|r}aB*=N92jVXEy`bj)jdBAL7*K{mRCIb`LXeAVH;kAtz37>tAx#U(>SO(ZMs$cMzt(urnfB5jB zg?uWH(R`JeLaG-~D3g*Gd27JtiuCFXF>l+x*laf!- z(9q!Hn%mmhEi`*L4J0zRdY{5s-2Yr$e6ju}lb!&yrdIhFN+4uQQ92F*qhFo^5IsMr zX3MC`$UI0Dh00a!J1$AX5ueSsbZJae%E{>JT~tY{caG!ZUQoV3BO*%bjiK_`ojCp6Rd2HB=_Zd*sAU+g25HN#Qpf+TKpF)e3plqCn%fz$lS2G0A%*|6Ur%+^Hi$ zX`OO%f^@)cQF_pmLUOT%)Q{0!U`j9jk@XaF6-A9)=TUoR{n zK*TsWI3WCkRYHiIp>FHpHysqZQew}glEwje=(zXsqF;M)fm)qu;y)?^i4Kl40TdWY&RY2Ts*$E^ehb9*xxD51o>RW3{fyx3z<@CD+F--`*M{^OqJR@unx8lS9?#3Bg*{ji3Wi&g zgj4JoBR-G}u766nme)bbLlg5V$@ksi$Z9CkuP^2UgdlKzg`MW-fCE8PRA(e2Ep)j6 zj?vdZ{q~AE_Ls|}GcL2rNabn%zXa9xe*{%C*u9{-ZufI?&GP>G4Bs7!{NMKx18>5^ zO404Kb?DGk5x;cIG>L)+G2;PlgVBPSlxfSM@YC!U#HIH7dLA4M)?s4 zT9$`>4>ij?&vw!SMGR4-!-!%zmU0Mu7}s|)kMD-FLR8Fe74&=mm}r{Ylu^Ee9rP|P zli+enY5xMGw+h`LEG(i69!^Q|Bm5x^Wx`ZG3r;hgp1zg|J4H*dtq(M=P zcVGn)F9yn4XOGA$7GMZ%clYqX!@w}fjKHNnIy(dTZVx1Apu3_popK;^WWfY=CY-d# zr<^|~6=uD8ZqM+l4%^WhTnp5pycHnA1sl}@@BFnl_pUEF_D{=uIx_jp;RI-`OZ8u3su=F@wnU4`IiuK9(#>9x!G}QH)JWL zad#4ZR4WKas5c0^Uxg)hR|C^<`Mn&HMmx=k&pL_?WtdXM_7vDI7YBf>_R;N348&rf zIbm}b*4CE(YEJvC3te6=ZfdHN^@>JQBn%BHMXzYn;$a1h?-2B5!KFxmFWT>Nvqr45UPmw_(YNm0M+{A?g;R*ZAM7Jszfl+TVa*VmkejK;4|v;{kc%lNjd-$=Cl^$vE-XAVOV;riSV_$|@^L*Z}FzYMiHa6;G$ZI&?{*f&1lUgO{YZEQ&NCu`a#CTGrkk>+D zLX=eVNS+QTxHW}Sg{I*T9_Aj7sAEMWQU$)y#oz7uv5La$Wjfk-O##%~@0Or{A7zA= z>Y8fE#)}9%1%FZbvt?2M3@DfnZ29s+1NT7pkd1?buy1T$i3;2Xz>A~AP_VSL1U4oW z6_wW3R#5N@^PicRnB+?Mt&imz@z=jE0b1PkK}j3zvFAa@)YJvgnkx)jDMcLhjg8+| z9|2z)?DcCwUS7JT7ifPyavKY9OtI$ITX2`phOM6}Dk{o+t*xzJzI>^uh>j8Qh;E6_ z-}66+xJVcg8TjQe^-oM4W{+j25wfpFsic%RAjj(?S4TrUI;v`F1pFG3>tGPU|ivND*dJL#PWNhBS>04W2$eY3gM! zK)j(C=*xI@mTFZzKtcj@bp1V9zO2W%#HR7JhdG%??#UA&`>7Yg=!;iDp#|#FWN9z< sDjjBpsj0I~?{bO~zi!Z5UejWfeCeRN6KMfg{}G-(QI-2FV;uZH0ON>FkN^Mx