From 2e287acdf76fe9b7670246d507aaef38c98beea5 Mon Sep 17 00:00:00 2001 From: Dominik Liebler Date: Fri, 23 Sep 2016 10:34:53 +0200 Subject: [PATCH] PHP7 Flyweight --- Structural/Flyweight/CharacterFlyweight.php | 18 +- Structural/Flyweight/FlyweightFactory.php | 26 +- Structural/Flyweight/FlyweightInterface.php | 8 +- Structural/Flyweight/Tests/FlyweightTest.php | 29 +- Structural/Flyweight/uml/Flyweight.uml | 15 +- Structural/Flyweight/uml/uml.png | Bin 18579 -> 35799 bytes Structural/Flyweight/uml/uml.svg | 583 ++++++++++--------- 7 files changed, 343 insertions(+), 336 deletions(-) diff --git a/Structural/Flyweight/CharacterFlyweight.php b/Structural/Flyweight/CharacterFlyweight.php index 02657c1..d1e7954 100644 --- a/Structural/Flyweight/CharacterFlyweight.php +++ b/Structural/Flyweight/CharacterFlyweight.php @@ -16,22 +16,16 @@ class CharacterFlyweight implements FlyweightInterface */ private $name; - /** - * @param string $name - */ - public function __construct($name) + public function __construct(string $name) { $this->name = $name; } - /** - * Clients supply the context-dependent information that the flyweight needs to draw itself - * For flyweights representing characters, extrinsic state usually contains e.g. the font. - * - * @param string $font - */ - public function draw($font) + public function render(string $font): string { - print_r("Character {$this->name} printed $font \n"); + // Clients supply the context-dependent information that the flyweight needs to draw itself + // For flyweights representing characters, extrinsic state usually contains e.g. the font. + + return sprintf('Character %s with font %s', $this->name, $font); } } diff --git a/Structural/Flyweight/FlyweightFactory.php b/Structural/Flyweight/FlyweightFactory.php index 10a0d4d..a295a22 100644 --- a/Structural/Flyweight/FlyweightFactory.php +++ b/Structural/Flyweight/FlyweightFactory.php @@ -3,38 +3,26 @@ namespace DesignPatterns\Structural\Flyweight; /** - * A factory manages shared flyweights. Clients shouldn't instaniate them directly, + * A factory manages shared flyweights. Clients should not instantiate them directly, * but let the factory take care of returning existing objects or creating new ones. */ -class FlyweightFactory +class FlyweightFactory implements \Countable { /** - * Associative store for flyweight objects. - * - * @var array + * @var CharacterFlyweight[] */ - private $pool = array(); + private $pool = []; - /** - * Magic getter. - * - * @param string $name - * - * @return Flyweight - */ - public function __get($name) + public function get(string $name): CharacterFlyweight { - if (!array_key_exists($name, $this->pool)) { + if (!isset($this->pool[$name])) { $this->pool[$name] = new CharacterFlyweight($name); } return $this->pool[$name]; } - /** - * @return int - */ - public function totalNumber() + public function count(): int { return count($this->pool); } diff --git a/Structural/Flyweight/FlyweightInterface.php b/Structural/Flyweight/FlyweightInterface.php index b12290d..032a1be 100644 --- a/Structural/Flyweight/FlyweightInterface.php +++ b/Structural/Flyweight/FlyweightInterface.php @@ -2,13 +2,7 @@ namespace DesignPatterns\Structural\Flyweight; -/** - * An interface through which flyweights can receive and act on extrinsic state. - */ interface FlyweightInterface { - /** - * @param string $extrinsicState - */ - public function draw($extrinsicState); + public function render(string $extrinsicState): string; } diff --git a/Structural/Flyweight/Tests/FlyweightTest.php b/Structural/Flyweight/Tests/FlyweightTest.php index 997c3df..5f63456 100644 --- a/Structural/Flyweight/Tests/FlyweightTest.php +++ b/Structural/Flyweight/Tests/FlyweightTest.php @@ -4,33 +4,28 @@ namespace DesignPatterns\Structural\Flyweight\Tests; use DesignPatterns\Structural\Flyweight\FlyweightFactory; -/** - * FlyweightTest demonstrates how a client would use the flyweight structure - * You don't have to change the code of your client. - */ class FlyweightTest extends \PHPUnit_Framework_TestCase { - private $characters = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', - 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ); - private $fonts = array('Arial', 'Times New Roman', 'Verdana', 'Helvetica'); - - // This is about the number of characters in a book of average length - private $numberOfCharacters = 300000; + private $characters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', + 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; + private $fonts = ['Arial', 'Times New Roman', 'Verdana', 'Helvetica']; public function testFlyweight() { $factory = new FlyweightFactory(); - for ($i = 0; $i < $this->numberOfCharacters; $i++) { - $char = $this->characters[array_rand($this->characters)]; - $font = $this->fonts[array_rand($this->fonts)]; - $flyweight = $factory->$char; - // External state can be passed in like this: - // $flyweight->draw($font); + foreach ($this->characters as $char) { + foreach ($this->fonts as $font) { + $flyweight = $factory->get($char); + $rendered = $flyweight->render($font); + + $this->assertEquals(sprintf('Character %s with font %s', $char, $font), $rendered); + } } // Flyweight pattern ensures that instances are shared // instead of having hundreds of thousands of individual objects - $this->assertLessThanOrEqual($factory->totalNumber(), count($this->characters)); + // there must be one instance for every char that has been reused for displaying in different fonts + $this->assertCount(count($this->characters), $factory); } } diff --git a/Structural/Flyweight/uml/Flyweight.uml b/Structural/Flyweight/uml/Flyweight.uml index 5d53b0f..61c78dd 100644 --- a/Structural/Flyweight/uml/Flyweight.uml +++ b/Structural/Flyweight/uml/Flyweight.uml @@ -1,25 +1,24 @@ PHP - \DesignPatterns\Structural\Flyweight\FlyweightFactory + \DesignPatterns\Structural\Flyweight\CharacterFlyweight - \DesignPatterns\Structural\Flyweight\CharacterFlyweight - \DesignPatterns\Structural\Flyweight\FlyweightFactory - \DesignPatterns\Structural\Flyweight\FlyweightInterface + \DesignPatterns\Structural\Flyweight\CharacterFlyweight + \DesignPatterns\Structural\Flyweight\FlyweightFactory + \DesignPatterns\Structural\Flyweight\FlyweightInterface - - + + - + Fields Constants - Constructors Methods private diff --git a/Structural/Flyweight/uml/uml.png b/Structural/Flyweight/uml/uml.png index 1209ab4a7a0f39de72b855d584175675b2cdfbe5..26af3e3569c2870134c007fc92589917b38cca7f 100644 GIT binary patch literal 35799 zcmd42WmuHm`ZuhipaLQxNOzYo)X++|bc0d@3?W0eN=bJN3?R}iHAsu(5JPvV3|-RF z?|}Ec_kTbCz4!4x$MJr6`7jsPT-RFbtXb((t?1$k+WTemRy zZr!@wcmEFhn+R1e-&?od-cpc$uH`Yk*%YcvuA5PNb*aA9{*)dY5%;p1hIA{fhE8%5 z^X{E@lh0E+-nL?jVE&Y}o8@s6-Z_ZLfX*+c=ZYvWuUQOF38!Z$*8|p6hn;3YNa*E> zd#*;JqG2J!UHqdJ?~Fx^T*Kq}dbT2}g?iVWE1+*48Crr{w-O#)VX55wcMFJdbBzJq zT)IhbE^lGCudkBGo4Z>moSQ2I^X5VWy1D$-;;#<=YH{oTs}BAe@-GSg8uHfvg#`b# zga4-V+ntw4FZ}y=f8NJP_P&MI9TF@_b1lG|S(I|LB+cUxifh$TCAWYhw2$w%(_&o@ z1q^_pZ?3hcPy-fA(LDYj_2~Kzf(b<5TsIKPfVe$+CrR@Nc->hyDGKME(d5hUufbrg((ic&Lf-In_OUg|}#l zZ{*z^TvE;+`^_zQc)lTtS5Yz1=Ibbnxj-7-DDs>}BF40Ei{Z9{EWzS(AX=<9by#Tc zdmy0ozn<}@Hu%r00jEYooF^o_9gfx9k1x;nluR$@F1W9@w=+%YTH+#6^gYA!W|iS& z?<7SFZ=>xiiF~AvgyFmY8hi6gH$aoRZ_CFil{NW6MQzYg8PzRqo>s9%;{ z-{TO6zt0xp-5T|!79%I+GLOqPy;pWTLEB&Q9VVw|UQ1jn;o*Z))|UU$+0^P0GPR^O zaop^4a+!Q3$c_HT^Kb-gK~hOSl@5CDdg*8GEF{=ukQ>LK$<_piUIdTn-ai`0)F#F9 zmA-IgvK)dYoO>u~6w}*xE-Q`xsM-w-(fY9W$7OCT5Gz{&EK_oZ)SAnw&L)W#qsJD> zDVa?I)($m$>W|OP{g%a2T3aAp*11a@ioJ@?Cq1NRA0E+Z=Zej1jIG~Kb7TsDYY$*si7Z8=$Q3<(RtS#tUcrcwuih<=u8pJwI4<7$?2> zQ6amJfXY127r9Ty&d22$e zazxu@baa#je~I!>Y#u;#T4pEry*%~;rbw=QuFzg$yHmM{3aMfsyjo(qd}wCB7PBS> zF@N|lUNcw71Y$LMuY4MF!Y)=jd&VOHVzoM>SZxs>0;oL=prDasWyDc=#rk?B9>Duf zl7l#0`V#8%0$fsgPWg}jv3GyN7#JMiW)h8GGd}rcHY9i)r6Y>jiv4`uhY;-2Qf%x zK&pyYTb6=}(Lali&X@$OhU2d@r- z*iZnqt0UV&7wJN=l1f``%x#0u!BN-KE)9q=z6#_a-CO#|OiTA_V`|2~zV|jGXx2ua ziGe+iR?dlaco4Oi#`}_bVfcrUf}PVnZj0@22fJTFxEcsBQnpF$A#P-CgJK4EbZQ{L z1|i$k6n{%OM|rymKII0TVY%*;d|lVz1WNn9!Ly{(YBrlYRT&W!Mr~l1!|kUWdwq*F z0`RA&0wcZYElDMMuYeOD#Ms)5w))DpT9sJK679Cy;A<9Ma=#6l%`2cGZk748H8tHM z(?&~VZhf1e-d`EC{5+Yd^m~{$6DfNI%=IFte5b#AoP@jaSN@K(B!bjEwUpaUUdLEs zYmpPQ{T>xjYI+GJs`)h9uZj&ttO-OjG4#!kw=0gs`7pj&ibAwjVs$;WRG%M0w5K;X zB{AL>iHc1_n1Yh{_j0uK^G7xmdiyoP;v?c}wzCR0*7jwEJOwy#1_P<11Ql^x z^BUkc7ip-kfE%(#CDeiH%0r7Qmc?*_KyasmJJfE*ASJq*BqLYAfDE=f zY`E$2{Al~7t0hO^sfiW6W^T!0grg&f;A~|)!S!LBl(u%_ETI$AJtsNGGDIKq(3N20 zN4VZyf?~HK2ir&IO3pvv4u!-Z0zTg#oNMP%uEx$!+g&^mohTkUC$Fq>Ry5%*vV zvZ~Ql?J-3eer<@s-HR%vJ+ddPGM{vY&Zhh5-C;jSYvyPpNYvG7b=~J)Nf*KMn5z2C zvHY^s^wggZXNvn83QR2RS9TN>{K68MO-)$_UK4d~64b2!Ku4&opQOOHnAtn-a)4(Z()fVNL!D)j3B|5FCDmy zAkTPpNT)hXd6^f|J$0^8s@$1lv2iaxp!(gmnf}!1+FCnY-7BfYwZ=#u{-MKxUTi3N z3LFVqt$LZ=W98UD>KIPKTqR3j7%XecKu{?|-5fudoS|xl>5^!X&+q$Sg`P@bD=j+% zQy9x#h~x2nivuSGhPWQZc)z$LfM(L7YmnUCCr{r0jv!!YlBBE#(8Vcpj~qA*HTgP_ zQbM=-{B}Q8=MqgQ9&MND2`0W|3B^jxsuZsfeJdec9;Y~!8$$!tT!YdD?rrx?ueXV~ z9M34K$lRL>pW8$|gW{Y_P{az}q%!)UOA%frb-N2QX;)2cf6Y9j<|-MG<<-n#0l91VULJ?UsXOF(>9ySCBAvWO(|EyHoJ&eg5L^^?4* zY-Va3;qf(QcZVWtZ1CFz_sa}_M&x-@j+`uap>r>(2$p65pcFqxBmbQy5{HZ49H%1s z00T-#P%KcY0^Moai><;)(r{sqg^>1}y_owfzf<`U`C3NNF#pFl8L-D3Pv!R085MCd z0mSh7;(fPFG4G^B29&Au-J4lR#1@!sa{tTG$#|!~#K7OPX)(6M+7c@WGkICd76x=? zDwfSTfGOk_(TEA#?tS7NZyQ!M>@ZHR3sYcqGR;|NNn=Lv?Sf1y_++1}IR7k6s%p?= z8cACNr5YIXYgYpo3OuhUbO+F?R4pVG<3kY8sTFyJa_W!NKkSoVA|L4~4wYK$Ht?$9 zH~=-h=->#Ex_R-t>HXe8~?d{l+^v)}0LJvGaAH&2CtYM1YA|Ho`$wN*=)o%;Lx&%=S*O5U^my5*12aezIH z6MkLAxCe+Zi*8LMZz7#;PxXwaYfU&=)f4ZxV^0JkH+k?LPazoMgtrEby*z$1SW-p3 z5Er*p-j7o+9!ZsO5rypMo@h>=f&Bz;2FnESKlG$1T{ zMsbL&BG2$bxxa;uj=tymC~Mq40@cSF0n<-8^$6}n)r}Q>Or`(xOJH46?qRmjusz8e zlQ1&9@&UwOZuo94rFEC<$H&eUE~Q!U^F|Fb5MU{h%{FR!X-LG$W9afyIhGdM-nD@~ zi{_5sc~HMz5Uu4~tLeTlZXMrH+)%sPWmx?1-FIc#57KnoUQEt<`XdF5B|YBCQhgqU zTfzYhSG(guPw`(5$G@sZ7&)#?A#*vGzL&P&Jqx;(8#rh5XdOSte+gc6v=;U|EsjL!pPRZH?KzjAuhtrxX zZtgDb>0;gjoY1dA?HPA6JmL)0(_=KQa*2TC;$RI0F?ecKnYo-#EXRNoYd=pA4$$F+c_NHeo70p=~X7$2M3GSxVJYX5`EJg!`E z0#{>vez`yOjYbbN(6rmug2Zo}*C-s(ltboF-7$8PNbJ=`f%?ct6Eb$daE~$+?)L8QaELW@3NS{a&9v2AOUH z+-6erjhKl`>p#uyg*NQO#~n}p*<&lzuzy+E<*wIrqf?hebUDBbMR68rL1bU7Mld;+ zWyfoH&6iZabYtFW?eroS@t?cvJmKH0qnijfmkE-cJM&R3594Cpw~> zGDmzb&lA)cww$pV+-k#da3=Ftyu0Z^WKZ-5ihrO>u`Y=e{nO3$C5aMeNrD&)2A-*) ze5kt9>A_n5A}!K=pWfY)&2n5#2F~O4>54yh)1^$AMXJYuF5X{8MrPc100xv|e7v^t zB#H@I@!VlIOq;ASh~i$R7ccPH^PV_iW&-|9V~vWU_Sk_!&HQe+J;&uELgrBd=kUJo zv4-T9Y})gGYgC|i@6K}_C2?9nZy&BkfT`8z7*n+jQ3YNG@?0kO$eQQs`Bua66lQCS zPs(__ZA(;m1G4K+rL8o7mHeHBC?ng0Lg3BY-v&;-ei~c1H!VvvHJ*pm@O8`Xsc)(; zZ@i96+0=N6pO~1a))6r4Ql}Y5&XCBvk?;DWT_pOb411KqMn53oh2@J9mMwaSW1cwO zy`|}Nl(L&o*pq};>cvz}6Ph`EJqdJi7&Q*`3bM-T43*?^gue3I@BA{llnz)nXmhl= z;qsQv*IHpYGBOpYDHvM%Ns|i10}Gj5Uup#va@wqgHdSm$`B@&ZRWIM){!_|?u!Abf z?jiJ#-CkgyUdZ6YM?wq`X@ZM37jEikwKwL=X?6?mX-?5H-BKMN6F1%|@ zvE83UWhctta)3C@*4Lh`O3lWl(AQjGd?r;mKTpdwyq`4v)3-26dE`?Wz&%bC?rP)TPL2cISntb29-y%H*r(*hPs^$~eu#;s z^}XRysB?o@ONmgJPnH^swY$Cn-^^6sAH)HM%*n>a1guUdvnPz;hgt&M^*WU$KUOoo zXn?EIMLjhFB`L1{=otg(87Rv1S}!DIR)vZC*4weOKE5xHTby83Sf{>irztG*1W6n! zD<=@wqd782e*@uoyhoLs?nd_X^z3v5kloYHc#eu7OS%-(c?_T@4|?&M|IV)7pX?<7 zM%hBc#`HlBSj=$eFEqv&8F>Hh9jER;w=^L1%{83XrHMq+{CgOS@IQQC{NmrkTUO8i z{rAD#XzLc^{=pOfnED6g!L6@j=;8lhVPyi>h!|J$_2*x(qb~V1_Li)4{rTs$n=T+a z0?EB>S@JX`;`Bt?y5a4gs!UBIeDEpH-*6l#s%?DiR~G-Ki;ec?bzv;$R2Kn;ei-Ie zulZfFTB6Kxvhi)QEocbKnSP<~5#c46&8KuoD((k1CK|802GgV(jUEQxjs0xEK@d6+ zHqetZ46?Ny-2+iwEQmz=z1bKFAGp}68@s9#mC>K>TD%Z1#a!UI6$ALQexCMP?g8^Y zwCjgT8_<`k_hb&SB?M1Tr@$)ed;?g>cB{BS!JU)>KK*qCL?$;A0SY(KJ+ za(}r*N4c=weZhA|81?NrGSK0=OA1F|HkIYW;*PPgpH(16jZkIU_zAWI;hO1BWAz88 za@;$4`@^MIO@3>wv)vOUAz1cSJ|jR>pKxu%RS$dl=FZNM!6WswYR<*lWAq=fy(I?- zp0qvx%2Dm}OfCskHUYafa=v1!nA~tiL}W(9FpYddCy9hv_S@~~8qt|4A|rkPC1wLWwg?mqGpF&g67$q?H>B zaApn22P{4atUX@LwUen?Vgu!{5+9i*GE@*jsFDd(I2W~MtYoK(KEutEihdlK-M3>+<-Nj{lNl=j=8_t#rTcv{P63j>H;6 z3^gq65K>D9ar;cyh#iWoi&X8!uY3QZoa+;7fogjS+r4OcbVhBKOW!9@HDgFF2zT2a zHav1C;aw{Eki@EuUA0#CMMfL)LtgahpIUAY!unVTV5LJJ8F?{LIC|u~vL4x~)4;## zCVSpoxSS_2$VgBlvdW;~T>$APKCPlDZjqd-^C`UH#%KMqck6*LS6z?{D?98*jCL{W7WV z|4eXi3Psa(4qB-_m+sgEXRL!5Mw4u7`rO8(1cWp9rI2BL3;2qngR}b2C=v8nyTwwYN#z>W7iB+(F>d0WLl*}idkNE2RDpBG#@ZA2%N&PDV+PQR0zizV zdr*E2^Qh8&51id>@apDzdL3LY(ZgJPSYc~^tgn%-$9Tr5Z9m-FUgJda883+%yt+}; zokv)h=+iplD(F^RXgNEK1?=f*3aG~2S-h2Lu<9MT_V zQsN#UOUoGGJnCP)fqeEb^`?xcAGvhzfyqP+Mnc%Y&;Q=4xl}lDbg3 zf#auEhsWv;g`-X6`uf1ne&cx2S(NHvpCtF28SZC`q&~vlFvpKQOz-hfa`R3N4vdyrze9O3u+Lnf&Auw$Flf@C*AAq`V{CK+5P$GgR6_l z?|K2rl@)RgRULS<7J}y6&>Y!^&DE$#qsy~nS(F8T?2$0>5}TIU zFV{v4bDo$l)Wzgdn#y=shR8=6gh%-IR&{R+tTbrOymP#)*y7YwQ2OZjBZBdB&0C7t z7q4FB*t5>QEabI5#4J_pF26YG(a#u%A20<^Z8;tcm&e7V{x%RMr?eG^=&)Kh_pE!? zli~6V+^r#YWWLagw?*X6Mbuk1wtUOB#37t;6V%O4znxFF+ov_BltxXjExO10JuOm# zId>*(?Co`8zyb!whcU7hDwk^jk?CMQGH;5bAuqL%x%Kgm(>{~1gNqC6-(B&sg~6wR zVRK$dX4(1l_PyC8Wmkv8lM^KLKI>Mn>ZM^`f#3%-&rx<<3BvKX+C6$GM1|c>AJ_m)L>%c_-guf*g}>gV*FJknlmx-*Z7e1m zP*f6vM}yPTWz$4E%ID#Ql{r~`^8DW_o}K=D##1E6ZDd|GG&gU@ga2@P&l;580z2`a z?36>2T{bsa0~?%pd{4-%3<9^R{g{+i-F{lNyy|`VX{MNUARx}_Ykd}PoQpf>w-x*T zpSE$H(j^UFs=m-$3i}059K~ILT)4l_)eQB?BDJmOr}tt3;-&ouunyZV6@$w>L~I}g zGrUj@;=E$M8d;VrVLNMVuQW!9mO0CJF3l6wr+)zS;p4`Zx{2apQ?4r_N}n&!j#f|D zqu~=z1?s0$`4?$* zvlNM0=o;-yCDOJsz)n-sO&7RaQ>bIu%~IPtVuI(lrROdAEX7L)6cKF@m2mfa9@DPdF^4H+(79w zJ0okA54yC5=zW=D>ci@!QW(#}8h?9QQC?wTfs99D`dV3#q|M(ym_dw%56-xd#D(wo zKs)?R70J9MwnbHTOB_5d974^_Rmnw6z0G#EaaAiN1ylO$oO68?6q^}rWl6h%j?AXG zQ^wHD^(|Z6LFaO!A?MEhw8*Bxw>;Nd*o`Q=Ne5clLkT6qXaR13oeP|yy*P%GfpA;F zx{ewQapVqy70RvEiB06Eh7T}@!+=nI0-azo-Vk=nZhaeDNGgBg`Emym{S$#|yUq#js$r@ zNdwcy$CN#!iEVf1wz~X~DeNm2XPY~?-eKy*_FWuv&hX8iRbVgwd@P@1i&Xbj(Az#@ zu7fnoWd#K60p6b#yby-(z~@Pr4jM3FBP*KO6khqZvQP)p7LJQff+y2c92dQCZ5533 zNpuWOobOCUh*`>evtHZDRCl^G)&J5-MqU+GAwI6Sl~HmuZZ}(J8DH zIQ4AmOsSIAIeXlon5NgFk!$6)Lm7IP0$P7I7E+l=rO*R*|X3NCa|n z6Bcf8u@B)Vwv}jdM}6g2h>wGgnh?*QRAqcICI^YO5gS;jh>oZ6uUuR-1!bwGwQcO{ zMQb1n_@f*gOI4x+@A#GX4-F2au9$u5_{zMJaYA|IaZVbi{jml>1l4cuY@BTEQ>$pI z5XM*f&aYomCb{!X7Gfmft)FAW8DB5@6*;SyBOzM5z1QRjxoseYI*_Bu=hbNZ;zYG@#s-3Urbk`1uGd ztnXH<$zuOn?x-Qx83qwZmO?(X-7>;{X$20P1!9+EgB$AhvIwe}wR*{Fbu~}RgbX_6 zqSY6@hT@gav@L2J>V``b4 zNqqqFOB z(E^)hrcwKthHS+@^soXqs_oqS;U5D7?IWp4N`a*0&G+gWG= zZ79aC#(X)5*ASk;e)rE*F|?$i$2pJl`%;Ksem1ZqXR6sl8njJ!Ml z^}}P8`h97D0AS#x?`!OQoS`fUSMZYwE)|e2+&L=G~w%drTlJ-uIpgeK+H8(a)YwGskx2DLEhBey+K31BjN#Q z2AWXn*CncdAvjS3F+SdB5Dt~6l@&o#!O+cL5DOd2G{}=6Q%f2PxFbC9&leuLWT3~rZp}4kwJLheLqm5QQQtr4c}+BfU`l$rre*D; zYX`J&Z+X`Rq*l;kU(3EUW*>}1Yjv$!Pr(e%KL*jQCH=<;*$#kz3}EvAhXFL`62j|- zs>P)a!q0mXOEAU$G7ZIpby;96V2?ZXnjVO*m9D*Wl$1XBGv;-ZzeM=+ z+KtlY*Mp(k3k83-zvd|ZkKz9G`ag#IyVu+QYBID~|Ir?Q>+mb^T@624=RYd^iGTEH zH)gvL>s8-hZs>a4__xIW+AG>Te_Q$QUjNl(XnFtf;BU+PFOy|F`wVBg(HQ;l$L{FM z&1<4m2Xv1=U|bUnBd!MvmXt)&fWGU!tL4AVB9A<{fA>?t^#DMO?=MlxA(Av<5C0hF z8r?+`7q8tRx((6!k58@%iA3mm$H!4~54g!%;C5fz_j3ySom~cQ zW*lJeljY8`yr$@BlS|Zen(6)!uK?K5PvyMCb4MzmJTdzH8FQU0yj>gc2BfgE^^P6ux z11Bo>|HV&K2>8$ZL@b*XsmKyn5#rlGkzu7L#LhA_8K|W|T9AI5NYj+d&SGq)pWku7 z9~kc zYrGlVy53yry+!|6PZdq?f>`Z9bL#t>uP)p8#{Cc2%iAm^+{+sLOZ?4fd27c-C=N5+ z-H!qRgoFi1fZ@bbHDHy17r0V}OFy4D&`Ttv#~!X*Dp_jWXaT zU8C5H122IF}n9Uv*IqNzo z?CNbvCk%OIGmI6?*?P~=V~omtYB*_0eyxbC22C@pk8Q{39sgd<^Ek&grPiUu$F4p} z0qns!B=m#Pxi_dJ$d;i0$?!M=VR8z$(NHtA=qICCaTZ@Sruv)N-19T+7$@4==*%0< zN}T`gb$k(G=g@p)N;Pw`kGZ&xXR30>LQ?GLqf%-6We-h_n;d=x-rH3nEr@npdsD^$ z|MH%M*Zs8@cvdRecsJoP(OWhRmfrcyC7Q~mrYNy@szY6>>zrN0OUkSv@AY&|oH(Rc zqNxawvuSN^a^Jd8tvHV9*#@G!mA_F|cPFZqZa~xoY#yHF2xyu;0VBfhB{@ejWb<<5 zq}wlNrEk{75^(NSAFxe)Hn);696B!ev_H-n8|~f)-AcT7b&i`ok>tkojMENG4Ig^A zVLElZCqgZX@dNY_r<*kCwk*wO*t6eAREg(tDLh%C?qoY)X2-Xesq#&K-k561g6a&i zRb?HqTq@|%3vHkQnlCt909b8h3e(bwdE-aysZ``sno2_x^MX7>V!ymcv_d%kqAv#C z;zw3Syzb(G08TdgDrGYg*fw0e#B72L6rCz7RCJ5RALIA2f$Dxe!X0rn?4gwuWPQh8 zkPamwlTZ7?`%N#zbs8!Ct{{<<{^C46b60Os7_ktxGY zez)*}lUHt}w4fMt+IJhs9?qTtljB>s_z1chNq28)I!q%XJHLHa=RDAK*;Tzo5u;px zEMY%?_BQ)VDw(?mnL!%Z7Kbf>Gju#g%rZWDTF*Y}8Kt^aW@Ngvz2>L3P6?_+C5E2y znm`k2Sty^PDW6~MypqMt_&1-Nre7ST_mCcIoNo0r-tGnUyu>ejxvOFeHO9RnJ5se|SYhegx0xv`s=7s-fr70^ug{;cv!T|@$RmQs$44!w)Jwc~USxj$^gc(z z_q1AmQRht9_GG-YqqADsMaBMQXLxCez`--elv7;-xzrjTN021acV{hIXCVV_9}IGT4w8$yftKAK!TtB`7ox?nXU{(5!z|Z~ zp!y~KZc0`;avTC{odo1!0kK4FA8XUdjS@PCq908_XBx|ntrX?7EZ(#B@+vUSk6KGx zgy(J9eo~BA|3ou--;3_?f2281Mf`V~< zhXU#X3(t*CTc}E+aF)B4_>*<%x{A(CYlIgEW=mROsk{ZsQ(O{BWeyzq$HE?dJ`rOy zbRQ*=-rwNJU%C|^Eq`YgeTbr4|HNq5)E1QB8w`M zGbu3VwO^qQleq>{*DL;$6p9>NrM^<*{CvV0S+VM{!lf6LG8}H?YYtDVCddW`L0Phi z{qt^sd17u=t4IboPUNUOgGIQw4>PTTSbDqhDjPx-d`f_nI}e@~loP{sd9?jTkLGdr z>SCNcLt-M+1p_B2kE3hjVf1}Awr&%%ij*9Zf&e$!#JDxf)OpVO+5yh&>_IoC=Z{{p z5Gnq|QeEOma0ew7;4x>2o`Q63uN!R!&}m!x_8PgG?3r}@ry znCt6Ku+sa@Z~Hzhd^DggNhBXxDR=$Y`A=_^V{xYHrgMdX%X}1>G>t@chwc?)b>r_0 zZpF)q+z#BQ@6gdig5L23J2dTYIbX%TXsT^B(XHL>%p8V0e?C$DS;3?RbUskCNuxg< zSI3kxPov9(Jy=Tblj1Qn#HdjxsaI&ws?}o46)5r|P#ZUD5*x)$<9!BJ$`^3Bb(ttu zC8s7n>{2o^@O@TmhL%#9iQ}?p>lBlHst6x2Zr)Dy@heeiv3TMQf`0V)2e~;mcwL`oh~M0 zpSA4C;g)0ZbM}+NX+wWn>Y7f@QqSXwyx>PAWZ{wtKOo;?syHCT{(3Q zdPe7bL(I&F{6)+}r2Z>0(^Gh0(&s-gGkG0IXhE}E6eGN9?E;?6T`ZS5FdjM7ChoFW zxezKM+fu&U7dzt83jVocr{|e*^9lxPb2qkXziH%M6CTE~zuYW%MR0+DeDN&<4dTwR zgv0b%H}IKzfxFPZq>@&%dqeQ9B@bGVoM%V;?uX#wibB35(=*$}bSyirE0kD>$qrlu zfoDU#WVTjQUQoy<6c(?TE}QgTD?eC|1DP5(`+W*}zm%|Ac$1VvL+0%^m^3Y}BeOAr8>DVtdiI&}?06wPLvSGS>n$FO2W$N2R~ zH`V^F*mPyO!jVUFxmcgoH2lyc;`r$HpG+g0;)hhZ70y9^d289><7;%GqNVniVRp}P zlYYhk+Js7ZeOn`>z|RIK(_v240H6l_oY!TnzP{zsH8pG~T^T9W+6@h|AsiS?F=FG? zL2?A+pS~X%%c#qSd&g6Km!Ml=28j+}bx$qQfc{(RU-Q;Gr*K60{6$980W>#9a?sp( zt3L){^3W`Epcd!zp->Iy&8a0hpGI`<-}qC(Gf-JaigUr`u-~!l>hw98l7ydxPz7pV zK-dMnDCX_U?tkxbv+7}Y^h3WTU5R2*rE~h6)7meR%X~;5%J+tGQO!d|n_j**(9;L% zGclko=bN+MkY0ZVmra{Bo@9C+6Fvmi}a zzD4gD4}G${#)i3o8bhvtV=s}H_%FO}eIOS`NzoYJf+zEvtHs`OU)P^l;LfE% zuEsvAy0OHXYP!rczgruX=QzJ_SMM}ce3f|(!<*+>ykvOJPG)$30993B6-D_{QoN?z zG~UaBPtmnscCaBj4iMRIVl~fQGmOs;13qQd_Z!6zK>o>Un z$CJa+T-ncPu51GP*GZ2^y}nHrzCb9YF-C>15O!()pm3^>k&v(c#+%Vmpe=dlmb#m- zB0VUgi-;4%WAB<4e@P_Yd`DlG8DU3w!;u{;9(C16@0vMitPqXdSsta=uFBiu7s3@? zinuzt1r(WwET_-s5T`YqJ-6HR$B&^bv|JV)AwSuPLcTsarHZ2{yyADVG;N3%_G+8NRO5=05zQZFB%Z;ISFri6iWm>C zR+FKN74}KC1iIIBhV>~+(kRyt?C_SI8 zjbcY%&Bw_m7i>pmr}J_vv;CgfY>BYg$HLi&wB6O5gp4yb&V)IIF5dB($&(GHr`(?Z zizN(P;>Za2Uo2si@-<7CdhD%tN z|2i!tIaF;=g7Bd*H9Eu5MsAA5Yt>F2FZic)o<{pExqjJPLAoACAF6RkFOPeLWY6z! zBQxGuncW%lwAvs;=Y3157F0&U@5K_{p^w42rKYBmLCBfPWH0;Oqz+>^$#y=vz8Vv+ zwxTwuaSP%v1Tyqg@~vUCC4GO-*=QSGVP}I~$g5%NLyNAV?*~@9=FkcF&bV+~{3=3# z*;%MN#sAL&mPN37mAow}wte$C`ZV4ixa6QSsv2j>RVBDA==be1;PolLpfOQb_1BK$ z?)lD$hrmGLA|1}xrL?`Tz?h=LW_~_ zK6yq=`}J|vlZIu@hjl~iYlY~;C?X)m_zbEkdt_2&QI9=rF2A%lmOayU1;_r?K+)Kp zBe}3Ba)h_1tLt5$fW%TJ~d&|f8~SFd-dQslzVu(K{w6)7I;=U9imVRO058*EOWZ58 zD6*|apCbe?y>0H~;2~FY1mJCAN8j1%5AV>{o^dhzG<;6`75 zayKr=3fXO|S4(*|DQ=cV*ykg~!WdVnRmr!Ho>b3P8qK#Fg&MVD>o-f+Gb6-Ypng~9 z8AD0KWWib92U)osgS{of6lrQKb!=~5cYz)M59B~~d?{%^LrJuyywVsA3MO?8ydP2V zroOj*#kDswz}>P-;=oD&fKK8B#=z8|=au(6`Nbvnsf%bk+8K&JakY9%GQ;f552UZa zic{#)?`3d8jWp9$SXfxeSq9KKSdnIUf}KKz*F0eM=aXVS3vA#+@k0y9tM>_vuBr^S z;te@w+M)EBn)#}+Td0M;EoRjM#${q?D}Aj%k5pxz*@HWKFXelB!Zg;r>&!Od*Gp+j@f0~X+g`bGM2$oO# z+VBrr3|_&epB)RX0SFM;Emvw+m3fy66XSzNk-0g2JZGQ8%7jGsL+855K_lA>WeCcF zbH6YcKiATisRiYSx7n$$&ZEpxOdGhNmXSuts$~wKGYJF8?qY8sr{GDh!-4<%9VpBJ za1k^;ld5N9u!+cx+DW0{=z>J36E9JwbDVlWy@nswB%DGJd0?ikmV6QPs<>0vzH;^+ zmN@W4&B(*rxF5YX73RMD;N9PHI@UwJkn>z1E;_}gwx&$-xr~;Mj`$P2Pxoe75f^ES z(8H1XUtD7JZTD=q%SxUrX7SSMBpl)MFt5|E$I6V;0OKh$&F(SkjZQ1h9ul!e^5%X( zNpk8b#Nlfag>H5ZNlV0df6QFjB^W|@-M1N|&m|f{CbaNEV=4=b3ts%id7lY9@7e6g zcThe9ElUXydodBYi2uUr)}P|UQ0BC%+~2OP^^1QIAn{7VeY&CblL?gS)5U%FAQR_ebz8kESLUWYAC# z0Pz>p!|$cCq|OvMOp@!hxyCPR5LZlZ>XAgH^aJg-sb0=1!+D9?yb{fq;iSD{_#lnP z?hww}K3}e-i{>65;OlPEOd)TbpD+)Bo%gN`ttS<(aeC**f$|GGIiPnFWb9ENr6DcR z#fcxTxKigS_jDbxWonuQ5~uR{>PMS-$T#d&(ls@U>N}QO3d*<&ynG(TK&u6c4<9bJ z8e7lT@Aj>HK>cBa6I&katl$*vK z!^hDcR;S%@dsh4z8V{F4dNbi3E_^9r9f1h^p6fH=g+};`Ph)Q=0Kkr)h6w@Yejnpv zMG@sa8SUA8*J%{o0*E1)Ou4(4@Q&gnw_?tS$ELujyDb}LY+^u>+@9)9!Bl_{aN2kqo)s0S7q;J z9OEK8kM1kbU2eaS$_%_5Qg~2ISX}ageEP>~4BYL|VvF%bLK`}hWN%1ZzH@8_IXZ7x z$it5Zgs?lKr-22PZqhDZX9Q#09r4RvzY2F3^jT9EYVS=-QrBl21a+fVsws@-=1L~r z4FJtbXSln2N4@>3yUEY6HbH9N6e=ab1`SPh+OYDhSiN6dm#M-VdKRfDqhSZD_g2E0 zA}#}F%vA)>P7bQ`xPM3j^mV@UmY`X%b#@rbNw)i(wH)^Hs^{4wBcb-$R0bWR5ZWm^ z;s&VhNWTeKR4OxwOk2Qvrr(2H8w6&kuw)U4)fnpPEz5t0Y^8jp8J_~^H_^8lcIK+> zTQT~1iH^07dgiS#W-sOJ`sq$swQPBv-A19ENgstM+1U*2A7?jMCeU-Ej$iMsF6#dR z&`@_lLSA$rpskh`+doGM>d@0s#n;l(kvBg+@i%Ti)pw8B%Hy<8g97MZ-&>O6RS+-3 zy*_&iUuA@Fmb|u@Kk>dy6xu(Y-0>&|STI&C+x=U>Cru9i*CATB!tF^H)b7hehK$oX zFK?E2**JaE!-bSzRKyneybmfccJ%Ty@#^s)jhjnJPzq&SWW6og(MNcj#j#?b_ z)*I#6#h25<{0w2IpVD?Y(sh_8{*MY@Ck}J)3-+YjD}wUBP0mM(0uV~Kb`13VYoo4+urg*uKmhei(xcGLsM&hl43%vTLG~;0&0j4<2?iX zL@yGGe;^a=H14A3dS#T9k<*u2wbb{07^a8| zN$i`3vxegA`XdbMz$fkpfWQJ#aWWIWA+sVUX}9)jvSHdUpbf-H@6cI z2Ue%hJRM!%m_^H8()fTW$KJ8~b*PAyy1PITF5SlUEktDvmeSd-edl<4zsuB&TJFXj>1Q_kG6 zX?oZ-X)tvNqjXx^2nmZXCM%Gg2@YFS_o%g+dX7UvFD2h9n ztISn~O8`^28xI=#VARYx35g%|bCg6NZp5jEk0Ka-+F6)hEFkmm!?1x~0N8%ks>c277^DE=3 zy77kQsEW8G`;nT(oeER5I_$;j&02)1#jj=>0^G_52l#w*h36*&dUsKkt)wC2uQCE) zV$XF&Y45yaVY~6t=l@H{qO2ay4BTz)akWnmRAa<8pi9=D9&dpdYLlmBtsJb4{6B?# zby!qi*ET95NP{#Y4U)>xDT317-3;BG0!nws00L6d44sN}4ARow-8H~>z~A${&-;Dv zcfA*Xoa;I>oW0N9Yp=cTd*5qK#odqB9&7|7tG)HnUVl)Fh)UcsLhC2fws*~6(Hy5} zskGnCr{Gh@1P?CN(P-H4)I2v>knH?5!=VyE&WyWuXmYfxpk}C|uQI<|)p5$MDU1@8 zGV+aJ<8mywyKXA?4xJW0vwG$6ab3Mg~Zs&S<9z`Cwy+cnibf9CRU&`CLM`b z2Fy2WdXuA#{gdH8i>+IYUlArrQGe*ukj9?r=^yi3*$#4cehO@oUY`Ts9H+(#d1%Bj zqyw3=syvQoPe(8y=}|x?uA~vRq6))925%lS;rhlNrJkWCo1cB~O(Omwb#*qc!QHLY zYX?qFT`K&f1Gg{ZLn}G!n|+!=Ie9RJ={Gh}d-+VY+Ru6V;4Q##J9qE}Jm>=M$rYxO zm}f5Y7&CWndr5kw&8J_H*L)6XCYu4$mb$2^Lq+u}yztkLmrp>>d$bA7)#GEj6YQpB zbs2;O?M8(<6`aO$I+R?A+^G=n(V4f!mSj-0eCZ!X<~9kd1HjOWQpRL&yPq{aUaNT& zQKU1?E{#E#QJ>zEGCN>uzNwhHHHOcpQ=mTA6FafVcy;BH+fzczJi>24G<6sbqdyvJ z`rOAHx2zbnUm3~BxoBWYOBvJm<4Sh+#(>f;9*~w{Q^0ZZB2PO-jP_)VYVkxToEF?VWIZ@7eATDgmww{}{U9 zG%_a!oW6y@PmcR+;a{}+#QnSF1nEM0SQ0Y|-}h01e~lbsZE7jsW;G-R_u`HswlTN{ zDO;BE+xvTo&d?96iyNCd1KItR>F_j{R-ykV{g&e2>9?>nU>M#!b6)zaX=qdU?;KoS z7pA3APo6^N1ZmTQ?ve<$gwUJK6cBi$vrvsY)wmO>zJpQKygP9uU+&l(7l)eWw2(XV zqun}HWyBEfP1$Rcd`FY_M2h1$DR4#xhRQw9gJqNd4g?DUI$`jhPKaaF#rx|4S6hZ5 z<71?MywfyqlIkYlMS3Mohcd**RF?%DEo64bdu0I18QO-$dd?|L`s0wFHI%Q=%6P}8 zU?!l{6G6EYOMe)P56joTrHOrYw5BaDDD7cE{PC>fjb}wvx^l9Fl7>dgB=-&?HT@!1 zd7{E{DNj$_75n~C!_4LAkkZIxBg={=PO|1eQZMyx7`bqN$W`!*c6+uL-c6Lb3VGo& zDKaH}60scwcr`$Nuz>MHesJ2U_R_I;!g{Fl-wE`TPJATz5b4)kcAN(TIltr3J9FT~ zlq&kw)RHXzNF~8MpHPh~&MU7T6^C`Ib6W?WXg+&*4Fkj2R{5w?aEf6&1rbe8kY)^M zze4_*?Cq*}V)X_UYD~+#MA`GN9IB+kAso+=dlnK)hzT~yQT_* z-7P>~uQP`JZ&3}M36Xw#OmT^&5xy9k$AF2JoXK&vB~4!%&0Yv&HRp6s99`?L2H|`C zQjiNEhrfLaNTGt?-xU87lC^J+ll* zVz*lSdj%UHP9X~_C@zNU^7pzwGNJ^JN)gT*J$(zRRG@z$*wcryJpLFE@!davpDj34 z!SO6UO7cB1ApTllMRo|hKgVXG3)e!um%;rlTL);oE>Qg;tJY>rYoYJ>|ML-l6=n#x z{^a0#65_CWN-Vh}hqk)v17Y&wy^^wKE~A?<^og!oue*AZ0QftfW+9{9BDFX~GlNg9 zRFemk~4&rp1^?-{i}$J zza7UxG4t`|%hML^Yq`0+_@%}wG!fij_|!a3W6Tdp^Y6(=gwm=qgjb_R3y}lyZz>RE1@)~RXw|*_vj!jx6Ef$1Q2q! z4FUzfoNZk165N=+K+Lf2-}gbjXJ@%M26JhKyVf>|LT``cvVvN*8IXap3Ww*7f>9cg zoP+Vul=ROKX2g3PMmLcz(=!C$5Hm2@E)$k&D|GdC=lWEydH80R6-X3>=R>z~Wzv11 zT|h3YytnD&N-B<9X?11>eJ`zulWW@3RzBEGFHr#8uIt;`xHvG+Y7F;EN#77TC%&?i zO`PTaTWc216`_Dt1EC?dwi2n`GH+jcsZ`&zoX$+0O|FAtl9=*|bQESI5l$R)KqswT z2s{JTJu z5h-LtWoYniiIk0(!%R6=&=w@00+PlB)}>Rg4O-V!)zDDc zzzf2!MET6a)Qg220b}lp?NHYx#HhA#q+ZJ;a|mR_1J(*6!a)-9bIbK47R?X^?;FgY zf4oeInjCi9;Gd?A#;_i<=zRNCgJ<2F8vBloLgPk%yf@$GA^Gz1T$y=ii0uW&fHjSe zsiCiL&V1$^C?8#P{Crrc6K7v%8`IcbzE4PC1?_&IZBT&s!+tRivz@W)$TY|BzP_Uc zP3rBF%R6xXwxAHYTl%6u9*+nVvDqp?pKxUahoh~A-rSUsNmYjRjbfYlHZ)gPv{d|> zW1Ef1PJ5ag1X%3z=Pxi#6jorXuS+!|fNB$UR%j z1YR>V0Gv6V0{bNFS|bEXt-pA0V7{`m)ghkKWnSs_>zG6$Cv`t>gsXUmZg_vc^zCsw z1AnvH=4H>>xtjOMac|p*2+S_mAF`N;fN+Z=OtA~!OuxEoAxMH|My<737t-{f@o*2z zM;D6+&d|Ut@n%dvzAf@z`{Yp5+KMOZ-A$-Fn=90SFW&+0;i~GT-mCr=PFPfRVlzTk z!#4cRnu-1II882cR=p!6;qkQXyecALIr1I2n~4ziA#a__tT-Dhsz7)HB<3$OfQ7>N zFDC6+%y^)V-?A2{z;~p+c;u{iTffQVVfgPibLL<8z1A#op|9T3k>!tRYQ*p9kBF(C z4hu2;cS{Bw>=mVb-dE?f0-4^e8Jd_E_s*vJiq(%=9ep#)3=qLaju;IPEJbnn@*gbF z1=QPVjeefgB@s&{6e3$VR*#EH!4o(N*9v4folQH0F-yV>Eg6SGlG^6_XSAh-CSk=A z@^&8GM5W5n&|em2nU^WGTsrY_-iHA{^lr_`&vb`dS>>hrI!yK8N%WH!9es~_hvz08 zJf#O0AV>%fE=*IG0|2m|ha0_F1M_@c?eC2Ve8;wU{2oE86;c_0im)>b4PpW}r=7%g zrC?ZEEHSaBq&DDhESjL!)Isp#|C;!YJTWiMZ}_c?w;|5g%qStR)1zN%Y7Tan)4pW+ zd6$WG{9S38+`}=SYc3&-)i!GdY*SBWQgdXzUDx)!;W{&BU!Jh$@y zl(g+$MQdxt8hmSi|9`9^p(RVi=QQ8d@TDo>kWLQ>q?FY($b2eJ#-cpBS&YRl0982j z$aXziNDyULD&qc?2yCFCZ%Ei3zfr(9b3ew8y)&}TisGoRO;Ut0W$ngyr3P+Bh%TKL zj`z<@Ws{sBLlwS!T{wvb-FqDx8?#2;+eWPl8kzsWZN`xx00+LcAgI>}SDBO7G3Km> zeOkijNiwBU#J9SeAshFRB_Py(vwRg>qV2RFQ2MA>-e2vbVwKbwjV~;&gmF9 zMFtHTWiSs||FKMs9^zDOZD4-78m{yW01Ug5Lhxpz-M-H_{@c`26k@ zg5S4b@nGT3*zj+{UkSp?%dsl4V8MTk#f%;3dKT;%psckn`*RJod$YB#^0X6X3;EI} zWjL3q)0Dq2t!At_amkE)MWWECY#q(lzOcLc&A;K~>kf0wShroShEHdf*|0{qz4TUH zu5N_>s(#t+$9`L!11$=h%IYdj;7ftM>_%dw>%oZw?t=7=rL zZA^Q>Q?_eNqcvZSkXS(`=ZoJ`+;LE^y%bHvCY$v>_Pv=b7R_wc$TQrbbBOx080EZKb$dG`L*f2(sz)9q0GG`YnQSmmgH=6FHtY{6>$PE|k+! ziXp;5Ab01ec;0Y}tKmsn0vyaE_#x$eAxbXe4cD(nVLevtJYdSgUh>Tk36-n2Sl~KE zVMz5@&)q=g;M*nXPzB4fYCRHCuJP@67i+cBG`MW>{VT-#TO2DMCpEI(^cgobZgyV?}Xx@x|9rV3*j^`bG z97)Ere#W(`7nizcW3aqhYBPKx^sMaVsuGDF*3XQ;B1PJU7I)}r zYYVTHe>U5n&inwWm@#$Ail10|&t=UmJwiX$$iYfzV*9&8-00t^UhbL!DOxyMuh()T zPCwL2Xj(Fia^AIVAvqfMlqegzt1i8K#Nxh?ywk*8nydA-1+KqRw3I9@4sLkLz)x|` z))8;pkatz&*HCEYYdKnz>owBZHlsc@>AnaI3jh~`=e{d z_=a3*Ke;)-RtaDM!Zg|0XVq`vo9uCe#esC2wd1zvLu@~6`XcI4j5ygSC*$5B8E__+ z^`=I5sUdNzF8ne|Z%GKhaMh*Ym}7*e=cmc7ee=b}SJV{=I_VzCNU6IhFbqUV9+UfM z!D`UQLGb#feaWXn{g{M(aqo-ZFB(ipbh=26nr~)p(()i=P{_ge)Kcz=__N^%T1-vi ziHz7N?dov#Ijpa>9-U$WF14;R)=C`k=6w0{#*Y$Q`Id$jUZaI7uN)4|YlMCzJYOny z7P-rGknFU*^*R%}yB@T7Z6k+Oz}?7UNyp>r1i0#^PS=8Zyc6yGb`Xm7T z>J5DLB~OPmA>EyUFrl^m5%k0S@Y}K+y^`u0 z+IY!os{Kw8mw=B$+ZuhUjlIt|FD3FN3+)Fxb00gTYe7Cu>lhF`RUZFggRQ2nee^@B z99o&Tl!z0Om0~Jw&u|b?b8M`{DjsU^i>OP!pdtx!kRf?M6WL?bq$C&0?x>1TO^p zGs!S$Yx4CP>)Q6u5U3xLH@!o<#%`yBL}W_^+@6hEna5v}7Ozm5uFBA&EQ=eLrmyrx zGGpG%7)jCwMVmbwh11a0*ZcdH4Em!6>Rz?NCv_{2{#=$b>e7S=JwABUKFL^Bd@1X$ zaU7>L4?lAesAK!liR4WvSWg4iP>N);RBGAri4iLH;~vrMGR3E?5Vhb-pIUR_AHxM_ z$1pB25sWaBgn$+YwQ2K8G}Mh}pD3gadD&3(RsBZ>g7y)@4jM50 zmR4q|lFM=(T&=g%@=+84spVT->>DB%O7{K|xfR2{f$b@6#4G1&_+gg=r{%s5{Q^Wj zGj-o{0|hjkjK$bz`d|cdm@Zi48R;r@)qZ2kty=?`h_^-CmXlt9 zAfl$#USd)Hq{%?%ZWkS_H$mdLc4Fn2B)RWC#apl#7C6Cm2E)^i`G+)OIS3(H7z>Q! z8E(MBsuWAr`^w`bVTN?HaK`Q{-Ih)E5YTv(3ey@``sEQ9Vigk%d6{u? zDx3@fg#81C@DB3xH{RahMlVmLj^5o`Nn(}_bXO~gKu}0!Nt&&59%tb=&cwUf8Xx>z z$%MjL=xtCjQE~`^3lahdc}ZGY3_KykPijaxDCh*bg|1zW1d%yh2nmo^gRZeT(`~_<6bTurJJ#Lv&vPi92QaX zEfTfyuf_9>l?$4ui@E#Uo}PAe5#Y2bu6B6QvYW4+BmVA?8E*aAJrxpMepW9JVFrio z9GS_Oa(I$AX%!TD>vr3At(R-zE};Q?m*2B?0Ft0(4HW^qU*91Z2JCySSJnBCzCGFe z$Qvh;*jWvpk`L8|dOG#*9n_JU8szltIz<4o?}5YS>Y+uVO#Qj3T^C|>-Wk2OxQ_s1 zP2?~zJG@#GGA*gPVx<}qbn-s6tVJHa=(v{E#7uUg4O*}zMhHd%2DYC(7`n_>^)J^G zVFpwlzAag}I6o)s#{J%d40K_9@{5oe0y!~Yvu^^(VUhE{MYCrePT>|~7p|TnnJq?l zzZ!ob9XmB@Ezo%A&5Q!I%0~|PQ;>upileweiA{1#0Z~Kkolf`B0{te zl)^*!Yeh?Ffk?nt+F%I!NWzds#it0Slx`X>sxD4*oM!^*WY;?M2kt9p#|b=--H)s& z4%)ds>bBw2KRiV1G4PND>Yd`9jVYoEZ+r}&W?s1q(_L6?#c$V&r;pv=-%3s2VPWLy zs16gkAl)yPI-2`VME1cF$p-SJK+196zP6Vgzl=8tFr`|(@=uDqHUnIx?sl;+SF2Z_!=(i)S2*?I@QD>K)FMp*x;mGzqwu(=2Lql`@m;pZto!J zb6R1?sb_r~Oga6P5*n4#Kf-nd92N*-rq{^OtxC(0&ci-r8--4G7kx9T!Yz{PjkY0x5QP<5J{u{hq&) z0%5V=l}^V6w7v}E_a!B0yj|vKvLK_KmrUG(s{aVTpVGgxLAVRoZ}03(X-+aSywh4} zzS+l>hHFfjSbyseWZ#o(QchGk3^|WIMcaTLCZMU%S;pNAzofJZicnK%!P=}>_&N;Q zRds!^1pwfhQgY+-G4eIso`P#zH5!$sgcZ-8UKUmDx46oGK-}I?R@*ClEP2Bv46?DL$AD?V<@?BhF zXThNQtu1q&^%+ePPU=Z(@5i#Y5{|#wuPldfHoALQgHVe|dR9!?>anAq(xrbJV&h%S zJiE^8vgn9=Z++}|Q>z%VI{Dh5Jvn<~GyOzt+ zsdu>VWVG?gkegwgdyc5nPuADV%1F}}PIj*=iKVDH374dP7EU2^4t1aP)K?=q-lpA$ znVp%*Z3`$R)HRAGO2w=VGQ+aHo%jXZgMXZ-i)(A2+|MXLpS-~pzTSn8a=}E?OmL(H zL6PBi%u!iU2SdXnW@k(USJ-pq!F6)KlI&I@h zk^_oLdZmymy~8bMev}qrNw~at#QF2RTLim7WVi9c$w^8q|^azx0W-LIIFdp1A7Fa{uz!k5lu;wW1*u*UDE3D0~(*i z_O2F>6gd@@5|{Rz_(wecmKRX z^{*QnoeXl0bKZvBJaVD}+rv$b7rJx?5`q-z1+*Zf2HG++I2rbaHnsA_c;M%`ar>=} zIA2lS87%daEW>5e`exY~a$%YJ%}OM~`R_|c&bF$wwVTqWpO@DPs(1?;qMUNSJm$Sp zu>kE;FyhC$_@F2jYDuo2$6}XFOXp&`TMDh);!5UD#kek0Gz#ZzoEDoDb(m2I2yH6A z=GdF$wteIqhmTc!aHa9=+d`Fn?!Vm`C!dgB%H5ug1_Y)1f>wQTOj>F){UzHd;B$G_ zU5>$>9+lF;Hih+5PtGQ(%Y;m&Uyi+1G1A)UHTnS2xVWuXF$h-4)mcC(5>1c^OM2S8 z&C`=4ieq6bK%V7*s8}cq*UrsYu3iptBFQU1;ZyCyk8gTW(G&(nJ7aWR~^o7egt z%E-3;?u~>^cedn@7`3846^xppB_RJVr*Ba%24tw)yL|7Mh3GS;wDUvw&C>r(#Ru3QhRxtsJr;ZuslJeFc&X202D>$N5Om zXOYnrjXw%mnJS9Wc7A`Fe?}Y%-L+GJylO?(V#@o>!y0Mh=Mez#q4sAuXeIx-!E8VB zB|-Hj&?1kf12))2%tiev69M*TR0s%5JEP2&w{XEY$p9)4&)((;ZmPxWW^cXQ$~;n& zaVsWb-13gigosqTQ%x0$oxzRz_gU&pO7zJ7r3~(GBk5tHlS9N|pb}>*QwkiZZ#5%@ zyVANA!Zmw9Osbkby1aq^i93Lsk2$dB#LR5Zin6VxwHCf)5IdQ4(&w7oK=Z1pPx<$gK2&5Y$DWf;%2-AAM+MR=X!+#CKl&<+-eLd+ef7ka}Up~C`chYlcPx&J-{*7BnJpg{&YxuUc zp6pC6vYzf&6bXwZ*#`)R$s^*r8oy*vFf_?*qrhb0^7--`&qMuy!|0yENByJ8jZzpC z&wzMiaZdjHacUBbb5yq~Cu}8@7Cs4v=$72*TyP(Tcar-eBT5DoY%b#gzT8+~^?&_0Rxu9_-~ly6l)GNoUM=6 zq=)ShYvp;jAK-%0JlX36*wsC_Rm-?9ANA@AS7I|aQl&SuCzWYzuG(=E%kANXdNQ(( z*ypC}pDy|E0|Afh9IQ98R4A}-HO<8^w;zdS`PA*o1}D{QGUTOZ%Vu3iiahmLds|wP zB2J7}!Yvz)$f#q~Tb2Wb%^f|NPyj!C@Tq%Vn@ZL|@zunBy!dHvCOcDo7_J&aFw}_4 z>3@kL^p&ppQ{L>O>k$vXgS^~jwt73xleFk)!6-emmSgAvr@2{BI+gT-w%~1kX9WT} z3mvEN|98qX<)NNZWd8?SaMYL$_r4vlrZ`!qu zs(*%oUe}VQ>B&&rr{aNQ-`*x7WM(pLZ(BpTEqfm$PNcusZF24k0U{Nb>_DG)tSaYi zx#tejJHDt*wQ_y^xg@&ZgOMG5DXWDyarbG8kd}%~I_p12lRU1^$y{@NQs9V03qmCwd!$L)X~%Y?=@?6`OD5(I`ODzA3=}kX9Wn8Gt3dh8bd4 z)^g;ghKO?L*t4*bJY-zc*yZ)JL!H4jIz-vUQgz1R%b(&2v&zYmgw6i-Z^6&k+(t5> zlJ1{orrKtt-@K4g8#4)gDxmE!bruZGVF)H$g-ZpWytZ6lb*#!&a{O6mLKCqTgb@tI@8Wv;=jp(f^$PrPHvPnsLnhsmdA;_aTam93H7dihhvvtIXM?xRD| zM!{-(r(U7ma~U~}QDedF&Yq|&QA1Dya)YyfGE$nafiqRgj5O_i^tH9ivt-}vP-=k+U)znasOF}o{yRigMX?woY{+7qK#N!b>T7tON!--LQU%yf(ZFAW%zEyz|NNLn z<|9ELV3;{hl=R$<+-ZNVfR?*2=Ci*@3TmdN*PzAH#RWX!6Wj-T_S8O6QVO6Qet%0d z+XCA?5NrN3OD-Z%*jfQc>_v#%e6hTyWyMK|n|KXqa%1`id}Qor3|SWUcB4tb*2A02 z_?w81+#I?&4B;~v2j6+y3yqsc!v-=WcIj|N=_Kmwiei0ub-~U#7L5ht0<}8POgNAX z`|T}_Q+dm7FIQJ?nQ1P|Snv`+)^)=AOqY{}G}b1}y$Y-Fm~&N$EAVJ$Ve&`h37#>h zRw_w1r47bB{L8pTE-6cLf{2njI^PngFVzP3o zPcK!7>aYtJW<_UO&~%H)9srzcde&roc>V5hqbGlgc};s+aD`7m0gd2ZA!*%UvDK~3 zVm_-HWUTLPodQ1isweoJ;!4ekhPiJ`xb~N4W05vDpY>M^4Orv6wVAy|mv%P5?**~z zZ^!qjmvj!Rv*?=maWa^5$e}5_(g~Tq?%8^gDwZWbS>KK}c_ze#-&HV9?S7FWJ`y-^5RI;cIDk8w!>zTI*P2a}SYeY-Sh1;L-8J-I5eIV#vo{2lH~nXn1rVlTokh z=C;z{)tX)NYJUY@BqwXqkT!}e{)i|eJPHpiQyovX+s$gK=yF7o{wiY3@u)F$nTzU) z(B2krHup5zv+zKluwRAXaYTTI%(rl*dFMR=1faF_7$yZT*X?;bcRnkoT^?X8a^`+- z!mHPhIW@ zVelC3xX|`*yibOvW5MC!SYXzU-&REWlrThNFWlk-i@e+uSR|b72UipwzbZA=_+u3* zQ+$>S%}5V%eQNjT5IYc!l1f>R%QcB(aKYQ#`n-M`wa$@51mu1hhr7 z>MRmalD;o&hPAZQ46Wy$ty6>F-q^kVSvMfqW)H-!P$o${ip3AZ!WObHn}KoIw=-N0 z@kJe5Pxs5&?TivT@a=M4>-cwv;-QOnSyNm_7I%Q;Mmd{wvo2r+H98hvqLAD&0K}$- z?l}C?n>GPSEVtbj#GG5Z-={YopVO}?(W6dRlw}sh<+#f5BD90;i@(|68O5@Ap5jVq zfz{~eTCUQ4mw1r53H-&Gz1X3_skD)+9Q;~l0W=Mmr-D5rKgFb^KbNJTrfW>mwPze zLByIBx~YC3OJ7w^A1DPH_rS(+Un*t>ALRsg?60`NETRm3{M9hRU*&T<+K{iI0YvCM zRzb}dZ!(6c-014P9I=bN@gFzA7fMiN0iqrZ8p z%`#tw%V@$$PgK@5;u`l`v`=>D_mK?Xbx?Bqvo=XmUw~8f83uC;Fv4n>UKjt=yc|vh z8PvRp7$3kN*B3!(_0CF;FtfBkIyiK^RwQ|RAM?QKk5YmxK~?|anDxy9bu=%$j0#T{ zZ2IJDCuM)Nt+VPtUP}x6XpQ(7mip0}sYd?U|HeSGi+B^^PmG}A4x6&475WbQZJopn ztAe~?DEp-vVUD7Fbj=#E70Cht(Rz;+ztJA93;KB z(?N7eL~N;Ku1%;MmOT)eEGgn3JkUrf-kvFiMAsEgYnl|tT1P0giou5MErsgdCTZ92 zVBqDrGW-pHZTyFj;+kTNaDOKlD4}$WgTGk65$uyNQkDj;}l^ zAncDB9F4~cS$nP#9$h^sa?%k|yw%pT+!7^=4;yk!(az@I9rxb^vW3|?$F30TZ1$LM z$eCf2nP{%cv7uv1lPCbI8-Pvk=lqG3*sAU~!SaBWnLvJ6 zm4_3Xza+G5?>#0<$DRf+e$_`+-e~;uSh()#)&rl=@!uG3!dlOIgdpU)o7ktUIRnhT~Er<+9y-E*vZ@$?1{pe#cQeA_>15+sa}tKZZ+p5>nuf^%b$gBgfW&RPZ=hLZ8-3`fP+{B z1jvn6SY^((p0CSwS~Xwp&5I%RlDKKwfaomZ6(N#--ryG`;u?IcnK{hqsi>XIjOOe@ zP7Bw>>ofY6al9zCDSs*HHh-FIp**llv{<7OS^jc^{&}7r(YJ2w4nOAJc zhQFR0ZK!U(>+mZXf`a}jolL4b6C}vVL9So(_Ap~|_;I+-cE5+`B7XokQ0vmJ)0SDz zds(_l<6ofSi0}&e74v|s7E(`K&riRXndi{vm1)1iLSbBUin~}Fy>*w19Nit8=&X#3 z&aGwwo%Z9rt%7AKhJY1vbK)bn1((UT4!lO8^&XqA{z^a_SwFe_fjIfh9?3k9xzBMvv zZ=NJ%lkU669vC#80x35EVt0C2HV>~jj1C9feA}G*RIJ4}pi7voJKeE3lG`ZVfZ?2S zI#ySCEEvRmE{vf_fj4aN?xFRO+C)~$+SUl>crpR{RS-YXD@GW=2MSDGa^hd{voWsE z#Lwz9ln-4FCAZ%qG{iu;eL!pn%cX0*BCq2!N(?{XSbum7$N4s{fBZa=gGlei1T1YS>Xk`{c4y|MrGj;lObZ={mnrml{3C1Cu<>eUI@go@e*Vt zpg}8IJF30=XySb+fyne?1(LunRAP=#1uETR@zONwAQH;FWOdK>=7#btYN=)S=5;i3 zG;h~?uvWxYk-sJX^k6im|3jGjU%aj3D;@=V$$H|e=!=YJuS0M#Xpf5<8TW)5xIH1o zn%2c9Wn_}%uzrrE;ytN|LG-^PoYt2r)H?WWc%fT5((~%%bDpN8?R-*e@oTXZ4wA5s z?7hVKL1)W8DFR&I{5P1J^q6bEgVo5i2*BA*CP1JH`~j6cwfYSH$FQ^!;BZ=;eim40 zKt7m+fm-rc-c!8Fk~>K}>|T=oRzMC=bmaH`pf<6=i(f}Jx1w3qqpl~;-7*~Sfn)8K zZ#|4?7PVJBgp~B1LL~B*Csf-t;L0JO9;ga^I!Q3k!(uwHn9*E&)+=Ggl_=?X?#4E! zpz6jk@*c??^0@{;Bg-!COVR{OM|GUC48k5P;8654^n)+47xu&@EHCW+AI3V*mid39``TZGeQ~#>N@?5oWiqAWAi8rNDt2>MCWjq?{A2JWN%lWm zCUF-zM-_e~F=11R2qZBUe)88({V6d?!WW!ZXAr2HzL&6#lpkE81cT;6R1zgoT%CES zzBDN6>hz%ye?(IWqm%j?Tjp!7Oji*^{(BI8BixkXl5L6xW)YWicsWfCN~zx~M-i>r z<30pqKGr<)a4f?19^=l*{^KMC7ud?0Ap$kPLZM0nwU8aT z*v}a7TP~ay3LzLNaQC=#DS}}t!SE}mO zsheJe?4#n$k-Z2L!vjCA)w3G6WS`s_4@Diw)Q5VCe(_ z*hhegE`ybHIO|-SIGq80|IS%RQ?iVsBkWqiVZm2)J+MqC!Pll?S>nA^ha`PMnc7>4 zg18qJa>YJhat&EnLg&A$8Jkm8_Szz2jgM;=(ZSG$CCu>hKFRNfggNuRe|AzJtzL&w zl&-#7S@`sj>+e{M)mIm5$PB8jh4g#GXtU(1n!E=T0o{IKd27nb^NmVW`lv7q@^ z%|t}xvzpgC%dSgNVTOy&(S!XH@t{l%39?{ng^Kdm1=q^e#GZ64JJO?LM^zeGCwrCE z9BNN9K(mU0v*}pr1!vBMf3*xn1iGiVVV-S=$M($&?C?W~**jrsZF~v#2U~Bls7*A1 z9s&o>xW4#$4Avi{3KKqBeURV+#1g~BY$*jSAxjsz@X41((t}39E&2Jof0-LKCDx;GkJAeWm0-?)*2SDAWTNV>$tg^{ z)OLIiYq#S+2ofj#rT#?IZi+XjAz2QriW9TK4zeB0PMk23#}6Ha?B2%_=NZ$tT?f|L z%>|OzoHYltI)S!E6o9Vbfnngh0my$CW41?1%)Ax?(rYHI<2t3pLs=nn&Be<(F8RU8#iW7Sj0Y;?P%)3I%;nKvuj%bVVoiL$#?UFLG48C4|Sb&TezvVzNzLEj1muzm_qBdsYFCXR&;MWzl616G^BZC zuLH0BA&2NH;@izu^>(&PdP`K5Yi8?@+7q*~6r^YAvg_r)gkJ=hdG$ulT5ZB}|zi=FZwvuet! z?JRPSt9x-JQueNBXJ?NKBihE;ILstiob(DF3$T9@qE1g<9m5#krz}Uyi8c;J^Eue8 z{&0UbWWgK^I@-%7gdg!$K3)yY3*vOiY$PZ4J28;%CCb9T?CO012J~LtRV#P{Dn8SX zDoA4NSL(&#Kwt!PQw#^3TBIp^Xr^%|qv0Gw0{uRgPp0W-_(7`^vBV>E^ zV>b1LOraZU+4J;Rhk zH7y6@X)zkQ29K*UoeECdhmU=~u@n@(Mal0T`hRLL;GHM8{fR6vv^8gU*~zL&mGdmN zYasRJIa}AIgc_Igfmvy&5cZJzKq%;F^K)hx%W=pk^AOAErn+;@?0RodVP0+#?wQn?#9ZC3ETj=`$4z+B&lm*$kd zgte8O-?8SDfSNe1WK#;`SjKi+PH#_0E@?n)1 zi83{dT^8|xzI@`gRDcXU!!{LFjBYF|2$!>+bQID3E&wrO^I&=vBuc<|2|FPxYxY^z z2I?0^y~)W^ZYs`#QRI(sm~ow7}6FELgYqEXH!>XK7@rQR_@E!`Aav; zx1HRaMmsXyF!WrzG~4Tn2kF1oXyJ~#izpZsn3>0f_M(LVo(y5B7=0<+EEu-uI2xjY z8qr>frjbjT-LM&v!unA{$7Dsg_H?LG@U)1B6y|VEBd8my=I2$Ov?B5XXW|`B4{6Y~ zs0g5Z41Yo!GZAW|XIKA`x0ga&RE=ZqIk_mTVmE@va*G5o(AWXfWj&hZ(FW>!lMaTC zb0G%*DnIdNKW&O%-yyAC%EPXAubQx>=WEnvNgA`jo!c+dZPc}SWzVbAMEcE#7`j>z zE561ZczZiFo3o1tcB+Wd>&*4DVGj-4v!!A9eyEB-;SgzE#tpQW_49tc=w@@=hTTs( zpoF7_l_sJhVWp^CP~y7Ay9R!k{Oe z67X*8A2s|?7-az?pWJa-1QYa*P!v^f&wPo&HhrmaTiPiS^|v`}Np^2{v5s!!?Uj31 zN)DT1g~24AeuLg7R4PRjkeYy##4BQ^L1VaZ7omnF2~jegkr$m(2~WF%`{C;7)G__` zX8NRYh$}$FD(pYrFpFw39mpXC+$$FQxjSD=X%nObLFVPOuKoBZ7x2rgdCx+JAKy2G z1-8Zo!+95?$EJpK?1QjYg_W#Ml=J^A;986#&1%(~usVFDXOdt`Aa?F_>P0rUwIDr$ zAk|=^qaS8YYA?|gmDnJSqpJSUYLl7uE(%N`ngSV_hqY^4e{KOuQFeZ~)VV3I(r z-B8)WH}OXu)N6n76lmApMSH3EIKt5>J+hm?0hO-S+5y=)n(&!)^=sw}I|l^@HsT)Y z%gB{PIq&!Ek-GW&R9%`(A|{yHtzP!Dj-)LO2yp=e7P+b65EazE)U!&H;63Wh((}9w zM$U!!Vkf8FD|CrThM>*|_fkR4eD@9(R26^6Agx@6I#K-Be$K+6M-F(nvZA)l+Vx~& zax$8lLk(F4qnIV!)WtQ_{%G9VXXf@8HQ0U8Dkm%s-<|r1#B%o*1-wKd*aBHQJ2t`) z^RoFmx69`P*217ztfwO?bjjiK0}PIgpWsH*EU*>zO6WBywlN%>|1uaoEmZmM)M~DG zy#)L#t8P;(_}tI(#$a+?XBdyZzN_H@^#pz9*ML#iY~F8m$F`UE(of~C-Bcx?9f zGk4wi8Z|*Np0m1E>|sB+N|XI9Wh}to+{YbYl!h;cKa6=7jqcwKKzbIlQnOAvb(19s zV*Ef>>itZ=du+{<-TLJ}@A#86q~42ci2qNVTk{r?Y}#mxr* literal 18579 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 + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - - + + - + - - + + - - + + - - + + - - + + - - - - - - name + + - - + + - - + + - - - - - - __construct(name) + + + name - - + + - - + + - - - - - - draw(font) + + - - + + - - - + + + render(font) - - + + - - CharacterFlyweight + + + - - CharacterFlyweight + + - - + + CharacterFlyweight - - + + CharacterFlyweight - - + + - - - - - - name + + - - + + - - + + - - - - - - __construct(name) + + - - + + - - + + + name - - - - - - draw(font) + + - - + + - - - + + - - + + - - CharacterFlyweight + + - - CharacterFlyweight + + + render(font) - - + + - - + + + - - + + - - + + CharacterFlyweight - - - - - - pool + + CharacterFlyweight - - + + - - + + - - - - - - __get(name) + + - - + + - - - - - - totalNumber() + + - - + + - - - + + - - + + + pool - - FlyweightFactory + + - - FlyweightFactory + + - - + + - - + + - - + + + get(name) - - - - - - pool + + - - + + - - + + - - - - - - __get(name) + + + count() - - + + - - - - - - totalNumber() + + + - - + + - - - + + FlyweightFactory - - + + FlyweightFactory - - FlyweightFactory + + - - FlyweightFactory + + - - + + - - + + - - + + - - + + - - - - - - draw(extrinsicState) + + + pool - - + + - - - + + - - + + - - FlyweightInterface + + - - FlyweightInterface + + - - + + + get(name) - - + + - - + + - - - - - - draw(extrinsicState) + + - - + + - - - + + + count() - - + + - - FlyweightInterface + + + - - FlyweightInterface + + + + + FlyweightFactory + + + FlyweightFactory + + + + + + + + + + + + + + + + + + + + + + render(extrinsicState) + + + + + + + + + + + + + FlyweightInterface + + + FlyweightInterface + + + + + + + + + + + + + + + + + + + + + + render(extrinsicState) + + + + + + + + + + + + + FlyweightInterface + + + FlyweightInterface - + - +