From dd353f3288d145515ddd2f9c284cfba58caec86a Mon Sep 17 00:00:00 2001
From: markpollack
Spring.NET AOP also offers:
+Spring.NET AOP can be used programmatically or (preferably) in conjunction with the Spring.NET IoC container.
]]>Spring.NET AOP supports proxying interfaces or classes, introductions, and offers static and dynamic pointcuts.
Any Spring.NET AOP proxy can be cast to the %ProxyConfig:Spring.Aop~Spring.Aop.Framework.ProxyConfig% AOP configuration interface in this namespace to add or remove interceptors.
+The %ProxyFactoryObject:Spring.Aop~Spring.Aop.Framework.ProxyFactoryObject% is a convenient way to create AOP proxies in an IObjectFactory or IApplicationContext. However, proxies can be created programmatically using the %ProxyFactory:Spring.Aop~Spring.Aop.Framework.ProxyFactory% class.
]]>Users who want to use the Spring.NET AOP framework, rather than extend its capabilities, don't need to concern themselves with this namespace.
]]>The various post-processors in this package need only be added to an IApplicationContext (typically in an XML object definition document) to automatically proxy selected objects.
]]>The simplest implementation is the %SingletonTargetSource:Spring.Aop~Spring.Aop.Target.SingletonTargetSource%, which is used in the AOP framework to wrap a single target instance. This is normally appropriate, and is the current default.
+Other features include pooling implementations, that provides a target from a pool for each request, ensuring a single threaded programming model; and a "prototype" implementation, that uses a new target instance for each invocation. (Much like single-call .NET remoting semanics).
]]>Spring.NET AOP also offers:
+Spring.NET AOP can be used programmatically or (preferably) in conjunction with the Spring.NET IoC container.
]]>Spring.NET AOP supports proxying interfaces or classes, introductions, and offers static and dynamic pointcuts.
Any Spring.NET AOP proxy can be cast to the %ProxyConfig:Spring.Aop~Spring.Aop.Framework.ProxyConfig% AOP configuration interface in this namespace to add or remove interceptors.
+The %ProxyFactoryObject:Spring.Aop~Spring.Aop.Framework.ProxyFactoryObject% is a convenient way to create AOP proxies in an IObjectFactory or IApplicationContext. However, proxies can be created programmatically using the %ProxyFactory:Spring.Aop~Spring.Aop.Framework.ProxyFactory% class.
]]>Users who want to use the Spring.NET AOP framework, rather than extend its capabilities, don't need to concern themselves with this namespace.
]]>The various post-processors in this package need only be added to an IApplicationContext (typically in an XML object definition document) to automatically proxy selected objects.
]]>The simplest implementation is the %SingletonTargetSource:Spring.Aop~Spring.Aop.Target.SingletonTargetSource%, which is used in the AOP framework to wrap a single target instance. This is normally appropriate, and is the current default.
+Other features include pooling implementations, that provides a target from a pool for each request, ensuring a single threaded programming model; and a "prototype" implementation, that uses a new target instance for each invocation. (Much like single-call .NET remoting semanics).
]]>Inversion of Control (IoC) containers provide a simple but powerful means to create and configure properties of objects in your application. These properties maybe simple types, such as strings or integers but much of the power of an IoC container comes from the ability to set properties that are references to other objects in your application, i.e. an objects dependencies.
+An introductory article to IoC containers can be found in the September 2005 edition of MSDN Magazine. Links to additional introductory material on IoC containers can be found on the Spring.NET or Spring Framework web sites.
+The design of Spring.NET's IoC container is such that your application objects configured by the IoC container almost always to not need to depend on any classes or interfaces contained in this namespace.
+However, you may find it useful to reference this namespace as it contains some general framework style classes These range from %Spring.Expressions:Spring.Core~Spring.Expressions_namespace% that provides evaluation of object graph expressions to %Spring.Util:Spring.Core~Spring.Util_namespace% that provides various Reflection, String, and XML utility functions.
]]>This example implemented using Spring.NET's IoC is available as part of the the Spring.NET distribution and documented as the MovieFinder Quickstart.
]]>There is no necessity for Spring.NET applications explicitly to depend on the functionality provided by either of the %IApplicationContext:Spring.Core~Spring.Context.IApplicationContext% or %IObjectFactory:Spring.Core~Spring.Objects.Factory.IObjectFactory% interfaces. One of the strengths of the Spring.NET architecture is that application objects can almost always be configured without any dependency on Spring.NET-specific APIs.
]]>Contains abstract base classes for the %IApplicationContext:Spring.Core~Spring.Context.IApplicationContext% and %IMessageSource:Spring.Core~Spring.Context.IMessageSource% interfaces.
]]>The classes and interfaces declared in this namespace are central to Spring.NET's Inversion of Control (IoC) container implementation.
]]>Contains a number of abstract base classes for custom IObjectFactory implementations.
]]>Contains a number of abstract base classes for custom %IObjectFactory:Spring.Core~Spring.Objects.Factory.IObjectFactory% implementations.
]]>This is useful in those cases where attributes may need to be applied to a class definition to take advantage of behavior that relies on the presence of such attributes. Examples of behavior that can be controlled via the use of attributes include COM+ ServicedComponents and web services.
]]>Inversion of Control (IoC) containers provide a simple but powerful means to create and configure properties of objects in your application. These properties maybe simple types, such as strings or integers but much of the power of an IoC container comes from the ability to set properties that are references to other objects in your application, i.e. an objects dependencies.
+An introductory article to IoC containers can be found in the September 2005 edition of MSDN Magazine. Links to additional introductory material on IoC containers can be found on the Spring.NET or Spring Framework web sites.
+The design of Spring.NET's IoC container is such that your application objects configured by the IoC container almost always to not need to depend on any classes or interfaces contained in this namespace.
+However, you may find it useful to reference this namespace as it contains some general framework style classes These range from %Spring.Expressions:Spring.Core~Spring.Expressions_namespace% that provides evaluation of object graph expressions to %Spring.Util:Spring.Core~Spring.Util_namespace% that provides various Reflection, String, and XML utility functions.
]]>This example implemented using Spring.NET's IoC is available as part of the the Spring.NET distribution and documented as the MovieFinder Quickstart.
]]>There is no necessity for Spring.NET applications explicitly to depend on the functionality provided by either of the %IApplicationContext:Spring.Core~Spring.Context.IApplicationContext% or %IObjectFactory:Spring.Core~Spring.Objects.Factory.IObjectFactory% interfaces. One of the strengths of the Spring.NET architecture is that application objects can almost always be configured without any dependency on Spring.NET-specific APIs.
]]>Contains abstract base classes for the %IApplicationContext:Spring.Core~Spring.Context.IApplicationContext% and %IMessageSource:Spring.Core~Spring.Context.IMessageSource% interfaces.
]]>The classes and interfaces declared in this namespace are central to Spring.NET's Inversion of Control (IoC) container implementation.
]]>Contains a number of abstract base classes for custom IObjectFactory implementations.
]]>Contains a number of abstract base classes for custom %IObjectFactory:Spring.Core~Spring.Objects.Factory.IObjectFactory% implementations.
]]>This is useful in those cases where attributes may need to be applied to a class definition to take advantage of behavior that relies on the presence of such attributes. Examples of behavior that can be controlled via the use of attributes include COM+ ServicedComponents and web services.
]]>Some of the benefits of using the Spring Framework to create your ORM DAOs include:
+SessionFactory instances, ADO.NET DbProvider instances, transaction managers, and mapper object implementations (if needed). ISessionFactory instances, ADO.NET DbProvider instances and other related resources. For example: related code using NHibernate generally needs to use the same NHibernate Session for efficiency and proper transaction handling. Spring makes it easy to transparently create and bind a Session to the current threadSome of the benefits of using the Spring Framework to create your ORM DAOs include:
+SessionFactory instances, ADO.NET DbProvider instances, transaction managers, and mapper object implementations (if needed). ISessionFactory instances, ADO.NET DbProvider instances and other related resources. For example: related code using NHibernate generally needs to use the same NHibernate Session for efficiency and proper transaction handling. Spring makes it easy to transparently create and bind a Session to the current threadSpecifically, it contains an abstraction for transaction management that provides the following benefits
+Provides a consistent programming model across different transaction APIs such as ADO.NET, EnterpriseServices, System.Transactions, and NHibernate.
+Support for declarative transaction management with any of the above data access technologies
+Provides a simple API for programmatic transaction management
+Integrates with Spring's high level persistence integration APIs such as %AdoTemplate:Spring.Data~Spring.Data.AdoTemplate%.
+
Spring.Data also contains an abstraction for data access via ADO.NET that provides the following benefits and features
+Consistent and comprehensive database provider interfaces for both .NET 1.1 and 2.0
+Integration with Spring's transaction management features.
+'One-liner' implementations for the most common database usage patterns lets you focus on the 'meat' of your ADO.NET code.
+Template style use of DbCommand that removes the need to write typical ADO.NET boiler-plate code.
+Easy database parameter creation/management
+Provider independent exceptions with database error codes and higher level DAO exception hierarchy.
+Centralized resource management for connections, commands, data readers, etc.
+Simple DataReader to Object mapping framework.
+
For more information refer to the Getting Started section within this documentation and the reference documentation, the latest copy of which can be found on the Spring.NET web site.
+]]>
This ADO.NET abstraction depends on the features of AdoTemplate and as such exceptions thrown are in are thrown are within Spring' DAO exception class hierarchy.
]]>Transaction callback interfaces and delegates for use with TransactionTemplate.
+Exception hierarchy for Spring's transaction infrastructure,
independent of any specific transaction management system.
The classes in this assembly provide server and client-side support to export plain .NET objects as a ServicedComponent, Remote object, or Web Service. Exporters can be configured via Dependency Injection and aspects can be applied to these exported objects.
]]>The classes in this assembly provide server and client-side support to export plain .NET objects as a ServicedComponent, Remote object, or Web Service. Exporters can be configured via Dependency Injection and aspects can be applied to these exported objects.
]]>The correct wiring of your Spring IoC container contexts.
+Data access using ADO.NET or an ORM tool. This would include such things such as the correctness of SQL statements / or NHibernate XML mapping files.
The Spring Framework provides first class support for integration testing in the form of the classes that are packaged in the Spring.Testing.NUnit.dll library
The superclasses in this package are ideal for integration testing. Unit testing should not normally involve the Spring container,
but should test classes in isolation.
The correct wiring of your Spring IoC container contexts.
+Data access using ADO.NET or an ORM tool. This would include such things such as the correctness of SQL statements / or NHibernate XML mapping files.
The Spring Framework provides first class support for integration testing in the form of the classes that are packaged in the Spring.Testing.NUnit.dll library
The goal of the framework is to make it easy to write 'thin and clean' web applications. By thin, what is meant is that the WebForm's responsibility is to act as adapter between the HTML based world of the web and the oo world of your application. The application layer your web form communicates with is where the business logic resides, not in the web tier. By 'clean' what is meant that the web framework should have a good separation of concerns, leading ideally to an event-handler that does not contain any reference to UI elements. This makes it possible to test your event handler code in integration style tests. Last but not least, Spring's web framework reduces the incidental complexity of common tasks in the web tier, for example the conversion of HTML control data to object and then vice-versa after the request has been processed by the application layer.
+Highlights of Spring's Web framework are
+Dependency Injection for all ASP.NET artifacts. This includes pages and user controls but also modules, providers and HTTP handlers. Your pages, controls, etc., do not have any Spring dependencies in order to be configured via dependency injection.
Bi-directional data binding. This allows you to declaratively define the data that will be marshaled out of your html/user controls and into a data model that in turn is generally submitted to the application layer. After the data model is updated in the application layer, those changes are automatically reflected in the html/user controls on post back. This removes large amounts of tedious, error prone boilerplate code.
Web object scopes. Object definitions can be defined at the application, session or request scope. This makes it easy to inject, say a session scoped shopping cart, into your page without having to do any lower level programming
Data Model Management. While ASP.NET managed the view state of your form, it does not offer facilities to manage the data model that you build up to submit to the application layer. Spring provides a mechanism similar to view state to help manage your data model.
UI agnostic validation framework. Declaratively define complex validation rules, for example that take into account complex relationships in your data model. Error controls are provided to easily render validation failure. This allows you to centralize your validation logic and also reuse it on the server side, for example using parameter validation advice described in the aspect library chapter
Externalized page navigation through 'result mapping'. Instead of hard coding urls and data to direct where a page should go next, result mappings are externally defined and configured that associate logical names and a URL (+ data). This also allows to encryption of values that are sent via Response.Redirect.
Improved localization and master page support - Advanced localization features (including image localization) as well as declarative configuration of what mater page to apply to different parts of your web application are easy to perform.
+All you know about ASP.NET development still applies, Spring's approach is to 'embrace and extend' the basic ASP.NET programming model so you can be as productive as possible.
++
]]>
The goal of the framework is to make it easy to write 'thin and clean' web applications. By thin, what is meant is that the WebForm's responsibility is to act as adapter between the HTML based world of the web and the oo world of your application. The application layer your web form communicates with is where the business logic resides, not in the web tier. By 'clean' what is meant that the web framework should have a good separation of concerns, leading ideally to an event-handler that does not contain any reference to UI elements. This makes it possible to test your event handler code in integration style tests. Last but not least, Spring's web framework reduces the incidental complexity of common tasks in the web tier, for example the conversion of HTML control data to object and then vice-versa after the request has been processed by the application layer.
+Highlights of Spring's Web framework are
+Dependency Injection for all ASP.NET artifacts. This includes pages and user controls but also modules, providers and HTTP handlers. Your pages, controls, etc., do not have any Spring dependencies in order to be configured via dependency injection.
Bi-directional data binding. This allows you to declaratively define the data that will be marshaled out of your html/user controls and into a data model that in turn is generally submitted to the application layer. After the data model is updated in the application layer, those changes are automatically reflected in the html/user controls on post back. This removes large amounts of tedious, error prone boilerplate code.
Web object scopes. Object definitions can be defined at the application, session or request scope. This makes it easy to inject, say a session scoped shopping cart, into your page without having to do any lower level programming
Data Model Management. While ASP.NET managed the view state of your form, it does not offer facilities to manage the data model that you build up to submit to the application layer. Spring provides a mechanism similar to view state to help manage your data model.
UI agnostic validation framework. Declaratively define complex validation rules, for example that take into account complex relationships in your data model. Error controls are provided to easily render validation failure. This allows you to centralize your validation logic and also reuse it on the server side, for example using parameter validation advice described in the aspect library chapter
Externalized page navigation through 'result mapping'. Instead of hard coding urls and data to direct where a page should go next, result mappings are externally defined and configured that associate logical names and a URL (+ data). This also allows to encryption of values that are sent via Response.Redirect.
Improved localization and master page support - Advanced localization features (including image localization) as well as declarative configuration of what mater page to apply to different parts of your web application are easy to perform.
+All you know about ASP.NET development still applies, Spring's approach is to 'embrace and extend' the basic ASP.NET programming model so you can be as productive as possible.
++
]]>
Tu|@N!&E?f{AUr&3;Ptws#4 zSP){lAK1n&L1R^5Pxok8>~4E@_kG>vN2lKgrvD*vlp*)PgR<{x=O(|I5(f2T{%;4(DK7+}mwy5q;GcBhGxJ(#y4N>x`n;`5 zS^Mj0AG*@-wxIO-9TTJqns++{zw2>S8vU-0hvobq967;K(Vlb+rP2khC!N`%(uHf5 z4kBQlr6>2|ty|{4LG$LWzA>GL@=tZMVAyP7x*R6^Ggxq`huLE<)&Iz-pastP_R`?| zfi_+DA|s3^#Dexx^C#I$R!Kn}kH$v8Xpo$Ox# azWQPxEk#Qk25y)y~X!oeLpVP2i3wp?89X+tRK#01fNw6jTB4C zUm=?mxMonbpoDrC#ges5fk%o#sb?~GXn?X7olD6*{JNrLn@5;$$b_(z{E3_zBcTSI zcL>K6f<`eI9l`3i)w5}4){M0^Iuw-RT9I~ZG^vS*jIXAH{mFMxgqq}Gol_JCg61!A=tG-CI9 zCsR4JWly?AoGKN;-86Tvu044=e1^`@xOB(w-HczwjUYW6?4RC9wnoSeUf4Evun~0C zHf;=pu(f$HBTBalV c?m5&slx0#O^+xiR>W>-d>=1J!aYescHA92ORc5t0|&HMg-D%KC= zBQ&JuN5#Q{;~{za|7|?_G+%}Y{C9p|5HUvUNz=cubtKBBgKCmZ7%gNvBI+RCq!l}` zQvs!=%XBo_fIP?0!44yAI-^Ig6UXT4X=opi0R7u4Y|2A+{6x}Mx^%U>y6TO$YXirj z+GOr`x%1;%b>mYFU~XJY-YVP6rPOf8jJb;!EDH8NqHDKhKj-PQkIdC)#o#u|;ZCN! zf $HGmFb-~{KdTHE>SsvDXg13lnHi96m`O zT2M%Ib;d0_ B!pM;1g5WI otJQ{3ZDjLNf8>v8?^ zVFc3%QY)tQ+Imhp0-iCt>@8kITz?$6dz-)RW9o^A6l3koLD`3%ga)EiZatlu%Sb7V zlRwM(C?(J1xw8uJ{jvEgvH2?=(}k?aNI7 RXIFQyZo?Zm09R<;Fgm8tBr;w9vX&QG`(y7d*uN zR$X^de!1Shp56|WHHTb4 HF-^|~i+9^u@2q#Z3_CtL!VmW@! zcz&u3Z_e{$?hl75(NKA)zdNm=hvu@Ny|~65IGJmyv%9Xv&T4xsbk=Y+|7-_3@k4X{ zgG%u6kiD~A+kk%{{zoTD^LOVv=kUaQr^~V<#d439VugxeQ+L*5C~B@!?wR`>7_cZI zx3p}!#8s#j(|J!hoA;=PZr+2RRKWK&h1tMO58FnKwspF#E{AQSOIvmNN8@C%_dHC# z Raj-
M1nLLZf){4_) (#EU-A27_Bf+vVxChMi(+4K)-=$)6ocdn25 z_&NH|Ns&oTP76A3_XRufc4v0z?T+ld13aX2dVJmgeLP+OJ =Sm-=LmniuFBikXMB~7k5PoLtb0X(Pq zrqYuUR9f=#5_HvahbyBwDXgM0dr`*w#)W{UWtT`V)L#wc%3K&xTuhb{kU-_XL_9T1 z=|b`p&_sgqJC?eX=6N9zy!wTtCl~P}ov0p_l8bp-QyM@ugNp5`0FH34Q6{RtNI=83 z`k34(1ft{;Y9Lokh*|Epr`Vn !Sou 9Vk<8X63&sa-jO)*#4%DS~le>%$3IUND#bg=pEHjKd`vcFdaw^t} zo(vd|j90??GX+k|cf^pY!~;g_vr1ukkkxpH+o;2B)Ns>Un)5LjWZ=}9VhW#nOV=oQ z8vS%gsoW{F2jebK4&*EII5HVyR3TzNOSCWLR@)sUF>wO)%9{GshODQH_D-A!eCVhC z^vZ`pf{p1_6f_R^aFR`c8E7ma&dJTDxAz5M1%bN8cq!Y#ao+;lC_Ep9P;a*lZXbnW z;J>GR29EZ}I|pdw@(m3(_UX5VDhTK`hPvC85o{l;dNu*Z<)ws>8fCTvjAcjeZ6DL; zwlCHW61(s2A#nsr2n15Y31Y$+R)}X#V?>|DEeatl*E?!3*V2V^TB2~))EBmo+630x zDwDH8;Mv||f}UJqjcsQ%##}G&Ho004zQL-Xwofny@%uu!^zg@NiB ?cg0d3T>YWwl4=MQJR4r;udBu zBsW LWNLJ+OErSmN;Q3nm-392HdICG@QO=XxC_a5fvI(4JR1 zln{@|lT`$8vALmOV5gv}ijpswHP~1EiJV038AO|DHiXlSkEfU>e-~(tz9_+VSJnV= zi$R|}EG2 m+c2)BTlTW-BFw77CJm zST0d?!9+C|7ihumb3g{ih^=q*VA-3uh_aiI)4qXHb14<@fk`PRSMghaK0gjZtuTIi z|NXXT@7gali2!@>;7PXRh$4pH^`+zm)J4xAqWHPCzv5yLEgDVpHkZKIbTEru0>l X%GS3->2aFL$(9#uKNDfP#W%1{OwtGgd-Ix52+C4Pi?)nGl zFE&g4)y4JqPPMDYdHproJt(X*a Oz{*mTm^-h!G5>>|bX8By&AVEyv z jqSv*+mG6i=EKZ^K6z&WT*S7JY?c#?YyR>1pk )4Z-B0n z?m$!vQL_KqARg|s9iNx)Zt4M;OstW5X5T*p4YvXrS(je94cT-19%SPyTO<|D=fuz& zd8}-qnZo3m* 3#^QQ-fh!*QAQ83$?rs?z7FJrZ2*_8fCe^ zEhri1Xbg7EVAWBCiU}}=5c_(_=r<6JTiZ}m<)N2vdq?GGDN<;Di~62tBG=`y6pX<+ z2RI<5u~#3vBBUqp@VIVuv#gU0T7_Y^9+3sY#vM2r>f30Ai9lGtfvz~|5YFOLGS!yo z;A-J8(#^kiyJ>k9Y`@B+Tl_LU&C$`-cdWi^hCa{I0ERx+PE22av#!o2KQZfX{q>H{ zpj~YqSc1&|K$qAPXoEwlI`AfSU^}}K>(>iL*1PR1ND=_bX~VX7YHTz)4QZ!=yKQ>s zeT-!RyAD>68a&q*v@HXU2FY60@SRQN@vRw-IXYEK>riN-xajN1eWI2a)U-iNrh( gTcBctX$%Ew>K z zEN}9yy>if1->!UDg*$t>3>;w;+35GcPf=2~*n}x>&(iR8pUug0<&x5zV)DsAIDnz0 z)5Lq3CS++mFPi%zQ~o&uit(whVlAel{O@$qkH5)q hx+B^^O` >fZsfv;orK67h|CV0 +M}^jx1WeMKw)|Fni=*jH7lF`EAxxcpm1%nCDDu4@GYe-v zN_dS|!qx3#H2le}z&yR9dp8whaVa&Y4*N8y`xuHiO+}!XAc@QEC^>9h54xRWySK-2 z8#IVwRwS4rLb8P-2^1yNH3N?^Yj*EfT_b5R=K;6}1g#q=f_pAtZaQ8{-b@nXCZH~9 z{A%2;K9?RewDZ1OT!H7xW<1TlDhp#*@i6-qek{Jt2JIY_F$d))LDy2H$|g7S!@F_? z3ze~+bQ*iGw=b_1+&gh@*9VB^LuRYn8iVoE-B8#=*cRFEFHn*<8^gA! gP-vfrRo6CPw{O$<=A5@s{h}rt JL=gQSLK&3~n&dX`Z OatM@s_~@#TO3vNn7Sg@Oa z`~3Wze&B7|`T0HL{DpkJ(+fHJBwy@iGe(Y=dw6kmw}ABI%3fX#+c|DaddfOjJ-A$+ zhczFUFQwT(2rcg3IR#FBApZkG;vn!MSll_8+q@3-eN+jfuIXq!c^y4VKd1wpSGS>e z=B?=7nZmEg6kY^MIalk&$P^BQ@M``_`OhW4lzf@rHDOyg#G7`N`%nTWl#No73in}K zZQoxYx&*v*g~f0Q18gOT@IPmReZy_3Mogap>IaZB#I_pZ@UZm&k7tf*u11v_tQM(L zvA2pYW0B!E)=^H5g0gYFe&PM87D@d=a221d;0hUPyppqs!0JC~=;G$Pxlg{r{g%f9 znC{seoN$f(!_#=Y+Di|7m{paSm!Q?B0s9v_wX$y3eEVGBzZIKQ~P#4cPfc82)`8qU8 zzQGR$(AhxdT( *90QJb8t&>h_((wmP2h4rg4o*SB_Ftk<{p;Q5N6Wb27~6K1zZ z219F+8u>rMkzp2&8l&W!DUOGcqVbQCZ;=$R!Wp(T)KT(ndzO QW>-sXyq)M8$1P=A^4q zmR_YEWT^$Mi$KkduJrbL(jln)+q-FzaUvkFDwsWo%FSJAJaVt7L&Ay+c@i=oX75L9 zf8f*)NP%tKR!_OuEv^VaHfelk*t!P*oeN0J#60ReMUREfg}M|ws5Vp8w#Nq@A|H+} zhV@5?m`wiGsl^$7s@o4_;oeZ(V)PN9xp=z#Z I zgd0BlrNQ*%xaKO!F&kvZq8r&x`mf}1zRj<=B){edtn>!qx_5!GZ}D|=TlB?$L-CRR z#(IAc&Ze6HJmBlxPMvb{TT0kOu$=s^d;5EC>;J}&?*R2Ny%jY({lV@DG`wJ`Nv2ZE zwMsh4bZw6%e^7lv@@p_X%wm;Ng2hYb5R8{J|DB41{mCEIY@wew^0yk#j;&&59*i!v zAfArE84KHzg&S+t@vtr7;BIs@`48%C+7E%yiy$L0%lvH4b92^nf|GAa=d3Ok sV>)KzZ}aqad8B!O7p*6{$W5S%3*x zX0h!In<=S|>og~_A(~fCmdkXuIlYsHT6O!4h!bgpB^&zWzl2uM*ps5~dPqeBon6%Y zF=agj>lg|{$2>W_?W`xF5bO3QKod9jTi&JCLEJCYeb j3(#T(XjOJj(ei~71LbhuKg)E)&Ttk5Q=F%-j+?U-bh}G>k +eN;z672`LsYiEQ3j z5buR;!HdGSiYFT=W*mAZ8EPS7f267 gi z5Hxe*?a88GbhltPXHN>j5ba@@v8$NMC#Jo^djuCc9AKQWZBhLh9Q{%Wwl8Cc=`Uy` zYL2b&O_jVqBXF$t~Hcz9p(NXCo@I2SjozhSmNT)H0CS{Y;yInJ#f-9yq&3w$iML9exN$_+O zHCV^O_EtKZlw7EvF90DMO)uc48pb8)bttzTp~42%`gwX#TbjmM8|YE($&}C12c+q0 zl!RPOfAGpRZ#4JwW=LV?>y(>~$k~Qb>a+R7Xf)m`kWz^gqMsFNriw+?)(7n9V%k_4 zD9ticV^=F%=+dD1CWa|$enKNV zsPe5dv;b3@9pa%sVa`>7lV*pxCLH0%Ca!J!remHgCSj8vvsbi@2J7kDliZkzzK#%V z*w8~G*Wt?2)(8;lqx@8j7#x6BG8)*HYR&8R0+!i}j2c*exM6k)m3+5@20`W7v0Q@Y z4#nWNkoL*KW9c;q$i!nm$GYUcu~r%126)H6JXOMN>(a?pTz`^=yksLW0Pf-lBmZEz zTgnnf3gy{x+IHme-K;;E>OpySDH;84q{_3*iYn2y7bQD!C2u*GE;?=mT@4he4K55b z^CJilM7*ZY>qIuZX{LimJleq3;?38fs?$U8u+&JRtKi$O5zqd$lny7}ndPcqDjb7G zGw70`xpHN2`HsnTZOW^VtG+Y%kCe-^OqJ5k=LuomP0=gQuA~&lD@<_V?VZ_GS*6TJ zgf#3J1oL$R*s!d#%#A83$+~P<+O~H(bdC-6i0{QAgv39K!99%q`5OCWI~@CLu<6Xw zZ79baCyYK21LS+@xVm?^yBM>-a)utmJGH{rkz&NJkseo}xcOys#_Rar@#-b4c!!bq ztg~xIJqEM>RE?vC_dhhe!OUC5GTjc@nC_Si`7vGE<;VO8@78TD-*-2{8B%#Z*de;T ze30!Gb-sYc{*L=K_W6O{Cmk6#(0cR(O*f_Yt6VS8Shqg9n>V$o3CXQct85gY&;lG! z^m8R%a>kMHqSQ E!dc=Ko&&?#gSn5BL-=K^@o%z>oSzZq{fsd0 zXN0qdQKjVT$H^ldoSc2Ok&kR;)w~Z|CdG#L-)!7rZiVAX9Q4ena}bb$3L3iyQCBbd zRo1x{Uk;e&jnAUb7a1+WReijXq4UJtuqB5Byb`Z^!7yH;H*u)t9*>|fzU`A~`5RHU zkD^Mov@AJ7eTq$yuKEI;UnnMzCTXC&EIHD$lB2i`HiG_1VrH{UDAI0(v&ZnT?SK?& za|#1ne++5P6oNK*mrUVYEWFd&W+;7a6qf5la|5-<&7yJS n4YJGP@EN<(x4W$CZxWsCIi|e9n)zxd@@V+)fU3OdK3b9sTRh?+W%7^5{@; zD6T)7@*VUuj=DP-?HRf+PFD-be=uEkGxp9imB ShZEVC*AaC*jBSW=>=C_`1 $!4PR&t$P z3&|VpT1>9jm6cID80;oq79HTc>0wS#+*(Rj@yJ_QI%v9V4w~i-KPpBs=O;6|&xRB^{!Oj&R9!wt9P4_8=yPLCl+Nk6vIc3(j3z(gTZKV~H!vMr%at7Bm z;wSh1osB{Bk5DO0ut#w{oZ{y!jEzCax7ju #pGr*g(sX2g5{VD`60k_2A1}XH~lu);Zs- b^4sq65;+E`&m?pqaLwt8R zo79QkOTp`Mhu6Wviw#UvZk;G*)d{lc`WiE1(G?xrXPFel9j&ykq_h=GJu@4NI5?VX za~@oE)pgVkJ_p;?FyK~yNfGWMdryX}&Z2q|Fqvz1$JgGNT6(69QB`kPx>L)GjfUR{ z ns;H)t&G4ocQxPeB(4-6c5W zY!?SjNsz`dOvkwWcJP4HiMh12_(p%OR|kej#mUDVoE&+bG%JSr3H0vj2={Iqb69jl zTlto?MtgwtWVRtP=XbL!b0w*(@Fuh4Hrai;3bJnLC`Sv>x~?8zaZfj8gQxfrAq}06 zrgntq>cR97&u8 p+>ACc>C zf6VR0r&r^tMV#SKzlo>h!~8S`{Zpa!4IbHAWRx!_+j$DggWI*0&<(~9l@i=tE2RDF zr++&`QFeh}@;3KAaLDCtA9bI7SdRVP054z&v2UnW`?tkbdbM9L7#o B*De-)Gj(xxGX6}@@#~=pVcv9HUNaB-lw)= ft|axy#N6L~VH W5H|UbSrwFb!|I4fgMI?>>?YD%B;{g7X8&HtS7(0FuSb@OZ7>Xi1O;J zlWbfbT(7 G`%_&T2X{b4j8I0ifrV6UPQE`l z523XA9q_W>Rsx6 ?U7%j~V N zIL$EKDiw8}LjtRDTXZRQp35ckS2Tx$w=_1&Hvd8R<>p+f?b8dkR}@yjr-Q +*DM`ym!7klAL7Q64=_a} b|cB}&~dwb2qB{T-2EDV zZ~J?Q99o7w5H+-id{9&VF3T{%7Ng} OxO?4sT1pGhA|U=Nd|}p`4&-fjy8f)1@oeFV|zC^9o&x9b(!h z*pidoXy4?Nx>jj*TOgPx7^J9URUI)@ehuZHV)*)kXRNMRQJEY56A9rR&&bemF}_Iq z0n>Nq1TA}4j4vrw8V85gAg2nr+C{yw#70*kX;QA6u9S05oqC$n4NeD{E(zP}LPo0+ z?OM7&tzcn&>gxM35QTjGNb`E9Lnit&C2}d;Yf3~VZ6}5_$%`x%O(JBaMBZQt%U$1m zv7MWru+$Z<3tr)@oTqSD*N^R-G!!b|`g$zl)_FB>bL06c9^oeTF>o}%LFME$ZYn{M z(*ibfmpqOiwh*h5PbzUeomBkhGdP$vIfHwa^=#V`*6ma703q&JmD(VsaW~q{&4+dk zj=sp*EX53_pb2`n7EBCQCRWF1hHc@Je2F@z`vf(M>I)it1}lp-oJ_svsa~}CSY(LL zCgDv=d=8B^DWMV@AP-J4HJ`sCwtl$Y)Rz%4@)-p_!$lwixZ=wL)3I{zFEV*(Zcm3w z7&1x@#Eqq86K9*S=aoD(F9t}c7LSm{ B+8O0W! zc4N>8j(VCqkErQiRwM3}XNcGE=xue+{(2RQEU0B%{V3FoB^6vu##~@mW v<+WtAgOIL)~=gwnawIw(#?E6`Iem$#|jlQ^?}e z9h^DvUF&H?1$e0pTm4oUJgy+kee2`-f>}QY3hNUd=W<=O{!xp9i_fwadO=~;{{Vl~ zZ ( z4KwBz9M|?@OPv(klW44GQi5_mxTkBm!b`i8HHWirjCjAO?6q)r3 z)SO&Qa?+C#d#fllI2V-^2&|> {}UfP zXkX? v%s#pHG!?ePY8{{`K@ zk^5ruC2mbl;Jlsnp3AS5XF%iRx4IY9fOyTq?P=BJHWj-;pm7xu9X0o3rQN9eus%V* zJ8uyfXJ10wgNGxAZHPKIsgN5A>)#OlOY?5-$%}%m7{V8;UbN{nnYpm7-o^H7=QLt- zEx6XAVAxhSV*A~1IBcsUvHjXCE-iYD6&0#+Tfg-uqUzF2b{_yoWOH6B>3j|$O-M@> zDHY6M7D2yL4;WTu8n3ZNsFkgnTP75Md#E5{^*~TU9>SnO=-)8}4NeN-al%0f z?$!AUUy-TUtK1_61H+n}$RS`Aw})PM+{JQD#l5J_7NZna?kldIv|@gpK&5M!HjeBP zGY>mG$IkguNB8Y{dHSu_Lhwb#mx-6(x8A%14OxFK7&$pjp2QGyFU8b) WJ5qL-VD@V5Ta4E6b>{dJo@< z(-Fy&K@8u+l*8Pzhj+`0Ewi%Xg%pb?0Q0Q0+!|zSFA`p#CX}sC^Ns1V GcJt)4! zt38&2XUr#3d?wDFS(xJ^<*BhZr?4JEV`90vjVWyhjm5Up+}vfejX6K=t<-uTKTi2w zKTc05eA(|K&`mEeecx7U>Yhz4nthu n)Y|dZ9O6U2J&cxJN82E)&^e(93 z{i^dB$)I^qorL7;xFQy0@$ZB >yBRPP6rXCdEj!I)NBf&PQUTem- z@(&k+s2fv+3u tIBZEYioUP0KqL#Tz0BqbOcSSP(>dr!II; z!Vn^9FW2qRojEi-E=Z}2V2D?^l;%Ca4%@2X;JaBu(U$wiPj6iyWg8PMWYQK}cqECz zKySI6B;n_PC+DN^8VfHx@hLl~L`Y*a`JN`)R#rz<$3Dk4rxZphV4IJ80cUkxqvmkj z |q4% ;H&fS5?iBU? zCdA`&5Oiq#45LIf9<%=4jQiL(;HrF l5I#X#}QRD)t04{rncY6q3`#jyty0Gl|CIw zWio7wbJ!eo1SmTvTC%@C`EAiU<#R9lyRhzN)Or`V=XfW-1m|MLw*I!uT8Oo=%lmGj zLjX*Uix$WtvdKIdhK^eMr%0qB2A$EZIMB;%+}}&Z)#);nMHU9xZDNsy;XOE{^sL$U zQR0k=f%7V}@8>Rdr|in+5oOz=q_Hix@XMyiSzTBC4eE9aEeb4k{PYW5DFb3jtp0B= z=a!J1?=qy<>&l=P zO1cpx;INs t+tz&QOj=z&5RWvz@6d%?md;I2$O>4I<;j-lu6qwad^UHv5 z-oa0DDH%a?WQt>rl~cb=1wW}WNA#xMs 8~RKdZDmded%GT5WAlxzCYid*t?}pRY3h<6FzSmzs~GoLfO#RBApYdx#rl0x@Nr zhQd-)YO>?<4_@u-9vSkWzY2eiVS~fV?*@X3%>+ wGQH`B>7Cw1ufh#;T K{I(hb8{u4n3q)`MDlavh?l4LrRxrdPoWLNIj&KIbRQsH205e5!F5M zOMGPv`d1DbVi3wl?#%e&b6X5%gsWI?7yjz}P4Oog+@HUL_&bb0&CQPC?*#r%;SWz& z@8bqf ?Xp8qZo;X>6Y8uQV8~O5>7=YNc_(#6YF-M3%uCkDp-C<8c# F;_u!3VUB}a`MaIJuk!b8{_f`QNBsROe}CZbzxXTA{7i`-6P3!0o=s9JGk+$# zDM6{s{93n?lgi8wbt^Hc%zRh3l9I~I*K{i(sm$D_Tggae=A*imh*V~TQ&SRBnR&Br zB_D2dnv#yn%uAIj*{IBH(XAw-(s*W5Lc!=XB@dOxg-wY S-r3q``e&Lx;UQK!0W zFrZAl)Y#lK=t|l~$`$J;yMj#3T&lAtqWpE@pC}>H>{?!j73N=*Y$ByvI_Ql&l$ynT zQwxWssbvo*m6|KEhto>UM)t6=@sudp42b0E`eBE>Upl34)#kyJbJm85q)J)e8vFaF z`eQ)X`q|heEg-xbBWZ!-R6w1^*NL=Uo;l*WquJ~1eMA?#U1YM+7Tq%YJ3xPYx dsnGeB;I#!c(#sWiU>ZZW*OXYRWP ;U>TfJ(&0I5E4Q_oavp9enI)ac#&>X&X~Xg6^^T`hxTpU&xO5?A z>1-Mst6yZjHQtsVe=Km&gf+J3e2;Qm?$X6`UBE`KOQ=x4l4e_5_^CgK9}a;S)CWM= zkI;Iu?ZgV>Lj6*M3}V^`u2*Q6?-LY$Y2F_92L%0V$r4?ZeWT%)JQrva{iCht32Hpv z5_W!12j3;4+*?$xwFfWy)OY2_@Ay#Pqu@C5F*L{%`s*^auA4+R(d?(_Msk&bW!wlz zv3EFXy@1Tl-DCxg5&L8kuT_m`ER9ob+(LWd*WgC8Xs})=``P)Nwlv5$xB$O~6+)?< z`q2U{8nQMNH2)Q#^`{CIaf8EmPp;yvVD?`G_W9Iu8hXqUn!^XArrGU*bM-=-qk4R9 zor}-f6dwgsQhZ(jWE)3A R;eZc_fiSUuBdF!|iMIR#fRE8uCA>AhY+z3OkiJ-dfSgUMrQ@9EYaQYk#N z?; vrW@i U9M%+!v1I3)i-PPf>uVOy}WI$6#X$LMaMldLdU=V?QF z<855$jpHS`aeQpa5Y7zOufX0ttSA{7+{4PoWNLEMWMk*_N!WDFk-Cr{xYrWzo&_rm zz-~eFZ@_k)alP=p{5NcZV+q-SK7H%Y$$YM_d=I-z1+6b;#OiJ`PUY0wHkIh%51%gl z7fM%8e0mrZ`~3Qjw_s?m5?gkD3u?Kxrw5}vB04C5z07LZrQ6oi%FHLMmfCgWHXU{Q zGQBF-%jw~$JG|&Q`sP-QMqTe+JqNY%lpIB-_sB!pDGwhMGmde h`C0Yfi||bejrZ&a*fVbi8N52SdH2!{gxa1aQ#5@P7jbCI#wL zF!>AYWc|fznCnaY^`-uLwZC5Duh;tP%XCfc)jr_p?bW9M*<*#5dou+?z+ilL-udjV zY3fNYJ&!B0j=rA#wCZ0C=_-w