<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_dinghao</title><subtitle type="text">记录成长点滴</subtitle><id>http://feed.cnblogs.com/blog/u/16305/rss</id><updated>2011-05-20T05:04:28Z</updated><author><name>思无邪</name><uri>http://www.cnblogs.com/bluewater/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bluewater/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/16305/rss"/><entry><id>http://www.cnblogs.com/bluewater/archive/2011/04/18/2019749.html</id><title type="text">Silverlight内存泄露（八）样式</title><summary type="text">同一个程序，换一个主题、换一个样式，可能造成内存泄露。 演示Sytle引起的内存泄露 这一系列写到八了，将要结束，还没有一个直观例子说不过去，样式发生内存问题最难找也最隐蔽，做了小例子说明内存泄露问题。 例子下载：MemoryLeak.rar例子中ProgressBar样式引起内存泄露，为直观每次导航分配50M内存。 a) 继续使用ANTS检测内存问题，但ANTS属于收费软件 b) 也可使用免费的进程浏览器，启动 Process Explorer.，在sllauncher.exe进程右击，选择属性，在Home、About间导航。 每次导航内存增加50M 注释掉ProgressBar样式后，内存</summary><published>2011-04-18T05:28:00Z</published><updated>2011-04-18T05:28:00Z</updated><author><name>思无邪</name><uri>http://www.cnblogs.com/bluewater/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bluewater/archive/2011/04/18/2019749.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bluewater/archive/2011/04/18/2019749.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;同一个程序，换一个主题、换一个样式，可能造成内存泄露。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;演示Sytle引起的内存泄露&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;这一系列写到八了，将要结束，还没有一个直观例子说不过去，样式发生内存问题最难找也最隐蔽，做了小例子说明内存泄露问题。 &lt;/p&gt;&lt;p&gt;例子下载：&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://files.cnblogs.com/bluewater/MemoryLeak.rar"&gt;MemoryLeak.rar&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;例子中ProgressBar样式引起内存泄露，为直观每次导航分配50M内存。 &lt;/p&gt;&lt;p&gt;a) 继续使用ANTS检测内存问题，但ANTS属于收费软件 &lt;/p&gt;&lt;p&gt;b) 也可使用免费的进程浏览器，启动 &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"&gt;Process Explorer&lt;/a&gt;.，在sllauncher.exe进程右击，选择属性，在Home、About间导航。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104181313245611.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104181313423139.jpg" width="486" height="525" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;每次导航内存增加50M &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104181314315937.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104181314505036.jpg" width="488" height="518" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;注释掉ProgressBar样式后，内存不增加。 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;查找内存泄露&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;给程序更换样式后发现，View不能释放，没导航内存都增加一个View实例。查看其中一个内存关系图，如下： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104181315276123.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104181315396787.jpg" width="440" height="650" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;可看到某个动画的引用不能释放。造成View不能释放 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;ProgressBar样式造成内存泄露&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;产生内存泄露的样式： &lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt;progressbar&amp;nbsp;内存泄露&lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;TargetType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="ProgressBar"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="BorderThickness"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="2"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Maximum"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="100"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="IsTabStop"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="False"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Template"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ControlTemplate&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;TargetType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="ProgressBar"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Root"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;VisualStateManager.VisualStateGroups&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;VisualStateGroup&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="CommonStates"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;VisualState&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Determinate"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;VisualState&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Indeterminate"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Storyboard&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ObjectAnimationUsingKeyFrames&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;BeginTime&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;Storyboard.TargetName&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="ProgressBarRootGrid"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Visibility"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DiscreteObjectKeyFrame&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;KeyTime&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Collapsed"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ObjectAnimationUsingKeyFrames&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;BeginTime&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;Storyboard.TargetName&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="ProgressBarIndeterminateRootGrid"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Visibility"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DiscreteObjectKeyFrame&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;KeyTime&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Visible"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DoubleAnimation&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Storyboard.TargetName&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="tr"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="X"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;Duration&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0:0:2"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;To&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0.8"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;AutoReverse&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="True"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;RepeatBehavior&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Forever"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DoubleAnimation.EasingFunction&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;QuadraticEase&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;EasingMode&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="EaseInOut"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DoubleAnimation.EasingFunction&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DoubleAnimation&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ObjectAnimationUsingKeyFrames&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Storyboard.TargetName&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="gs2"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Offset"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;BeginTime&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0:0:0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Duration&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0:0:4"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;RepeatBehavior&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Forever"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DiscreteObjectKeyFrame&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;KeyTime&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0:0:0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0.1"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DiscreteObjectKeyFrame&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;KeyTime&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0:0:2"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ObjectAnimationUsingKeyFrames&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Storyboard.TargetName&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="gs3"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Offset"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;BeginTime&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0:0:0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Duration&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0:0:4"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;RepeatBehavior&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Forever"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DiscreteObjectKeyFrame&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;KeyTime&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0:0:0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0.2"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DiscreteObjectKeyFrame&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;KeyTime&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0:0:2"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0.1"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ObjectAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Storyboard&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;VisualState&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;VisualStateGroup&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;VisualStateManager.VisualStateGroups&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Border&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="ProgressBarTrack"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;CornerRadius&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="4"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;Background&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{TemplateBinding&amp;nbsp;Background}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;BorderThickness&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{TemplateBinding&amp;nbsp;BorderThickness}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;BorderBrush&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{TemplateBinding&amp;nbsp;BorderBrush}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="ProgressBarRootGrid"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Rectangle&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Left"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="ProgressBarIndicator"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;Margin&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="3"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;RadiusX&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="3"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;RadiusY&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="3"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&lt;br /&gt;Fill&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{TemplateBinding&amp;nbsp;Foreground}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="ProgressBarIndeterminateRootGrid"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Visibility&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Collapsed"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Rectangle&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Margin&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="3"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;RadiusX&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="3"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;RadiusY&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="3"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Rectangle.Fill&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;LinearGradientBrush&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;StartPoint&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0&amp;nbsp;0.5"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;EndPoint&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="1&amp;nbsp;0.5"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;LinearGradientBrush.RelativeTransform&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TranslateTransform&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="tr"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;X&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;LinearGradientBrush.RelativeTransform&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;GradientStop&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="gs0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Offset&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Color&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Transparent"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;GradientStop&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="gs1"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Offset&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Color&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Transparent"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;GradientStop&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="gs2"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Offset&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Color&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="#CCCCFF"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;GradientStop&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="gs3"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Offset&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0.2"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Color&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="#CCCCFF"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;GradientStop&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="gs4"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Offset&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="0.2"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Color&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Transparent"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;GradientStop&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="gs5"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Offset&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="1"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Color&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Transparent"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;LinearGradientBrush&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Rectangle.Fill&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Rectangle&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Grid&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;a) 估计是Silverlight4bug，silverlight5没测试。 &lt;/p&gt;&lt;p&gt;b) 慎用第三方样式 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装Silverlight5的问题&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Silverlight5安装不上，有知道怎么解决下面问题的请回复。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104181315471011.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104181315593345.jpg" width="549" height="485" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;img src="http://www.cnblogs.com/bluewater/aggbug/2019749.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bluewater/archive/2011/04/18/2019749.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bluewater/archive/2011/04/17/2018944.html</id><title type="text">Silverlight内存泄露（七）Command</title><summary type="text">MVVM中View与ViewModel是强引用的双向关联关系，容易发生内存泄露，任何一方没有被回收都会导致另一方不能被GC回收。 Comand连接了View与ViewModel，容易产生内存泄露。 发现内存泄露 在几个View间导航几次，两次导航到View页面，获取内存快照，发现Info有两个实例。内存没有被释放。 为了每次导航到消息页面，都保存上一次显示的信息，InfoViewModel采用了单例模式，作为缓存，InfoViewModel只有一个实例，按照设想Info也应该只有一个实例。 代码： var lazyViewModelMapping= LazyViewModelExports..</summary><published>2011-04-17T08:06:00Z</published><updated>2011-04-17T08:06:00Z</updated><author><name>思无邪</name><uri>http://www.cnblogs.com/bluewater/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bluewater/archive/2011/04/17/2018944.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bluewater/archive/2011/04/17/2018944.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;MVVM中View与ViewModel是强引用的双向关联关系，容易发生内存泄露，任何一方没有被回收都会导致另一方不能被GC回收。 &lt;/p&gt;&lt;p&gt;Comand连接了View与ViewModel，容易产生内存泄露。 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;发现内存泄露&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;在几个View间导航几次，两次导航到View页面，获取内存快照，发现Info有两个实例。内存没有被释放。 &lt;/p&gt;&lt;p&gt;为了每次导航到消息页面，都保存上一次显示的信息，InfoViewModel采用了单例模式，作为缓存，InfoViewModel只有一个实例，按照设想Info也应该只有一个实例。 &lt;/p&gt;&lt;p&gt;代码： &lt;/p&gt;&lt;p&gt;var lazyViewModelMapping= LazyViewModelExports.FirstOrDefault(o =&amp;gt; o.Metadata.Key.Equals(relativeUri.Host, StringComparison.OrdinalIgnoreCase)); &lt;/p&gt;&lt;p&gt;viewModel = lazyViewModelMapping.Value; &lt;/p&gt;&lt;p&gt;var viewFactory = viewMapping.CreateExport(); &lt;/p&gt;&lt;p&gt;view = viewFactory.Value as Control; &lt;/p&gt;&lt;p&gt;viewFactory.Dispose();//释放View内存 &lt;/p&gt;&lt;p&gt;view.DataContext = viewModel; &lt;/p&gt;&lt;p&gt;是什么原因造成viewFactory.Dispose();没有释放View的内存呢？ &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104171605048344.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104171605056359.jpg" width="665" height="106" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;确定泄露原因&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;看下面两张Info图： &lt;/p&gt;&lt;p&gt;正常图： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104171605058801.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104171605067339.png" width="862" height="517" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;发生泄露图：View是当前页面： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104171605095373.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="commandLeak" border="0" alt="commandLeak" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104171605159762.png" width="1048" height="817" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;发生泄露图：View不是当前页面： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104171605189955.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="commandLeak2" border="0" alt="commandLeak2" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/20110417160523540.png" width="1068" height="974" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;可看出stopDownloadCommand在View与ViewModel间建立了强引用关系，遇到ViewModel这个单例模式（生存期与应用程序一样）造成View不能被回收。 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;解决内存泄露&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;断开stopDownloadCommand内存得到释放，从上图可看出断开这个command并没有从根本解决问题，增加其他Command仍会产生问题。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104171605231063.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104171605237999.jpg" width="639" height="47" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;根本原因是ViewModel在此不应该使用单例模式，Lazy创建了单例，而应该缓存Modle。 &lt;/p&gt;&lt;p&gt;弹出窗口是最好的方式，由于Silverlight4不支持子窗口，在此使用单例作为缓存，没想到造成View不能被释放。 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;总结&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;a) 绑定View的类（如VM），使用单例或缓存VM需要谨慎。VM的长生命周期将导致View不能被释放，并且每次导航到View，View的实例数都将增加。 &lt;/p&gt;&lt;p&gt;b) 从内存角度看单例，单例中的Command、Event非常容易造成内存泄露，根源往往是单例而不是事件或command。   &lt;/p&gt;&lt;p&gt;c)ANTS 展现的内存图并不全面，经常需要多张图结合看问题。比如，当View是当前页面时，不能看出Lazy&amp;lt;T&amp;gt;产生的问题，而需要跳转到View不是当前页面再看另外的快照。&lt;/p&gt; &lt;p&gt;d)ANTS 的快照图，对一类引用进行了归类，比如stopDownloadCommand并不是ViewModle中唯一的Command，还有reDownloadCommand也引用了View，图上并没有表现出来，在代码中修正了stopDownloadCommand的引用问题，View仍被reDownloadCommand引用而不能释放。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bluewater/aggbug/2018944.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bluewater/archive/2011/04/17/2018944.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bluewater/archive/2011/04/15/2016490.html</id><title type="text">Silverlight内存泄露（六）MEF等Ioc框架引起内存泄露-ExportLifetimeContext</title><summary type="text">对象的创建可以使用new，也可以使用IOC架如：castle、MEF等，IOC创建的对象的生命周期，可能IOC负责管理，使用框架的开发者如果不弄清楚可能会造成内存泄露问题。这些内存泄露问题并不是IOC框架的bug，只是开发者使用不当或者不注意造成的内存泄露问题。以MEF为例说明我碰到的两种内存泄露问题。内存泄露系列阅读提示：一摸一样的对象图，有时候我们可以认为它是内存泄露，有时候又认为它不是内存泄露，这一切只是由于上下文不同，这一系列文章中ANTS Memoery Profle截图都是有特定上下文，单独看完全没有意义。如何确定是内存泄露？可以参考前面的文章。对象以图的形式存在，Ants Mem</summary><published>2011-04-15T06:06:00Z</published><updated>2011-04-15T06:06:00Z</updated><author><name>思无邪</name><uri>http://www.cnblogs.com/bluewater/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bluewater/archive/2011/04/15/2016490.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bluewater/archive/2011/04/15/2016490.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;span  style="font-family: 'ms shell dlg'; font-size: 14px; line-height: 28px; font-weight: normal; "&gt;对象的创建可以使用new，也可以使用IOC架如：castle、MEF等，IOC创建的对象的生命周期，可能IOC负责管理，使用框架的开发者如果不弄清楚可能会造成内存泄露问题。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="font-family: 'ms shell dlg'; font-size: 14px; line-height: 28px; font-weight: normal; "&gt;&lt;p style="word-wrap: break-word; margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;这些内存泄露问题并不是IOC框架的bug，只是开发者使用不当或者不注意造成的内存泄露问题。&lt;/p&gt;&lt;p style="word-wrap: break-word; margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;以MEF为例说明我碰到的两种内存泄露问题。&lt;/p&gt;&lt;p style="word-wrap: break-word; margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;strong&gt;内存泄露系列阅读提示：&lt;/strong&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word; margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;span style="color: red; "&gt;一摸一样的对象图，有时候我们可以认为它是内存泄露，有时候又认为它不是内存泄露，这一切只是由于上下文不同，这一系列文章中ANTS Memoery Profle截图都是有特定上下文，单独看完全没有意义。如何确定是内存泄露？可以参考前面的文章。&lt;/span&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word; margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;span style="color: red; "&gt;对象以图的形式存在，Ants Memory Profile为了分析方便把这些图处理为树，让我们可以把注意力集中到分析的对象。但我们必须明白内存中对象关系构成图，也就是说ANTS的树状图只是内存中对象分布的一个局部，分析内存泄露时必须有全局观念，需要相关的几张图一起看，即使一张图也要整体看，这样才能分析内存泄露问题。&lt;/span&gt;&lt;/p&gt;&lt;p style="word-wrap: break-word; margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;span style="color: red; "&gt;由于看一张图没什么意义，如果把多张图都贴出来，这文章就太难写了，即使多张图都贴出来，也不一定能表达清楚，分析内存泄露最重要的是经验。接下来的几篇会减少甚至不用ANTS图。&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;strong&gt;ExportLifetimeContext使用不当造成内存泄露&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;ExportLifetimeContext 需要调用Dispose方法释放由MEF管理的对象，否则对象不会被释放。&lt;/p&gt;&lt;p&gt;MSDN:&lt;/p&gt;&lt;div&gt;&lt;span style="font-family: 'Segoe UI', Verdana, Arial; font-size: 13px; line-height: normal; "&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;Disposing of a&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ff382850(v=vs.95).aspx" style="color: #1364c4; text-decoration: none; "&gt;ExportLifetimeContext&lt;span xmlns=""&gt;(Of&amp;nbsp;T&lt;span xmlns=""&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;object calls the referenced method to release its associated export.&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Segoe UI', Verdana, Arial; font-size: 13px; line-height: normal; "&gt;Call&amp;nbsp;&lt;span&gt;Dispose&lt;/span&gt;&amp;nbsp;when you are finished using the&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ff382850(v=vs.95).aspx" style="color: #1364c4; text-decoration: none; "&gt;ExportLifetimeContext&lt;span xmlns=""&gt;(Of&amp;nbsp;T&lt;span xmlns=""&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;. The&amp;nbsp;&lt;span&gt;Dispose&lt;/span&gt;&amp;nbsp;method leaves the&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ff382850(v=vs.95).aspx" style="color: #1364c4; text-decoration: none; "&gt;ExportLifetimeContext&lt;span xmlns=""&gt;(Of&amp;nbsp;T&lt;span xmlns=""&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;in an unusable state. After calling&amp;nbsp;&lt;span&gt;Dispose&lt;/span&gt;, you must release all references to the&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ff382850(v=vs.95).aspx" style="color: #1364c4; text-decoration: none; "&gt;ExportLifetimeContext&lt;span xmlns=""&gt;(Of&amp;nbsp;T&lt;span xmlns=""&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;so the garbage collector can reclaim the memory that the&lt;a href="http://msdn.microsoft.com/en-us/library/ff382850(v=vs.95).aspx" style="color: #1364c4; text-decoration: none; "&gt;ExportLifetimeContext&lt;span xmlns=""&gt;(Of&amp;nbsp;T&lt;span xmlns=""&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;was occupying.&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;可以看到ViewModel存在多个实例，可能出现了内存泄露。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104142218367535.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104142218365931.jpg" width="558" height="51" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;经过分析找出发生内存泄露的对象图： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104142218365964.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104142218372650.jpg" width="558" height="254" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;可以看到MEF的DisposableReflectionComposablePart一直保持着ViewModel的引用，造成不能释放ViewModel。&lt;/p&gt;&lt;p&gt;MVVM使用自定义导航，代码：&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;[Export]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;CompositionNavigationContentLoader&amp;nbsp;:&amp;nbsp;INavigationContentLoader&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;CompositionNavigationContentLoader()&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;[ImportMany(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(IView))]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;IEnumerable&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;ExportFactory&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IView,&amp;nbsp;IViewMetadata&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ViewExports&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;}&lt;br /&gt;[ImportMany(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(IViewModel),RequiredCreationPolicy&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;CreationPolicy.Any)]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;ExportFactory&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IViewModel,&amp;nbsp;IViewModelMetadata&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ViewModelExports&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;}&lt;br /&gt;[ImportMany(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lazy&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(IViewModel),&amp;nbsp;RequiredCreationPolicy&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;CreationPolicy.Any)]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Lazy&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IViewModel,&amp;nbsp;IViewModelMetadata&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;LazyViewModelExports&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;IAsyncResult&amp;nbsp;BeginLoad(Uri&amp;nbsp;targetUri,&amp;nbsp;Uri&amp;nbsp;currentUri,&amp;nbsp;AsyncCallback&amp;nbsp;userCallback,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;asyncState)&lt;br /&gt;{&lt;br /&gt;var&amp;nbsp;viewModelMapping&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ViewModelExports.FirstOrDefault(o&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;o.Metadata.Key.Equals(relativeUri.Host,&amp;nbsp;StringComparison.OrdinalIgnoreCase));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;ViewModel&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;viewModelFactory&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;viewModelMapping.CreateExport();&lt;br /&gt;viewModel&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;viewModelFactory.Value&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;IViewModel;&lt;br /&gt;viewModelFactory.Dispose();&lt;span style="font-family: 'Courier New'; color: #008000; "&gt;//&lt;/span&gt;&lt;span style="font-family: 'Courier New'; color: #008000; "&gt;释放对象&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;View&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;viewFactory&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;viewMapping.CreateExport();&lt;br /&gt;view&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;viewFactory.Value&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Control;&lt;br /&gt;viewFactory.Dispose();&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;释放对象&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;绑定、导航&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;view.DataContext&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;viewModel;&lt;br /&gt;var&amp;nbsp;values&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;viewModelMapping.Metadata.GetArgumentValues(targetUri);&lt;br /&gt;viewModel.OnNavigated(values);&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;}&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;如果不加上&lt;span  style="font-family: 'Courier New'; font-size: 13px; "&gt;viewModelFactory.Dispose();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;对象MEF创建的对象不会被回收，VIew、ViewModel及其引用的资源都一直保持到程序关闭。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;a) 不要盲目使用第三方框架。 &lt;/p&gt;&lt;p&gt;b)&amp;nbsp;内存泄露都有上下文，只有特定上下文中托管代码才可能产生内存问题。&lt;/p&gt;&lt;p&gt;c)注意由IOC创建的对象生命周期，如果IOC创建的对象由容器管理生命期，可能需要调用IOC提供的相关方法执行对象的销毁。  &lt;/p&gt;&lt;img src="http://www.cnblogs.com/bluewater/aggbug/2016490.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bluewater/archive/2011/04/15/2016490.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bluewater/archive/2011/04/14/2016288.html</id><title type="text">Silverlight内存泄露（五）MEF等Ioc框架引起内存泄露-PartCreationPolicy</title><summary type="text">对象的创建可以使用new，也可以使用IOC架如：castle、MEF等，IOC创建的对象的生命周期，可能IOC负责管理，使用框架的开发者如果不弄清楚可能会造成内存泄露问题。 这些内存泄露问题并不是IOC框架的bug，只是开发者使用不当或者不注意造成的内存泄露问题。 以MEF为例说明我碰到的两种内存泄露问题。 内存泄露系列阅读提示： 一摸一样的对象图，有时候我们可以认为它是内存泄露，有时候又认为它不是内存泄露，这一切只是由于上下文不同，这一系列文章中ANTS Memoery Profle截图都是有特定上下文，单独看完全没有意义。如何确定是内存泄露？可以参考前面的文章。 对象以图的形式存在，An.</summary><published>2011-04-14T13:21:00Z</published><updated>2011-04-14T13:21:00Z</updated><author><name>思无邪</name><uri>http://www.cnblogs.com/bluewater/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bluewater/archive/2011/04/14/2016288.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bluewater/archive/2011/04/14/2016288.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;对象的创建可以使用new，也可以使用IOC架如：castle、MEF等，IOC创建的对象的生命周期，可能IOC负责管理，使用框架的开发者如果不弄清楚可能会造成内存泄露问题。 &lt;/p&gt;&lt;p&gt;这些内存泄露问题并不是IOC框架的bug，只是开发者使用不当或者不注意造成的内存泄露问题。 &lt;/p&gt;&lt;p&gt;以MEF为例说明我碰到的两种内存泄露问题。 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;内存泄露系列阅读提示：&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;一摸一样的对象图，有时候我们可以认为它是内存泄露，有时候又认为它不是内存泄露，这一切只是由于上下文不同，这一系列文章中ANTS Memoery Profle截图都是有特定上下文，单独看完全没有意义。如何确定是内存泄露？可以参考前面的文章。&lt;/font&gt; &lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;对象以图的形式存在，Ants Memory Profile为了分析方便把这些图处理为树，让我们可以把注意力集中到分析的对象。但我们必须明白内存中对象关系构成图，也就是说ANTS的树状图只是内存中对象分布的一个局部，分析内存泄露时必须有全局观念，需要相关的几张图一起看，即使一张图也要整体看，这样才能分析内存泄露问题。&lt;/font&gt; &lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;由于看一张图没什么意义，如果把多张图都贴出来，这文章就太难写了，即使多张图都贴出来，也不一定能表达清楚，分析内存泄露最重要的是经验。接下来的几篇会减少甚至不用这ANTS图。&lt;/font&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;PartCreationPolicy使用不当引起内存泄露&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Shared&lt;/strong&gt;&lt;strong&gt;：对象以&lt;/strong&gt;&lt;strong&gt;Singleton&lt;/strong&gt;&lt;strong&gt;方式创建。&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Non Shared&lt;/strong&gt;&lt;strong&gt;：每次请求时创建新对象。&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Any&lt;/strong&gt;&lt;strong&gt;：&lt;/strong&gt; Be default, &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.hosting.compositioncontainer.aspx"&gt;CompositionContainer&lt;/a&gt; will use Shared, unless the &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.primitives.composablepart.aspx"&gt;ComposablePart&lt;/a&gt; or importer requests NonShared。默认值 &lt;/p&gt;&lt;p&gt;在使用不同的组合方式时，PartCreationPolicy有不同的默认值，因此尽量不要使用默认值。 &lt;/p&gt;&lt;p&gt;看下面的程序： &lt;/p&gt;&lt;p&gt;NavigationCommand：由于多个View页面都有需要导航，把导航都放到类NavigationCommand中，恰恰是这一做法引出了内存泄露问题。 &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre &gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;[Export(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(NavigationCommand))]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;NavigationCommand&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;RelayCommand&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;readBookComamand&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;RelayCommand&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ReadBookComamand&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(navigatToContentCommand&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;navigatToContentCommand&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;RelayCommand&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;(&lt;br /&gt;&lt;br /&gt;p&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;font  color="#008000"&gt;//&lt;br /&gt;&lt;/font&gt;},&lt;br /&gt;&lt;br /&gt;p&amp;nbsp;&lt;span style="color: #000000;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.IsNullOrWhiteSpace(p)&lt;br /&gt;&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;readBookComamand;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&#xD;
&lt;/pre&gt;ViewModle&#xD;
&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;[ViewModelExport(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(BookPageSearcheViewModle),&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;BookPageSearche&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;[PartCreationPolicy(CreationPolicy.NonShared)]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;BookPageSearcheViewModle:&amp;nbsp;NavViewModel&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;RelayCommand&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ReadBookComamand&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;NavigationCommand.&amp;nbsp;ReadBookComamand;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;abstract&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;NavViewModel&amp;nbsp;:&amp;nbsp;ViewModelBase,&amp;nbsp;IViewModel&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;The&amp;nbsp;navigation&amp;nbsp;service&amp;nbsp;allows&amp;nbsp;you&amp;nbsp;to&amp;nbsp;navigate&amp;nbsp;to&amp;nbsp;an&amp;nbsp;other&amp;nbsp;ViewModel.&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;[Import]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;INavigationService&amp;nbsp;NavigationService&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;}&lt;br /&gt;[Import]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;NavigationCommand&amp;nbsp;NavigationCommand&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;View&#xD;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;[ViewExport(ViewModelContract&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(BookPageSearcheViewModle))]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;partial&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;BookPageSearcheView:&amp;nbsp;Page,&amp;nbsp;IView&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;BookPageSearcheView&amp;nbsp;()&lt;br /&gt;{&lt;br /&gt;InitializeComponent();&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;override&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OnNavigatedFrom(NavigationEventArgs&amp;nbsp;e)&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.DataContext&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;is&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ICleanup)&lt;br /&gt;{&lt;br /&gt;((ICleanup)&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.DataContext).Cleanup();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;上例中NavigationCommand默认以Shared方式创建。&#xD;
&lt;/p&gt;&lt;p&gt;ANTS Memory Profiel 产生内存泄露的对象图：&#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104141731473998.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="5" border="0" alt="5" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104141732126116.png" width="830" height="722" /&gt;&lt;/a&gt;&#xD;
&lt;/p&gt;&lt;p&gt;可看出：BookPageSearcheViewModle 、Mef都引用了NavigationCommand，导致NavigationCommand没有被释放产生了内存泄露，在此只看MEF这一条路径。&#xD;
&lt;/p&gt;&lt;p&gt;我在处理这个内存泄露时太专注于BookPageSearcheViewModle对readBookCommand的引用了，而没有全面看这些图，断开BookPageSearcheViewModle对readBookCommand引用是最简单的处理方法，但是在处理其他ViewModel的时候会发现太多的Command需要处理，这时候才认识到断开引用的点错了。&#xD;
&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;因此一定要谨慎全面的看对象图，一个路径上包含n个点，断开任何点都能解决&lt;strong&gt;这个对象&lt;/strong&gt;的泄露问题，但是一个程序有N个对象，这种只着眼当前对象的处理方式不能从根本上解决问题，必须找到内存泄露的根源&lt;/font&gt;。&#xD;
&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104141732165989.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104141732188106.jpg" width="558" height="80" /&gt;&lt;/a&gt;&#xD;
&lt;/p&gt;&lt;p&gt;解决MEF这个泄露问题，最简单的是加上：[PartCreationPolicy(CreationPolicy.NonShared)]&#xD;
&lt;/p&gt;&lt;p&gt;还可以使NavViewModel类实现所有Command，把组合转换为继承，断开长引用。&#xD;
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;a) 不要盲目使用第三方框架。&#xD;
&lt;/p&gt;&lt;p&gt;b) 设计时组合优先于继承，但组合更容易产生内存泄露，因为任何一方如果是长时间存活，内存就不会被释放。继承则无这个问题。&#xD;
&lt;/p&gt;&lt;p&gt;c) 注意由IOC创建的对象生命周期，如果IOC创建的对象由容器管理生命期，可能需要调用IOC提供的相关方法执行对象的销毁。&lt;/p&gt;&lt;p&gt;e)MVVM 比Code behind 方式更容易产生内存问题。V、VM双向引用关系，更可能造成内存不被释放&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bluewater/aggbug/2016288.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bluewater/archive/2011/04/14/2016288.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bluewater/archive/2011/04/13/2015485.html</id><title type="text">Silverlight内存泄露（四）解决内存泄露</title><summary type="text">定位泄露内存的对象很容易，但是找出引起泄露的原因并不容易，因为从GC到目标对象（内存泄露对象）的路径不只一条，找出哪条路径引起了内存泄露是非常烦人的工作，大部分情况只能凭借自己的经验。 一般我们都不会关注内存问题，当内存成为问题的时候，程序可能都开发完成了，这时候对象图会引入第三方库、.net 框架、本公司的其他库，需要梳理GC到目标对象的所有路径，并测试每一条路径，确认哪条引起了内存泄露。在测...</summary><published>2011-04-13T15:33:00Z</published><updated>2011-04-13T15:33:00Z</updated><author><name>思无邪</name><uri>http://www.cnblogs.com/bluewater/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bluewater/archive/2011/04/13/2015485.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bluewater/archive/2011/04/13/2015485.html"/><content type="html">&lt;p&gt;&lt;strong&gt; 定位泄露内存的对象很容易，但是找出引起泄露的原因并不容易，因为从GC到目标对象（内存泄露对象）的路径不只一条，找出哪条路径引起了内存泄露是非常烦人的工作，大部分情况只能凭借自己的经验。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;一般我们都不会关注内存问题，当内存成为问题的时候，程序可能都开发完成了，这时候对象图会引入第三方库、.net 框架、本公司的其他库，需要梳理GC到目标对象的所有路径，并测试每一条路径，确认哪条引起了内存泄露。在测试某条路径的时候，需要排除其他路径对内存泄露的影响，这时候排除其他路径影响非常难，会牵涉到很多代码的改动。 &lt;p&gt;以一个例子说明如何解决内存泄露，强制GC后，对比两个快照，发现没有被回收的对象，如下图BookPageSearche不是当前页面（现在看着还头疼，内存问题真是一个可以让人发疯的问题）： &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104140939358818.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="3" border="0" alt="3" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104140940367275.png" width="1279" height="1359"&gt;&lt;/a&gt; &lt;p&gt;这张图包含了Command、Event、Style、MEF引起的内存泄露，几乎包括所有我发现的内存泄露情况，这一篇讨论内存泄露的通用解决方案，不会针对每种问题讨论。 &lt;p&gt;看标记出的几个点： &lt;p&gt;对目标来说，如果切断1，目标对象肯定会被释放，但是目标对象的直接父对象属于.net控件，不可能在这一点切断路径。 &lt;p&gt;对于标记2，切断它会切断3、4、5，标记二NavigationCommand属于自己的代码可以在此释放内存，但并不应该在此释放。 &lt;p&gt;标记3、5圈起来的部分，是由其他View内存引起的问题与这个目标对象关系不大，其他View（About、SIteNav）内存被释放后，这个路径自动被切断。 &lt;p&gt;标记9是由自定义导航框架引起的内存泄露。 &lt;p&gt;标记8是由MEF引起的内存泄露，并且是唯一与目标对象直接有关的路径（BookPageSearche），在这个目标中应从此点着手释放内存。 &lt;p&gt;下面一张图是和上一张对照的，可对照看。显示了BookPageSearche是当前页面时的对象图，未执行GC。 &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104140941104254.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="3" border="0" alt="3" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104140944016220.png" width="997" height="677"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;需要避免的误区&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;第一直觉肯定是目标对象的直接父对象，只要他释放，不用再管更上层的诸多引用，如果这么处理可能属于头痛医头脚痛，不找点最合适的切断路径的点，会给程序修改带来灾难，后续会出现数不清的需要释放的对象。所以在释放内存是一定要避免不分析清楚直接下手释放。 &lt;p&gt;&lt;strong&gt;总解&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;不知道有多少人能看的懂，这篇的目的只是提供一种通用的分析方法，分析出从GC到目标对象的多条路径应该选择哪几条路径释放内存，选择了合适路径以后又该在路径中的那个对象出断开引用。这其中的分析大部分只能凭借经验。 &lt;p&gt;&lt;strong&gt;一些技巧&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;多看几个类似的对象图，比如找View的内存泄露，多看几个View，如About、Home等，从中找到共同点。 &lt;p&gt;对于某个对象图，只解决直接和这个对象有关的内存泄露，而忽略由其他对象引起的内存问题。 &lt;p&gt;从最简单的泄露问题着手，解决了一个泄露问题，会发现对象图会小很多，再分析其他泄露问题会简单一些。  &lt;img src="http://www.cnblogs.com/bluewater/aggbug/2015485.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bluewater/archive/2011/04/13/2015485.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bluewater/archive/2011/04/13/2015093.html</id><title type="text">Silverlight内存泄露（二）检测内存泄露</title><summary type="text">理解GC 理解了GC如果工作，.net程序中的许多奇怪问题都容易理解了。虽然.net一直声称.net程序不需要显式的内存管理，GC会在后台释放不需要的对象，开发者不需要管理对象，但是.net 程序仍然需要关注内存泄露和性能问题。尤其Silverlight、WPF的内存泄露比其他.net程序严重的多。 GC解决了非托管程序中常出现的内存泄露问题，比如开发者忘记释放自己创建的资源。既然GC可以释放内存，为什么还会发生内存泄露呢？原因只有一个，GC与开发者在对象是否生存（”live”）、是否正被使用上有不同的认识。开发者认为对象无用了，可以被GC回收，但GC却认为对象正被使用，内存不会被回收。因此必</summary><published>2011-04-13T09:32:00Z</published><updated>2011-04-13T09:32:00Z</updated><author><name>思无邪</name><uri>http://www.cnblogs.com/bluewater/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bluewater/archive/2011/04/13/2015093.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bluewater/archive/2011/04/13/2015093.html"/><content type="html">&lt;p&gt;&lt;strong&gt;理解GC&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;理解了GC如果工作，.net程序中的许多奇怪问题都容易理解了。虽然.net一直声称.net程序不需要显式的内存管理，GC会在后台释放不需要的对象，开发者不需要管理对象，但是.net 程序仍然需要关注内存泄露和性能问题。尤其Silverlight、WPF的内存泄露比其他.net程序严重的多。 &lt;/p&gt;&lt;p&gt;GC解决了非托管程序中常出现的内存泄露问题，比如开发者忘记释放自己创建的资源。既然GC可以释放内存，为什么还会发生内存泄露呢？原因只有一个，GC与开发者在对象是否生存（&amp;#8221;live&amp;#8221;）、是否正被使用上有不同的认识。开发者认为对象无用了，可以被GC回收，但GC却认为对象正被使用，内存不会被回收。因此必须明白GC工作机制。 &lt;/p&gt;&lt;p&gt;下面简单介绍GC，更多内容参见其他资料。 &lt;/p&gt;&lt;p&gt;1. 大对象与小对象 &lt;/p&gt;&lt;p&gt;对象大于85k或多维数组大于8k，对象将被分配到LOH堆。 &lt;/p&gt;&lt;p&gt;其他对象是小对象。 &lt;/p&gt;&lt;p&gt;2. GCroot &lt;/p&gt;&lt;p&gt;简单说：GC释放内存从Root开始，只要Root可达的对象都被认为live,不会被回收。 &lt;/p&gt;&lt;p&gt;GCroot不是对象，任何被GCroot引用的对象都可以自动在下一次的GC中存活，有四种GCRoot： &lt;/p&gt;&lt;p&gt;a) 方法中的本地变量，在方法执行期内被认为是root。 &lt;/p&gt;&lt;p&gt;b) 静态变量总被认为是Root：thread static 在线程生命期内不会被回收，其他类型将持续到程序结束。 &lt;/p&gt;&lt;p&gt;c) 托管对象被传递到非托管代码中，托管对象被认为是ROOt。 &lt;/p&gt;&lt;p&gt;d) 实现了&lt;a name="OLE_LINK2"&gt;&lt;/a&gt;&lt;a name="OLE_LINK1"&gt;finalizer&lt;/a&gt;的对象，在GC以后，虽然GC认为对象已经不存活了，但是再执行finalizer之前，此类对象也被认为是ROOT。因此如果检查到finalizer对象仍然存在，并不一定是内存泄露，下一次GC才会回收。 &lt;/p&gt;&lt;p&gt;3. 对象图 &lt;/p&gt;&lt;p&gt;对象在内存的关系构成了对象图，一个对象可能存在多个从root到此对象的路径，释放此对象，必须切断所有引用。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131725257428.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131725316104.jpg" border="0" height="410" width="455" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;上图：classC存在三个路径，&lt;a name="OLE_LINK4"&gt;&lt;/a&gt;&lt;a name="OLE_LINK3"&gt;root1-&amp;gt;ClassC&lt;/a&gt;、&lt;a name="OLE_LINK6"&gt;&lt;/a&gt;&lt;a name="OLE_LINK5"&gt;root2-&amp;gt;ClassC&lt;/a&gt;、root3-&amp;gt;Class &lt;/p&gt;&lt;p&gt;B-&amp;gt;ClassC. &lt;/p&gt;&lt;p&gt;释放ClassC的内存必须切断三个路径。 &lt;/p&gt;&lt;p&gt;可以看出内存泄露通常是开发者忘记或者没有意识到一个对象可能存在多个根。 &lt;/p&gt;&lt;p&gt;4. GC 代 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131725451178.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image004" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131725502545.jpg" border="0" height="410" width="429" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;5. LOH大对象堆 &lt;/p&gt;&lt;p&gt;&lt;a name="OLE_LINK8"&gt;&lt;/a&gt;&lt;a name="OLE_LINK7"&gt;对象大于85k&lt;/a&gt;或多维数组大于8k，对象将被分配到LOH，大对象不会被压缩，容易形成碎片，将抛出OutOfMemoryException，大对象仅在执行完全回收时执行，即在Gen2时回收。大对象产生的内存问题，不讨论。 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;检测内存泄露&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;许多工具可以检测内存泄露，现在使用ANTS Memory Profiler工具。 &lt;/p&gt;&lt;p&gt;使用帮助：&lt;a href="http://www.red-gate.com/supportcenter/Content?p=ANTS%20Memory%20Profiler&amp;amp;c=ANTS_Memory_Profiler/help/7.0/amp_getting_started.htm&amp;amp;toc=ANTS_Memory_Profiler/help/7.0/toc.htm"&gt;http://www.red-gate.com/supportcenter/Content?p=ANTS%20Memory%20Profiler&amp;amp;c=ANTS_Memory_Profiler/help/7.0/amp_getting_started.htm&amp;amp;toc=ANTS_Memory_Profiler/help/7.0/toc.htm&lt;/a&gt;。 &lt;/p&gt;&lt;p&gt;检测内存泄露步骤 &lt;/p&gt;&lt;p&gt;1. 了解自己的代码，什么地方容易发生内存泄露。 &lt;/p&gt;&lt;p&gt;对于Silverlight，可以关注UI。由于这次检测的阅读器程序，采用了MVVM架构，可能发生泄露的地方， MVVM结构简图： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131725522776.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image006" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131725564875.jpg" border="0" height="410" width="185" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;可以看出，最容易出现内存泄露的地方是View。 &lt;/p&gt;&lt;p&gt;2. 打开ANTS Memory Profiler，New Profile Session &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131726028293.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image008" alt="clip_image008" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131726134399.jpg" border="0" height="378" width="536" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Uri选择html或者xap地址，如果是OOB程序，必须保证OOB没有安装到本地，否则会显示： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/2011041317261943.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image010" alt="clip_image010" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131726209270.jpg" border="0" height="80" width="536" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;3. 使用ANTS 发现泄露的步骤 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131726212749.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image012" alt="clip_image012" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131726253179.jpg" border="0" height="38" width="536" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;a) 多执行几次跳转等操作，获取内存快照。 &lt;/p&gt;&lt;p&gt;b) Class List 视图中查找View &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131726261359.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image014" alt="clip_image014" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131726296182.jpg" border="0" height="21" width="536" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;可看到View实例为2，应该为1。 &lt;/p&gt;&lt;p&gt;c) Instance Cataegorizer 视图查看实例类别，ANTS会对GCRoot到当前对象的所有Instace根据路径分类。在此可以对实例Live情况有个基本认识。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131726327493.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image016" alt="clip_image016" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131726364334.jpg" border="0" height="116" width="536" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;上图显示两个类别。其中第一个可能是内存泄露。 &lt;/p&gt;&lt;p&gt;d) Instance List 视图，重新执行可能引起内存泄露的操作，再次获取快照，如下图： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131726379450.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image018" alt="clip_image018" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131726385089.jpg" border="0" height="48" width="536" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;可看到第一个实例是上次GC没有被回收的对象。 &lt;/p&gt;&lt;p&gt;除了可以根据代码估算内存泄露对象外，一般距离GC远的可能是泄露对象，Gen 越大越可能是泄露对象。 &lt;/p&gt;&lt;p&gt;e) Instance Retention Graph 视图，显示从Root到当前对象的所有路径。解决内存泄露问题，就从这里着手了。 &lt;/p&gt;&lt;p&gt;通过比较两图，找到可能泄露的地方，主要着手点是上次没被回收的对象图。 &lt;/p&gt;&lt;p&gt;注:下图不必细看，用以说明Instance Retention Graph 视图内容，在下一篇会细说。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131726546839.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="1" alt="1" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131727306459.png" border="0" height="410" width="239" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;对象保存在缓存。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131728131048.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2" alt="2" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104131728232694.png" border="0" height="410" width="453" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;技巧&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;1. GC回收时间不可控制，可以增加GC回收代码： &lt;/p&gt;&lt;p&gt;GC.Collect(); &lt;/p&gt;&lt;p&gt;GC.WaitForPendingFinalizers();//因为为Finalize对象，再第一次GC后仍然作为root存在，在下次GC时才会释放内存。 &lt;/p&gt;&lt;p&gt;GC.Collect();//确保Finalize对象被释放 &lt;/p&gt;&lt;p&gt;2.执行两次快照操作  &lt;/p&gt;&lt;img src="http://www.cnblogs.com/bluewater/aggbug/2015093.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bluewater/archive/2011/04/13/2015093.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bluewater/archive/2011/04/13/2013759.html</id><title type="text">从火狐放弃依据特性更新版本说起</title><summary type="text">火狐也跟随google的步伐，加快了浏览器版本的升级。在过去一年Chrome以疯狂的速度更新了多个版本，火狐只更新了一个。 火狐放弃依据特性发布版本，是否意味着google的版本发布方式更优秀呢？ 未必如此，最初软件功能不完善，存在许多要增加的特性，此时采用特性版本发布方式非常适合，随着新版本的发布，特性列表中存在的特性多是，非关键特性或实现困难的特性。如果到了此时仍然沿用特性版本发布方式就不合时宜了，采用类似google的版本发布方式也是不错的选择。 扩展开来，事物的每个发展阶段都有针对此阶段的最优解决方案，而不存在针对这个事物的最优方案，也更不会存在对每个事物都是最优的方案。软件架构也如.</summary><published>2011-04-13T01:05:00Z</published><updated>2011-04-13T01:05:00Z</updated><author><name>思无邪</name><uri>http://www.cnblogs.com/bluewater/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bluewater/archive/2011/04/13/2013759.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bluewater/archive/2011/04/13/2013759.html"/><content type="html">&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;火狐也跟随google的步伐，加快了浏览器版本的升级。在过去一年Chrome以疯狂的速度更新了多个版本，火狐只更新了一个。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;火狐放弃依据特性发布版本，是否意味着google的版本发布方式更优秀呢？ &lt;/p&gt;&lt;p&gt;未必如此，最初软件功能不完善，存在许多要增加的特性，此时采用特性版本发布方式非常适合，随着新版本的发布，特性列表中存在的特性多是，非关键特性或实现困难的特性。如果到了此时仍然沿用特性版本发布方式就不合时宜了，采用类似google的版本发布方式也是不错的选择。 &lt;/p&gt;&lt;p&gt;扩展开来，事物的每个发展阶段都有针对此阶段的最优解决方案，而不存在针对这个事物的最优方案，也更不会存在对每个事物都是最优的方案。软件架构也如此，EDA、SOA、Layer、MVC、MVP、MVVM等等随着问题领域、技术领域的不同需要选择不同架构，即使为解决同一个问题，问题所处阶段不同，架构选择也不同。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bluewater/aggbug/2013759.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bluewater/archive/2011/04/13/2013759.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bluewater/archive/2011/04/12/2013857.html</id><title type="text">Silverlight内存泄露（二）解决内存泄露之Dispose误用</title><summary type="text">按顺序第二篇应该是”如何检测SIlverlight内存泄露”，但这一系列都是解决实际问题的日志，有些检测结果没有被保存下来，不可能为了写这些文章，而重现bug。想到哪就写到哪了。 看到许多文章在解决事件为被注销引起内存泄露时，通过在Dispose中注销事件，以释放资源，这可能会出现未预料的问题。 Dispose模式介绍 参考：Effective C# - 条款18：实现标准的Dispose模式 要点： 通过实现IDisposable接口，你写成了两件事：第一就是提供了一个机制来及时的释放所有占用的托管资源，另一个就是你提供了一个标准的模式让用户来释放非托管资源。这是十分重要的，当你在你的类型.</summary><published>2011-04-12T08:57:00Z</published><updated>2011-04-12T08:57:00Z</updated><author><name>思无邪</name><uri>http://www.cnblogs.com/bluewater/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bluewater/archive/2011/04/12/2013857.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bluewater/archive/2011/04/12/2013857.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;按顺序第二篇应该是&amp;#8221;如何检测SIlverlight内存泄露&amp;#8221;，但这一系列都是解决实际问题的日志，有些检测结果没有被保存下来，不可能为了写这些文章，而重现bug。想到哪就写到哪了。 &lt;/p&gt;&lt;p&gt;看到许多文章在解决事件为被注销引起内存泄露时，通过在Dispose中注销事件，以释放资源，这可能会出现未预料的问题。 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Dispose模式介绍&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;参考：Effective C# - 条款18：实现标准的Dispose模式 &lt;/p&gt;&lt;p&gt;要点： &lt;/p&gt;&lt;p&gt;通过实现IDisposable接口，你写成了两件事：第一就是提供了一个机制来及时的释放所有占用的托管资源，另一个就是你提供了一个标准的模式让用户来释放非托管资源。这是十分重要的，当你在你的类型上实现了IDisposable接口以后，用户就可以避免析构时的损失。你的类就成了.Net社 区中表现相当良好的成员。 &lt;/p&gt;&lt;p&gt;但在你创建的机制中还是存在一些漏洞。如何让一个派生类清理自己的资源，同时还可以让基类很好的再做资源清理呢？(译注：因为调用Dispose方法时， 必须调用基类的Dispose，当然是在基类有这个方法时。但前面说过，我们只有一个标记来标识对象是否处理过，不管先调用那个，总得有一个方法不能处理这个标记，而这就存在隐患) 如果基类重载了析构函数，或者自己添加实现了IDisposable接口，而这些方法又都是必须调用基类的方法的；否则，基类无法恰当的释放资源。同样，析构和处理共享了一些相同的职责：几乎可以肯定你是复制了析构方法和处理方法之间的代码。正如你会在原则26中学到的，重载接口的方法根本没有如你所期望的那样工作。Dispose标准模式中的第三个方法，通过一个受保护的辅助性虚函数，制造出它们的常规任务并且挂接到派生类来释放资源。基类包含接口的核心代码， 派生类提供的Dispose()虚函数或者析构函数来负责清理资源 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Dispose可能存在的问题&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Dispose是Object就有的方法，任何代码都有可能调用，并且子类应该调用基类的Dispose。从中可看出： &lt;/p&gt;&lt;p&gt;1. Dispose是.Net固有的方法，任何代码都可能调用 &lt;/p&gt;&lt;p&gt;2. Dispose是自上而下执行的，基类到子类。 &lt;/p&gt;&lt;p&gt;这表明Dispose是不可控的，其他代码很可能会调用这个方法。 &lt;/p&gt;&lt;p&gt;MVVM light最初也依赖Dispose释放资源，但在新版本中已经使用ICleanUp接口释放资源，就是由于Dispose太不可控了。但为了兼容前版本，Dispose仍然有效。 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Dispose引起问题的例子例子&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;[ViewModelExport(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(ChapterViewModel),&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Chapter&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;&lt;br /&gt;[PartCreationPolicy(CreationPolicy.NonShared)]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ChapterViewModel:NavViewModel&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;ChapterService&amp;nbsp;service&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ChapterService();&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;C&lt;br /&gt;&lt;br /&gt;[ViewModelExport(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(ChapterViewModel),&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Chapter&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;&lt;br /&gt;[PartCreationPolicy(CreationPolicy.NonShared)]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ChapterViewModel:NavViewModel&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;ChapterService&amp;nbsp;service&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ChapterService();&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ChapterViewModel()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;service.Loaded&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;EventHandler&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;AsyncEventArgs&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(service_Loaded);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;service_Loaded(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sender,&amp;nbsp;AsyncEventArgs&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;arg)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Dispose()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;service.Loaded&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;EventHandler&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;AsyncEventArgs&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(service_Loaded);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;hapterViewModel()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;service.Loaded&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;EventHandler&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;AsyncEventArgs&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(service_Loaded);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;service_Loaded(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sender,&amp;nbsp;AsyncEventArgs&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;arg)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Dispose()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;service.Loaded&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;EventHandler&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;AsyncEventArgs&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(service_Loaded);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre &gt;&lt;br /&gt;&#xD;
&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;按照预想Dispose会注销事件，避免内存泄露，但运行时会发现service_Loaded可能不被执行，原因是 Dispose()被第三方程序调用了，而这些调用可能很隐蔽。&#xD;
&lt;/p&gt;&lt;p&gt;在这个程序里，下面的代码调用了Dispose，并且不易被发现。&#xD;
&lt;/p&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;var&amp;nbsp;viewModelFactory&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;viewModelMapping.CreateExport();&lt;br /&gt;&lt;br /&gt;viewModel&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;viewModelFactory.Value&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;IViewModel;&lt;br /&gt;&lt;br /&gt;viewModelFactory.Dispose(); &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;解决方式&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;通过其他方式注销事件，比如显式的接口、弱引用、匿名方法，在事件引起的内存泄露的文章中会详述几种解决方式。&#xD;
&lt;/p&gt;&lt;p&gt;在MVVM Light的cleanup注销事件&#xD;
&lt;/p&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;override&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Cleanup()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;service.Loaded&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;EventHandler&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;AsyncEventArgs&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(service_Loaded);&lt;br /&gt;&lt;br /&gt;Messenger.Default.Unregister(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Cleanup();&lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;MVVM Light的问题&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;按上面的方式本应该解决问题，但是service_Loaded 仍有可能不被执行。原来Mvvm Light为了保持和上一版本的兼容性在Dispose方法中调用了Cleanup。&#xD;
&lt;/p&gt;&lt;p&gt;重载Dispose&#xD;
&lt;/p&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;override&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Dispose(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;disposing)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;,覆盖基类&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;禁止调用cleanup&lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1. 尽量不要用Dispose释放托管资源，而使用自己的接口。&#xD;
&lt;/p&gt;&lt;p&gt;2. Dispose中绝对不应该调用其他方法，像MVVM light中调用cleanup，就会导致问题。&#xD;
&lt;/p&gt;&lt;p&gt;3.第三方框架引来的代码复杂性应该被考虑。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bluewater/aggbug/2013857.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bluewater/archive/2011/04/12/2013857.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bluewater/archive/2011/04/12/2013748.html</id><title type="text">Silverlight内存泄露（一）序</title><summary type="text">不知道有多少人遇到过Silverlight程序内存狂涨的状况，点击几个按钮、跳转几个页面程序的内存使用量一直上升。 即使最简单的程序，用silverlight模板，创建一个导航程序，跳转几次页面silverlight内存使用也再增加。 托管代码内存由GC回收，在silverlight、wpf出现之前内存泄露出现的比较少，但是silverlight程序却很容易发生内存泄露。 最近一直再处理Silverlight内存泄露问题，但网上相关内容很少，一些经验和大家分享。 托管代码内存泄露原因 GC介绍：NET中GC小记 http://www.cnblogs.com/aaronbao/archive/.</summary><published>2011-04-12T07:45:00Z</published><updated>2011-04-12T07:45:00Z</updated><author><name>思无邪</name><uri>http://www.cnblogs.com/bluewater/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bluewater/archive/2011/04/12/2013748.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bluewater/archive/2011/04/12/2013748.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;不知道有多少人遇到过Silverlight程序内存狂涨的状况，点击几个按钮、跳转几个页面程序的内存使用量一直上升。 &lt;/p&gt;&lt;p&gt;即使最简单的程序，用silverlight模板，创建一个导航程序，跳转几次页面silverlight内存使用也再增加。 &lt;/p&gt;&lt;p&gt;托管代码内存由GC回收，在silverlight、wpf出现之前内存泄露出现的比较少，但是silverlight程序却很容易发生内存泄露。 &lt;/p&gt;&lt;p&gt;最近一直再处理Silverlight内存泄露问题，但网上相关内容很少，一些经验和大家分享。 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;托管代码内存泄露原因&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;GC介绍：&lt;a href="http://www.cnblogs.com/aaronbao/archive/2010/04/04/1692925.html"&gt;NET中GC小记&lt;/a&gt; &lt;/p&gt;&lt;p&gt;http://www.cnblogs.com/aaronbao/archive/2010/04/04/1692925.html &lt;/p&gt;&lt;p&gt;GC并不能保证不发生内存泄露，GC只会会根据自身算法回收GC认为不再使用的对象，由于程序bug，有些对象在GC看来仍然被使用，但是这些对象都不再使用了应该被回收。 &lt;/p&gt;&lt;p&gt;托管代码可能发生内存泄露的情况： &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Static references &lt;/li&gt; &lt;li&gt;Event with missing unsubscription &lt;/li&gt; &lt;li&gt;Static event with missing unsubscription &lt;/li&gt; &lt;li&gt;Dispose method not invoked &lt;/li&gt; &lt;li&gt;Incomplete Dispose method&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;文章中使用Dispose注销事件，个人认为这种使用方式是错误的，至少不被推荐使用，下面会讨论这个问题。 &lt;/p&gt;&lt;p&gt;详细内容参考下面文章：.net程序如何避免内存泄露 &lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee658248.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee658248.aspx&lt;/a&gt; &lt;/p&gt;&lt;p&gt;WPF可能发生内存泄露的情况 &lt;table style="color: #000000" border="1" cellpadding="0" cellspacing="1"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="392"&gt; &lt;p&gt;&lt;strong&gt;Leak Description&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="115"&gt; &lt;p&gt;&lt;strong&gt;Developer Error&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="89"&gt; &lt;p&gt;&lt;strong&gt;NETFX 3.0 &lt;/strong&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="93"&gt; &lt;p&gt;&lt;strong&gt;NETFX 3.5 &lt;/strong&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="132"&gt; &lt;p&gt;&lt;strong&gt;NETFX 3/5 sp1&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="392"&gt; &lt;p&gt;Improper Use of Event Handlers&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="115"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="89"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="93"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="132"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="392"&gt; &lt;p&gt;Improper Use of Data Binding&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="115"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="89"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="93"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="132"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="392"&gt; &lt;p&gt;Improper Use of Command Binding&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="115"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="89"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="93"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="132"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="392"&gt; &lt;p&gt;Improper Use of Static Event Handlers&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="115"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="89"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="93"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="132"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="392"&gt; &lt;p&gt;Use BitmapImage in ImageSource&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="115"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="89"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="93"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="132"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="392"&gt; &lt;p&gt;Multiple Use of BitmapImage&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="115"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="89"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="93"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="132"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="392"&gt; &lt;p&gt;Use of downloaded BitmapImage&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="115"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="89"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="93"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="132"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="392"&gt; &lt;p&gt;CMilChannel leaks if initial HWND destroyed on XP&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="115"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="89"&gt; &lt;p&gt;X (XP only)&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="93"&gt; &lt;p&gt;X (XP only)&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="132"&gt; &lt;p&gt;X (XP only)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="392"&gt; &lt;p&gt;ShutdownListener leaked for each thread using Binding&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="115"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="89"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="93"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="132"&gt; &lt;p&gt;X&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="392"&gt; &lt;p&gt;Create and Destroy WriteableBitmap on XP in HW&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="115"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="89"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="93"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="132"&gt; &lt;p&gt;X (XP in HW Only)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="392"&gt; &lt;p&gt;SW Viewport 3D w/ VisualBrush, WB, etc. leaks on XP&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="115"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="89"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="93"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="132"&gt; &lt;p&gt;X (XP in HW Only)&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;&lt;p&gt;参考：&lt;a href="http://blogs.msdn.com/b/jgoldb/archive/2008/02/04/finding-memory-leaks-in-wpf-based-applications.aspx"&gt;http://blogs.msdn.com/b/jgoldb/archive/2008/02/04/finding-memory-leaks-in-wpf-based-applications.aspx&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Silverlight内存泄露原因：&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;1. 由silverlight本身的bug导致 &lt;/p&gt;&lt;p&gt;期待Silverlight新版本的能解决问题。但是如果真对性能要求很高，可以找出引起内存泄露的代码或者xaml，换一种实现方式。这部分不多讨论，下面链接讨论了silverlight引起内存泄露的情况http://forums.silverlight.net/forums/t/171739.aspx &lt;/p&gt;&lt;p&gt;2. 程序bug，除了上述引起内存泄露的情况外，Silverlight引起内存泄露的情况还有： &lt;/p&gt;&lt;p&gt;a) Command引起的内存泄露 &lt;/p&gt;&lt;p&gt;b) Style、Xaml引起的内存泄露 &lt;/p&gt;&lt;p&gt;c) 弱引用引起的内存泄露&amp;#8212;&amp;#8212;按道理弱引用不会产生内存泄露，但实际情况并非如此，弱引用看似简单，但其实却很难用好。哪怕及时释放掉了实际的对象，但弱引用数组还是会继续持有引用，这就导致了内存泄漏。可能和silverlight的bug有关。参看wpf 弱引用补丁&lt;a href="http://www.infoq.com/cn/news/2010/06/WPF-Memory-Leaks"&gt;http://www.infoq.com/cn/news/2010/06/WPF-Memory-Leaks&lt;/a&gt; &lt;/p&gt;&lt;p&gt;d) MEF等第三方注入库可能引起内存泄露 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;文章列表&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;当前想到可能包含下面的文章，有时间就会写： &lt;/p&gt;&lt;p&gt;1. 如何检测SIlverlight内存泄露 &lt;/p&gt;&lt;p&gt;2. 如何解决内存泄露问题 &lt;/p&gt;&lt;p&gt;3. 事件使用错误引起内存泄露 &lt;/p&gt;&lt;p&gt;4. 静态引用引起内存泄露 &lt;/p&gt;&lt;p&gt;5. Command引起的内存泄露 &lt;/p&gt;&lt;p&gt;6. Style、Xaml引起的内存泄露 &lt;/p&gt;&lt;p&gt;7. 弱引用引起的内存泄露 &lt;/p&gt;&lt;p&gt;8. MEF等第三方注入库可能引起内存泄露 &lt;/p&gt;&lt;p&gt;9. Dispose为何不应该被用来解决托管内存泄露问题&amp;#8212;&amp;#8212;mvvmlight &lt;/p&gt;&lt;p&gt;参考：&lt;a href="http://stackoverflow.com/questions/620733/memory-leak-in-c"&gt;http://stackoverflow.com/questions/620733/memory-leak-in-c&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/bluewater/aggbug/2013748.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bluewater/archive/2011/04/12/2013748.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/bluewater/archive/2011/04/07/2007913.html</id><title type="text">Silverlight IReader阅读器第二版</title><summary type="text">下载地址silverlight 阅读器 主要是非功能方面的改进，整个架构做了调整。 a) 采用MVVM架构 b) 使用自定义导航结构 c) 使用MEF d) 用户可以通过配置文件新增解析站点。 e) 使用百度搜索，放弃google（由于经常被墙），下一版本会采用bing api。 功能方面： a) 图书文本文件生成。使用手机的方便了，可以直接生成文本，不必再通过为下载一本小说的文本而费力搜寻。 b) 改进收藏功能，可手动、自动更新收藏的图书，使收藏图书保持最新状态。 c) 本地图书，不再读取在线内容。 d) 改进了搜索功能 e) 新增目录预加载，收藏界面、排行榜界面会预加载目录，此时打开目录.</summary><published>2011-04-07T08:28:00Z</published><updated>2011-04-07T08:28:00Z</updated><author><name>思无邪</name><uri>http://www.cnblogs.com/bluewater/</uri></author><link rel="alternate" href="http://www.cnblogs.com/bluewater/archive/2011/04/07/2007913.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/bluewater/archive/2011/04/07/2007913.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;下载地址&lt;a href="http://files.cnblogs.com/bluewater/reader.rar"&gt;silverlight 阅读器&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;主要是非功能方面的改进，整个架构做了调整。 &lt;/p&gt;&lt;p&gt;a) 采用MVVM架构 &lt;/p&gt;&lt;p&gt;b) 使用自定义导航结构 &lt;/p&gt;&lt;p&gt;c) 使用MEF &lt;/p&gt;&lt;p&gt;d) 用户可以通过配置文件新增解析站点。 &lt;/p&gt;&lt;p&gt;e) 使用百度搜索，放弃google（由于经常被墙），下一版本会采用bing api。 &lt;/p&gt;&lt;p&gt;功能方面： &lt;/p&gt;&lt;p&gt;a) 图书文本文件生成。使用手机的方便了，可以直接生成文本，不必再通过为下载一本小说的文本而费力搜寻。 &lt;/p&gt;&lt;p&gt;b) 改进收藏功能，可手动、自动更新收藏的图书，使收藏图书保持最新状态。 &lt;/p&gt;&lt;p&gt;c) 本地图书，不再读取在线内容。 &lt;/p&gt;&lt;p&gt;d) 改进了搜索功能 &lt;/p&gt;&lt;p&gt;e) 新增目录预加载，收藏界面、排行榜界面会预加载目录，此时打开目录没有延迟。 &lt;/p&gt;&lt;p&gt;f) 调整字体、行距、段间距、字体颜色可自定义 &lt;/p&gt;&lt;p&gt;g) 新增阅读器模式 &lt;/p&gt;&lt;p&gt;h) 新增纵横中文网支持（在追看焚天，必须增加了）、3g华夏，去掉啃书中文（已经关闭） &lt;/p&gt;&lt;p&gt;i) 下载图书下载允许两个并发下载，尽量平衡下载与阅读（SL只允许8个）。&lt;/p&gt;&lt;p&gt;UI架构 &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;div&gt;&lt;img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiwAAAGRCAIAAADJqX+IAAAgAElEQVR4nOy9d1wUWZ/oPbt37+5+du8+j7vve3f33bvz7s7zjKOI5M6ZYE5jGHXMOYwRdQygmAMqIggCgqjkpEiOTYYGuoGm6ZxzDtCEJva5f7QyiGEAGWUe6/f5fvwUVadO/c7prvpa1VWnvgJQQAEFFFBA8Zniq8+dABRQQAEFFF9uQBKCAgoooIDis8UbEiqiKmLLpDGF/GgICAiIv3RiiwUP8gQ8RefnOv5CAcZJ6MHLDjMAXUPAPAABAQHxF84AAA1SkE8Rfq7jLxRgvIRetKl7ga4LqC0QEBAQf+F02kAlx/a8suNzHX+hAOMkFJbVouwBmk6gNENAQED8hWPuAxVsWya5/XMdf6EAkIQgICC+WCAJzYR4S0LdQGMBShMEBATEXzjm3l+RUEhISHJyslarraioqKmpqaioqKysFIvFAAClUpmenj40NOQo2dnZmZWVBQCQSqXDw8MAgJGRkdDQ0PLy8ubmZgBAb29vXV1dVVWVSqWayKHZYrE8ffp09M9jx46x2ex3ljQYDIODg+Nm8ni8ioqK+vr6urq6ioqKqqqqxsbG8PDwyMjI0fpbW1uHhobu3bsnlUoFAsHjx4/lcvnYSoqKihyN7evr6+zsBADo9Xq73e5YWl1dXVtbCwAYHh4+fvy4RCKZSLveDkhCEBAQXyjmnvdKaGhoKD8/v6KiIjo62mAwxMTE3LhxIzw8/MaNGwcOHHAceQMCAmJiYrRa7dWrV48cOYJCoa5evZqZmTlaw8aNG5OSkjZs2GAymQoKCo4ePRoREXHu3DkAwODgoMFgGD2gWyyWnp4eAIDRaLTZbAAAm80WGBioVCqZTCaHw0lKSiooKKioqKBQKONSffbs2b59+8bNrKqqevDgwebNm/fs2fPgwYOrV68uWLAgNDQ0Pj7eUSAzM/Py5cs9PT0//PCDI41nz55FREQ4fKbX669cueLt7b1x48aIiAiRSLR48eKgoKCNGzeOjIw4asjOzo6Pj+/u7lapVCtWrKDT6UwmUywWa7VaSEIQEBAQv84HJGSz2Y4cOTI8PDw0NJSUlDQyMpKQkOCQh8Mijujv7+/u7qbT6VlZWUePHqVSqQwGo7Gx0WGpDRs2PH36dPPmzVKpND8/f9++fQ8fPrx+/ToAoLa29ptvvunr63PUs2TJkmvXrgEAnJyc8vLyhoeHQ0JCVq9efe/evZs3b/78889r1qwJDw8PCQlxnJE4oqurKzw8XC6XO1J9uxWZmZllZWUAgJ6enitXroxddOzYscOHD1+4cGHNmjVhYWGhoaGRkZHnzp1buXKlTqcbHByk0WhnzpyhUCj+/v5NTU2XL1+2WCz+/v6ODdHp9N27d2/atEkul4eFhR06dOj27dvXrl1bvnx5XFzcR0lI0Q3UFqAwQUBAQPyFY+oB5PdIqL+///Tp0wCA1tZWLBbr4+Ozb98+Pp/f1dV19uxZAEBVVVVSUhKFQpHJZN9///2tW7eCg4MPHTqEx+NzcnIAAENDQxEREQ0NDVQqddWqVSKR6MyZM7GxsdXV1Xq9vq6ubtasWaMSwmKxAQEBAIB///d/z8zMtNvt0dHRXl5eZrN5eHj44cOHCoUiLCysqqpqbJIOEwwMDHR1dQEA2trarFYrAMButw8ODg4ODj5+/DgzM3NwcFAsFp89e3ZwcLC+vr63txcAwOfz6XR6amrq/v37KRRKXV0dnU7v6Ohob293nJOJRKLz588DAIKCghgMxg8//JCQkLBp0ybHmZBOpwsODt6/fz+dTk9PT9doNA473r17l8ViQRKCgICA+HUmIqGTJ0+mpqZSKJS7d+/evXvXbrc7JNTa2vrDDz/k5OTo9foXL16EhYXdvHmzubl59Cef1tbW69evnz9/3tXVdd26dbt37968efPRo0cPHjyYmJhIo9H+9V//dVRCRCLxwoULAICvv/46IyMDAHDhwoU5c+ZERUVFRUVt3759165dy5Yta2pqGv35Jz4+3pHVaM5NTU0RERH9/f1arfb06dOnT59eunTp6tWrT58+ffDgQTQaffr06ZUrV5aXl/9yzA8LQyKRZ8+evXLlyrp16x4/fuyY39XVlZKSEhcXd/ny5ZKSEjabHRwcTCaTw8PDR9ddvnz5unXrDh48aLfbAwICTCYTAODGjRttbW2QhCAgICB+nV+VkN1uDwsLO3z48KFDh3bv3u24E8EhIQBASEiIQCDQarWJiYkAAMd5z9hKBgcHnz17lpaWBgAwGo1Xr15NSUnhcDhisbi6uvpf/uVf+vv7HSUJBILjKt/XX3/98uXL7u7u/fv3nzp1qqOjAwAgEonu3LljNBoDAwMdJxydnZ1bt26lUCi3bt0au8WgoKCVK1fa7fahoaGhoaH4+PiMjIyhoSGJRHL27FnHbRSjP0TZbLbbt28HBgaWl5cPDQ0RicTS0lLHoqioqIiICCqVSqPRnjx5cv78eRaLxWQyk5OTY2NjAQDV1dV+fn4JCQl5eXlZWVlFRUV1dXXd3d23b9+GJAQBAQExISYiIavVevHixfPnzz99+nRoaMhisZw5c8ZR5vr16zwez2w2c7lcqVR6/fr17OzslpYWx9kJm83eunXrypUr7927V1BQkJSUdOHChdOnT3/99dfp6el8Pv+bb75xXPgCAPj4+Ny7d88hoYKCAjKZ/PTp0+DgYAAAi8UKDw/XarXBwcECgcBRPj09PSAggMfjjUpIoVDU1NQ0NjZGR0ePtiImJiY/Px8AoFQqAwMDx7UxLy8vJibGbrfHxcWFhoY6rgc6QqVSRUREREdHr1+//q/+6q9mzZp19erVuLi44ODgiIgIi8USExMTERFRUFAAAPj+++9PnTq1Zs2atLS0uLg4SEIQEBAQE2Iil+NevnxZUFBQUlKSmZl59erV5OTkoKCgUQk9evTo2rVrt27dOnv27B//+MctW7bExsZKpVIAQFdXV0RExM2bN48fP04mk3fv3t3Y2FhXV+c44+nv79+1a1dGRobFYmEwGDt37nSs9Yc//CE1NdVisZjNZocVampqtFptdHT0gQMHOByO4zzGcR2PTqefPn3aYrFYLJa8vLyTJ0+ObQKFQomJiRkYGHAoaqxjAABMJjMsLMxhwaioqFmzZrW2to7rBAaDsXTp0jt37ty8eTM5OTk3N9cxf3BwsKen5+XLl6mpqXa7XSaT8Xi8srIykUh0+/btlpaWj5KQvBuoLEBugoCAgPgLx9gDyt8voTNnzrx48eLZs2cOowQHB0dHR1++fHn0VOPp06cXL14cHBy02Wzx8fFVVVUhISFRUVEikchRoLy8fN26dT4+PllZWRs2bLh48eK+ffscbgMAmEymxMTEs2fPPn78ePSXpF27dtXV1QEAdDqdQyr19fW3bt2i0+lDQ0OHDh2KiIgYTVKn0x08ePDs2bNnz5513O3W3d3tWFRbW3v06FGh8NWweHK5fKyi2tra7ty5093d3d3dHRwcHBkZWVpa+uOPP+7evTspKcnx6w6ZTA4NDZVKpdXV1U+ePFGr1WvXrl20aNHo2VhiYqLjjkFH9PX1xcTEEAgEtVoNSQgCAgLi1/mAhAYGBh48eNDePn5RQEDA6JHdEaGhof7+/qPiiYqKcngLAKDX681ms0AgqKurk8lkAID+/n7H45+/GmazOSYmJiwsLDg42PHLEADAarWO2/o7QyQShYSEjE3eZrONygMAwOfzOzs74+LiDh8+zGAwHDNHRkYeP368b98+s9kcGRkZHh7u+A2pvr5+9OGnsrKy0fxLSkqKi4tH6zSZTHv27JnstTjwDglZgcoM5EYICAiIv3CM3aCc9bHD9vT19Tkuef0W4XhwdbLxzmeG3ln56J0R07LdqQUkIQgIiC+UaZEQFB8ZkIQgICC+UCAJzYQYLyGZFSjNQGaEgICA+AvHAEloBgQkIQgIiC+U36OEbDab4x4HRwwODur1egDA8PAwh8MZHdV7bIyMjHA4nLEjbet0uvfdHyGRSOrr60f/VKvV1dXVb4/8bbPZWltbR++SGBgYYDKZjnG13/c70/sCkhAEBMQXyu9RQmazef/+/RqNxvFndHR0TEwMl8vduXPn3//934/OH42Ojo59+/b9zd/8jeM1DTabrbCw0MPDw9vb++3Ka2trL1y4cOXKlbCwMLvdzuPxcnJywsLCNmzYUFRUNFrMZrMVFxenpaUdOHDAMVzpy5cv/+3f/i0sLCwiImL0NvEJBiQhCAiIL5Tfo4QAAEFBQSkpKQCAkZGRn3/+ub29PT8/PyUl5Y9//OPbz+hkZ2dnZGT84Q9/cDwMq1KpsrKyDh8+jEajx5UcHh5et25dTU0NAGDx4sVUKnV0aLugoKDt27ePlhwZGXGMglpcXPwf//EfAIDHjx/PmTNnas2BJAQBAfGF8juVEIVCcYxfx2Qyjx496pgpkUhmzZr1zjfmqdXqWbNmjX3p3PXr15FI5LhiCoXin//5nx2vzoPBYI4BgbKzsyMjI9evX//OB4DS09MJBAIAICEh4Y9//OPTp08n8hjTuHhDQvezWqRdQGECUgMEBATEXzh6Kyhj/v4kNDAwcOjQIa1Wm5GR4RgdFQDA4XBGJWS1WvPz8/Pz8x0j6IjF4nESunz5MgqFckwLBAJHYTKZ/A//8A8cDgcA4Ozs7Bjmp7y8/OXLl5cuXUpISJDJZI6SDtMMDAwQiUTHmN9Go7GysjI5OXnt2rVjL9xNJCAJQUBAfKH8TiUEAAgJCUlKSrp48eLoSA1CoXDWrFmOmxTMZnNsbGxsbKzjrQ0KhWLWrFlKpXJ09WvXro1ejqPT6Y7CNBoNhUI5Rmfw9vZOT08fLc9kMv/zP/+zpqbGUdIxFkNAQIC/v/+4xDZt2rRhw4ZJtQWSEAQExBfK71dCMpkMjUZfv37dMZ6pWq0uKSn56quvGhoaxr1dW6PRVFZWfvXVV1VVVTqdbnh4WCKR7N+//5tvvpFIJI6X4I3GxYsXo6Oj6+vrd+7cabVaRSIRnU6XSCRhYWHr168fW/Ly5ctYLJbNZstkMr1eT6fTpVIpg8HYvHmzY2jtiQckIQgIiC+U36+EAAAXL16kUCiO6djY2ICAgAMHDgQGBo4dVBQAEB8fHxgY6FiUlJTkeDPFiRMnDh8+HBQURKVSxxbu7e19+PDhpUuXHLfSmc3mtLS0oKCg+Pj4sbrq7+8/ceLE6dOnr1y5EhQUVFpaymazr1+/fu/ePSaTOdmGQBKCgID4QvldS+gvJqZTQupOoOkEagsEBMSvoO0CSjOQfO6j8BcOJKGZENMmIYUJpNWoQl/yI/KEEBAQH0QQ+pJfx7aqzJ//QPwlA0loJsR4CUk6gdwIJPpJw1PYrqUwaMIeltzWIYOAgHgvArUtpVoZVyRQm6eyr0FMF7ouUApJ6HPHtEmoXWC5lUaXm4C+C2g7ISAg3ktXHyhpM0W97JDphqSGz38s/mKBJDQTYnokJNWDVq7hekqbxGBXW4DSDAEB8V5MPaCo1RjxnC7VDkAS+oxAEpoJMd0S0tvVZqA0QUD8vlFbgM4KlK+/zJpOoO0CShNQd76eaQZqC1B3ApX5l1XGraXuBFrrOyo3dYOiFkhCnx9IQjMhIAlBQIxHZQIy/RBX2qW2AKUJqC1Aoh3gK3oURiDVDTm+4WozkGgGxJp+RxmVGcj0wxLt4Ni1pLpBnqxb9dYeAUlohgBJaCbE9Evo7V0OAuL3RdcwiHmSiUDhqB0KYx8w9IKAi7dW/7BZawUXr4dS2iTmfkDn6SJiUy9dD61sYFn6AVtiiU148TjpJQyJraXyTX3AZAPX70QuWrpKYRp2aGkUSEIzBEhCMyHGS0hsATIDEOsmTQvHcD25Tay3K81AYYKA+B3TA8DNkKhlK39ISC/sHARtXP2pgCtrN2zV94Kw6MT45JxeAFJelEbGpaU8L33wKLkHgJwSSlh0Ylxi9uLlq+MSs80DgCW2BFwKXrlmI1fere58o35jNyhsMT54TpeoByT6qexuENOCthOUdEAS+swBSQgCYjzddnD9duSVW+FBV+/JjSPRTzIjH6ft2HNYaQaNDLn/6YsmGwh5EE9jqdhS69FT53U9IOJRSitXHxGbeuHq3Us37gtVfU9S8x4+Ttux9zBXZoUkNDOBJDQTApIQBMR4uu3gyq3w+w+fJT8vjU14EZvwoq5F+OO2PVL9sLpr5Na96MzcqvsPExSmYV0PuBsen/ay4v7DBGMvuBf59Mbdh5l5NdFPMh89e05pl27atgeS0IwFktBMiGmWkEhvV5iB3AQB8TumG4CAS8E3Q6I6RHokhpiQUciWdi1btU6sG+oaBklZJSS/JYmZxeZBYBoA2UX1PguWRsVnAABu3I0KvHxboLLgCH4PH6dLdEPLVq5lS7tUnW/Ub+gGBZCEZgCQhGZCQBKCgBiP0QZSs8sz86rMgyAk4gmVpeIpeu5GxEv0w+ouwJJ2Xb0d4VCL0gIE6v5rtyNbebrOfvC8sDY5q6RzCIRFJ9a1iiS6obsP4gVqm9LyRv2QhGYIkIRmQky3hHR2hQnIjRAQv2NkBqDrAbpuIDMAUz9QdQKFCZhsQG4EMiNQWoC5HygtQGYEciNQml+VkRqArhvoe4DMAEw2oO4CchMw2cDbe4TBCgpokIQ+P5CEZkKMl5DIAqQGINJNGhokIQiIiTEqIbF6QKyfyu4GMS1oIAnNgJhmCQl1drkJyIwQEBDvRQ9JaGYASWgmxFsSMgOpHoi0k4bGhiQEATEhfpGQakCsm8ruBjEtaCyghAFJ6DMHJCEIiE/NKwllQRL6zEASmgkBSQgC4lMDSWiGAEloJsR4CQnNQKIHQu2kobIN15LbBFq7zPj5X5gIATGT0XWBfKoxPIsuUg2IdFPZ3SCmBbUFFEMS+twBSQgC4lMDSWiGAEloJgQkIQiITw0koRkCJKGZEJCEICA+NZCEZgiQhGZCQBKCgPjUQBKaIUASmgkxXkICMxDrgUA7aZrZhmvJbXyNXQq9pAsC4oNoO0Ee1RieRReqBoS6qexu70P4uR///OwIdUA44e5SWkARJKHPHZCEICA+NZrfQEISPVDogEg1zFcMs2WDTOkA6wuDKR1gywaFyiGZZkSuAxPpWEhCMyHekpAJiHVAoJk0zSzDtSRIQhAQv84vElIOCLVT2d3GItICuRY08q1JzK5AhvmKqPcUt+sIy3yUbfmiOMKynGB3XmJ33WZYcjlWkXJI9mt9qzSDonZIQp85IAlBQHxqplFCEh3gSPvDKIpdbaZNmv6jg+AcAIFfMCeGwU7r8AZB765aeSHDoNQBISShmR3jJcQ3AZEO8DWTpolluApJCAJiAjgkFJZFFygHBNqp7G4OxDrAlfUHVosXt5l3W8GJQXDSBvz7wPGeLxT/XuDfB/xt4IAVrBINLauUpdDUCi0QvKcDFZCEZkBMs4R4arsEej8KBMQHUVtAXvPHSkioBRyp7UwJk0gxbJSCzVL7j+KRNZyBlYy+FfTeL5T23u+ZtnXcwfWCkQ1C+8K2HmIO40WLUvKeToYkNBMCkhAExKdmWiQk04KHlWyvbPoieu+Slu4FjRbfegOhWo2tUHzJ4CqVxBqNH8W0iGpZTLWgKxU+8aUNTL1ED0lohgYkIQiIT83HS0ioA3R+57q0Wni51LteR6xR4ysV2AoZtkKGq5R/4Tg6gVijIlUrCZVyp4SawJRy6bv6GZLQTAhIQhAQn5qPl5BYY89tkqKTa1HlUhwknvfZqFyCKRW6vmhbFJ7RwjII3zqyQRKaCTFeQjwTEOoATzNpGlmGq0ltXLV9gm+KlBqAygJ0VqCfJJpOIDcC8XuqFeuB3AQ0nROtTfcWrzZhAtArLyF+I1QWkNtsvJ9F5ysH+NpJ72t8DRDIBx8Utzkn1qCKhZgyMa5SBvE2WLIEVcTzeNmOeZBVWM8Xv3Vkk5tBISShzx1vScgIhFrAU0+aRuYkJKQwA6EO5FONDwtEIS9497InSuhLfnKVskXcr7IAyZsbEuqAzAAUZkAV2tJr1Pdf8u9l80Oz+aEv34ngfdzPEaZUqyjcbrkRyE3QI+gQ088rCWXS+YoBvmYquxtH0nchs2Z+Yg2qgIspEeIrZfiKqVIpw1XIHJfyHHNG/8S9/vft+Y4t4sYUe7vk28XwlTIUWepWKhldNJqAa6kERZZ+VEPeAlcuQeWzPV+0ud56llrSKtaN70a5CZLQ549PLiEtUJhAM7/3SEQDfH/SnC2P/rT+4Z83TJRvN0a57nyy7FzukzKpzADEjvfv6YBIC6QGwNcMh+fyF5/NhR1ImbPtyXfbns3ZkThnZ9LcXSlOu9Pm7clw3pvlvO/5/APZ8w/muPyU53KowO1woduRYrdjpe7Hy939Kzz8Kz1PVmHP1S672nArk8eS98uNrzcBATFNfKSE+GrAFveeTC6fn1iDKuBgS4X4CunHgCNLMWQpmizBV0gJFVIsWYoul2DIUnyFFEuW4sivijmmsWQplvzLio5pDFmKIUuwZCmhQoqvkKLJEsyYFXEVUkdtqHLJBoryLtdEqBizlCwlVkivsQ1r6hXocoljJqFC6lUmRpZLCB/TtHIxOp/lldXieutZSkkLJKGZGdMtIZVdrPvQqwylesCUDe68XfHN+sg5P0bO2xLlvCV6Ujhtjvrz+gde+xIzalRK06tqxTog1YFLiXSn7fFzNj+avyPebfcztz1J7ntT3PenehxI9zyY6fXTC9ihHNjhXPjRfLh/IeJEMeJkGepUOernCvSZKuzZGuy5OlxAAzaQgg5oQpxtdD9ZezKuXaQekkzpVbMQEO9DZQa5TR8roZ9TyM4J1ah8NrZEgCdLpoxHifhMu07YPZAs60KWiRFl4lW18vbO/lazbUm1rNbQu7VRBS8Ve5SIzrXrXiitzxXWi0y9R4kIUSbeRFHWGnqXVMsaTX0868AmihJWKoaXih8KzcLugYsdeo8SEaxUvJeqbrXYfCulHiWi/VR1maaHQJagyiSwUjGsVOxRIvKukA7b7SfatHMLBfBSMZ4sQZaJ91HV6+oVXqUiwpRbVyZG57G8MmmuN5+mFEMSmqExzRLiqOyiD44KLDeA6ALBvO1xTpsfzt8WM2X+vDFyy60ypmzAYQi5EaRVKz33Js7ZHOO264nb7qfuexLc9yZ77Ev1OJDmeTDD66cs2KEX8MM58CO5iGP5CP9C5Ili5Mky9Kly9M8VmDESwgVSsIFN2MAmVEAz6mztk1KpzABEb7ZCpAMiExB0An4X4FtnHIIuILIAkWFyIwqL9EBoAYJpbZHACoRdQGic/AjHBiDsBILP3ZPj29I56V59J0ozyJkGCZU7P6tC5rEwxXxcuXjKuBQJ7nAMAABR98CiKun8IkEQQwcA6B4a8a2QUE19KbJOtyIholTUYOh9LLIkSCzNpj5Umdi1WJgo7aQYewlkiXlgGABwk2VwLhL4VEgYnTYAQKTANL9I4FEsPN6q6R8Z8auQIMtEvpXSNXVyVJnYu0JykKbe3aTa0aT0q5Aa+oeCOnQ7G5WbKQpYiYhUIdHYhsq03ctqpKgy0RRbVypC5TI9M6kuN59AEpqxMV5CXCMQaAFXPWkoTMOVX5OQSAtEmqGjEbWzf4x23hozf9ujKTNnUxT+WEZNh0mqB2I94KuGjkbUzf4xev72uOmSEPZ8s9eZxr3hVLbMJh7TKJEOCCyAydDwMorFEXGSW6GS22EzheD70tBoQVxqRxmVoxkRmyd2WNQAkRnwDHZOabMw6pk0JEISfH9akhHee8hOzuWIrMJO8OH/nYxFbAU8zRA/v1Zwd5oy+Wikt8MEYTHs3BquZkRomTYJ8RQDPM2k9zWeGrDEvaeSy52fViLzmJgiHq7soyR0j2sUWAcaDL0hHMN3BfwaXW+RulvdN4QuEwV16ATWAViJcGm1VNU39EO9fG2dXG8bWlEj8ywRsjr7LzN1sBKRsm+wQGWlmfrcioUB7domUx/X2h8tfCWhIy1qy+Cwb4XEpUhwmq7V9w8TysX5KmulrkdrG8pWdmHLxRrbEM/anyztNA8MB7RrvckSdd9QvaF3R6MSXjplCQlRuR2eGVSXG09SiltEuvE9KTOBAkhCnzs+rYR0gCvv23W34tuND122PfoYnDZFYQ+nl7doJDq7WA/aBN2rzufN+THKZcfjaZQQ4lzz99fraVyzeMw7lgSdoDWbLFq/bvDAbvvp4/YzMw3/kSMHjBvWUI6eaGfpxBYg1PyagToBS2DkBgRZt/84cvKI/az/NLXLf+Tk4f5dWyV79rZlk4WWiXnIDFpLG8VHj9v27hg5efhzd+YvjBz/qWf7Jq7/KUYjX2ydHglxpyQh7qiEnlQgczswhVxcqWjKuBTw73ONbWZbONfQaOjdVC+v0fWcbtUY+4d8yOKllRJl7+AOiuJqh45m6kMVC9ElQrq57w7b8GO9TNwzsKRSQigTaW1DVzt0fGv/T83KVInlBlPXZOyLFZrmF/A9CgVHaCrLwLAvWexSwDvTptHahpZWSmQ9gwvJYrKmO5RjcCvgWwaGw7nG2bk8iqG3Xt/7n9kcutkWyTf+OZeLn3LrSgSoHIZnerPL9XhIQjM2PqmEhFrAlnTvukOevTHaZVvsx+C0KRp7JL2kWSnW2sU60MQ2Lz6TPefHh9MuoZVXaykd2l/OhCygOb+OtdgPbN0Azv0MLgXOOC4GgoCfwYE9Sh9c7pZtdIFF/MGrYSITYPCMzfsO9K5YBE4eBZcCwaXz05dMADh1bGD993Q/UmXCS8dTaB9IRtIFqOSWZl/i0A+rwJmT4NL56UzmozgPLpwDRw92LV/YsHp1Yw1D/BHnQ9MnITIyh4Ep4OBKBLjiKeKSx73PMTA7baurJDxrf5HKminr3FgrtQ4OLySLnPO4tbqeeKEpX2mN5htd83nz87iPhSaypjuKZyxVW13yeEoX0jkAACAASURBVD5lQvPA8G6KPEfRVaq2Miy2pRXiVlNfrMA4P5frkc87QlVaBoZ9yoTzc7mnW9TK3sEdDXKBdeCloqvJ2LurQY4q4psHhg81K79+zn4u66zV9Xzzgs202KL5xrk5H9M6Huol3TO10eX6Y0hCMzbekpABCDSAq5o0lA7DlaQ2tsr+4dd4MMVdu26Xz/4x2mV77MfgtDkaezS9pEkp0tpFOtDANPxGElpxtbauXS3U2oU6IDAAhshasXmr3BtnXb+2d/OG3i0buzdtmFH0bN7YvWmDfs0q5fLFFe7zCmNSRF1A8L4PRQd4xpGyS8EMhLtl3fc9mzb0bv1xepPp3LBO8/1yLh6V/8P6Fq5ZaHz/C9n0gKMZrDp6UkxAda1f07t5Q++W6Uzm49ti/mG1etWyNoT7kw2bGco+oWGK7/5RmMFLh4TkAzz1VHY3lqj3VFLZvPhyxMt2dD4bW8yfMs65nAdcg6RnwD2fSzH0AAB2Nsi21UkHRkYWlgvn53JO0JQAAJ1taE2VGF7Agxfy1lZLTP3DI3ZwnKp0yeN4lwr6hu17KfLjVCUAoFhlnfOSLbD2xwuM83I4bvnco1Rl3/AIvoQ/O5t9pkWl6huM5RvL1NZ0qSWMo0cV8bDF/N5h+0ma8v9/zipQdjUYev7rOYvdactTdKGL+OiiqbauiIvMbvNIpbhci0spahFpx3ejzAgK6JCEPnN8FgmRZ/8Y47I97mNw2hyDPZpR0qQQ6ewiHajv0P+GEqK/khDfCGqKGslYNM8bL1zgI1nkJ1rgI1jg/W58iHxvgsCPxCfhBX7vKfMu+N54gS9J4EPk+xDGL/X99dqEC3xEC315ft5Mb0Ktp0v6IX+e6f0SMgC60Jq3Zi0TixT4eYsX+YkW+k481V9FtMBHsMCH7UtkELAvvdxzkvMF5vd+N0RmQGuWFGHRXBJOsMBHsvjjknH01fS1RbjAh7/Ah+1DbMUgEnC48hq2+P1t+UQSiitDZLeh85jYIt6Ucc1jX2tX1+m6v8tm3WBomBYbvpi/uUbC7rT5lQo88jhLyoUCa3+S2OSZx8EU8dCFPFQht1JjbdD3YIt48AIuqYTPsth21UvxxXyWxXa1XTM7m1Wl7b7L0rrksj3zODvrpSJrf6LIFM0zXGlXkzXWR3yDpm/wFE2Zr+ikGnu9S3jt5r6DjbI/v2A9ERpfyCyzs1lhbJ3Q2n+lXeOex5li6wo4yBetHikNLlchCc3cGC8hjgHwNYCjmjQNDgkp7cIPvh+FKZpuCWnsIi2oZ/zGEtLYhVrAM4GcsMdFHi7tBCzTm8D18+aNxZfEQSPYSBgbCeMSsPxliwUrl/EW+gpWLuMt8OGNK/xeSIIVS3mL/PjLFgtWLOX5ksbWz1vkJ1i5bNwqXB8iz480bibLl9RCxFV4uMSuXN0i6hHp3/1xCPWguV2T7e3dgoZ3kPCc0c0t8OHgMWwkjOdL4i3w4WBRbCSM5/dqmoNB8vy82UgYG+nFRnhx8BjeQl8uCc+Ge75qvg+Rt+B1en4khjehGYd+7uacePshz/D+r4cJ1OTX58M82ggYpjeBO65RviQ2EsbBY3gLfLg+xFfbdUwjYVxvApeIe5UACsb1IfAXL3i7rz4Sji+pjYSnoOEJKERhXr3QOMWXAClM4GWTMTSTzpEPcNVT2d2Yot5TiaVOsSWIF63o3A5sIefj4OIKudhCLqaAgyngYH6Zw3HMxBZykAUcdAEH6yhWyMEUclAFHNSrORzc6PwCDqbglwpHN4Ev4i4t4y8rFxCKuM4vmS/lFp1tyLeE/1hgtAwM+5Twxlbl2DSygEMo4pKKeZiptguTz0I+p3kk182/EptcRBNqx3ej1Ajy6bYsSEKfNSAJTUJCXAPIDokp9HBpJWA7fIjcBT68Ufx8eL4kZeA53cMI/cNI4drvdWGh1uoqyY5tAyqlYNUKrjfhl5KjE37evLGV+JK4BKyNxVKeDzDEP+4sKmSj4KMC42BRsmNHBuRy/rLFXB/imE17j69ngQ/Lj0Qj4io83WKWLK9laMXvO/TrQWOr8oU3qRmNaPcmcF7XwyXh5ceOqG9c4y/y4xJxcv+j6utXeQt9uUS83P+oKugCb4Gv+uYNXeQD/cMI8Y6tHCxStGmDLuKBLjJCFxkhXLNqNEPuAh+6N6EJj8lwmRtz/gbH8fL4tzPRAr4RlKQU5MHcWwmYcd3L9SXxly3W3r0t3b+HS8AKVizVhtyR7t3NIWD5K5Zqgm+JNm0Ub92ki3igfxipvnaFg0Opgs7bREKeL4nnQ3qjc8Z2l2PCz/uXD+U9/emA4+fdSsJTMMg4d5fMlEKBEXz42/6bSuhkYqlTbBH8eQsqpx1TwH7ljymBLmCj8tljJzCvJn6ZRr+5CVT+aMlXfzoKvD3hqAGZ/wp0Adszl7W1RpwiNj0RGFLFpp11Eljeq0WYAg5qTDLIt7Y7OfJZiCyqe1Kt85WYJEhCMzWmWUIspf3DAzJ2iLp23SZ/t+mR647HH8O8LY9wRzOKmxQOPfymEqqlqwUau0AL2AbwIiSmwH1+CwHD8Caw/bw5r2GhYOq7t+2DQ4qL53WPHykuBHAW+fFWLZcePjhis/FWLGOiYBxfIsePxMKjOX4kNhHHwmPYPgQWFsXxJbEJGBYWySbh2FjUoEqtCQ3hLPARrF/LJuFYODSbhGfh0Cw0QnbKf6S7m7PAh+UoT8DyV63oY7PEu3ey8JjRZLh+3kxfIpWAJXu6Ri9dXtuhExne84noAaVN+ZxEbELD6SQ825f0qjkYpOr61eFuK3/1Sob7fGt9LRgZ4S1d1AFz725uMqWlsnCokf5+zYOwrvKyAZWKTcIpLwSAkRHpiWPS40e4yxZzfIij+bSR8I04dPr8uY+Cgtl6wH/XN0SgBTwjKE4tzPVyo+HRDiOOwvYmcHyJfRy2OSeb4TJPuGUTAMCYlMiYP1e8Z+eQ2cxdvlgTFjpkMcvPnrb392vu3VEEnBkyGth4NJuIZWGRHF8i2xvPwqI4ft4sPIZNwHL8SCwcioVHc3yILCyKTcJzfEksLIrtTWA7CizwGZsDx8+b7UtqIeEa0IhYd9fMlEK+AUxt+FH5hCUkMgCh/p0S6juZWOL0qBCeRUO9pGPyWb8jsPksWC7T+QXD7WWHSzbDM6fjt9pWXgciq9k9qcb5cjQkoRkbX6iEkP6FXseK3I+WeB4r9Txe7nWiAnayCnaqBv5zHSag4cMSynefT8Nj2r0JLD8S+zUMLzfT80wAAH/DWvrcbztg7sprV/TPnoj27BzU6xSXgiyF+Zzli9l+JPPLF9KTx/kb11kKCywlRbpH0R0IT0NKkqWo0FJSpLp1w8bjKq9dVl6/onsUzcSh9AlPu6oqu5saFZcvivbvHunuNqanWkqKTM8zmXi0/OJ5AEBnWYlgy0YmAfNLPr7EJgK23GNCEsoiERtR8DYSnun7anUWEctdvWJQp5OfO8NdvsQmEg13d8t+PsFZunBALpMHnmXikENms3DnNsWlCwAA7oql8nOnh3Q6Btyj3cuN5UNgL/B+VZUfqZWEb8Ch0+bPjZmAhHK83Kh4NP3N7mX7kTrgHrrYmD4uh4lHa8JCR/r7uykNjuk+NosBd9eEh/ZxOQy4+6BGbSkskB4/MtzVZUhO6iwrMSQ+Y5Fw3O+XG7MyTFkZnRXl4gN7OUsWdJaXmV5kWYoKO8llvLWrWESsNvJBZ1lJVwVZsPVHJg7FXvBGDkxfEo2Iq/9UEhLoQEOHoYXfrbAC/psHUKao72RCsVNMATyzGZXdhsnrwOQxIcaT247IaHJPrHa+FAVJaMbGmxLKbOHoAV8NOMpJ08AwXEmcmITukL/bEuu6M/5jmLc1Fncss7hxihLyOlaw7FLl+uD6HfebNtxu3BlO2xRC3R7etjWM7nOxCR3wXgk9D4nJdXNuxqFbSfgOXyLzNR14tGDn1gGValCvU966Qfd01Sc+6+OwBTu2DhoNwr07B01G0aEDnNUrB/V63vq11rrartoa7oZ1I7Y+xfWrPXT6kMkk3L+HvXJpv0QsvxBofPG8s7JCfPhgn0AgPLhvUK8TbN8i3LsT2O3qsFDR4YMAAFngWdYi32Frl/jooQ48mjkmH7oPgYLHlHq4PFzy6xLKIBLqkV40Io7h87oGH0IHFtlZUa5PThTs3NbbweiqqtA9iRPs2t4vlbKXLWL6EoeMBuXNa53kskGtpoOEk539echiFh3YK9y7k7XYj+lDeNUzvkQaEVeHRaU4z4kJCub8ioQKsj1dG3Gocd072sODGg1n1XJzYYG5IK+Px2GvWNJZXqZ7+qRt3neqsJB+qURy4ph9eFh1767E/ygYGVFcvSw9cwoAINi9QxcfO9zZyVm1vJtG7e1gcFYuA3a7OS+Xt2nDcFenNu6RcP8e++CAYPd2U86LfpmMvXRhBxE7NgeGD7GZgK1FwWPcXDI+XkIZdI5sgKt69w4lMYEcMuO//jTb2RV2PyaDrwXyTsB9vW8yhX0nnxXPjc6HZTQiX7Sic9s/JZi8dlRuOyKHjsxtx+S2Y3Lb0bntiJx2RM4vixA5dEROOzp37J909OvCnwZUDh2e3uiWUOl88WFyIU2oGd/JUgPIb4Mk9JnjDQmFZraw9YCnBmzlpGlgGC4ntjGV9g8PTc+YVgkVNSoceqibpIScf8q9mMRo4Bju5/BpAnN4vrCeY0qsVubTdKcTuM7+dWMlVENX8zV2vhawDCArJOalmzMFh6aR8HRfYvtrGH6kNhSMvW61qTAfACD++YQq7H53awt3x9bhzk6GH8mQka5LTlSE3LZUVbRhkf0yqbmkSBUWOqjT6ZISe9rp6qhImotTGwrWL5NKg87rU5PNRQXCIz/1S6XSC+f6ZVLW2lWCn/YPdXa2+xLbkJ4DKpX81o12b/ywtYu/b3cbGt4+Jp8WH0I9HlPk4RK5ZFlNh05oeM8nogcNbco0IqEW6dVMxLX5vG6OL7EV5q6KfGBtatLGx6qjHyruBnc11Gvj4zprqttQMMYC70G9zlSYr46J4u3a3uLhIgk4M9zTo46NUUU+YK5c1k7CjSbTTMTVYFFJryXEe9c3hK8FXCMoSi147unagENR3+zedl9iOwnH8CX2cjmqiHBLRTl/767utlZVeGhPO1185hTVabbi3p0hk0kd/VB+J7gNA5deDhrU69pQsHYSbshkEhw60FlZYakop7k6KULuDBoM7DWrhru6eLu3N8/5c1ddrT4tRXIhYMhsVty+1VlJHjKbOZs2tOFQY3Og+xApBGw1Ch7l5pKeUsgzgCm8iIGnATITyG4yhmbQ2bIBjurdO5TIAFJzKX/3d3//1VdfffXVVyS/5Wl59fIuIDEBthJ0CPtOPCuaG5UHS6cgn9PQOfRPCSqHjsttJ+YzMLntqBw6OoeOzKET8hjEfAY6h47Jbfct6Pi+lL2ihIXJpWNy230KGKtK2StLWdjX5T9Rni9b4ekNbs8qnC9GJhXSBJrxnSyBJDQDYrolpLB/eCwshrBr123ynC2xbjvjPwbnUQmp7QINqGufnIQ8juSvvVETkc//Znf+M7L0u4Ol4QWiJdeaDj3qyKHq4Gco6HON2PPNiIDmFVdra9rUfLWdrwEsPci6G/PCdV4DDkUl4tp8CG/gS2xyndfmR7KP2JUPH8hD7nS3trC3bxm2Wtt88IITx6w0qqWmSh5yu9ltXr9CbszP7Vj7fce679t8iX08nvJhBNXTtQWLtMmk4qBAbUqSpbpKk/DUVFpiKikWXwhocp4jOH5kyGKhL/RtQcP7lUrp9attPoSR3h7Orm00pGebL3E0GZo3vg6HLnSfH7F4WQ1DJ9S/5xPRgYZWZSqBUIP0aiJgW71/aU4LDsnZtb1foRi2WgUnjtEX+vQrFUOdFlHgWSrMnb7AZ9Bs5h/9qXHuty1YJA3pJQ46P6jX0RCeVJh7qzd+bDKNBGw1Bpno/F30hVtsxztd3h4PTQO4BlCYXJDp4VqPRTa/3b3eeBoGrk1OHO7psdKam93nK6MiR/r7rdTmNj8S1dNF8SDMJhI1uzjR4O5ULzfJ1UsDWm0rHt3mSxw0Gnk/7TOVlnS3tze7OGmePe1XqRirVwx1dXH37mpy/q6zrlabkiQKODvc28M7dKBj7aqOdd+3+ZHavPFjc2j1JjTgMZUo2EM3l/TkQp4eTO1FDDIjyG58JSG2EvC1QGEdj6wTsBQjUc/ysYSFf/u3f/vVV1/9z7/9u807D1VSxcpuwJUP+z8tnPsw1yutAZlFRb9s+5TMy6TdaJMbbIPJAp1bVovb85b15WxV7wDL3OuSRbvaIuN39T3iaB6y1Z7PW05SRBKrLY6recTR+OYz4NmtnyxPVHYLPLXe7SnZOQiS0MyNzyGhO+Q5W+Pcdj35GJy3xeGOZRZRpigh9yP5G4PrYoqEbkdKkqtkXicqoool6+7Qjj9mZTdq82n6FTdbkeca3yWh6Oeu8+qxqCYirsWb0PoaKsJLcvO6LjNdn5U51NnJ3rlVFRPVw2azd26zDw+3L1/cQsD0ctgDOl37qmXNcA/NsydDnRZZyG1tegp96SKbWKyKe9Tk7kLDIAYNevHlIF1mRhelwZCX09lQr3oUbSaXcfbu5B0+aB8cbFvkR0PBhsxm2e1bNAxiQKOx0pqZP66nYZGOZNq8CVQSvgaHLnCf/2ACEkoh4KsRnhQCljamRS1EbAse0ycQ2IeHO9avpWGQfQI+AIC15Ucqwqttgc9If7/w3OlmhGerN6EZ7iG+FDTS29vqTWgh4lrH1NPqTaAQsJUYZMK876ImIKEMD5daLHJc97Z6E1p9CM1wD8HPJwAA+uzsJhcn4ZlTAABTSREVBWvydFFGRQ7qtDQ0vJWEb4a5S29cHbZaW3CoVl/iiM3G9z8qPHd62GqVBd/sEwpUsY/oSxeCkRHugb0Up2+tNKohL4e+bPGgXmcqLlTFPJTdvkVFwVp93sihxZtQj8eQkbBI1/nTJSGBDtQzDHEppbHJJW9S/CDuRXB44tmL9/Dei//H//gbxynR//u//79zl++1sMzn0qq+i3jplVqPyGxGZbd+SuakNUexVACADlOPdy59bnpzSLticGRE3zc4L4MazVJzLb3/kdjgnEGdl0692SZX9Q44pVPdMmnIT5sn8gUNllLn+qTcOSgCktCMDUhCb0jo52fswBTe98GtC6/Q0IFN4yTE1oPMu9GZLk61aCSFgKWS8LTXUHFoxrrVossXxVcvs3Zua4J7Mrds4h462LZkIf/0qRY/byoawTmwl3vsMBWHpuIxLT4E/qkT4mtXeCeO07wJ3COHOjZtoGJRNAKW53+sfc0q5tbN7D07bQq5Ni2lfs631taWbkZ7CwnP//kkzYdIw2N4J44z1q+lYpCs3TtEVy61r/meikU7kmkh4ZuIuCosKs91XvjipTUd+g9JqEWZhMdVwj3q8ZhmIm60RTQijkbAsvfv4R7+iYpB0ghY9t7d/FMnWnxJNAKW5k3g/3yy/fsVVBza0fz2Nav4p068WnFMz9BI+Ho8hoyGP3Wa/WEJ8QygMLkgzX1+NRpOwWPGVUIj4WkEbOuShcKAs/RVy6lohGO6Y8uPNDyGikV1/Lied/woDY+hEXFUHLp93Wr+SX8aAUsj4fmnTtBXrWhGI7iHDoqvXeGdOEYj4lp8iIIzp9qWLW5GwzkH9rJ372yCe3Zs3ii+ckl0+RJjww+Opo2FSsTV4tBlCK8IF+dpkRBHNqDsBuFxL76aZHz75zlLjl2cH1PomVwHT29EPqd9SuakNMZy1O3G7gZN5/UW6dzUpmad9YVYL+/ud05rus+QS622HRXsZQXts1Mo12gSidU2J7XRJa0Z8ZyG+oR5IrKavZJrXB6Xzjv/IKkAktAMjWmWUIfC/uGxsNqFXTvvkOdsfey26+nH4LztMe5YViFF4dBD7RQux12veZDH/2Z3/lOyZPaB0rB80ZKrTYdjOy6mC747UosO+OVyXHWbmqe28zSApQcZd6LT58+tQiPq8ZgmIq55FBK+CYuieLlTPN0akV5UEr4JjWiEezbjMRQv92YCtpmEb0R4UWAejsLNeAwF5k7xdGuEezYTcY1wzyY0gkrCNxNxFJhHExbViPRq8HTT5+dZ29tV8XHWdjo/4CwF5jFaGwXm0YRBUh3Vero14VDNJPxoPg0EbAUGmeM67/6ipdUdeoH+PZ+IDtS3KBPwuHKYey0O3Ti2RURcMxHXiPBqdORMxDUivF5tnYhrJuIoXu5N2Ncbfd385rdqaCLianDoMhT88dxvIy/cYukA913fEJ4GcA0gP7kgxW1+JRpeN657R8GhKZ5uTVgklYR/NY2CN5Pwjg6nvE61mYRvwiBH86F4uTfhUI5+pni6UWAezXhMMwFL8XJvxqGpJEIjwqsRCaOS8I0oOMXTjeLl3oRBju3P0bZUYVElcM9wF+e05EKuHkxt5DepEbxwSEg+KDGDiMfZ/+t//eEf//Gf3uJ//eM//tMf/vjP/8///rf/+T//dqyEPDwQy45fcn6Y65lUC0+jILOon5I5yZTHHFW9pjOcoahRWfZWckrlphP1Al3fgHNqYwhdrukduE6TbCpj/impIahJ1DkwFM1ShjMUpJctsMzmT5YnIrPJK7HaJa7EKTAcktCMjXdIiKsGLOWkqZ+ghARdO++Q52x77Lb76cfgvOMx7vgrCfEmL6H5P+UGJbU3cAx3X3BpQvO9HEE9x/S0UpFL1T5v1MJOUzABTe+UUPqd6FTnuZUoeB0O3UjA/qZQ8JhGApa2clnbxvXNixY0IGETX7cejyGjEdkuTqGLllR36D4soWc4bKmXWw0WRfltGlKNRZUiYXFz/zwRCSW7OlegYLU4dMNv3L1T+UQI2EoMshjuEeYyb1okxJYPMuXDZY3SR8nFYbEv3uR5eNyLuNTS0JjM1Rt2/uGPsxz6+T9ff3Pg2PnneU2Ho5/PDs3wTKyGpzYgM5s/JXOSGh6zVY3azlWF7TxLb7XKEs1Ubi9nmWyDzimUCIa8w9T9n09r3dIb56U0XKGKVT39KwraVhbQ0VlUxCfME5HZ6JVQ5RJX7BQYllRA42vGH7XEBpAHSehzx3RLSG7/8FhY7fyunXcq5myLd9v97GNw3hH/SkIqO08NaumTvkV71dWqzSGUfRHULfea9z1s3R7WsjeSvjuiffN9Ou58EyZwjIRa1TyVnacGLB1Ivx2d7DyHjIJX49D1BGzDb0w9Dl2PQdShEfUY5KRWrMFjStGI5y5O9xYtqWHoBLr3fCJaUN+ifIrDFnu5VWJRdb9FEwjYCiyqCAl7NOfPEedvsd4av8sBTw24epCfVJDo6lyGglV9ku6dfFswZAyyEOYROt8pLbmQqwNTG/lNagAvKMZ7GXS2fLBDYW/idJU3y4vqhGMprheVN8luhSW6uCMc+vmnP8xa9cP2yCe5+dVccoPoUNTz2fczPRKrYKn1iMymT8nsxPpErppt7pmbXN+mtwIAluS2/FTN6RsacUpuiGYqpFabayoFldU8J6n+Jk2i7xtwTqn3SGtEZHzSPOEZFM+EyvmxRU4B9xMhCc3UeEtCOsBVAZZi0tS3T1RCu+5UzN0W77772ccwf0c8/iMkhDxR6Hq4wPVIscfREo9jZZ7+ZK+TlV6namA/18FP1//ysOpbEkq7HZU477syJKwSi6rFY+o+BgK2Fo2oQcPrCNiPquddVOHQxSh45vy5IQsXf1hCdS3KeCym0NOVjEHWfDhbDLIGBZtstrV4TDkGWYDwiv7uTxOQUP4zl3klSK8KLOqjOnZKqU6gLegyNCLPyz3E2Sk1aRokxJIOsJSAIR2miwdahbaxcNUjCc9r//qv//qrr77667/6Kyxx0Y17T7PL2subZI2szlZul//j/Nn3MzwSKmHJtYiMxk/JvKT661TRc6H2v5/WXKWKyuRGj7SG7WUdNSqzS0r9z/U8iqbzCVsZw1R4pDUcq+aUyoweqQ3w9E+aJCKjEZ7W4PmUPD+mwOlcaGIBja8ef9QS6yEJff6YZgkx5PYPD0NC53ftvFMxd9sT990JH8P8HU/wx58XUBQ8lZ2rBjWTlBDseMGyS5Vw/1LUyVfD9qDPVHuerPY6VYs62/C2hLgqO1cNmDqQejvq2bzvipGwciyqGo+pmQwV7i5VSFgNAVtDwFaj4GSXeY2rljd+v6Iai5xUPRPaFg5diIKnz597Z+HiaoaOr3vPJ6IFtS3KOCwm39O1DIOsGq2BgK30dKuEe9QQsDV4TDUGSXZxaliyqGnd6mosalKZVOMxpRhkHsIr6rs/PTh/i/nWU+sOuGrA0YPcpPwnLvOKkF6T6F5HqrCxqc5rWLKwad3qmkmm+qtU4dHFaESOl/tdZ6eUpEKODkxt5DeJATx/LSG28t07lEAH0gtoX//Xn79zcj0VeDstr6mkXlzXbmgT9TPldoawzz8+f3ZouvszsldSDSK94RPjmVrvnlKPTG/wSK13TamDpzfA0hrcUuocizxS67GZFEwGBZne4JVW755S9+kzRKQ3wFPrPJ+Uz4/Odzp3L7GACkloZsanllCbQ0Lbn7jvSfgY5u98gj/+vKBhihJyO5x3Mq7lYnLHvJ+KnH4q8fAnL7rU8PMzdkAyd8VNGu79EkoJjnriNLsQ4VWKQVbi0BOnAo0Q3L/XvPlHMtyzAuHVsHoV9+Y15fMsZVZmmeu8SiyqEoOsdNSJRVViUVXjJiazuSocuhyLykfCUp3n3J6AhB5h0DkeLiVoRMXrGshwT871a22HDpZ7ulWiETULfLi3b0riYg011eWebuOzHc3t7QkcuhKHLkEjcuCekd99Ex5481cl9Hi+UyHcswyDrJhYY8lwD861K21Hfir3cqtEI2r8vHm3b4ljHxlqa6aQ6q+BKkLBs73cgn97CXXIRho6jOn5I1kHwgAAIABJREFU1ITnNQU1vOoWNY3f2yEbYSkAWwEYwr7j8Xnf3ktzf1rulVQFT6v/xMDS6mFvTsDHTqTWw1LfMf9TJ5lS6/GkzDkqb+65EEhCMza+UAkh/AtdDxWciGsNz+OH5vC3htKWXW1MqFLkNmtzHQ+rjr077j0SmuBR0nH4K/Ny7+zokKellnm4lLm7iKIeWjnsal9S9QIfMgpeDvOo8iZU4tDlMI9KAq4CjajEoSswSDISVoFBOv6sxGMqsKgJbrEMi8pDwlImI6EiNIL8evVS13nashJDbW05zKPM3YV1IdCmVtWtWFqzwKcCjSiHeVSR8FVEXLmXeyUBW4FBVmBRFVgUGQV3ZFuBRVUSsI5sK3DoIjQiB+4ZMXtCEoqb75QP9yzBICbYvaUu87TFxcaGekeqHYHnbBp13crl1X6OVN2riLj3pIoYl+qvCw+LKkDBsz3cgp1+cwkx5fYWfl8tXV/TpmviWBnS4bFLGcK+44/zvg1JdX9S5pVYBU+tg3gbWHKNR3yp88PcuWfvQhKasTHdEpLZ3zcWloM2XtfO2xVztz9135P4Mczf+fSVhJR2rgrUtE1aQgj/onkHC1OqZclV8mcVslU3msLyxUfjmJczBC7+9W+cCbWouUo7VwWYWpAc/PDx3G/z4R7FaHg5FkWeIBhkibsL49yZHpm0HI0ocXfpYjEZZ08Lwu9L4h+XuDqL42J15HJjQ33T9i2Mc2c0RYXFznMZZ0/rystKPVw6LgSqcl5W4NDlaPgEt1iCQeYgvJLmfRfst7iaruNr3/OJaEAtTRGNRmW7zy9EwcowSMfqZV7uTTu22vS6mmWLC7/7k76qUhjxgHHujDovt8TVmXf3tr66ykhpoJ84Tt2zy1BbU46CN23faqQ0kHFo2v69uvKy6oW+5UgYGYsqdxy4YR7h3/53eOBN5lvjdzngqgBHB3IS82Od5+bC3ItQE+3eMi/3pu1b+vW62uVLCmf/SVdJFj6MbD97Wp2fV+LqzL0TrK+pMjbU00/5U3fvMNTVkjHIxm2bjZSGChyGune3jlxWvdDPkeqvbwuDzEPCnnu43nKam5JYyNGCD3/b34dED543/IqEHB7qkA53vKmfNyR0N9k9vtTrWSU8uRae8vvGI6l6fkLV9NYJS6r2iCtxjsyZewaS0MyN8RJi6QBHBZiKycFSgLp2w6XEtnaZ/X1jYTlofSWhZ+57kj6G+Tuf4Y+/yG9QcJV2jgpUt+kXTVJCTgfyzz1tPxrT+n925M8+ULrkCuVBgeRsIudyhuDbwzVj746ralFzlHaOCnRoQVLww9g53+bAPApQ8FIMcuIUwzyqli3pVcipB/fXbfyhWyQqJ+HVRYWqgvyGLT/ah4Zqf1grjI2xaTVtZ051i8VkEkHx4vlQT0/VkoWSpETFi6yCeXMmuK0yDLIIjciGeyY4zb7pt6iKruNp3/OJaEANTfkQhXru5pyPhJVgEI4aShBeZXhMF4fNvH6N7EPqFglrf1jDj3zQyeyoWrJwpL+fdvRwe+C5kYH+1uNHe6SSmu9X8B+E24eHKdu2MK9fNTTUF7o6j+aTh4Rlebnf//N/hwXe7HjrWQ0HHBVg68DLhPyYeXNeerkXoGAlE2tsCcKrDIfuZLFYN6+TvQndQmHd+rW8B2GdLFbl4oXD/bYW/6P0gDP2wcFW/2M9MmntmlW8sPtgeJiyfWvHlUv/l733jooqTRd++7tr3fvde843Z87MnOnp7ulgIkORgzm2tq22nW07mBOCERQJKlFyzjnnXBkKqACVcxVFphI5SJAcqp77B0jTirYIPerIs37LVWye/e73fXbt/XPv2vXSz6At7urvbGuzRamFab6xwQMdrcx0bF03PP/d/iykiyQkaX/eYfXEiwWELePXEpAb/TINE8pMUqrMMigrxDyTop1cpZ9KMs9caVO/kkkxTicbppHNfq9N43Ty3nz6tyiO6WptOoNilkExTScZxeN1I0q0bvmnYdiNnU+WsbUXkGsSetXxKiTkX6V9KtXofMZK0D+Ttv1GEZr6pIQQpxO1f0nQPZlocCbF6Hym9ql0w4vZT0vI5Bpm++1yZuPD3GplSoUsnaTMqW7PILcf9GBlUjpjypV7XNlWTsynJZTuGxWjubHY1AhlaYbbbLEskLpaXRWE5sR4sbdXN5lU+NH7HTisIj+PddVmemioLjCgA4cZlcurj3/fW1Mt8fdVFOZ3E6v4Lk7dFDL/rhPaUO/Ft4W2Mi80M07R3vRg7/7nSKi+Cyic9ggryzyEbqmFKXaz+UILpToarSnJneV41lXbQbG4RGN9Y3RUP4tJ+f7b2cnJxsgIRX7eRHcX/dxpJbKkKTZamp7WQyGJH3gpS4obIsNRiF97W2phmmdiGLThkxCnB78roSgdzSITQ5SF6YsPtlRHsyUxvpNAYNpcHqwVl2huaIyM6OewKd9/Mzs52RgVIc/Lnejupp87oywpboqLaU1P7aGQxT5eiqLCxqiIxV19Plgr82JzkxwjfU9tzcx0TP0fLKHnMC8h3wzDeLxJcqVZOnmF6CcTw3hSe5JEO6nKOI00h2k62SiVZJw2n2OSRjZKJRmlkkzTyWbp5LnfGqWSjFNJcwnGaSSjVJLJovzt2TV7cmlGqaSF1eeanVt9IV8jocKH2ax8NG6QQjRO/U3aSjBNIxrF4XTDi7Xs1yT0+sa/m4S0foo77YP9yqV47818zV9Sfn5QZnQxZ/0v6ZtOZiEuFlhc+XXanh/9qFkkuaVdhU9+fWyZ7HgAJxovt44VB5RKD3hwtrswtyx1JZTuGxWluaHI1BBpYYrdbIF5YbCbLZCG+hz7m2NtyrG2Np7znYKP/9mBxykKC+jWF1TT09Szp3A7thEO7CvV1WrNSB8QCWt9fWgXzj5qaRmsFZft2Yk2N3nxbaGszPPNjJO0N3m9gITCrSxzEbol5iYYK/NfWzBB1Jz8ZVQmHe/oqAsLzv/4g8bYmH4Om/jNl2qVinPbHrd9C+GzT0v1dWoD/AbrJU1xMZQfjw2KxSNSKfHbr1AmhgtNFVuY5poYBm74JPj3JFScho7Q0SwwQZRamC5jsCaG1Sd+GpFKx9rb68ND8z/+oCE6qp/LIX51VK1Sce7cwm173FU/38G6uqb4OMrxYwNi0YhMSvr264Wu/i5oK/NCc5NsI313bc2MVy6heORGn3TDOJxJUoVZKmmFaMYRmgdGM+vaNsURLNJIu7KrrdLJBomVe3NqzFKJiKQqs1SiWSrpQB5tV1a1QVKlcTIRkVS1K7t6eyZlLlk/sdIqnbwvh2qUXGWYXGWWStKKr0iXKDldg5szyIikStNU4oE82tYMikFSpWkK0SCpclsm5UAe1TSFuC66zJvRpBge102oMEis2pNTszOr2jSFuMJBmaZUGcVidcOKtOz90tBrEnpN41VJKM3ofOZK0D+TvqSEdH6J/9QuNxYpCC3kOSVQGXVd/rk8pySGVxb3yF283vlCi6u/zh0Xg2v+6BTqZoLgQWHjDsfqSJzsRpLEPb9Z91rN1qVux9V2Q5p3ZKTmhnwTw2ILU5SVOXo5IE2NsNu3TPb3jyoVmG2bCzau6ySUt+OxaCuL4YaGnprq5uQkSVBAoeZG0o/HAEASEkT4/DP17KyipLjUyABlafbi2yqxNMs1NUrQ2ui591OSoPe5EmoLs7TMNtApNDdBWv26CZSFaamJ4aBINDs5Uf75Z/nrPmpMiBuU1JYaI3po1KE6SWNsTFNCfAlCr2z/3pnxcUVxEWbb5sm+3j4WE2VhirIwnW9n7sRtjPDf8HGw04Pa50qoKBUZrq2RZ4woNjd58fLOdXVAKFRNTREOH8xf91FjXMxQXV2pMaKHWjNUX9cQG92clFBiqI/ft3tmdFRZWoLZtnmit6efy0FZ/trV39+QpVm+mXGGoZ67tsbrIKEN3mmIWKxxYrlpCnGFaMYReN1Dwezmm5Wi5oGRgoYOZufDKL6UIOthdD7ck11tklyVJWlLr1VyugYThDLteIIHtYHROVDf/6hS3muWQjyB5tA7HmJbu5HNneapRIPECtMUIrd7sHds0olce7iARlT0pdcqud2D9lVizbhyZ7Kkpr0/u66N2t6/NZ3sVlPfMjhqkFiZXdeGbe2ulPeeRHN1EwgrGZRJcqVhDEYntFDLzmdNQq9trLKEBAp1XcfzJlbgNg6f9q/SOZVmfD5zJRicSd9+owhFbatvV9d1AOmxhHR/Sdh7I2fD8TjEmbS08vrGtkH/PB6SLiuqkVIl3Yfulhtal8xJ6LhfTRKhddN57Nkw9vVE0S7nGlrDAJrTcz/3yQcTiNzOunZ13dyVUEB8uObGHGNEoYVpqZU5cllYmpVamhGPHyN8eaTYGFFqblLxzZeV335VZKiH27+XamNNu2KDP7i/xMwYudmCcvpE2cEDSCtz8qkTuP17S0yNlrWtIkuzbFOjWM2N93btqeJ3N3QvvTvquoDMVgaamWYY6OSbm5RYmS20UGppVmphWvHNV1XHvi02QZSam5Qf+Zx4/FixkQFm13bq5Yv061cJRw+XmpuUWpiSfvmR8OWRUgtT0s/Hy48cKjEx/LUdK/N8c5MMY4TP+o/8HDxqn9WTDpD0QEl2eYi2Ro4xotDc5MXL+7irX1Yd+67YxLDU3KTs8EHij4+7aj3X1SPzXf15UVe/+E1Xf5cSS7NcM+M0Q727GhtTU1H1PfD8d/uzaO2FgpVKaOJafOkG7xREDNo4ocw0uXKFaMaW8boHA5hNntT6iRnV9gxydVt/48ORg7k149OzHtR6rbiyrwrpH0fiXGvqZtXqvdmUhv5HJ1DsnLq2LEnb++EYXvcgrrXbKo04NatKEsm14srXR+MShDJ258BfgpFFjR1doxP6CRWYlq6WwdHNacS+sckkodwipWpiRuXPaHIgiuv6H32eRwUAJ3LtrkzyriyycVLFSgZlkkQwjEbphOSvSeh1jqck1A317VCrXB4SJdQI+lzT+AK5uu7ZT/tI2uYkRNQ5lW58PmslGJzJ2H6jGEVtq29T17XPS2jDdxFbL6cLW3utgwl34qrDiwRFlJbIEpFrGts9gxNWUvuZM97IusTiGtr4KvobL4p/Yb3hlTILu0pzu6o9d2u+9edEYGXFzG5LR8biR7SJnM66NnVdO4g6ICexyF9HMw2hl21mXGhhWmxptlwKEHqFRgYlVuYlVuaFRgZzrwtNEPn6OvkGOkWmRiVW5sUWpvkGukWmhsUWpgUGukUmhiVW5svaSq65SaqRQdD6D+8cOMxsHq971hOPHUDhdwfs2x+vvSnT1Cjf3GRxIyWWZoVG+gUIvRJLsxIr80ITwwJDvRIr8yJTo3x9nXx9ncLHHStA6BYaI+ZHZ4xY6G2JpVmhhWmmiWESQu/eJx8GP4gUP6Mnde0g6QIcnuuto5WC0Ms2NSq0MC154fGWWJoVGhn8pquIF+mqwbIKW2Bukm5iGKereUtHJ72AJOmE57/bn0VrDxTQ+oNyBRLZlKRt2YdbrRKEzRPX4ko2eCUjolHG8TjTpIoVohmD53UPBjIbfWgNgp6hvwYjCbKe/Pr2v4egWgdGfekNH0VgLuJ4pU2dOXVtA+NTn+fW1PYOJ4vktPaHPrSGTyKxrYOjeGl3OKdF2DMUz5fqxpVtiMImC+WczoH/CUbSOx5iW7o+DEffp0h6Rif3ZVNGpmcu4Xnro3CcrsE0sdy+UtQ6OKIbVx7Da5UPj+U3tO/NIiMSCCsZlEliuWEUUic4T+umdxqa3djxZBlbewDJW5PQK44nJVTbDXXtIFYuj1olVC9LQqczjC9krwSDs5nbb5Q8ISHNH6I2/hCTXi5JL5PYRZFvRJLvpzBuxVGdkpgYpsIujrHuRM7c7TjLm1hDW4z5zfLN9vMzJmxxoJjaU8xv1exzZW5z+c2XVRckJFSqkTiOm4F+pPbGVBPDbAvTAivz15AcS7MUE8NYhJ7TP/8R4OQteM4JsR0Y9cOhp6391n+YbIzINDfJX9We5G+2yDQ3STRChGisv65vkFtKF8hVz+pJbQcQGXKvHbtCN61LMTHMsjBd3c6skDwr83Qz43gj/Qcff3DrwOFyllKkUElWIKHAXEGtbKq2bdmHm1gJguaJa7El6z2TDKKRRvFYk8TyFaIRjRX0DAUxG31o9bV9w++GlBLlPcWN7e+HIuVDY541dXpx+MlZlT+j4Rcko2dsIojZSJB259UrY3gtiPgyjWhs48MRXEuXcWL59vQqy5QK48Ty9ZHoNLFM1DP0j5DScml388DIugh0Zq1COji6La1qZHrGn9GgHYPrn5gKYjY6VAkVw2MG8WX68fijeTUA4EISb4rCrGRQxgl4RGSJdmCu5o0HqWh2Q8eTZWzpgdI1Cb3q+LeSkNbxKN1f4rfaZLgmU2/HUu4m0VyS6E6JdNPL+YEFQlObos3XkWa2SItraJOr6LOhjN1OVZaPp+3Zeoey1bFmqyNti+OT0/b8KiH5bBWvK+iqo8v6T6IM9dI3W2ZutXoNSdtsEWtseP/D96yNTYvLBULFM877bSBpA07LRE461kVPN0hrY4qVeea2zavYk4ytVskWpmF62tc/ePe+rUMlr1som35WT8RKNat1OsE92PnjDyIMdNI2W65uZ1Y6li2WCWYm/lobbTasCwlOpjc8Ej+3sP8KCXkkGkSWGsViTBLwK0QjCs3rGgig1z+gSkQ9Q+8GF1fKugvr294PKZEOjnjWSDSj0bW9Q1XyHnxrl3J4zJ9e3/FoPIDRUFCvRDV3GsThnEnCvvHJJKEU2dRxOJeiF4vViEI7E4UTM7NhrKYzKKZyeCyC01zbO+RKEWtGoVOEUnHvUDy/tbZ3aHdG1X2yuPHho53plejmjmyJovHhoy/zKXqx2JUMal5CATlrEnqd499NQojTSeuOxZheSPveDfWdG+Zzx9JcYvMPXuUFlNaQItG5kGqDi8UW19B61qV51YqvPGuMr5UvltDc3HHbniEhsUJFrxsurJR4XbjhrLnRH6EXaW4S9foRZKjvpLHe2swiIjyTVjcsls88Z48IpNNV3M6Y+wFOBnpeuprhZsar1Y1oC5MIM2NvPS3bjz9w+Pl8XhmfLhkUK5b46uXizhDY7UFXHZ10tHwNdCLMV60zKx2LuUmoqaGr5gbrjRvc7zzA0qTc5vGXM9BqSehqTNF693iDiGKjGLRJPG6FGMVhD2YTd6ZV7Eit+DybZBCLPZBJ3JdRhYjFHs4h7UitQMRid6ZV/FhM/Sa/ektyeSy3+dHktF405gqeAwCHckiakajDOaSTpfSjuWTTBJxxPM44HmeegP86v/qb/GrdGMz+zKrTSPqRHLJBLBYRizWKx31XUH2qlL4jtUI3Gr0zteJQNsk4Hnc0l3yihLYrrUI3Bm2SsKJBGcdhERHF2gHZGtc8U1DMNQm9nrHKEuLL1c//8h23Yfi0P1HnTKbxxZyVYHAua/vNEiRVOacH4qKn4w7ezj/tizvnX3bWn/CDBx5JkzknMfPILdejaSY2JWaPH9E+GUT3ya/bbF9haV+5+TbJ1I5kYke2iav9ypdreYexWEJVnE5J2/y4BNJpsqAnB80KehB5/5dzTgePOO791GnfgdeIPZ/eOfKNy/mr8Rn4Sm7X3HyXz/mIW6xUsxpHsHRZfHSu54kLLp8ddlrOiByfjdO+A3f27Lt99FtPF79MFIvE7+ZLp57/ebtYqWY1jqLIjZFBSW4/nnI68PnrUt69n97Z++md46cCAxILK2pptQMiheolHiiYo6UH8lcsoesxxZ/cj9EPKzSMRhrHY1eISTxWNwZtEIsxiMXoRqNN4rF6MWj9GLRJPFY3GmUQizGJx+rHoLWjUbrRqPXhJSdKabS23gyxDN/S6UeTIGIxiFiMbjRKOxqlG4M2iptv1jAOM7fEOB6rN7862igOaxKPNYzD6ESjtKNRc1tBxGJ0o9HG8VjdGPTcwpUPyigWbRBWoOmfoWlzL62UsSah1zP+3ST08bdRuVX1ecQGl8Qa9zSmRzrrfirTJoySRmjUP59vYluyMGPCpvPI4OKGmwl8bWu8hT3xbAQ/nqCIwMm/9OEiblI3Oz0podr2+bMkr3WSyO3Mr6xNLCBHpGHDkpChSajXh/AUdFxOZQ6eT2C1cZrGRMrfP1cK5bOM+kd4hiIDxYzKwIclr1pnwlLQcTlVBRViIreL2zwhfq4O5xApZmmSQQxNllbKiEzHhb425Y1IxaQU1SApTdXCPoFs+qUNtCoSErZO+mZVfugQqBuYYxBeaBSLNorD/MswjsPox6B0opDmCTjjOIxWJNIwFm38L+zAC2IYXaoXnLPOPc78phea1CB5qtRrEnod4t9NQuu+j04tE18Lr3r3q+gNPyZv/Dl1wy9p+udyLodRLGyLzBZJyPwGbtutigd5dV8/oF2NE0TjZd8HcKzuUD/zZNunNhzw4Gx+PGPCYgnNeYgvnaLVDhCYCiSxvqSy9rWitEpSRpPWiPp4LRNipVr8YqdFsULFbR4n8brQlMbV7QyeKqWJHwqk02LF7xtowUPsxjEipxNFbnjl9VwASayrYCqZ9cNC2cxKDLRKEppKQbK17Lw3eSXpB+cYRpYYxaL/pcSgDBfxr976i/XQIDRfxzf9n7f8D932oXC7RAr1moRew3hSQuJukLSDSLk8xEqgCPruv4CEOA3Dp/2JumezTC7lrgTE+ewdN0uflpD+yUTLS+l6p5IWzx1nbJ2nezbnibnjrG7idS9jj/nS+oenKJJ+vStV6y9VfOPLTapsu5PRZOXI2OK8xJXQr2dtpVogm+G1THBfM3gtEwLZ9Itccyx59ue3Tq3ioF66M2IlCOWzvJbJV17PRWOZFMpmXq6wz5KQWDYlblv24SZSArd1uoIm+9Y96kOHQD2/DIPgXMPIkjkxGK0RgzKKRhqEFej4pWu4x/3jjL17dD6nYVSoUD9RxuY1Cb0GsdoSkqklbc/7OhGnfgkJmVrnIs5na5/OfBqd05nGF58toRplnVJd1wZE3q8TmOqfTESc+f0JTM2u44yvlTEa+53SxKlVitgyuV2y5FNXptYVMuImddviz4TYnZK5U8/isbRBXdv89M+vG/N/MmD5szvXt0P9H9GZl+3JqndmpWNph7pnv71fnJZuyKeuSEICuYoq6HVPQq+/4rrpXpS+fzoiOMcoosgwqnQNw4hiREi+nm+atmfC+1fcLU7fyMfxeK1TT5dxTUKvQ6yyhHgy9XNuL9QuSOhctol13gKICzkH7iDPBlZdCCY+wfkgorlNPuJCzuL8uVV22JUia5QSpVrSBlW85c2ibX4da3wVG4VpdkwVaV3C610hfOfHzqa0FzG6aY2DHvmtiJu0BQlVsjtrlWrxonHNCYnd8qimvoVcKybX1r5ukF6K16o/r7yGTw1BXFPXwm4ZrlXCy91DW6B5xRISKYHVOIohNVwNSvvY2kXrXqSxf7pJULZpSL5JaL5JWMHbS2i+UWC2oW+avmfCP694rPvuXGgyukbYL5Cr1iT0esZTEuoCSRuIFMtDrFiRhPTOZf/gVR6FqnXPYPvl8ryzuV5Z3AfZXL9cvksKc9v1IgvbAuNLqykhoyvob7wotPq+LbcqzW9WbnUgmdqRTO3IO13oDwpbLsfXmd6mP0tCtW3AbR2vEJYRJelsWRZPmc1d4y2Ap8xmybKIkrQKYRm3dfzpT7lfUkLKZR9ucwhkKqp4oLRMaO2XrGlzd+NtPxPvRIvATMugTIvgrLcW86BME59kHZfQD847GJ285hmWRWR1cJonl6xhczeUctck9IrjtZDQnIfuJNA/d0b/5avETSczTC/n6Z3L/tvXiYec0RiG/ExAlfaZrNWV0HG/mjBUo+4l3JbH3xPacqdmqyPNyK7a9DZ9mwtzSQnVKoHbMl4myGl9WD6ikk5CzzQMTMPDNf7tmYGBCegeUUlbHxLKhbnclrGXvh5aFQmJFMBrmSZxu4txgrtR+QccfA2uuurd9DRw8DVwDDBweitxDNC/5b3J2lnn9I1v7b2i0vAVdAWjbkQoU61J6LWNJyUk6oLaNhAqlodIAeRlSIikey7HxDp/MYiLueY2BX65/BsxVN8cfj6lJZvY/JM34cv7uG/c8FZXCo0u5f0m/0LuDjvkSm7Hbb1Vts+FaGVXYWFXaW5P3HaHstWxZpsTbZsz/YkZExZLSCRXl/EqGvrQ09A7Cm0joFjjrWIU2qahr7Efi+eWieRPPm21LAkF5ApEsimRctmH26/IgdsyXS18iCU1ZhbTPGOLrgem/OIe8cPd4B9cgt5Cjt8LOesRecMvKSQZXVwmrGR1MBvGBHL1swrY1A0laxJ61fFqJKR3Psf0cv5izC4X6J3LMbyYdzmMQq/r/toNj6TLUHT5PgeUYyJD99yT+YYXc3euQEJzf97b9Hq5pR1h/z3KEU+a5W2ymT3F7FaN2W2q2W36lqckNDcuev0wjpf4cLZ2FJSPQLbGW8goKAZV9Xh+PL1++BVLSAFCBfBlKmbDGJnfW06TY8lNpYTaPDQnB8l828hFsopwAgyxAV8jrWJ30mqHOS1TzzHQmoRek1hlCXFl6ud80CpWArt+6LQ/Sf98runlgsUYWedvvlrkmcX1zeWzG3sPuWDRDPm9FPZP3hVJZQ26557MN7yYt8MOWVqjnNND5fIlZHkTb2lH0LmMuxLD8y9u0rxccSKUfzJMcCm29udQ0TZn5sIj2hXszrkv3IiUUMmTV9RGj4J8WC0dUreu8RYyrG4dBXmZMKKS1/ZyzxQ0dUPe6klo7pJIIFdzW6c5zZPM+lGqeKhaNPDWIR6gSR6xGic4LdM86axQ/vt1W5PQ6xCrKqFUPleqfs49brEC2HVLS0jjVLZ1KDmkSGRhWxRSJMojtxRWS2/H052TWRGltc+UULWyVqGuVUIl92UO1eARAAAgAElEQVQkZHGzfLcTsZjW7pZTfyaMl0pqYzYNBiKlZMnDr/34FncYFk6sI+7VFaxOsWJ+XHhGQ0VtxDgoBtVNa7y1jIEUxw8tZ0pF8pf5LKepC/JqVlVCTwlJIFe9jcied92zJqHXM16VhPJMLxcuYGxdsP1G6aVQSjax5TsPwsYTWftuo62uFP/92xQL26IEXL3uud/km14uNLyYv8MOtRIJmVzDbrYnYNidiQTZ7RRxCKrlZJggtkyx8TIpqkz5U4hwCQnJAUOrI4jDR0E6oG5Y461lBJpx/NAyxmspoTVemDUJvQ7xpISEXSBuA4FieQgVQBL03Uvlc6Tq5xxUIgWw6oZO+5MMLuSZ2RQuoHcu93wQGcdSPsjmOSUxnZKYt+MZdxIYTknMgHxBLrlF52zu4nwzm0KjS/k77VEl1co5PVQsU0Lm17Fbb5X/4EfbcqvSJprnnCHxLWq6GCNKqmwztq+Jr2g7HvyrhAisTpFCLVKCUA4YWl25OGwEWh6q6958JANQPwatA/DHbmUCZI+gqV8tWVjYr5aMQPM4SBcvfIN4BI1YfgieIX2Rez5P09gFuTX9/rkCoWxKqFz24bbGatHYDcVrEnrV8aoklG9mU7QYxIX8XfZIu1i6QwJzDvtYukMC83Y845hXhdGlgifyjS4VrERCBjYoh2R+Fkn+1+PFtjG8Wyliz/zGS7GihAql7jVKTLnyx+dJKHQEmh6qa98s+tXiR9AwDi39j5dMgLRvVsSsR/dMCwfUkhdpYRga1NA2Ck396tr++UZaVaAcAEn/M9YaUEtotaXNfTVD6vqFhcPq+tr2KlYDZvHCN4hHUI/lB69J6E1nTUKvQzwloU4QK0EgXx5COZD4K5KQuW2R4cWCTSdzFjC5XKhzNk/zdM6mkznG1oXmqy2hW4k8ZuPDcFRzhaC7StRLru37MZhXwuz+IYhfyOg+Fih4toRChqGhTy16sxiDpjJGZnpJ6Ag09oNoGOoKcLGFhPjLN060DtQMgeQhiIdA0g/iPrVoAGr71aI+teghiPtB1KcWDkDtKDSymjG/nPumjJ4xAg39IHoEDXFZvjZ2J9vGWIOPW3gI4rkt9qtFw1A3Ds2fbPgwMPaeChT9IBoCyQDUArTZ3jptscVoFuSvvDIvwSBIMPyglUooRyCUTgkVyz7c1lgtGrugmLMmoVccr0pCBWY2xU9gbluy7zbmc2f8QSfcIWd8RkWz1ZUSk8tFF0Oqv7hXZnixcHGy0aXCnfbol5aQxQ2s4RXMXmfigXtk1yyJX1FTUoXCOlbkXdQSipFTJANf+fKfJaEycfAQ1Paq+W8Wj6CO0Vj63c+H2saYQ1DbPs785vhBjhTTPsLsmeUNg6R7hlvbWTEMkn4QKscYfSDoUwt6VfxeNb9fLeya4U7OtsTn+r3zzjvnr/yoGKGPQ6NIWXbsxOF33nlHqCybhJYeFU/YVvYQRHP1GYV66WBN3wRfU2d9YOxdNSgGoVbcQeiZ5QF0Xrl9ymqbyQxIX3llXoIBEGH4gasgodY1Cb1K1iT0OsQqS4gtVT/n9oJQAcy6odMBJIOLBWa2xQuY2xZvPJljE15TxmkLLa6NxzUk4BqIwk7NM7lhJbWJuAZz22KTy0WLVzGyLtxpjy6uVs7pgfBST8eZXi83u15uYVcZhm4JQbWym4d23WVoXyXvus/aeY+1Ze57Qu7V5axOoUItVIJADmhaXZk4eBDEvWreGwbwhkB87soPWFqKChSFlTFugTeF7Xg9Q82mhyRpX7V3mMO5Kz8ExDj3qnhOXrbCNvwgiO75XqM1FE9Ck/29C6L2suTCAE2d9bfdLpWzMlQgSysJuu126Z8fvSfuLJf3U/2iHG/ePe/ifaWxlzgODRmo0CsOpzJQoe9/8G5EqvsENCfk+dncPnHF4VT3oMDu7vnNO0ynoOXVV2b5DIAQww/EMaQC+cvcBWrogpw1Cb0GrEnodYgnJSToBJES+PLlIZADcRkSIhtcLDSzLVnAyLrogBP+qGu5ZxZ/vyN2w8lcnXP5u26hEZeKPr2DNbMtMb5cvDjfzLbEyLr4VwkpXlJClnaEzfYV5jcrjz6g73SqPuLFtLpD3e5Ct3JkbFn4o3ZPSqi+TBw4AIIeFfuNYxQkaSWBd32uqEF+3+9aASGKr8D8v//f/24aqLrudNo3wmEGmvd8tqWUHB+V7pFaEtg9w/IMsSMJcxp6Km66nB2cEcbn+mjqbighxTm4XxoFiUfQTVR1wv+8+5eG/kq7u+fu+V4F6Prp7NFb9y90T7A37zCpkeR3jjP+/o+/xud6l1Liv/7xIIDipsvZ+4HXnLxstuw0mYSGV16Wl+AhcDH8ABxDJnhZCc1dCQlapwSKZR9ua6wWDWsSeg1itSXUqn7O/+yEcmBIhk77kxEXC81tSxbQOJ0bjar/yZf4k09VQL7o0ztYm3DqpdCaCyHVF0NrjtwrM7IuWpxvbltibF28yx5dTFGK5GqRHAic3gO3X1JCm29VmdtVbb5NtrhFWWLaHvfqcmanUK4WKkAgAzS1Hi8O7Adel4r5xtEPvPp+wk9njzJaiqztfuqaYdIbC//ytz+Lu/G6CI0vvtvn7GKz/8h2DDWpnJMWkngXS09C1SSklgTk4MNcvG0A2qKzPNdv+qixv/K685liUkxArCNbWvqXv/1Z1InT1Fkfme4G0H3D5cz2veak2uy/vfsX2Sh5Cho0ddYnF/nZ3TunpbfhrsvVYycPB8e43Ha9sGWnyTjUvfKyvAR9wEbz/XF0mUD2Mv8Bb+hcfQnxlMBpB3YbsJVvGW3AaQde25qE3tR4VRIqMrctXQBxsfAXX5JHBv9CSLVbBm/PbezNGAa7sc8uluGRyf/avUL3XIHFonxz21IT65Jd9pjVktDcBKZLzx23hIQC+oDTqaK/cXSpGYPAv+tre9359INw+ymop0hy/vTn/6zvL//s6A4XH5tRELU8quqaZSjGKLdcL9wPuMqUFoUm3/WJul0lzFRBc2SG2wcf/WMS6py9Lxua6ZRWx4o6sX/6r/+U9JZ9/tUut8DrAH0Xbhy/62sr6sCu2/ihuAv7UM394MN3E/K9Q5Jddn5q+XCWo5ioHpkW2TqcsNhqOA61r7wsL0EvMF8rCXE7gNcwLKuI7yb69taE9Lw19NYEd1NCpFVpPIGcowT+Mou5JqHXIVZZQqxW9XMOKoEc6EtJyOJKqc75wq/dKyv5nZHIOu2zBZfDac4pHP98UQWvI6OyZZ8D1si6+AkJ7bTHFFGUQrla+EdK6LB7dRmzUyBXCxTAn5eQfy+wOlTUN5CaIeCi6fHvf/gutSFnAsQUSdZ//+W/6h+WVfHTz139/kGoXW55aMtwxTiIrjqevOp44hHws3DBnx3dLh8jTUJtVKbbR+veHwFBCSVq137LrhkqU1rw33/5r9peLEmYeeH6MffAa/cDrtR2Y4eB7xFy49LN43kVYZ9/tSMq07V7nH7V8YTjg0uJBd7yh6Sb985s3mk8CqJXXZOXoQfoaL4fji7jy17GGfWd858JrYqEuO3Arqb3pxwG8j5o/hmkJ6H1rUF6Ehp/AtL+ocQ9QgaX274moTcvXoWEAsiIS8XmV5CLMbQusbqOYtT30up6YtANkci6pLImj0xBZlXr3VTe5usoE5vSxfkml0t33no1EsKJ/XqB3qGivIl0qqoVU0SWvKBDXd2lqpFNVFGbchRTxAFg1/ZhSqojGwbxXUDtUtU0jxB47cW9anr9AI6rLOoGapeqpnGojN6S26Gqbpsh1/aiu4Emn6yiNuXIJ4kDwJb0Y0qqI2UTVb1A71TV9ACtUpgi7kU3DuHrB3D9wGybJSOp0SxZfi/QxT1otqKwS1XzymvyEvRADYrvu3IJ8VcsIZ4SmPWP2sI/gywDYHwPdRfeOiTngfod5Jgpg/dUc+TLui+3JqHXIZ6UEL8DhArgyZYHXwZVvBVJSPd80f10fhqh2SWV+/HPuZtOF4QUSxwTOTdimZcj6HoXip7If3USasCJfbuhpk1FejMhdgC5D2jt6vnX/UBvV5PaVKRuqHkIjE6gzKV1QXUPUJUqYhdU9wJ1YWE/0OdW7AFqm4rYoZ5rgdymIj7RQgeQ+4DeBdXdUNMF1UoVsRMoD4HRAzVzyb1Aa1MRX3VBXoYuoKD4PiuXEK9lii9f9uG2GE4HMNDFjx58BGlmkLUZivZAyd63juwtkGT60PU9XFIIUw68Fy5pfScUrUnoVccqS4jZquYrgCdfGr4caJKhU09JSP9isU0EvaBaZnkVlYhv2uuA0z5fGFRUi6QrN19H/+hDfuIyaEFChRSlQK4WyKH8j5QQntnJl6v5CuDJAEVtwIp9uoCsVFWu8dbSCUQk3xtLl/Nkz3y3P4e6TsheFQnJgakAakbgiNt7EKkPMYYQZ/TWEW8EMYYQqtd378P8B9Y1TaoXL+CahF6HWFUJpfCZLernHFR8GdBqh075kxHWpeZXUQuYXUFut8dut8PqXig+H0r91KnM2LbU4FLJrts486sog0slFouS5zCxRe68hS0kKwUytUAO5ew/WEIyNV8OPCmgahqw4gedUKVQla/x1tIBBCTvAZYm50lfRh6SDsiuXgUJ8eVAawVivNuw2wcQZgBRhhBr/PZhBFGG6mC97rsfZt47SamfWZPQmxWvhYTMr6JMryBNbJHmV1F6F4vnXhjblGqcKdQ+X6R9vsjEFmnxexLaf+sPkdChpySEEXt1AEGuwq3x1tIOeCTP63WQUE0TVMa6Drl+AGH6EIWAWKMliDGCmKWWvyArX/0PSl4gEqEK0u1y+Wfm/dNrEnrj4nWRkMU1tLENUvt8kW+eeJsd1jqc5pTMvRrNdEzi3Epg73MsM7ZBPkdCBHbPF85I7Z9iVl1CX3hUl/1GQo0YsVcbYGUq9BpvLW2AKeV7/qES4sqAJ4O6bqjvAb5i/scnkQOlQUWIvjd47wMI0YMIBEQbLUEUAsI0Icpw6d/+JtMQwjQh6ql2InQhyhCiDSFCd4nGI/R+syRSD6IMHv8416DBEmkLLUcbQrQRROpDpMHjDT3VnxhjCNdZYuvzjSBmAnU7nP+ZcW9NQm9ePCkhXgcIFMCVLQ+eDKp4fXdT+IwWNU/+vDRq7dCpALLhZaTFNfQC5tfQJrbIaExDRlUrp6nfO1fkmMx1yxCUcdojUPVkUffOWzgTW9TiVUyvoHbdxhaQFXyZmicDIq/vYmCFzs/x+icTVlNCjozTgdWVnG6eTM2TA1cKWJqikOnTqsqXqVFSVekabyEyNVKqLihme+PobVzpsg8WrgxqOyCrut8vR8BrmXre8SKHdCQ7pYhR2wmS7qVy5EBuUJVF3eu/+4E6SBfCDCDS8EnCdCDrK6AGQLguRCJ++1sjCNOBEI15gjdBiCbkHYM4K4gw+HX1zKOAvQrhehBlDOkHIWg9hOtBpBFEGkKIBsSYQ9Lu+fxwPYjQh6SdELcZIgwgwgBizIEZCfFbIQIBqQcgXB8iDef/nSNlH0QYQIgGxG+BKGMod4BYCwjVgkgjiERAlDHk/wjxWyBMBzKOQOYRCNdbaowGk/46SscP0u+eotTPvPiOqOuEwjUJvep4LSRkcQ2tc6E4AlmfgG9KLGu+nchpaBs65k0OLpbcSeamEpp1zhdb/jZ/sYS4MqDWDgVlsy2ss7R/ikOcXh0JWTmxtzrV+KQxqoUDHCnMSYjAHkjFxwgexSgB3aoqXuMtRAlo0UhsenkMgf3wj5NQbQcgya1/+vNf3nnnna+Pn8fSZE0PQdi2hITwkXd7nN+bDdCBEH0IRzzGEMIRELAO/D6CEG1oLoeEXeD7Afh/AiHaEGEE4QgI1gTMdWBGAzMaGJFA9gZxLkwMQuZXEKwBEUYQog0B68D3Q2DHQZQ5+LwPKFsQZELSHgjVgxAdKD4HGUeh2g88/wqhehC7BQLXA8UXSi5A0CYI0YHEPSAlQ4wV4Owh5xj4vAcB6yDKDEL1IAIBYbrASYCUTyFpN7BigeQJ4jzAXIXicxCiDSHakHoQWishygx8/wniPEDZQsB6CNq0aJgICEeogvXHfbTlDu+nuaxJ6M2LpyTUDgI5cKXLgyeFKm7f3RQ+o1nNkz0vjSoeOuX/pITMrqE338AW1Mg9skWldOV2exya1VZCV8ZhG4OKJbcSOIaXSy2WlBBJwZeqeDKg108giY22gXjjCxm6J5P0TyUjzqQgzqYbnssyvJBtdDHX+FK+iXWh6eUSU9tSs6tos+tY8xt485sES7sKS/sqq9ukzQ7Vm+9QtzjRtzozNjuxLJ1Ym52olwIIxQQJrX587lzDkUKNeDwDSc+p8aifTJRDkQJK13irkENRw3RSHt0jHUmtFo0t90iZo7YNsij9ftkCXvPU3PHy9J0ioRLKGB2mljvfeeedd955571/fnLXO44rnW3ohV8PMRmQG1S4iLtdju9N+emog/QhDDFPqD6EGwHRE2qCoMoDWquAnwYUf6CGQPb3EKg5nxO3A5IPQPIBSPoUagJBmAsJeyBEH0INIFATcn+CmiCg+EEbE1ixQPEDih9IiiHnR/D5EFIOQbcYBJkgpwDRC2K3AS0cwo2A6AXF5yFwEwRsgCoPSPsCwoygtw4YkVAdANUBIKdAwSkI1IBoK2BEQV0JcFOgtgi4KVCPBHokJH4KIbrg+zEk7gWyD/ivgyhL4KVB+peQsAdKL0EoAkINFgarCtIf8daW3n4/1fkUpW7mxXdEXTsUstck9IrjVUgogGJog7K4jlnA/Dra6gb2Xjr/ZjzbI1uoe7H0WiyriKr41ou04UyR7sVSyxuYxfkW1zGmV9G7buMWJMRuVhF5/VkojkMo9vCdos22uRY2eZa2BZZXiiyvFlldK7G6Xrr5OnLLDfSWG5gtdtgt9ritt8q23irfdpuwzaFi+52qHY7EHY6kHU6UHU6Unc6UL1wr7UJw6cX0Sk4vq2V2YQisphk8rScmGxuP9ihrdKvu8Kas8dZQ3eFd3uSehPeMzUHjqN2spmWc754jIb4cajvnkXRCXRfUdYOkCzit6gJC3c/n7P727ntzKtq2+1Amkt3YB+KOXyWEjbjbfucfE77as4F6EGowT5AuxO+C2iJI/BTidwMvHUouQ8I+aMRDyucQpAPBOuC3Hnw/Bu9/gtc/QEoCohf4fgJe/4CATRCsC8G6EL8bsn+AjK9BUgzFFyDvF2guh2Ad8PkIgvWAFgbom4C1B3E+ZH4DkebAToBwY6jygKJz4PsxJOyBJjyEGgDuNvBSgZ8BaUcg81tIPQJxOyFgE/DSYLQXii8BNxWIXoC0BfR14CRC4qcQsBEKzwA1FFqroLsWxPmgZAI/E9gJ0EqCYN15U4YaQKjBdKDe0AOt5lvvpaxJ6A2M30goKH9+3guOdHlwpVDJ7bubwqc3q+euGJ6VVrO0hDB6l0qjMY1J5S151fJTQVSSqPtaDCse15RLkYeV1utbly4poXySgidVzW2R2TRDYHXnYLhhqQSPGKxrJMY1EuUagXKNQN3/DcjfED5H6WLcI1EhSWVZSFYZs5PeOPXEKGj1E+jq9vgcalBSml98pG9shE9s+Br/9vjGRvjFRQYlpsbnVKMo7bT6ieUeJguIH0uI2zxV2wkFhPr9h4/tP3Rs/+FjB7/8+cSFW2dsnE9fdvrlvL21naeN/YO9B7/9j//8P3Me+o///NNZGyey6KGkGzgyIDWoMOEuytvvjnprT/nrqoMN5gnUUUdvg9piKDgDuSdAUgoVbpB/GmqL1KEman8tddweQF0D1DVAXgX0DegSQfk9KLwAuNsgylfH7FD7a6j9Nql91qk93wNahDrMVO2vAcxYdZipOna3OsRQzU1TV3qquWlqWbW60kONsVczYtUhhupKD3XBObXHu+rye1CPBmacGnVDHf+pmuijvvcndYSlOma72k9D/eAjdekVmB5X5/6ipgRAAwbYicCMVbdz1Umfq303qNO/VhNc1XUodfo3at+NUB2oDjdTe38CjGi1v5Y6SH9hsJP+egOeWo0330t2Okmum3nxHSFph4I1Cb3qeFUSQltcxy5G+0LJzXjO+VD6+TB6UnlLWkUrkqHEcTqO+VBSK1oQl1FP5JtexTwhIY4UGE3TRMEgpkZeSJDkYfk5GO5LkIvlFZaLURRpFf8ho2ma/dQo2K1qesNUBae/hCjPxTVmY+qz0XVrvAFg6l+GRavn4hqLq+SV3Ie0hil2q3oVJNQy3dAHflGF7ywzPvhofXgKRtQB5AY1KsxFduvd4Qda4766M4H68/hrz0RuUdWhZ5A3ZkquqBrws+SAmdJrqjrUTKjpjO+mmfj9szinWZzTLM5xttxV3VI1i3WYxTnP4pxn8S4zEZtni6xVzHgVM15Fj1F38FW8DBUrQd1EUNdjZkkB0/f+Mpt5fBZ7R4W5reKlq/DOKqKvihY5E4SYrfCYzTkxE7l1FmWvqvCYxTrMBBnNJBxQK+iq6hAVLWomeueMr+Z0oJ6KFqUS5s0S3NWiAnU9WlUTpmLEqDsFM/H7p302zTz4eCZ2zywlaCbCajb1K3Vt0WzB+dmMYzAoVxHcZnw3zQTozQ12zFe3z11LcuO9RKeT5Po1Cb1h8YokZIuxuIFbwPw61tAWnUmSoVhtKFZbFKbRPoHrmikMQzYUUBUphFY9a9TifIsbONNr2F0O+CckNGcIZtMsrX6qWjJOEY++BNW1Y9T6SUbjLLv1eUNmtwCzaZbeME2rn6TWTawS4y/LanXgjeOFisNqBq4UWM3LRc1uAU4r0OonqXXj1PoJesMko2lmJfr5jYRyBNyWaYES4nIouw98tX3vkR17j+zc94WR2TZdhJmeoYW+kaWWnvG6jdofr9P4v/+f/71YQkZm28JS8Dy5mtygRoa6tNj9fcBTc8RbZ9Jffx5franIHbOc1KlQi6kg41lG/HTWL1MhZrOiwolAw0lf7UlfrUmPjyY9Ppp0/+ekj8YMLWrS85NJ9w/nF/poToZaTEZsm4zYNhliPstJnUr6YjLMctJXZ6rQeqbKZ8Lpv6Yxd2ZFRTPUyNk6zGwtcrrAepYeOxlkNF3uPp17ZtJHc8Ljo5kqn6m07ybu/2Mq7bsZSvCEx8eTQcZTMXsmvDdNZZ+cxjjOVIdNBiCmYg9MlVyblaCmCm2mS65PpXw1GWQ84freZOT2GXLQTKX3dLm7uqde3VM/jXGcIQZMl7tN+utN+unODfbRA91uV03xtX8kOq5J6M2L1ZZQk5orBU7r0nBboUa0hIQsbuAsb+A+v1/1qUtFepU0Ftdkl8DNocit7PBfeZB23yGYX8cuLSGigteqWtji3MdOrCZgNgGjSf2yzK0OzMcvnob5B8BqAm4rPKd6S5dUCtxWYDX/ps//9syNlN0MPOnvVIwrA4ECkNUNUTkZvgneAUkBv0/yPP5J/gEpAZl4LFcKfPny9svzESshizwvIVaLuoLbl1cmSS1mphYxU4uZ8XmUmMyqqHRCXA45qYB2yzXcyHzb//pf/9ecfjZq6tvYe+XghBTxCLN5ltygKg11abrx9353zWEvnTEf3XkeaI4HW842EafJIVPEwFk5Y5qTOUUKniz3nEz7YSzIYsxbez7TW3vM33ianjDmqz/mvdCC3pi3ztgD7bEH2mPu66ap0eNh28Y8N4776E5mn5kmBow6/GkK7TiZdXI82HIKf38KeXsy79JExokxL42pco+J7LNj7utG7/9zutJvIu346P0PJuIPzzYSplC3p4kBU+VeY97a40HmY97a09SYsbDtUyiHKYyTSlo9jbs3VWo3RQkbD9k8WXB5mhY7K62ZQjtOxB2aInhOFl2bzDk3evs/xlw/HPPRG/PRm+vtoJd2531N4dV/JNxZk9CbF6spIZcUPq1JzZECu3VpOK1QLRo6FUAxssVY3sA9ge4llNb5Uu0LSKubeMsbOOMrGO2LSCNbjKENem7JYsyuYXc74POJCm6ram6LXCkwG9VloppKaXxNRyi1M+zNIby6I5ggjayoI9MbpniyZxbwCeYMVFnLr2xNonZG1XSG1HSGvQ1QO0NJbUGE5jRSXROnBbjPeMtxpCBQQlwe8tuLxr/Ya11yNbR2M14G7sYX7un/Yq/lGHy+WjLAl7/ofvldRErInJNQ89TclRZRMEhg9ZQxu8uY3eWsnjJmVzmrt7Ci8evjF/7Pn/48fwvuw3Unzt+KzqgsqmzEMzprJGNsKZAbVCUhzvXX/qfHVWPAQ3vkge5jdEZ8EKNBVo/ufzR857+nyKFjUQceubw/7PjXaXbGWOzhEY9N85leOiM+iClm8oi3/oiXzqIWHuO+cYoaOxq6fcR90yTefVbJmSi8Ouzw5wm080S+zWjotlkFa4qZOhZ35JHL+49c3pss9xrPOf/I9ZNH9z6crPAdTz3+6O4HYwlfTvOyxxK/GYs9/Oj+RyMPdEe8tEYeaE9RY0e8EaNRB6a5OZME7yl64iTB+5HL+4/cNkxW+I1nnhqN2Dsask3VIRzPPjvs/O6sgj2Jd59v4TH9HtptdzV4tu/GO5xYk9AbF09KiNMGL34SXGyXCk6fSwqf/qISwlrewC9gcQNveQN/KohuE8W+FMG8HMm6GM68EM782Z+6x7HCPUtkfOU3+ZY38GbXcIslxJECo3G2iJNY3vVjJ9wfgaBRCH6DGIHgDrhHGTiVxXCs4rc/66z6xBmWKpnIqg4jdJ5uUzs/HnLQ28AYBA+Df7PKHi07WUhPZzbOLvmuEyghC8v58ozuaZdNt8I234vfcz9hedyL230r1OpHuw88Yu5wpbOrKyHfbAGnaYojBXaLmjVHs2oBSTd4BGfM6edvf3/vmx8vhSRiCgj1WGo7STDMaJxhtwBbCqR6VXGws+Tq3zrva/S7aw156SxCe8h905CXztC9D8dxblPszElq3CQ1droON02fp0IAACAASURBVFZwbej+x0NeOkOeWkNe2lOikmlRyaDr+iFP7d+2oDPkpTPotn6KmfoobOeQh8aQh8ajqANDntpDHpqPQrYPB5g/ivx0HHln0OndIQ+NofufjOXbznYIH0UfHHJdP+jy/iQpZDTt50Hn90aTj02QQgYd/nvIbcOv3fPQmBYVj2WdHUc5ThB8hrx0hu5/PIH3mJZgHoVsH3R5f8ht42jazxME35GU40NuG4bcNgwHWMx2iqc4WUMemkOe8+PtdddSuGzi2Pw91uEEqW7mxXeEuA0KWBMFVWsSepXxiiR0FWt5E7+AxU08whaTXiUtoCorBV1J5S3Uut4MopTb8tAxlZ9JlBnYYBbnW97Em13/jYRYLZBXnZsjPsievNKsdpWDpxQ83iBk4Nmousccu5It2R+NvsN6bhnnaYF0QnIKexdj/FKj6t4bN+SVUzvjROw/HUvZk0ko4rTC0xXjydV2Hg7HbnxgF2Z+J8rqftJ21+Sdy+Je4nbHaKvrQYbnXEzRtAa+4o+R0FI5XLk6Hcndue/oZ1/86BtZmFsmQde0VQkG6Q3TrBb1fJoUSPWqomBnke3f2u9u6nHTGvDUXhp3jUFvg0Efw0EfwwFP7QEv3V9/5bZhOP6rodCdA24bn7XucMLXgz5GAx6aA57aA67rBzy0Bjx1Btw2Drhtmkv4dSuBVsOJ3w24rp9vOebwUNCWAdcNg4GWw7FHfrsJrQG3jSNZZ0cxdx+l/jjgun7AfdOA28ZBX6NHqT8NuGsMuGsM+hiOopwGAyweOr8/4Kk94Knz8N5HQyE7huOODrhtWGiqy1VL6rSJZf33GIcT5DUJvWnxqiSEs7xZthjdSxj7RN7FSNaDPMnOOxU/+NVEYZoE0oEqYXcORaFnjXki3+w6frdDWT5RwW1Vc6RQzukIQ3+fW3cIKTuO6zhZ1nUa33nqDaKs6zSu42RR0/c54qMPcrflV9EFyucWXAok4aNI7Pks8Wel0h9wHSfeuCGvvGJoxU/5dd8mMvZ6Z5yqkTx5NudIoZI7csnpp4ueGndirO4lbXVP3+6esUzStt1N3OIUZ3n2nkYGtlLwL5QQo2m2kjeQi5fk4MQoirySN0BrmPpVP4skVBjkLLj8V4XLpq77mn3uWkvjptnnprGIxZnavXfX9d7b0Oeu/YzVtXvvftLnpvGMlrUWtabd57qp1+Xjx01p995d13d/4/zyu588tQntXucPex3f67378VMtaPW5a/e5afY6vd/numnRitq999b33lu3uKmO+5otdzbSL/5P9O01Cb15scoSojap2VJgtS4NuxUoz5CQnjXGI6fWJV0YjWk+G8rEczvDkI0i2WAuRZFJlOlfXlpCeUQFp1XNboVsAtm/eHcK+7MM3pFs4ZdZwqNZgjeMbOHRNO6RJPrnrpmGUfmpXNkzy8hqBY4UiqtFvvmfJbP2p/OOZAmPvolDXhHCo5mCL1KYh2JIe5xj92JoSs5TFcNQe6xdjtv4ajnFWbmmbvXI3O6RsTzcM7bfT97inGB5wV0zBVnGffZ7e1kIlZDxexJitahr6iaI/CGiYIhaP8lqVi+RJgVSvaogyJlr/VeZ48b2u5rdrlpvIUoXzSaHjdQL/xN1a01Cb168EglVG13FW94sX8DiZrnp9bJwVFN6lSyHokitlBVQlYHFDamVsi/cKXH4FiNb3OJ8y5vlZtfLdjuUz0mI0QjxRQU++TsSaQdSWUcy+UezBV++cWQJvkxhHomjHPTINvNLCqQ3wnMqyWqB/CrWg+x9CTX7U97YIa+QTN7RRNqhyIo9zrG7s/F8rvw3JWK2qEtJ7Rcdj9n4av8qoeWySEKJxRj2ahjoBSXEbgV2q3ru0ueZOVIg16vyA5zYF//SemeD0lmj857mW4jcWaPh1obqc3+LuPnTmoTeuFhtCTWq2a3AalkadgtQhEOnAqqNr+Gt7MoXY3mz/FvvmgsRrPPhzIsRrHNhzGO+VH0b7BE3ShKh1egK7ol88xtlu++U51UpOC1qap06OjfXO3dHQs2BVObhTO7RLN4bSQrjcBzpM49MU594f1odPKuS7BZgNEI2nvYga1989acpjDd4yCshg/tFYs3nkYTdTtG7c8uEXNlvqsRsVpcQ2y46fm/rq+0cZ+WWutUza/ty8cjc7pqyxSXR8qK7ZmIRmv2MN/ZyESpeUEK/hxSqmyDb34l08k91dhuaHDYpXDSVbxlyZ43G2xsF19eVnfhv/5tnyXXLeH5kTUKvQzwpIXYbPP9G0LMucQicPpcUPu1FJVRmZUdYwOJm+fbbFQR+d0BRwxxBxQ14bqfZ9fIjbpQkgtToCn5xvpUdwfxG+W8klJPzIGdHfPX+FPrhDM4XmdyjbxwZ3KPJtMMxxANuGabecc+TEKsF6A2QgaF4ZOyJI+9Loh1KZ79hQ16VfZTOPpJQ/Xl42W7HqF3PltAxWz8d5/jNbmnbPLN2LJvMHa4pW10SrC56aCUWY1ZXQj7ZAnbT1POud3/3uJMCrRXys4uzf3iXbvORwF6j3lH3bUNyR4dzbWON9Ycxh/8z2D+sukn94gUUtUH+moRedTwlISVwpcs+qNgtQGCvSEJ7natSKqQfn0JtPI/Wu4zTvoiNx7cgbPC7HasSy39fQlE5OZ5Z22PJnybRDqWxvkhnL8mRdPaRpX488lTaC7aw9PI01qEU5mcZSycceXYjXyRSD0VX7ndNN3kQ+/sSSkeT3dN3x5D2JVIPpbKOpLG/eD7p7C9SmAdTmAfTn5PGOpxA35PKOvzUr46ksY68cAt7k5kHUlifL05LZh5IYx1OZx993MKX880+bj+BvieVdSidfTSJsT+JsT+dffR3R5TKOhJHPhiK23UncueLSMgre8dy8cza4Zq69W7iHyahxqnn7OXfpxXoTSoMsy/p5je53/2p5uomrgOC54DgvjXwHBDc2wjS5Q0pX/3J5cc9aUh+TcP0ixdQpIR85pqEXnGspoSck/nURjWrFZgtS8P6VULlVnYVC1jcJOxxImaSFPaJgp8DGPqX8V97UVlND71y68KQTXnVSgMb/OJ8K7sK8xsVu+8Q8qoU7McS8sjcFkPcl1jzeQrzSCprgS+SGJ/F0/bG0/Ym0PfNvZgjhXkojfVlKutICvNwEuNgKuuLuVWSGQdTWUeSGAeTmZ+nsr5IYR5evMpC2mJSmIeSmZ+nso6kMI8kMg7k8H4sEVkn0PfNLUxlHfn/2XvP9yaufWH7z3g+vOc5z9l7n7PPTkJJQgB3ySpu2EBCgEASaoBQ3XuVq2RVy5bVLMtN7lbvvXdLcpNkucmFZlqAAKF53g8yjiE2gUB2Guu6L1+jmaVZv1nS9bs9ozVrVhZabDvW20mrPaXJkERSxpW0flRNrTV5gZf0pNkPtAl1iNZYshpKNyS1WJNb7Ck/pXXVcrM1YWDoRK/7cLM1ocWe0mJPZljjV9dh2na0Oz7TTaK6Bg8wbUkrewh1EcMa12xN7Pcc7/McbbYlrtlWaA/qQJVoLKPH9VWzNaH12Z75oxda7CkUU3S368sOxx7jNCHUSmjnbfZd2klkj/tQkwUmHsuS+vKeBfkymNZkqjaBIAblNoC6ZR7nzHNdZJ1Y4mjmTxXsP49+r6gpvLz9l0ioqjMG0RpZ3Bz2bcX/NnFE9nU+jtfFMwu0664jO99YQpOAbeKpynOnY8DUkHmI+tV7HV//rfPQ31iH/v4XofPQ31lf/1fd3r8XH0muZ0pFlqvmN5OQx+MBAGB4ePjWrVsrK4PB4Pfffw8AwL179wKBwL8rOf9Vym8joY/T5OFZyhVCD5frNc5j2P5dFcYPz8uSyw0XqK7s5qEshmc/yrI1XbG6fniWcluGErJKQqSubkR7ZKMKStcnNluSmdZlGOYEtueUwl8m8eZ7rwh0E2ilHyHzFcl8Rc5ZpsJfTjNB9ZO4HteRJnNCkzmBZoIZp4hMa0qP63CX8yDDktBm/0zqK1T4ETJfkW4S02LdSTPB6CY4zQQNNUE3wYWjWUp/OUkfzrTu0E2ghaNZthlau31Pl/NLhiWJaoSYpon2YBPFCOp1HR2/Kutw7G0yxzdbkpjWlJVQm63JVF1ivRxexPywmlprfgUJlTLBJCWEqktsNu9gWpLXIqXZsqPJHE83xVEMoE7nl0MLvU3mBKoR0mRO7HN/02zZ0WxJppvi6CY42QDudR2bWFTTTXE0I5RuimOYk5iWFLo5vs/9zcXvXHRTnGq8RhNANujCaSY41QhptuwINUE1QukmONkI7hk8HLiq6HR86ZpnMcyJoQoUQ+zQxV7haBZ/JN17WTByiT15TW2doSn85U3mhCZzYrfzUPCGiWndSdRuG7nIlvtKG/XRNCOsee2DWoZh3kFWx+OEMTnEl0noAua9YkZERUd0dTfotekClbdFlzDDT1f+i/G7lJB9EjD5Hoqsiy384ToSC11ehSnKxRTn/1UoykOVV6GwTWSWhq0N6obv2iaW3kRCaWlpAAAEAgEsFnvlypXQyqNHj5aXl0skEqVSuW/fPplMJhQK5+fn/52Z+k9cfisJKcKzVKsJy1RtOif7OFW+JU0Rma3elqF8/7T0b8dF752Wbjone6FyeJZqW4bqeQl1lbZGNCggVG1Ck3EHw7QMzRDHdp8xTzVOXdN7LwtV/hrtOObSd8NyL4I/lMYwJVP0EPFofuCqotmcYp2hDc62X/9+0jPfbZmmMkzJdGNckylp+rrBMk11z3cZJusYpmTeUJpgOMM8RW6x7GaYdjTqYgTDma65zsG5dkeQeeP7qYlF1fxNp2Gyrt22n25MqNdEOIItvKFUrHLTgPu0I8gkqD5mmJLbrHubTEkroTJMOyiaBKIUVsjYXEWpNft+XkIlDHC9LJasTmgyPLefVYcP7xs84ZnvHr3E9V+ROIItC7cGxy7xvJeFnvmehVsujucszRjHG0oVDGdyPReUvorhiwO9ruNcz3n7DEM2VkLVQ6kGKNt99sb302z3aeds2+Bs24D7W8lYweBcR6vlM5ohrt223zJN4Q2lcj2pmnGk97Kwz3XCMFGnC2BarXuajIk9zqNDC/2Ti2rvZaF7rss2w/DM9TiCLZ32L+nGBLI+tt26zz7DaLPt7Xd/678iUforeEOppilSs3lnk3HtQ2OYdtANSSRFHIYXnUWI6Zb+ehKK+p1LyDaxZPI9lDuvD2hm2kVjTJ7nL0WLYKRHHhBZLutG7lkDT1+r60IS4urHHj58WF5enp+fHxYWlpubm5WVZTAYQpoZGxs7ePDgnj17qqqqKisryWQyHA7HYrGTk5O/UdL+s5XfhYTCMpWgPE0azb0tQ7ktQxmWqdxwVrqrwkgSTe6uNKaUGyOyVWE/J6ESZjhRGktWxdP1SXRDEt2Q1GTYQTck1co+EA3nL9xyo+Ub69VRpslG8xRF40dPXzOwbF+RdZAGTTRVH88w7ux3nR5wnfFeEgqHc/qcJ+XecpohkaiOtEzTXHOdY5f4srEy6zTDPddtmCAu3BxsMe8hayHdjmOTi+qpa3rPXK8j2KYdx0rHSi1TNMloEUkLajbtarceGJxtdwZbRy6yxy4J5m86TZOkyUWNyldD0sSEQg1BVsYTRNB8+qYq8itJqKgJVCcBNyrjabpEuj7pp9D0iQzjzjbz/k7b4eEF9oDrLE2fwPdkj10UMgw7W0x7GMYUhiHFOEGyTtFNk+Srt71Plx6PLHAMASLfk9VkSKHrE0lqkHYca59hGgLEyauaiasq00SjdbrJGWzvtH3dqI3tsH45f9NlmiAZJhrcs10Lt1z6QJ0+QBAMZVN0sEZNrDPY8eTpQ8FQlnuua3C2Q+WrUflq/Jel/YOnG9TRsrEyz3zfxVvuG99Pj17kB6+bPfN9lklq8IaVYUyh6RLWPDS6PommS2yQwdGcqEx89HoS+rZwfyrmvRJGRGVHdHUP6HWp6QZVtEeVtoSfrvr9SiiENfDEOPZAO3RH7f7ur4Xntn7kntn/6LXOgVZLaEAzDADAjRs3FhcXz58/f/369by8vLGxMQAAFhYW8Hj848ePL126hEQi8Xj8999/HwwGb9y48dsk7D9jedsS8i/ZJwHbxNrYJwC9Zw0Jbc9UQou0HMtCdK4mOk8TlqX6tNqEGvCLnZc5lgXp4OUT9c7NF+QvSihf0auedUwsmcaWSJ1dxYywOjGYpIinapNoukSaLpGijW82fmYI1DtmWq/cHrNMUhVjVZ65vi7bMeFQwfA8u818sNN2xDjRqPLVUrQJIwvcwBWVxof1XZZMLuo8c/0NKjBRFW2bbua7s5XeGqW3RjRcwPNkNel3miepdH0yRRtH0SZ8/8O14HVrm/nAlds++0yrK9g1dlEwdlFAUIS3mw/appvnbjgmF/XOGZZstHxobqDZsMc8SZWPVRGVUTTdcrQ0XRJJHo8TQPOoG6saa81e4CU9afYBrQJdIS2GIAI3yOOomkSaLmlNqNpEijaeoAgzTZAFnhys7BPxcLF8tLJBBaJo46naRKo2sUEFwkg/6rIdG73It0+3qHwohmFXvTKaqk0ka+C99lOOmTacfGul4B+ioQKBJ7dK+D94+Ta8fDtFG0/RxnVaj7hmu+qV0S3Gz/udZw2BepIqVj9O1Pgx9aqYemUMz531w6M7al+taYI8cVXrnOlwzLQt3PL0O882qMBt5oMCT573krhJl4KWbDYGGpoNn6LE7zuDrCZ9CkUTt96hUTSJRAkcNRCVgY3ulnic0891kTWwxFHPf1uwPxX7XklzRCUruqYH9Np0gyo6okpbwk9X/4vBFtkD634ir4UnCLRr37KE3pYg/6D8sh4LSahX6b59+/b3339/586d9PT0e/fuFRUVqdXqJ0+ePHz4EACAO3fuUCgUjUYzOjpaWVm5sLDwG6XrP2d5UUL2OcA5/Uu+AXLHtUKm2+hfsk0C1om1sU0AupCE0pXh2eoVtmeponI12pFF9fCiZnhRNXTVM/1dqyrYogpmM4fyWoczm4c2X1Csfsu2TDUkX9mjnrVPLBm9Sw2srkJ6GF4IrpfFkdWJFE0iRZNI1iTQdTu57myBJ2/8isoV7BYNFev8ddIRhGS41BBo7DAfommTHdPtnrn+BhWUM5huCJB043VqH6ZRDadqd5A1CXWKKOtUs3GC7Jxhqby1TfpdtmmmeLhE5a0lyCMb1bAm/afzN13Ti0ZjgDy5qDNPUs0TtOF5zvA8l6iIJmviMdItxkBjj/1blGhjn+OMMdBYLXxPNlo+PM+tV4IpmoRQtBRNYr00DsuD5JI3VjSiTF7gJT1p8gGtfG0BNRonBNVL4WTVjztZk0YVvNNy1D7dRtEkBK/bmIa9jWr4ylaSCtZi2G+aIPNc2Tp/3YDzgs5fh5eFN6igFE2ScgzZbv5KPlopHUGMLvBHFniiocKxi2LFGLJeAW5Uw1uM++duDNqnWyeuaHT+Oo0PyxlMH7soYpmPNKigFG2SY6Z9aI6tGKsZnmfPXDO5gt3uub6rt/2d1uNEBahBBWkxfmGfbuuxnRQPFU8vGo0TZMlwye0HV0YWeCQVjKyOX/OgyKoEgghW0xeZhonqkngc0891kSWwxFbNny7cn4p7v5QZUdUZg+wFvy41PeDKjuiy1ogz1e81sUW2wLqfyGvhfiYh+/jDl5zvvuPXZmgO6LU9IPcoS0tL8/LycnNzt2/fnp2d/c0335w/fz47O/v27dudnZ0VFRWtra3l5eXl5eVMJhOFQuFwuHcjFN5W+b1ICFKoYyqDNOl0k3w6pB+F5wpZMiVyXtaPXjtNdm16qYTqWV0FtO1YPogohZOUCY2qhEZVQqM6oVEVX6cAkVTwwWA3QRbVZvzKNEEXeoqkI5XmCTrLchQj2c5z5aq8GKw0TDZSRdPu7LF9axhvrBV9RJDHNKrisdIw8wRd6yNap1rkozW1oi2WScbEVQ1du7tBCSMqYnX++sGZTrUX12r8yj3b557tG5pjO2dYOh8RJw1rVMVjJNu0vjrlWK15gj52UXT3h0X7dNvYRdG1OxOcwcw6OWg5WlVCnQSO5sZmN26oIP28hFr42jxyNIYXQxDDSIr4lZ2sR70CInAX2qZaDeON9QpIoyr+2XooQRYdvG7rc5yjaz+1TDZX8d9zzrDs023N+n0NSjhREUvV7JSNVAs9xcPz3KE5jshTIh2pHHCkNSihDUpYm/GrwWA3SvSRwFMoHi7jDuYMz3Olw+V4WRROGjHgTBN6iuxTbTTtTrr20wFH+sRVHd9dwHZmCD2Fzfq9WGkYQ/e5fbrNNEGTjyJnrllvfj8rHioVuAtFQ6UU9Q6SKm7NIyIp4nECaFVPRGpt5EsklIZ/v7QlsqorBtkHfm16wZWsmLK2iDM17yT0JyQkodDluFDJy8t79OhRaDkjI+PmzZscDmd6ehoAAA6Hc+nSJQAA6HS6TCabmJj4NybqP3P590vo1hGMcUuGKiJHs0JYthpapG9RBcniKap0iqGYaVEFTd7ro3O3y7u9+W0jGYyhD1OVq9+yPUsDKXhOQnnk7RhuDEEEa5DHkxQ/0qCIo6iS3cG+Bjm8RX/QFKDr/SSqKkU9hm01fIkVRwjdRYpRVL0c1m09xTJ/IxuuGpzpaTV8ZZ1saTceISt3DM1xdD7iyLwgeM3G1B/Q+eofPPoOLdpWJwNTVMks8zc8V55qDNsgh3WYjlgmmt2z/QzdXvlIjXoM2yCHM/VfeGYHXMFexQiqx3pmZtGqHEXXyWKJMghZuYOkiFsJlSCEoQbAmfWvKqFcUlQtJxovhNbL4hoU8S+hXg7HisP77alXvvNLh6tQgi1YcWS9HE6UQVv1X9mn2iwTTOtky8i8YOHmkDnQpBnDWyfbDH4KVhxZL4fVySAYUVgl7wOhu0TgKqzkbcCIwtGi7XVSCFEGYZmOWydamvUHAle0JEVioyLx4ZP70uHKBnm80F1ElEHwkhjHdGer/mutj2iZYMxdd7pn+/T+Rq2vnqberfbih+a4M9esEk8l25Gp95N6LGcM4xSU8BO0aHuDfN1Dq5fFYXmQyq7wC6iXSSid8H5Za2R1dwyqH/za9IGrOmMQ7RFnke81cd5J6M9GSEIro+OWlpZycnIePnx469atS5cu5ebmhtZPTEy0tbWNjIxwOByTySSRSP7defpPXX4vEoIV6xmKmTrBRL1wkiKdosmm6bKZTt0cz3ZROnjlLNX9MxLq6Mpp3FbLjsELoERJXL00fgWiBI4Xgz1BDkmWiBFENKn3Dk73iFxlwsGSemkcRhApGCwanO5RjeC1Yw16L/m7e5eufDduGmcwNV/WiaE8R74lwBS6SuVDKJ2X1ChP1nlJ3gX52LyEothVL41H8bbynIXy4doO/THNWP38Dc/wnGBm0Tpgy8SJYnot5yYu6w1+mmCwpM+aNnvNUSeBaL2koVkOir8NJ4ppkCU8CzUOJ4DW9IHSiR+UN7yShHIaopD9UVg+pE4CJ0rifkq9NJ4ghtbyw4iSOMFgsXwI1aY77JjsNAeaVaN4imI3XgTqt2awjCfrJXFNqn0ce45rpp+m/AwvBmOEUSRZElECb1LvbdYcbNYcJMt3GnxUnbeRrNhFV33Ocxb0Wi6gBeHWQCvLcEIxjNaMEqnKTzVjRI497+LNYetEq32SVcvbThDFOqa6GmRJZPlOx1SXbAgpG0IafJQ6CZQghohc5e36YwQxhKk9eOnWGMeeW8XZ7F2QjS1IG+Up9dL4NQ+NKImrE8PRnNhyVti5moh3EnrHL+AFCT19+vTcuXNPnjwxGo0FBQWhcx2tVotCoUAgUE1NTWZmJhwOx+FwHR0dv0G2/pOW34uEYvK1UtcVg/eayXvd4r/hmLjZoZllKoO17HECbyKtyfNyCRE7urJJW5ED0Vg+hCCGr8pTMKIkXjGC1XvJeFFsryXVPN7cpjtKU35uDbTZJ1nVnC1t+mPumQGacm8tP1zoKuu1pPEchUY/nW3PwYticUJQLT+8mvMRz1lk8NOUw5hmzZdI3lbvgnzyiokojqvlhfOdxQYfDc2PFLsr1KMEFHc731mk8zZyHXn10oQGaWIN95Mm9b7hOaHYXVHLj6iXJExdMY3OiVp1R3BC8LNQ4zBcSHUvKI3wfnn9K0koqz6ypi8Sw40liGB1YvhPwQnBDPUBqQdpCbQqhjBYAQjNj0LzI7tMZ0fnJMoRPE4IwQpAOCGYIIKh+VGtuqOWQCuSu40gghFEcLwIihdBVaN1tgmWbYJlm+hwTfe7pvttEx3WQPvwrEDnJVPkn/EcRXghBMXdXieGG330Zs2XlQMfdhnPjs3L+c4SND8Kw48emRNpRol6H0U1QiCIYEjuNrGrMrhob9Z8VcPdihdBpZ4a7Vhjk+oLjCAaL4Ji+FH+i6rAZR1BBCOIoGseHUEEqx0AIzrCzlWvL6GiHyVUOxD7uqD6wVVdMeXvJPQn5adnQj09PaHLcSs3qy4sLLhcLr/f73a7h4eHfT5f6OW/OVP/VuXmnQdTl27fuPNgvQoPHz2euXx74fr3v7iJn0hoFnBOvfZoH/sEILdfK2S6Db4l6wRgCayNNQBo3beOYIxbMtURudoVwnI04EK9wH75DMVzhuo53jCIHBinyWZ6DPNMVbBLP5/OGNqcqlr9lu3ZWkiBqls1awssGcaW6to7M+s/qe6NQnNjcUIYQQQPgRfC6kRx/dYsvBAmdSMNPnqz+utaXhSaF0VT7JMPodH8aJwgtmrg4wFrzuB0X58lE8UNR3LDWrRHrYF2rAD8bD+QBukOzWgDU3O4lheFE8TWieOpis+xglgMP7pdd2J0TmKfYAmcZURRAlYAruVFWAPtYlc1mheJ4kawbbnWQEedKA7FDSeI4jB8EEEEH5zqa9Mdx/JBK6HWsmMru6Mv4N5D1CONY8BLetLoBZhcbQYhoqonAsUG4wRQvBD2U7CCWIr8M44tNEgo5QAAIABJREFUn67Yj+SE4YVQvBCOF8LQvBgUNxzDB4VePgNaL06iKffjBJDVO8HwY9C86BC13MhabmRoGcWNQPOiQ3vDC2E4AYQs+4ym2F/LiyII4WheDJITjubFEIRwrCC2RXOEbctr0RxBcsJwAiheCMUJIE3KA1hBLF4IqxPF91uy6yU7anlReCEML4Rj+eA6UTxFvgfLB695aHghDCeAIvtApa3bz1SFd4o99qnnusg8vjSgnD9d9EVG3QeItqiaHhB6APK61PbHVneBytsjz6Heb2KLrOPrfiKvhWsGaNNcR3Z67P6HLxkD+Y5fm6HZ5yT0rqwug4HF0s6RA1j7jkrrAYy9qGPEGVhcXSGwcAs14D1GdKRUWfagrGfIg23q6eu3779uQy9KyDYLOKZe+z872wQgezMJwUsNPYaFTamqTWmqD9NUGy4o48uMBzD23LaRkk5vXKlxe7bm5RLKqNtS1R2JGgBjeVAcH7YKKIoTieXFEgRxaG5MLScaz4fj+DAsH4LhgvHPquH5MDwfjuaCcM8WajnRq7diebFoLgjDA+OfvcRwQSvLWF4sXgAPNYTnw0ONruwBL4BjebEYXix+1d5QnEgMFxwKZjnOfnAFK/o85l9lxFeTEC68sjMc2Q/C8iA4HnQN+DAsNxbJjkBzQXg+bO06qyvzIGhuDO5na6779uU+eWETng+r5UQj2RHoUIfwoDg+FMeDoDkxoQPH8aAodgSWG/tj03wYhrv23lbAciE1PTElzG2nK8JeIqFM4gfl7VHIXhCGDXld0AOxNd2gio7I87W/ioRs/ocvOd99x6+NZxbo+UtK6NHjJ1OXvpMNXmSb5jSeS/PX7q7eurT0lCoJQMrsoEpvFGIkstQTVTYCqvTByux06fJwjB79TFKVA1wxFl0+FlnqiSobiq4Yi60c+wrvGJxYXKvNdctvJSFNRK5uhfAcbUyB/ttGd0TOjyu3ZWm2ZKg3pao2XlBuz9ZGrqofkavbnq17QULp+C2VrAhkLxjDgWC50LWAYLnrbVqp8JKXL+flO19z63NrMBwosgdc3h51rvZfZUSk0Qu8pCdNXqCZq03DhJd3hNX0gDBsCJYD/auBZsdWdUYXMbZ+WxbWKXqJhDaUt0che8EYNvR1QQ9AQrcKna/94J2E/nyEJNSn8gAAYLVar127BgDA5cuX5+bmpqamrl+/HkqMOp1ufHx8JU+y2WypVLo6c8rl8tu3b7+QW58+fcrlctfcAwAAHA4ntKDVan+aly9fvuxyuV4rlb96MYxeSWvyQEpM4FJ7LMIdW2KLKzOVdo54Z5fvwG0Q+CFVo5El7sgi+2qiSjyQyhGaZLxNNRGLcEWVDUUWOZ6v44gpH0uptg1NXXv1eH4XEorI04Xn6j7KUEfkPWeal/CChAjtnWnYj8s7wkNXXX7B/7y/OWg2pLobVNYaeRb5v6V1SMNLJWQMSQgdhmgLq+6Kqe2P/QXXmv7ooPrBlR3RhfStp8q2ryuh4i+yiBsqOqJRfeBf4DkMG4LsAVeyoi6gP2hiiyzvJPTnIiQhjm4UAIDExMRz585NTU2JxeLdu3dfuHDh22+/DSVGIpHodDrv3buHwWCwWGxaWhoOh3v69On169fv3r17+/ZtJpNZVlZ248aNe/fuXb9+/cGDBwAAPHr0KC0tbXZ2dmpqislkGgyGlUz79OnTrKwsLpeLRqOTkpLOnTuHx+OdTicAAJOTkxQK5eDBg8XFxc3Nzb29vW9mnOfKg4ePG0XjsaU2UMVYZLErstgZWeyMLB6MLHHFVvl2Ix1W72WtZx6CcEaWuF4wUIiIYie02AAuNq9XIbLIHlMxdphgv/HK1+XesoT0viXLBGAOrI0lAGjctw5jjFuyNBF5ujdhe44OUqjqUs1aA0v6sSV8KysV83FZW1hVVwyq7/UHQf0+qOyKLm2JOFPzzxJCtcELvKQnjT6gmau9gNpW2rK9khWN/MMe8ptQ0wtCtEXlUz85XvRJu8Btm3qui0zjS/1vW0Lm8XU/kddicAZofSeh3wEhCYksAb1ej0ajs7Oz7Xb7gwcPEAiEQqEoLi6+detWe3v7sWPHSktLu7u7c3JyRkZGQtny+++/Lyoq+vTTT0+cOJGRkXHy5Mm8vLyEhIT8/HyHwwEAAIfDEQqFgUBg3759Z86cycnJWTkxEgqFPT094+PjBoPB4XCYzWaDwXDx4kUAAFgsFgwGKyoqys/PT09PT0xMfPLkyS/wzf0fHr2wZunp0zqeD1I1Gln64inO8olO2XA8wvxZlSGqZHBtAxXZY4oskBJTZPHaFVbOh2IrxzD9I7+RhLxLlgBgHl8byzigcd06gjF+kqWNzNO/CWE5emihuksZtI4vGUaX8K3dp6s2FzO2IdqjqrtBNb1/QHpAiLaooqbwo0X/VYRGmrzAej0ZOhPqEDnOVEblkj8qZUZWsmKqe8B/NSraY4qawtMJmw5lRvB089aJ53rJ5F/qV8yfKf4iq35DBSsa1Q9+4XIomgPGcGLRHBCOC6tlx6DZIBwX9kIdDAeC7AVXdkZdwHzQxBaZ/et+t1+LwWmgVf1OQr89IQmRuuRkMvn06dNxcXEVFRU8Hm9iYoJAIOj1+rt373I4HBgMRiKRxGJxZmamTqfT6XRisTh042pvb+/KyUowGEQgECvp9P3337dYLAwGQyAQnDp1CoFAKJXK0KbNmzeHLujhcLja2tra2loGgxHa1N/fv2vXrvz8/Pz8/Nzc3H379r26hG7f+0E7fKm6dzSV5jrd6LxAHSxlDUuc84vf3QMAgGcJxiJckcXrnsFEFNnBJXZImS3ixYtsq85yii3RRdaXGsgeWWSPKvWkVFon5l/potxvJSFdZJ7hTQjLMaxISDfymMm1fVO0PYOwuYgeiWgDVbFi/3AgWmPyqeGZdR/vOf03HGPAGgAs62cxo29JYLySWrXv28r/LqRGlDWDKtogfzWK6FE5DduPFP79VN4RxeC9F754KxLKbthQ2RldOwB+YVADSbSzTpBYL9yBGoigyfZTJHtQAxE4LuSFaqg+cFVXVCr2nYT+hIQkxDN4r1y5sm/fvlOnTp05c+bSpUuVlZWnT5+empoCAODu3bv/8R//UVtbazQaDx8+TKVS4XB4U1NTaBbtR48eZWdn379/HwCAioqK0CW1+/fvCwSCTz/9lEqlCgQCAAC6u7tDp1BPnz4Vi8XJyckSieTJkycmk8lgMBgMhtAbAQDo6+tLTk7Ozc3Nz8/Pysr67LPPXlFCMuf8UaIjFjEILh8GlY/GlA3FlI+Ay0cgCNdelKVZ6v+i1hJVOhRZaI0stK1HTKE5utDykgqvSEShHVo12ql6pYHsz0uod9AaBOyTr32N2xoApLZrBc1unXfJHABM42tjHgfUrluHMcatby6hXAO0UN2pDFrGl/Rjj9nai3m1BYfz/zunfnsZA1LOhCL+aJTQwVnE7Qcz/++X53ayNQum8aX1utE0Dhj9S3Ln9/jWvsPZ285UbyiigssYsL8UpQxoPin6aOF/pxx9j9gm1Y0+/mkX9SnmzxQfyCZtrOyMqR2I/XHAJA+KHIgweJvatCfGL+qalF+Z/a2uqYFWzXEUO3Jl/CSOD8PyoKj+2Kru6FTsBjpbZPKv+4m8Fs5poFV9vYblsfoeWtf/5e8dvzbuINBjfSAw+RcXF5OTk/fs2XPmzBmlUpmXl7dz506ZTLa0tEQgEFJTU+l0OpPJ7O7uBgCgtLR0ddr0er0tLS1sNlsoFC4tLQEAsLi4aDabORwODodDIpHV1dUpKSnHjh2rqqqSy+VGo7Gvr4/H4z169Ki1tZXBYDAYjIGBgdDeOBxOVlZWY2MjiURiMBjffPPNzybxBz88JAr8EMRgTNlwZJEjstD+vA8c0aWe2LJBaLExqtAS8fzWX4+Y0sHjBJPrFUbK/UYSytZF5hvehLC8HyVk8i9J7bfovY7ziK+O5H1wAbk1Cx+e/UfjAnLLwfT/+eJMPImlVnt+eHkWM/qX1MP3+5RzNeS2E/mJx/I/OlWy7dvSvxCnird+nbnhizOxZfgmgema3vtSCXXF1LJXJAQlCOKrB7ZZxts6dN+6p9liV83kZXOz8pBqiGAeb23VHHs2dvwFCYnfpoQ07yT027MioZs3byYlJe3fv//cuXM9PT11dXW7du1qbW3VaDQGg6GxsXFkZGR4eBiPxz958iQvL++FNEqj0dLT00NPX10pDAaju7t7dHR0aGiooKCARqMNDQ2F7oFtaWnhcrmPHz/u7e3t7Ozs7OwUiUShd92/f99utz9+/JjBYNy/f//hw4dWqzV0prVm+eHho8ruEXDFcGTx4MusUGSPLrLEFhui3saJzitgjSq0wBF2eKkJz/Xd/n7de11/KwmZtmbrI/ONb0JYnhFaqFmWUADQDN/vVUw3tGsK0agzRYdP5n1+Mm/PybzP/zjs+Sbn8/PFmXWtCr7hqnb04c8mMoPvqXzwux7ZdH2bohTXmIesyatB/nXIR9YUY+rInXqe/op66J7J/+KJ47KESg7kNG6s6opBs2PxAhheAMNwQS3qIzx7icSN5NoKtaONFNmePnOGeqSeJt/Ld5QKHKUodnioMo4PrR2Ire6JTsO9k9CfkJCEpPYpl8uVmpp66NChjIyM8fHxvr6+gwcPKpXK0Cjturo6h8PB5/N5PN6DBw9ekBCLxZJKpX6/H4vFrozqBgCATqcLhcLQMpVK1ev1K5taWlokEsnMzMxXX32l0Wg0Gs2BAweWlpY6OjqcTmdGRgYAAGw2e3h4mEaj9fT01NfXr5m+l5aWiDwvpHIkqsgRVWh9OZGF1uhCS3Sh5Wdrvi2iC83RJYOQqrHMZs+dez/8uyQ0tmQeB0z+tTH7AfXgW5WQImjxPzWPA0bvU6XrLlsz38oZIbOspDbTHw5Kp61D4OcbLqs994y+pfX6cDV67xOl6y5Xd7FbOtUpDrD+SnSKA72KWaH5mnro/prdZfQt9cnnz5QcyCFvrOqOQXOWJVTLjeoynHVO9khcNRTZZwQh3ORvLun+l8xTO3nFpBsjo7nRoZprSMj38x/Kq+Ccenc57ndBSELd8kEEAnHlyhWz2Xzw4EEAAG7dupWdnb2SGLFYbFtbW3l5+dOnT69evXr+/HkAAO7fvy+Xy/Py8ng8XqjaxMRERkYGk8mcnZ0FAKC+vr6/vz+0CYPBrJ72lEqlcrnchYUFMBhcVVVVVVWVlJR06dIlGo22uLhoMBiysrJKS0sLCwvPnj17+/btF+4xWilK1xy0zBFd7IwqtPwusUYVWqKK7JCq0TKWZ2V68p+RkCUI2CZfe8ipJQBIbNcKmt3asSXTOGD0r43JDyhDEsoxRBaY3oSwfBOkSMNSBM3+p6EWDb4lzchDif0W33iFZ7j0h0Ngvipz3NaOPDL4ltbrwJ9i8C3pRh+phh6oPPf/aqiHHujGnrykZ3rl82dLDuRSNlX3xGC4EIIQThDCUZwIgbNU6ka2ao66Z9hGH30oyJd5UGJXpXOq1z7RSRQl4IWwUGW8AIbmxNb0xqTjN9A5YqPvVT+Xl+OYAlrU12tYHovv4UsG4r/j18YVBLqtD+pZ0tBccMFgkMViAQBw7949m822khjHx8c1Gk1ILffv3w9t+u6772g02uXLl1en0AcPHrBYLLfbDQCAz+cLBoOh9aOjo6sfhTc+Pj43N3fnzh2r1Xrnzp07d+6YTKZ79+6tVLh79+6dO3fu3r0b+pFpzfL9/R9ONdhAiOEXUn90oWVLtnFjumFThmFzhmFTumFTumFbrim6yBJVaPkkxxSRb44usmzLNW1/tjK60PJxlnFzhmFzhmFjuiG0sG3V1vB88yc5yy9/CUV2KMIhsQdfVULWP5qEjCst+gCDb0nvfWr0//bf7xWMfkDvfaofe7Iu3qd671PTOGCZAKyTr8/UL3rXJGAOAC/5sIx+wDIBOIOAaw4YnH0zgoDzrTAD2Kd+JuZ1JATCcCErMwoShDBroI0q3+OaGbj63Xhw0XHx5ihTc4jnKJ64rMfwY1bPPYjmQGr6YtIJG+jsty8h8zsJ/aaEJMTVj62X6H/PReEIQkptUYXWqALzarbnmApZfrI0SJIESZJgoyTYKA1+Sxn5JNsYlmu60DSaWGHfkmX8muA+iHdvzTZG5pvD8kxl3YEGcZAkCYbe2CAOHm8Y2pptjCowh+eZEirs55tGt+YYP8k2Rj7f3CsCKnMfxZvvfn/vpwfyp5LQchKfANRDjwXG60LzzXUxvR6CdbmxjHFteIZras9j2yRgn147e5oDy0pQDD4QGK8LTTdeQPDs72uwTjCr4Ruu60YB6wRgWyutm8YB6yQgG7xFZyvqWf2kLvYy3ZwVGkP0rKKXQ/4RLrlvGcoK/VxKP5f6IzzqwDK0AR6NvQ4cHo3Do7K5DJ60R+kN9dirSyiPuqmmF4TlQepE8BBoflS36dzt+1d6zOeNfrrBS5V6kPbJTqm7Wu8lt2gOY4XgUE2CEIbhQpB9MRnvJPRnJCShtzJ33EtOWV6y6U1KcdsgGOH5aW4MzzPurnHIPYtFLP9+rKtRGuwxXYSWWbfnGiPyTafIw6mMsf89p6noC9RypzamaaMKTOF5pq8J7q8J7rx2n3Lo2td17qP1npRqe1iuMTLftDldV9I9Xj0w8XGW/iR5OCzXGJ73+km70BpbbNR5Zn96ID+R0AxgnXjt+x4s44DE+hoS2pZj/AUuXU14vhlapF0tIXMAUA/dq2O1plV9fbIw+Ug27Fhu3PHcuON5ccfz477JjzuRH3+iIP5EYfzJwviTRQmnihNOFSecKkk4VZLwbWni6bIQSWcQSWfLk86WJ52r2HGuYsf5yh3nK5PPVyZfqEq+UJ2cWpOcWpOchkxJQ6WkoVLSa3dm1O7MqN2Zid6ZidmZidmVidmVid2Vid35jOQszF5EY3G3YsQ2BZgCL55qaEef1LGas1DHv8lPOJoDCwX8TX7ciYL4EwWhUJ9F+1yoy3GeWxXnhaodK0GGIkxfifC58HZmYndmYpILSYdKGvJa+CbLxHMeCv14zhD0Z2ITjxb+82Dmf3yV/Z9f5/zn17n/eSjv/x3K/39HCv7rSMF/HS38r6NFfztW/LdjJX8/Xvr3b8r+/g3iHyfK/3Gy4h+nKv/xbdX/fFv9P6dr/ud0zf+cQf7zLOqf52r/eR79z/Pof17A/G8q9n9Tcf9Kw/8rnfCvDOJ7mcT3Muvfz2p4P7vhg2zSBzmkD3IaN+SSN+RSNuRSNuRSP8ilfpBLez+XsjkdF1XakMfRz/ysh5YlVHogj7a5pheE5UPrxHEhcAKQZqxeNIhwzwwELmkNPpreSzH4qGxbrjnQoh1rQHK3h2oSRHAMD4Lsj8mo2/j2L8d1eMzeh5bA27n36B2/ANcM0G15wNaOLC0tqVQqLpcrEokkEgmXy5VIJHfvPjetJ5vNXn1JLVSePHlCJBIBALhz5w6TyXzhLQAAaDSaNWeHe8NycfHmFyhDdInzhR/Lo/KN4XnGf3yrIkmCieXW/++4/DRlGNEz/l+nlGG5Bhx/SjJ4tUk5d4Y6UsTy95kvyT2Lee3eDRe0e1DO7FZvUoWNJp/951l1LWcSUmKJyDN+kqVPbx4r6fJvTNN+lKHLahkr7vRvyfwFP+qbYss96F73T4/lLUtIM7ZkHAcM/rUx/goSMvmfGscBUwCQu74rJZ/OqNuUjn//Aub9dPyGdPyGzLoNmcQNWfUbsxo2ZpM2ZZM25zRuzqVszqd+WED7sID+YUHTR4WMj4qYHxe3fFzc8nFJ65bSti2I9q3lHVvLWVsru7ZWdm2r7NpW1b2tund7Td/2mv4w5EAYih1WywlH88IxvAgsPwIriMQJI/GiSLwoiiCOIkiiCJJIgjSSII0kyCIxgrDC5o0nyz4mdnUZx5cMz/rHFADkrltoVn4mcVMa/v1U3Pvp+I2ZdRuyiMvR5jRuyiVvzqdszqM+C7V5OdTVcVZ0LsdZ3RMKMhRheC0nHM0NRRiJE0bihavCk0YSpJEYwfbilk3flG4g97Ft0z9+THovQOEySplRZa1bixjbC2hhhfSwoqawYkZYSXN4CTO8rDW8rDUC0RZR3h5Z0RFZwYqq7Iyq7Iqq6o6u7omp6Y2p6YtB9YNqB0C1bBCaA8ZwY7G8WBwfghdACEJInQhKFEOJEli9FNYgg5EU8EYlnKyCk1VxFHU8VRNP08bTdAl0/TMM8XRDPN0UT9XD8eLojIZ/nilLkdivmSfW/aYZ/IDet9Qjnz9bdjCfvhnZB8YJoKHnNuFE4DbdsSu3fEQxvF6S0Gn8dnC6T+RCcOx5HHueY6pL6EJg+JErz83D8qGoAVAGcSONIzb4Xtbiq2OfApjq6zUdHss7Cf2mhCQkMPkvXry4d+9eFouVlZX19ddfs1isI0eOyGSyUGL87rvv7HZ7TU3N8ePHTSbT4OBgaHY4AACuXbuGQCA6OjoQCMTevXvPnDlTVlYWuvNUp9MVFBTs37+/rKyspqYGh8O9RQlZRoKQIm1kgeXFe1dy9QnlliNEt8BxpbjT9xVhsEE8zdItfEkYBBeZtmbr+fbL5+jD2S1jHbr5vWhHs2ruC6xzS6bu/fNqFHviAG6QIJiKR1iKO32b07QfZ+q+xA+a/Tdp8iBNPtukmK0XTbumvqvqC2xO07zufTWgMlcWfY3h5i9KyDwDhP4vfi3M44DYei2/2a0ZXTL6AYNvbYw+QOm8dRhj2pZresNxF+EFFmiRliUPmnxPjX7A4AWovMbavigcJx7RGlXUFFHMCC9mRJQyI8paIspaIxFtkeXtUeXtURUd0ZWs6KrOmOrumOqemJpeELIPhOoH1w6Aa9lgNDsWw43F8iA4PgQngBKEUIIIVieCEcWwegm8QQYnyeNIirhGZRxZFU/RxFM1CTRtAk2XSNcnNukTmwxJDGMSw5TEMCUyzIkMcyLDkkg3JTSq46r7wo8U/m+LUGOdAkK5TDfypH4AieyNwHHjEG2hmEMBL0db0RFV2RFd1Rld1RVT3f0s1JU4ObFYHgQngOIFUIIQWieCESWhIEMRxpNV8RR1KMJEum51eMux0U0JjWp4TX/42eqwDpnZMrH8j8KA3ovp28nU78FxEspao0qZkWUtkYjWqPK2qIr26IpQSJ0x1V0xNd0gZA8I2QsOzddXy45FcyAYLgTLg+D4ULwAig91oBhOlMDrpfAGWRxJHteoiCMvh5dA1TzrPUMovB3N5h1M8w6mJbnFmtxiS26x7WixL8O0JVG08UQZPJ2wAd2KM/qXDOt/2fTepR7ZGhKqk8AbpIkce26jLBkrjEYLIgZsWURJXIMsqZYfjhVG10viVz+89UcJscUG77rNvRb2SYCpul7d4TF7H5rXv6XhHb82gzNAl+WB0OQPBoMFBQXXr1/v6elBo9HXr1/H4XBisTiUGOvr68+cOYPD4bBYLA6HO3DgwMos2jgcTqFQ3Lx502KxuN1uh8PhcrlCiqJQKJ9//jkKhSovL8/Pz//888/fooQk5nFomT0izxiRp1/N1izdHpQdzZ2wBW62qudQ7ADPflk9fK1mIAArMW1K0wxYLnUZ5qmyYHbLaGGHlyCYSiy3fIFx0uVBmizYZVgYnPquSRGkyoJE0TS4yBiZr99ZbfumwX2y0XOi0XOswX2C5D5F9mzJ1L7Q9M8SXWw/WWe8snj9hWP5E0hoyegH+Ob5BsEXvJFvqPLPKztBiLao8o7oio6Yys6Yyq6Yqm5QTQ8I2QtG9oJRfbG1A7FoNuRZuoTi+FC8EBaSTZ0YXi+B10vjGmRxJHl8ozKerEogqxIo6gSqJpGmS6Trk56l8h1My44WS3KrNbnVltJmT2m3p7Q7dnY4d3YM7uxwpSzjTmkfTG4yJVHUSUWMLTXNJYbQJR0fMKD1N4r280ZPUuSfVXWCEO1RoYCrukDVPSBkLwjVB67tj0UPxKI5EAwHguVBQw+vq3uW1kNBkhTLcVI1oSCTlrO5aQfTHIowpc32LLzBnR2Dy7G1DyY3mZMomqQS5paaZoTJDxh8gGZ4ic5v73EekE1mkGWfVXWClp3dBarpBiF7wMg+cG0/GN0PQQ/EYthQLBeK5YWemQQjCOEEUVydePnJ4g3yeJIinqRMaFQlUjSJFE0CVZtE0yXR9UlNhh1Nxh0MU3KzJZlpTWkJdaBjZ4dzV4drF8u1i+Xe3enZ3Tm0u3NoV+fwrs7hXV3DuzqHd7bak5sMO2sHYhDUcwrX/Zck+pCEzpUdLKBvRvaDcUJovTTuGXCcMBovAnWbzzC1X6L424jSkCbjiJLlhRBECRzHh9ayQZn1v4qETD+V0Dsn/RtZkdDVq1eTkpIQCMRXX32VnJyMQCB27typVqtDiRGPx/t8vpU8KRAIQmOv7969+3/+z/8J3Uza8KysTCXX0tLyxRdflJSUlJSU5OXlHTp06C1KaEAzFltiDc/TvzCzc2Seblu29m+n5GTJdGK56T+OS09TPOXd/v88IQvP1X2UoWlWzn6Nd2K4E6fI7n7zxZJO78ZUFazUeADr+BxlO0/zDFgu7a6xfoGx70fbI/P0n2Rq+i0XmxRBinSGKp0hS6bFg1ci83VhOdrXnXU6uth2ss5w8fKVX1dC6tElgx/Q+9bG4AMUb1VCHfKg0bek8wIdMkPf4EnTlcIO8yFUH7SCFTp7ANX0gGp6Qct5cwCy/NwdLhTHg+H5MIIARhDC68RwomQ56TQs5/QEsjqBokmkahNpuh/zJsO0o9mczLQkM63JLbaUNseydViDuzpduzpdu7rcu7s8u7uGdncN7eoa3tU1vKt7ZFf36K4O184Wy248D1bFyJIPPjD4Ac0IwBAI+gYPmy4Xt5u/QvVBKzujQwGHpsReTvGc5YfC4Z8PtUEWT1LEN6oSyOrElTibDKEgk5mW5BZrSutAqOfBAAAgAElEQVSqzB6K8Fl4P8bW4d7VYtlNEEDL6SfUw48NPkBse0Dm1qvnLugXChiafVVdoMrO6KouUPUzkaP6wbUDsZhnnRl6AB1eACMIYXUi+DMDPYtQuRwkVbsc5HJPhgxkXu7JVntKuyMl1JMs165O167OH3ty9+qeZA3tbrN9RpImImhH+ear633T9D5A513qls2fLTtY0LQZ1Q/Gr5JQgyyeIAZjBOE05Wdabz1FuRsjjMAKI8XucrY9GyeKeU5CgpCENtHYYr133eZeC9sk0PyChCYA0wxgmAKM7yT0b2RFQtPT0ygUCgAArVbLZDIBAGhra1u51ZRIJObn57c/K0eOHBGJRHfu3Glrazt79qxer3/w4AH3WVn5BYhOpyckJKSlpWVmZp46dWrPnj1vUUISkxdaZg/P1a1+1GdErjYyV7s5VXmUOEgST32cod6UqspsHq5lj2+4oNyapUlEmEji6c+RtgbR5I4KE99+6RhxcMN5ZXiOdmum+sM0VUqlhS6f+eC8YmumemumJjxHG5Wr7dDNheVoNqUqP0xTvX9O0a6ZTa40vfCU0VchptSR1mi4efPmn1BC6mGgiccRjJ2x30CwLIeRvZDfm4Q6PbvbbJ/VixPK6SdE1pt6H6B0P6Wye8XjZ23XER2Wr5G9sb+JhDo9u1ttnzVIEhD0QzLXTb0XEJjvNLLrdBfTdQsFTep9VZ0xvysJdS5LKKmU+hVbv/ASK6xIqJDxYe1ALEEEa5DFhyBKYd3mM/zBwgFbhsRTef3ujDnAqGC/rxzBiN0InCh6pWa9NA4vhKE54KxfSUL+x+ZpwBgEtEMP1MIRU12LgT5gnPrts/NfhBUJLS4uxsXF5ebm7t27N7SQkJCg0WhWJFRWVtb/rJSWllqt1rt3787Ozra1tcnl8ocPH8rlcrFYLBaLV24wEgqFVCq1u7u7paVFJBIhkci3ZaDZK7fxfU5IiSU8RxuRo1nNtix1YpmRJJ76rMbySYZqU6oyt3WEwJv44Jzio3QlhhPIbR3JYAx16+dr+vy7qswYbuAQ3rE1Qx2Ro9mWqf4cae3UzX2YpgztLTxbszVTrR291qWfb9PMtmtnW1RB19QteIlhe5b6haZ/FnCps7DJ+Pjx45+T0DRgCbz2HeBmPyC2XMtnuNVjrygh8xtOCBFeYIMW6UISUg0BNC6bP3rGdr2MZTn0u5UQUZSAoJ0QWm7ofYDc9Zg80C3yn7FdK+sw/8YSqpfEI2iHpc6beh8gMN0hsQnahbQ/goTmX1VC7FiCCNYgjw9RJ4XwnHkab53O12DwU9RjeFOgyTbZ5g4O9NvS0ILtJHnCcmVZHF4IQ3PB2Q1vVUJTAENzq7zbrxt9qFbP6Jl8Vz39cnfXNBYlZog0/leaL+Mdb87g9LKELl++nJube//+fS6XW1dX9+DBg9CzG1YkZDQa1/QBiURSq9U3btyoqKggEolEIpFEIgEAcOfOnQcPHkgkkqdPn+Lx+Dt37jx69IjP51+9evVN9HP99v06ni+hVAct0oHzVWHZ6vDn+SRDtRdl2YeyfnhBEZGj2Zqp2lVl/qLW+km6MipXc5jgiCvRF7NGjxGdyeXGD87J40sNx+ocn2SowrPVYVlqSJHuMMGxLVO1ep/HiU5okQ5coI0t0IHytd/UO0EF2p82/TPkaMGFegbf/vTp05+RkGkaMAdee8ipyQ+I/vASgr+T0CtKCDUQCu85CeGF0HUkFL8iIao2cX0JJT8voV1dnl1vLqFziINFjA/R7Ng6MYykiF+hThaLFYU3yOOM41Sk4MNW/ZeumZ6hWc74ZVW35VuCFBSq1iCPI4hgmJCEOGL92NuQ0DhgngaY/ClCWbOD2DRNIn/H4wAjHsA7osWQuhQz2vWngXjH28U5DXRZHigHgzwej81mAwAgEAiIROKjR4/IZHLoGXR3795FIBAzMzPrSchgMLjd7pMnT1qtVqvV+vXXXz9+/BiJRNpstszMzIsXL3Z1danV6vz8fLFYTKFQfrGBLt+4d5JoBZc6w3P1Edma6FxleJbqBSKy1Z+kK7ekKyOy1aGXW9OVW9IUoZcfpyq2Zag2npN/lKrYmqGMyFZvy1B+/GxreLZ6e6bqo9RnL5/xUapie6YqRFiW6sMLirAsVfjzdX6ebA281NgwYP/pcb1lCanGlvR+QOdbG70PkDtvHcaYtuaaIwutb0JYgQ1apGuXBw2+JeUQQF1HQtXdMWWsLYjOTyq6Pqns3lbVs726N6y6Lww5ELFaQvXSBKIEVieBNsgTiLJYkjL+dSS0q92Z3DGY1OX6lOVKZrlTXi4hgeWG7leQEFkDazIkri+h3e3OxPbBhA73jq6hnT+VUBntsMR5U+cD+D8jodia3qjagVg8Jx7Njl2REEEAJwjhaF4kQQzHCCIxwkisKAoniSRIo8nqHSEJ0bRJdH0yXZ9I0ULJWjBZF0sxxFJNsc3WxFZ7Sodzd5sjiTW4MyQhlntnp2dXp2dnh2dH1/DuNSU0oJ/Xedf9smm9S13rSUgZZ51kNijiGhRxjulOlPDjTvNxjZfAcWaPzgv7HWkEacyaEtKNrdvcqzIOqD33jZTekVrslRbmE60KGBsFfD4gELivlItzSvoHnBovYJwBjK82McQ73oSQhJo5eiQSefv2bQAAhoeHLRaLzWZLT0/3er0AAIhEoubm5vXE0NDQoNfr/X4/HA5HIBAIBGLfvn2XLl0SCAQ//PDDyMhIYWFhdXV1SUkJgUB49OjRnTt3fpmBHjx8lEqxxZQ4wrNU4VnKVX9/nu0ZIQ+pNp+XbTwr3XhW+nGqPCJbFZ6lishSfZwq/+iC/MML8tCmj1Llkdmq7RnKjWelG8/JtqQpQus3npWGZb5qiy8QlqWKyVVCigx7q3XzV279yhIa/R1JqKorurYP2mvI5VrK+o15PGsp31rGtRYL7OU9xnQcLzS4GY4XQuiqfcoRDEmeSJTBui2nGhSweiWEqkmiaOIp2niKNp6mi6fq4mgGOMOUFBp43WJLbnPsbLUnNdugPe79A8OHmHYwd/QYe/RQhzuJ9ULq/LUklFivgDQoY2napB77NwxjcpMhaU0JtTt38MdOKScKhb7TnZ6UXywhBGsrqg9sHGMOmPIruj+p6QvHLY/GhimGsGxbLkEE4zoKJJ5KsRshdJeovVjpcHmDEtqohpE1cYErqoHBMxzXBZWvSuGr0IwjVeOVPa5DTRaI1Jejm6xucyR2DKa0OKDqyTLVZFGXZ5fIf441tONNJFTc/BGGE0uUwBuVCY3KBKIc0mE6ev3ujGykRjlaO71oEnlKRZ4S9RhOOlzJG8zDisMalYmhyiRFfJ0YhuXF5pA+pL4NCWn9gMhw1VmMAAwaYMgNuAYBpwNwDQIeDzAy/EClnCRTzPWtKuGI1vvUMA0YJ377TP0nJiShpgHtT38tDz1sGwCAYDD4kikPFhcX7969e+/evdAzGgAAuHz58q8xRUK/bhJUaAzLUodlKl+R8CzlJ2nyTeekccXaTyuNH56Xnae4CtqGC9qGD+FsW9LkYZnKTeek+5DmUw3Ow3hbQdtwfuvwQbTlowsycL46p3koo8mzu9KYyxwqah/JZHiic1XbMhSvHsAKEVlKcJ4yPFMJKjKxfvKku7ctoZElvQ/QeddG7wXkjluHMeatuW/6TIuwAju0SNcuCxq8S0oPQOWsIaFyVjhdctg/r+sz5t2+d9XkbR0w5WmHG4WOivEFLVGYhBNAcQIImh9Zxd5sCTBYxuNI3ke91rMTVzT9jvNERYzWj3fP9brnet1z3WOXBL7LYs9Cz/DFvuGLfZyh001W6MDQUbE3w73QNr4o5I4ecy0wNFNlmqkynvdYhydhbQmZb+i8gHzwMbn/OQlVdcUgOraVdXyC6osN3bdU2b0VzQZjubHV/VtRnAgkJwwnBNVLE3CiGJwoulGRQJBFmyZo9mkmXr59aL6fadxF0cEoeijdBG+x7myz7WRa45m2uDZHUpM1yr3QapurN8ygdDMVLa7YruHdL0rIcVPnBfjGO6SBNSRU2RlVztrWLP/G4mdphin60SbXJGfmqqNdc6KWE43mRlNkn43OSfssGYHLWo49yzHJ8l9SDDgyGlUJ9Upot+2EwJOrHKvmuM73Ok7oAzjbTJPSXzF2mWuZIVHNMW2OlJnrWsHYWfl4vvti68Jt5/x31uHLLKHvdLsnLhTtixLSzevG1v2yaceWuqTz5xAHi5kfYbgQohTeqEoI0aCADThSFaM1Wl/d9KJZ5CkeWxAZx8my4UqBp4ggjV6pSVIm1EngWH5sTuOHVLZYN7puc6+I1gtwHXc5SOq9znbAZgXMJsBqAew2wOkA3C5gbBQYG/1B8/+z99ZfbWX94++fce9a389d697vR5+RtrgWd6vMdDpWN9wdihR3J0BCSIgAgSTE3d2NCE6BFlqod+pl3x/CdGowtNOR5/nOXq/VFc7ZnP1OurNfnH3OeW/uVShU1Q7jTygExp8ki3+r6PfCKaFJ0dRbw+LWDvme/5iy9fz5Wxq7//DRqSaxb6HYO4e9d/alMk63Kfvoc945bCR3Ie6K6EKnughpKkKafmiSf5HCiKkQwVjzKP7iyVYFVX0tb9BQi7OOS5f//TzlYpeaKF9B8hYmpMsjoqsXu9Rsw9rJFuWBNOYHxeCdw/bKYQfkc/zy2F7ZbL8iaVqv/K17E/7FJQRnn2frO0qQn81dlwnMEKUDI7HCLmP+RzmN7qUfapz0Q4nOK2eHZdODK7cMUytU5SxCNYcwXsVP6nK7eSFwyRGE7BhCdgwmiRVOtyoXoTBZDEZzHKM5Pqw+PKSKJFuSRXN19hukpdti9nSBZrmXOZ01aT1jWkePT32LNcW/JaErO0uobNgdL73M1rdXjXjXjQe0TUaqZ0b7GN/00g8bFiaVMyjN3BhCeKqR7M0wVAttXR3MoGa6h+0aw7JKQit+dKwxJw0Zo5ozgukmtq0MJo8cVEQw7QXc6XKSJZFoOWtdmxAv1LBm8nSrUPZsLtoYvXcJVWH9W/GxeFkpz9Qrt6NQ/KRWYsTSDY12dryJGNg8GQRhHe2kRQ4Lz9lXOUxTHYQTb1mm2FaZkmkIy1LTxvKd1OeoF5FtbE+M8oRopm1EfYI3XdvM+QfDViRf7IHKgweVwUOqMJQ2jjh1njR10XANqV0dINnOSpcaKY6LGFPMR0royvdlCJcWUkgXKxzCj3pFJzuwjekL4UWYl4ntLH+U/OTsuoCgzVLMwXp5Eb38SGe1Xl5UJyO8lRJcADkw8CkkJLIBuvHJEJQ5Xd8ApBIgFgOpBMil2yrSqIFOCywWYLO+kInXh5H6jn4BmsPX3BUvAukeMub9zUdICP9m7rhl/PgSfuL3c8yvljvTjunO9qevZQBSWleCC9leuTyvbNYe8cxi7Uul4yRXe2kz/+vkZPwV0Tf10vBSQUSpIKyEn3BF5J/H8cllV41MYYVLHlksnHS5mWCH0GZhrLl/P0++1K1uJToqsRaCfOVYnTTysoAgWzlaK3FJZ+w9hnfxzhPElnEdi2/cnfG2hKQLQDbzwWlIpA5AVWwUDhq4li2RHQht70dkAyzNnZOfTkLDrCWxbYuzs4RgzLPiKTheVsw1dmpmcEoHGkL/qhHvr54Z6aEntJCDuhlxQ4ITA9yv9YvjFN3lQcE3jutcmPBoM8OjXxjbJ4jsF0b1C6N6+AGsqXLl4kCvKKBPEgRXxiJU8UOqSLzxDG+mQnm1R3G1kzNTtHRbPHeLrVrust8kCBcr0Maod8+EyPJbQhtg6Z73vimhIvgX+jnKtVvWMrRLLc6/ixy/BQCSfxHBOw0AQIsurt9xrN2xVxP2W1cY1+9YG6keUOFh7dKIZKZHszi8dtdiWB7RLCFMqxOKBcigIrpfFqi+OrCwKdSvDqmXIWv3DHObLO1qv2YVQrSdxphi35IQXXNbaAOk90moAu2NExdOSIuLEf8YYPyocmBFFugg+0Qtzqd5MqiB6D8my7Kvcqm6SoG1i2NuphuqFDNwqOCrmTXepD6vlelL1GUp5qEdHF/pbNfNBzMrd3Tm1Qm4PJZlL5UtdMIUYcqlbu0KDG8+xZ0pvX5fr7ja7rhJdmyQbz604K3fO6N9S0ITohWhdcfOJrBuYd+QUMTrEoLwo3p5EQPChKUNBVZxrosbgpR+18ePYZgr+gWxr9WJ6mRuS6ifQBdO7djc3uFaniOZ85zS6peUSSAUAoEAiERAIgZyGVDIgUq5rSKTETjsWxrlxijW3AERwik82ZpoDkjmP03qoL+ROIBmAWDflNCagPeAMOFAIn5n0exWVnXae7CB62TSo589hGJbA0skXtksr2zmHnHPZPjnsbWztw5XiZJ7NVUjUz82yyiqVZr6msC8PiJcCirkhBRxEdx5/dytVIgmukzwQ5PsVKsiukzwRTL1TJuCrrk2Jl5C8ReJ8pVB9jyKvxhSzHXLYOw9hl/IYnplOV+zA4v4PO3C6+/3X1xCg6yzUiviyohn22SUY0UgnoJWYPbVjnsrp9E99IQ2algHLbKdFtZI8lHMDI7IE1to/oalCbTs9KjyQi8/4tWNCb2CILqlZHFTplocpFiyoPLwIVUsSnNIuwybvknbfDhtvDZsXcfPbjDVKz2Kq22GNcSgzveXSaQ9SKh46EuVA7ewri7HuNbi/DvJcY+e3kPwzg1xTz1+eq+bETe3Jtl8sFRLdDEuEZY21I0UN76tlWa6XEv9RwvLTbOI6BUEtnM9Ovne/ZIgpDJhQB6sXOpl2YsGFH7jxu8lCw38uXKUPsp2k4C3/oAxxe1dQtUjAdUjB3HiApaujalrnlpisXTN1aMeDRMHWyZDWslhbZRwirZSt4DDSpME1s5JTdHiTYVkus92jUE1lrax/Ii6LPncAEQYsXBTMq69NKo5Ob3OnjSl0a0F8sUuqDyYac9fvqPAGb6dtJxXXO2ULTWZ17A48zdjlq8xppj3TsftRUJpV34oR7q2kkO72RF9gui3GBDGwURHOtj+/YKYLm5QLz+imxvyegUIP7qLFdFGDSnsO9BP/DQSEli3COp7w/WDm13tgM8DPC6QiIFIBERCIBYBmXRbRc45OpMROGzAoLtHmJjrGVAMEvm8efkiEM8DZxJC6TRQLQCxA4jtQPlRX96/GtJpIJ8BzuTi7+6VOXfNfpp3+paErnPZ9zgsMDujaai7Mzd7b37u7tzsH8m9+bm783MmDOomFg2Wry5h0I8fPAAA9E4aA0vlnlkMrz3zWSKlBGlgaK99kUSJusyjaVZjyvmXulTZUG3t2FRcheDzJMr/XCIn96rNi3e+b5Rmw7Qs3XUIbSYFov7vi6Rz7Yox8RKMNTvInpNYb7ST7GjBwqlW2f4U6t5jeBfPTEZQqZQodvwfJaFzAlM/jHVKacdQ1FVUdbVtmcPSN5sWKS2kkDFZpmZuTDs/pppFX7tttl9jaeaxM2t8x3WOZYXUzvZ/XUJs6xW+o25Ue/rOo6uT5lSoPAytPcJyFFrXCXObXNs6nmg5K11ssq6PW9cnNKt9w4bQ914T2l1C82uqMoxLLc6/gxTrlNAg58fnL54YFyd/enJ7UlNUTdhnWpqcvyGFi75lmq+g5acY5nKGpXxhQ8K11fAd9bY1Klr9DVwR3S8LUix2L92SGFaHbzyYotnTjNeHObOFc7fYKGMk1pzwARLCBtSPhaD56aOinHFpgXGepJoekdrgK5sm0yKlhRRah/fEiBPZpiYo9xvFDIKqrzAu4a2rDO0iVjWPaGX5EHWZ8rmBbl6QcXlsep09vc6au8lHq44xbcXyxe4BeSBKE2+5jkNqImm2DM5MMVwTaF3HjZiOIPVhGFPce29M+GgJQQSR3byQbm5wDz+MPVWD12a0sryHJMcGhPFd3CAIP/J3lZDQBtiW551QniArH7DozybG7/VDAJ0KJKJtFUnEQCZ943KR0QCmHbfEopURjLWtHVvSoODN821bkgUgsoNJyXXdMtBeBXjhisQOtFfB6+lo/2pIX4lkBsjeTHYsmwbqOSCfATzLM6bhsWDquWYeKH5OU6uYBZp5ILS+YBoes4xPxLaXr+/9LRIiiKYAANc4rAc0KlheeWkwXO3vuwobWB6E/vGswAcXerruc9jg6jIwmZbR6KePH3dTLIGX5R5ZdM+94Z5BP5BG5RrXanFTnyeR//c5Yvuk/Ui1sAJjOteh6KQ4fmiSVmLNnll0uf0mTrIUWsz5rlHCN62VDBuP1Yn+kUg+2y4fES0OMGeQ3PnGCWvbpD1zQOOVTffI3GsM78Ujix5QLMKwLbtKaB7Ipj84F5bUDqjyjcJBA2dqS2gHAtv7EdoA89NJKKRUhGQtiWxbHCPo20FC/bQfF9e1NE09lHmCoq6GMn+AsX9k6ZvtK9xOanQbNayTHt3FiG6hBihnEThFajcrvJ1xEC0/q1nEdHIC35KQZK6zQ+CBN1zA6U/DlTGDyjCaNWt+kze7wbp6Wypbahk1Hr3xwGy4jkAZIlHGyPeeCZHkt4Q2wNQ973lHQurp8aUbunKMa82YXyc5/smzh0je+SHuqcfP7vcyD9tXOdr50Sv4z0xLk0sb6laGXwc7YEKTLnS0CR1ty7c0srke8Uy7dK5rVPsjXB49IA9SLvXypiuGVGGmaxiaPdV4HWlaQ5HtFxCGEKwpbtRy+HUJ0TS3hTYwKb3f/Z4bEwLqRoP66T/Q1PUS6xBVXVM75j3MvzR7XTrMP1874TksPD+/LsMrc8nay0RNoXIWiZVdtKxQlXPwVqZPJyfIOR3XwnIl6NPk833GFRxOdw4qjWDZS50Swuq+mrqOw+gO0W3pLEce3Z4+f4vLnM5SrXQrltucV7DelZDAumNn41u3ME4JDbu2UUJ7OBHOB5X6BJEwccK4Jpmoz5zQpnCstdPr3Lmb4vuP1zlTNThNIlJ2HCJ4VTm6mx3RTgsp6j/QT6Tzp3Zsbu8IbUDiAPU4W+upLDCGmq2p7UnM5xWWrXe0AzLx57MiERCLgFSyPUdnMoLr1yYaGym9PWDzZk96MiEjwwBByaiGQZwm/MjZEaaRLJv79kxudQceRTUiyVNSx6dJc/cJkTqAag6oZoFw6jlT/5hjfCq1b2nmgWIGSOxAMQPE1hd9jOup/ZaTbfqvGtSn2vWl6OlJ1X31HNDMAZLqQSlq+kyH/usG9fEmzfkuYyV2lqp5qJoFH/1mNfMALX8yyjff4LIekklgbhaYjM6JUDA9/WdiMQODAdhtQK+/job3jgh8iwRemXTPTNpecEmlHKrka2c3I0o4B1IoXySR+ukz3WT7pS7Fv50YP1otQPLmEZy5gHxmPlzXSbL/28mJM60ykWW9ZtR8vE70H+eJFzsVZSjDxS4FXnYVypxtIVgLh/RfJpM9MvYUwE54ZNACSyTj/KnfU0KWLaENCKzvR2gFTPWdk81yj0KlX6n6t+Bdogm5LEYyl0TWLY4B9BF2nI6T2YYLh/6zgxTLM3ZpZ8dbJ8MrR/YpHKhe+qFWSnAbJayd/st0XBs9ACY4StBmG65OdHACXpcQy1opmeuAiINhsohBRRRClYBQx0wYT5EslzTLAzMbDMM15Ljp20fPbqlXe1CGCMFCOfrV5fTXJSS7JbQCpvZ5z/hbEtonNENfvHzWRT5SiPgPmqYWgK1+xnEE78zT5z+1U8PxitxHT+/2suP0ixNXNzXNdJ8ebmQnJ6id7dvB8dUuoQZEEV18vx7hwX5JMEIZD5WHKJd62Y5iwWyV4dpwn8JNvQx58uIBXBfImSsg2c9hzbFvS8gKJiX3uyfePRM62IALY+vam/GRnZTD06sivLxYaoND6F/XTXi3kkNbSME8c5vYBhFau/s4h+bWpX3cBNkMTDLdK5mGdHFCCLoM2Sykmx+kXkSgld8pFvrZtkr7Ok081ypf6O6XB2C0R2duMhRLHYZVhPJq59U70sfP7zhuTrJn80fNR0bMCe9I6MSEcEUwtWNn409tYRgraVd+qEC5tVFCeziRA8KYAWFMNy+QaSmfvSEQz3RKZ3skM93qReTmg/lrd0z2NaZifmBMfbGXH+as3C+I7mZHdNBCigZc+gl0vmXH5j4I6TTopK1kpzWtFWazSmvrkeLGPlr35XZaXulSQ91LPA6IBEAsAkIBEIuAVsPp6KhOTz8WGnIsPKw6Lxff1iYaGwVK2T08ISUy5sD/9X/HH7uUmN+SXQ6JSDgReehEZStKNv3xQ/Nvlc3Pqy69vtG5YgVKsFmCcpztNMTXKI41qtP6zQ0TCzTtI/0ioGkenuvU+xVJ3QrkHoVKjyKle6HSLV8aV6Xooa320VcP1yrd8qTuhUrPIqVHkdK9QOGeL42vUfbRr320h9TzYIh7c6yx/xF+FNisQKsBGjXQqIFW8yfjDEOjBmYTkImlzR1xWTjXTIZnBnUv/OMiEc6aHREu/Pd5wv5kUiFcl9arbBi3dEzaeqmODpINK1ioxBj/6zzh8BV+88RUXDm3YdwittzopthbCNawYlbRkO5SpxwrWEBy55DcuX9cJKZDVMUI3YFk0ntb9MrcU2Ae6dSgEjFRaN1RQi04nWQeSKc/+CFwiR1Q/pISgrMvKOyY2jH/HupRJPeCyNIH55xqJ0caF0g99IRWSojz4Zsmsq9iBj4qT2qh+TGMlcu3dEJHR+cbEgrk2mrkC70QceCrh1XhqgiGLU+3MrR4S7R8R0aauqBZ6RMv1N58aNOu9k/dGEMaw/cuoUq0dxfp67nrisV1DdvQsXFvnq1vrRp1QwsTnz7/qYeR0EmPvvNwlaovV82hr25oWhn+MNHRQfFXcPHRIclR23UaVnUCIT+KUh1n28sRyoQJ4znjKhpvOju1NsGwZ9Nt6fKlFsdN0swm1X6TyJ7Lx5gj356O20FCNSMBDbiwKqx3H/0Hlr5VZkOSVZU1Y54NEwdbSWXzX7cAACAASURBVGEtpJCmyYC12/aVTcO4MptjaYYLviNpC5VziH5+vG5pFCH9Dq9N1S6hBY6WCW1SDz8Aq/5RvQjjT9c51ulUaw5MGTasjjWsDvNnK4bUoVRbqnSpiWJP0l8bVK/2Tli/w5rifouE2qlhvdxI539lNy+Qa6tnW6s7uH6j6nOtbA+erYGoy5jQpSxsyHCaS51cf6go1lm5XxjTw4nsoIcWD7j0ExifSkKyGdDPupFRO0E/nzjcNT4uuUEQX4fRHM1wXltlLz6ndLq6+ukIGvB5QCIGEsn65KQVj29MTu7KyeZ0tBedOQNWV4DDMdndRe1ov8dkNKbnn4g80j0sViyBrjGl8fqnSS/0YYOAAyhngWoOKGa2cf4omwaKGcA2Ps6BW4MvS93zpZ6FCq9ilVeR0r1A7lkgOVqnap1cvNhjdC+Qe5e88TX3LVV7FSlDLwsDSqSeRSrf0rf3uhcqQ8vl/Yzr8pmPiVk6DzATZu2VemAxAqUCyGV/OWRSYJ16MgwrTm3al8nySKfsZazfl0QqQegTO+X7kkge6ZTwYta+JJJPFu14nfDbOuHxOuHXNYLYMq5bGsU7i+aXQw/KZ35bJzxUyfumVvhtndA/hx5cwHRPp8RXcAPyGG6pZNdUsksqObzo/QF4pFN9smkBeQzPDOqvRJjJCM6n81S2/1MkVIX16yAd1s+RZLZhhR0lsyHEU1ClA6WaxqpmsG3kcOfDqh308Cayj3oONaZI6WAEtzMD4KJjzgsDP0soul8UsbgpZ9nK+8Shr2VMSECqY2CKAPJUsnCuUr7UxpzOhqn9mDM5aw+Mjg0S0hD6toSgO0qoGhtQifGuHQ0Y5iWPiLJgrBN1ON8mQlAnNWZYcK6DGtlCDoILfhjgfgXjfwMXfjssOaFbGtUvjemvjuqvjk6vsU0r48blMdPq+OKmhGhMZNgKqNaMIVUETBnItOfoVqAYfdywPsJ2E79wm0e0ncaaY/YooQqU15ioQGpF8Iw9KH5yBymuZtTzzbQ9oSjhObT4QicjalDwXQvVf1yZPig81skObmcd7OKGjKrO8+wNCNkxiCB0UBIHlUT1igIx6u+0ywi4ItqZO25QGTRmOG5ZG9Ms92P0CcO6iGF9pGkNTZ1OwhjfvUV7rxKqfFNC/aIouPSIbglN1Gco52E4zaX5m6KZde78hkS1MEQ3l3bzA501f1cJwdgbBT0C1IgEx57nmp4IrS84hkeTspsI5mwbWtpcC8fklpvKK39CDAIuGyjkwDqFq6ikNTXdoJAvnzkDph1Ar1tns8D83ByL1VdaPD+GbUxK7Sxr1WtvKZeAaG77boU/Qj92oJwF8hmAV9zrpV8rx84WD08XD0/X4uaHeDd55qdMw6PTHXr3fKlX8TsiKVF7FikDigR+xTLfEo3fO5oJKFUcLJG9JafX8ShQxlXJyar7ytkPjlw5C7ooVxtKm9f6u4FWA8RiIBQCkQhIJH8yIhEQCoFQCNTqR+M4SVtz2+DEwTyaRybDI43skU7ZHc90yheXiPsSJz3TKR7pFNcUkkcaxS2VvD9p8kAy6bOLxC8TJ11SSB7pFPc0slsq2T2N/N/n8f95Fv9f5/CfXSR+dpHwP+cJB5JJLikk1xSSWyrZWdM1hbRTi+5pFN9sWkAe3SuD4p62Y2Be2ZzjVWzH7MLrD0J9YgmxLVsCG+Bb34/AChifVEII5pLQusU2AMj7JFQ7Glg7erBqxLsOF9AwHtA4EdSED2omBDcTgxsJB19P29NOD0WKTvZzD3exwns4kd3ssF7e6xKKgUnixrWXoNKo9+aOG9bE4IzfUG3JKF3UiPEIyhA1YjpEcSS+9ZxQFy2qEnphUnZLYAWM90joYO1oUM2o/5URr6pRrzqcbzMhtIUY1jIZ3Ej0b6OEtlMjWiiB7fTQdnpIOyPYmX6mlxcJ4Uf2CSJ7BaFQcSRUHA2TxkBl4QhlHEIZO6SKQmkShjVxVGvqqOErrD4eazyEMkSijdFYc/wbNyZAT9E0twVWQJTc73rPmVBgzUhA7ejBmlH/6lGv+vGDzfjQt3LHNZP8m8kH22nh7bSQLmZkOz2oix3ay436ObdQZC8/tE8Y8VruuHiYLHpAFvZWAlO0Ph6ti8HoE0aMR0ZMh1CGSKw5/n03JpwYF67wp3bsbLypLTRjJa3qhytotw5aGIQXCRXHOIEIQkjGHNt1mn2NoVyAWa+RzCsTwulW8yph7qZwVH0WIgh11hwQxfRyIzsZoSVQl34Cg2fZsbkPQjYDYJzNCriaptxkGx4JrS/FdiB2AKH1Jc/0hKK8heYudIyqm5qxI8X15d98lxoccPnbb44EHDxy8GDG8W++Dg29cOSwFYtxMBlNuTnVaWmtOdn1Bfn1GenNKUnpYRE9GWU8uk1g2xLNA/GHf50/7LvvAMpZMCK+ndpvjqyUeeWLvQqknvlSz3ypd4HEr0j8Q6v2VJvap1DmU6ze6RLvwRL5R18e9i1ReRZICocsIusz1RyQfoh6nenMm5EU4TBypbsLyGWAxwUcNmCzAIv5Z8JhAw4HyKSPRrDcxgadTmc0Gi9DGH55bPc0insqySON/BF4ppO/uEgILWB4pJE/u0D4n/N4l+RJzzSyWwrpmxpBarfiZJM4ooiZ2ClL7JRFFDFdUz6gIfc0sk8mNTCPvksFv3xecb/g7t27/wdJaM8JTCPb6UGdjLBdEpj2icJ3SWCK0cWjtDEjhiPOBKZYYzzaFP3WjQl7kNDvlMDUmZYtfpcEphXQU9S3JLTyF8+ivWcJYdw66GF9/EioJOZnYjt5vpOGjMVNmWWVaFrBGZZH+fYG2VyfagE2oj4DlcRAxTHOf7clBPvUEuJuVqOMIvPjd3OwimxbPPNTmurOCH+5B6+vbhtvyayQFpY2fnUUnZfzTC4FOl1HaiqloZ7Z28tsabmjUlrHcdS21q2ZaQEajWtuQl4pXxkcVHXCuXgVz/RYtADEHzVb9atIp4F8GrQQr4aWSd3ypF5FSt8Sle9revApVnkUKLwLJSGl4oOlTtO8NxGXatddv5LEy7dEGVwiONGq6aKuSu1bsj2/WfU8QEsfoiiKtbU1Dnxwpb0NiEWANKnKy+GXlQgu/xmUlwpyszZ7e4BM+nAYyWtsMBqNN27cuHnzpk5vKOplBhWyfLOonmkkjzSSR+rk3vFMI312fuJ4Dd+0cAvJme2ctI6LF840iz+/iHdPnaSpl/OhqnHxAk680Eu29ZCtHcSp/zqD+6Am3FMm/bKpftlU95T37U2jBOTSSDz1szcTUnxqCZm3BFbAn3o/AitgqD6phBhLQusWW//bJfSHrCfklJD0lmAKMDR/pIR+PYt2BfQUVXVbMAWI4n8eCQlW+ZYdOxvPsoWmL6dX/ViFce+kh/Xxo2CSWJgkFiaJ6xOGImRH7WsM5TyUoE+b3xBPr7PUC3DbdZpjjSmabh2UxkMlMTBJLFQcA+FFdrNCS50SMu/Y3AchmwYwzmY1yiieeirZ4S93kR3wLc8YmnsTomtQirUPKfjx63MVCUfWurpeshnwgnxKQz2w28HU1EBB/gqd1pWbu8nndefl/qRWgfU1YLM+l4quIxDajgE+VsDT3BfOA/GHT1jtfg4kc2zVjc/7F0m8Cl/lxX/P6l9+JcqDJYqDJYqdKuy8fY8oD5bIPQtk3gWinEGr0PpMtrdBTD0PMPLHEzzjs2fPlpaWGEPw1bZWQCEzLpcqlUrun1EkEsl4d/ed1uZHGAyvocFkMt26dev58+fPnj27detWFZzvn886mEMLzKUF5tG9M8juKUT31D2xPxEfU8oaoNu7Jq2nmoR5UFUHccovi3wgieCaQpyUL5UN60YE8/00+zBndoBurx8z/eeZsT0e/DUmA/NonumktwJzSyX65nHT2tkLC4u/IiHnQ3AfmpZR/LeE9iqhi39BCXUzIiuhJ6mqWz9LqE20min+y68ntCcJVf9YhXXvZIT1CaJg0liYNHZAHIlVn1jclOF1ifJ5CMNSMnWNZLtONSxjmVNlfEd9t8APJo1xVoZKYiH8qG52WOmg6+8hIdHU090S/jqAyAb4U8+ZugcM/cNzOQ3fnspur0eeCgpriI/9aQTzlEFD1lQfDwlJOXKkpaAgwc+v4OSJoaqqVRoNWMzAbAIO+0uV/CYWY2zr5Q/RObJ1wSwQzf3mXOB2ILIDxQzopa0eLBJ5F8l/4xqVnwqfYrlHnihncEpke7HLB/sK1TxAy7cfVn3w4MHS0hJ3eHippFjZ2HDv3r0bN26s/7Hlxo0bd+7c0ZDJS1kZotZWk8m0ubn5KtOaZW49rJDhnkZ2SyF4pBK90iY9UonuKQT3FOJecEnChxXQIovojThTH9WG4s4UwFRuKUTPtEn3FMKRCvapRsEP9fxL7ZJ8mIooWwrJo7ok4fd+fCduyQS/LLJ/NsUt+fVfJHhk0CKKaFSu/MGDB28tKfQpJVQwaGCZt/hWwJt6P3wroH1SCQ0xlgTWLZYe9E5MkCyJ6luVWOWphr+ghAxOCUVWQs8Tpbf4U4Cued6Fw1Ltl9SblRjFyQZcyJ8loWHV0S5GRMXAGar6Hn8KECUP2sc6OAvJotViGP9Y7WjQX0pCGMMhpOpoJy2yYuDkhOga17JjZ+NatlD05fTqH6tH3LsYYf2CqEFZ7KAsFiqNwqi/M66M9goDWNYyoiG1W+ALEQX2igKhkkic7hxcFu+sOSiLhUlj+/hRPeywy4OufQQG17xjcx+EdBpA9yChN0b8BdA0wKjsxI9Lb5T3kJqu9OGLqpWFRYSURHFzI7+tldPUzG1t5bS20poaN5kMoNMCtWo7/Y/dBvTau/hxWydE1D/B5s3zZ4BoDoj21vR7kU4Dhv6n440KjzyJf7H8r4NPkdy3UNBNvaqY/TAJbW1t3b9/f2lpiTswYBzBbm1tbW1tvfxji/NKyYJGw22of8tAAIAektkvl+WWjHdPwbslb+OesifckvEuSRN1IwYIxZrSJQnNp7om47P75P0028V2cfxlRivejGBP8wzXmJoVivIqUbrYTjD7Zky6JE3ssYlXDXmmEgJzqa9vcU8j++dQ21Hs1dXVx48fgzfL+yTk+OCcjGLbh0nIvVDlW6r5LXiVaIN/kdBLyAQbJT0hvl6IlPzQgAupQh+swQbUjATWvRo6x4MaJ4KdS7E1E0NaJkNbyaFtlNA2alg7LayDHt7JCO9kRnSxIrrZET3cyF5uJIQX1SeI6hdG9wudHoqFvRo6naO8+pclhTA650B/GGs4jDUexpoOORkxHxoxJwxr4hGKw0344Gp4Fklx1ymhbhwdqzglvlaIlHzXgAupxhysHQmsG3092pBmQkjLZEgrKbSV/HOojJ89xI5wBvmzL51X3WNh0m1TOgf3YU0CSnsI/So842Gs8dDP4SWgtAkIxeEWUnD1YApd84I3BSZlD9ox40jxt1R7Ui/zUA024ArKvwp9sBoT8Mrr9bjAhvGghvHgxongJkJwMzGkeTKkhRTaSglro4a30cLb6eEdTq+zfvY6LwrCi+zjR/cLogeE0QPiGKgkBib9xesIZSxSFT+sThjWJqC0CSjdIbT+ENpwCG1IQBsT0MYEjCkBbYgbUsYOShNqR/2qYcVE6R2uZWtXCa1k1JyoHvHoYoYPCKPhsjgnMGl0nyh4XHdhRP0jVBo5KItFKA5jVN8NSmOgkshX1eCyuEFpXJ8guocdfnnQ7XeRkOWpeOeEv79gByIbkE4DsQOw9Y9o6jto7lL7iLK5GTtR1uyoqQcYFJAIgV4HNBqg0QCZDEglQCF/LeeCEdiswGJ6SCPP9ECk3Wg2zcqzAeE8EH34911kA/Jp0ENZ8i0Q+BRK/Yr+Wrjnis53aHimJ5Jf+2xVcwAt+yVtz8uXL+/du3f9+vWbN28+efIE/Bnl5cuXt2/fvnbt2ubm5uvTVs+fPz/fJvTMpLslT3wcX17AHS5nQml2ONMxs3q3a3IKznSkdUv/6/RIUC45pUsyQLPFltL/7TtUFkTWhDN+V8P1SiO4Jn1MWwE5FM9UgmvyhGvyhEcGzS+HVgNjzMzM3Lt37911Lv5QCfGmAF11N61b4Vmk8CnV/hYJeRZrYirFKNZV/tQWy/BsiDxdO3wKozzWzzlaMxJYgfSrRPpfGT5YhTq4PYBiA7aH+LEg56lGIz64kRDc5BxAyaGtlNBWyusDvXOh1YgeToTzL/pXThoQRUPF0VBJzKAsBi6LgctjhxRxCGUcQhWHVMUj1fFITTxSG+dkWBeH1MRCpdG9vKhSqGcrGkZRPuJNAYbuad+4vh51Eqv6po9zZDvm4YNVqLejbRgPasQHN+KDm4jBzaTtUJ1xdjLCu5jh2+LkREJ420E6I4RJYgalMXDZz+Ep45CqeKQmHqnZjg2hiYXJovv40Zfh7h1jvQztS94UoKoe9I6qKqEXepgR7eSoKyj/siHfcoRfBdKvctjvCsq/CuNfjfWvwR6sGTlYOxpQhwuowwXWTwQ24AMbCUFNxOCmyeBmUnALOaSVEtJGDWmnhbbTwzqZYV3M8C5WeDc7vIcT0cuNgPAi+/jOtZqioOIomCR6UBo9KIuBy2OGFDFDyliEKhahjkWoYxGamG3U0QOSyFZKQEGPf+cIhax4yPs1CaXXnKgZ9ehmhQ+IouHyOLg8Di6Ph0oje0UHxbNtlmsTHXy3bqHPmO6scnGgg+8OEQdCpZFD8nhn5UFZXL8wupcTXgb/8yRkBRIHUC0CkXX7XgCxA/AtL6jK21ju1R68saOf0Z9fJywsXe/qADQyUCqAWAREQiASbmfmlsuAyQgMeqDXAZsVWC2Pueyl/gFl55CcbuYbnwreq6JpIJrd4ftuB6KpZ0Vwk1eewLdQ7PcXwztfHF0hxIk2pL82lL0lIacDnjx58uTJk3dXof7DytOnTx8/fvzixYvXN97YvPNDHdc9neyaNP7RuCdPeKXhG3GGvAH5/ku4fKiiDW/6X98NH61gWpduD9Cs9aP6lC5xO95EVV5lqK8eSMQdSMR9REP+2WTPNKJbGsk3j32kjNKLZZrNZufFrXff7yeVEMzAMm3xpwDPsiMM9YNmjDb0stiz+OMl5F2q9ShUJrdLCMLrPPMW2/B8jHujrn+0GBJYP+53Be17edD7Mty7bMinHOFTjvSpGPatRPleQftVYfyqMf7VI/41owdrxw7W4Q7WjwfUTwQ0EAIbJwObiEFNpKAWclArObiNGtxGC+lghHQyQjuZoV2s0G52WA8nrJcbDuGFQwQRfcKIflHEgDgSKomESaJgsqhBedSgPBquiIYro+HKKLhqm0FFZBcnqBzlUgo5ASdZ6JrHPAtg6p8O0xavdMMuQ0MaJ/yr0H5lcJ8yuE85wqcC+Vq0WP+aEf/asYO1zlDxAY2EwCZiYBMpqJkU1EoObqOFtNFDOhghnczQbmeQ3PDetyOMgkmjBmVR8O3wfgmsmxdYjnQt6jo7TLex9C94FsDUPUEzrtZCyHltXxVDXQv69uf17C/o3V8IOVDUf6B4wKUE6lIKcykddL086Fo25FaOcCtHulcMu1ei3CvRHlcwnlVYz+oR5yK2XnXjXnUT3vV4nwaCTyPRp2nSt5nk20L2a6X4tVL922j+7Qz/DubBTtbBLvbBbk5ADyewhxvYyw/s5QdBBEEQYRBEGAgRBUJEgX3iwB7BwQaCZ2Gfz5W+eiRlkaF9vEtP45q3ULSV9JoTNWNvSAgqiyAYk8f159CqY8u3VeLZFtl8t+UacemWXDLXoVkamjSlQaXh2xKSx/ULo3u54WVDbn14Bte0W9/eO1IHgLL3KiGxHXAMj2EEg3EN8MwvaKq7LN1PDO0DkQ3wLc8nhKsVHYR+sqNzSIhoGKLkFE9kpL7E44BYBJQKMxy+PDEOZmfsI9gHfB6YcQC7Feh1YMoCVpeBQUcryDf2wA00E9/wmD8LRDPbjQodQCC/yaNZhTPvCUniAELz4+QulUcuz7dQ9FfDK18UWsJDcVY/9Ezor1yWVm8er2K7p026JuE+DpdE3P7EsWK4Mr1X8h+n0J+dH8ntlzWM6v/9JHrfxVGCdOFYFRPLn2FrV6ox2nKkunnc8P/+OPxRDY35ZU0G5lHjikmF3VQynTM7O7uxsfFeA4F3JSSaB2LHBydkFNkAWb5RADMwTVu8KcC17AhD/wTDmE1v5QaWSr1KNJ4l2g/Fq0TrU6L66gq3E6umKO5wzVsc8xZZeW9gwlbS0pHZcCijyT2l7vOU+s9S6z9Pa/g8rfHz9KYvMpq/yGz5MrP1y6zWfVnt+3La9+d27M/t3J/bdSCv50B+r0s+xKUA4lLY51LU71I04Fo84FoCcysddLsMd78Mdy8bci9HeFQMe1SiPCtRnlcwnlUYr2qsV/WId82od+2YTy3Opw7nUzfuWz/hW4/3rcf71BN86gk+DUTvGpxXCTSgpCu5HcUf499gGV/wLIBteoEX3+zBGIua2tLrIjOa3FLqP3cGnN7ojPaLzNYvs9r25bTvy34n1MI+l6I+l+IB12KoW+nPcZYj3MuRHhXDzgi9qrBe1SNe1aPeNaM+tWM+dTif+u3wnLF514x5l8LCijuyO1ByvOg2x/SSZwEc08tJ+R0owV7TTc6pzU+58nVSeeylsqik8pikypjkypjkKzEpVTEpVbGpVbGpVbFp1bFpNXHptXHptXHpdfHp9fGZ9fGZDfGZjQlZjQlZTQlZTQnZzQk5zYdyWw7lth7Oaz2U13Y4r+1wXvvh/I4jBZ1HCjqPFnYdLeo+UtR9tKjnaHHP0eLeo8W9X5VAnBwt6dumqOdYYXtidS+qf9xCkNxmm17s0tM45q1h2kpGzYnaMY8edjhMHD2kiBtSxA3IwujWQvXSIFwebVsjKxYhHEelcKbhxgMb1ZIrme9gOyoGpKHOynB53IAoGsILL0O49REYHNNufXvviB1ggL1ZhTIKLU93SfjrfO5buwLq+2juvuGDRCFFcf2rH9NDoo/HHD3bg5VNbQKSbPP784WaFVDZRTyT2xR15Kybe2D/hbSlxkbAog/mZENyclANDTnHjx8NChquqSY1NTnzwbBh0IbcnJNHDo801kHPnRFU1ItRbI7sBn8WCGcBdw7we8ak+aUcw0/CNwcE2QyQToMRwfrpZol3Hs+nQOi7N/wKhJ65fK88gd9rW7zyBJ65fOcW9xy+b/5ej7YLnnmCw5V8DHdZZNvafeBS/vNI6Pr6ze9rWO5pJNfEsY/ji3MjX1cys3ql/30a/dlZ7DdVzD7KVEAmYd+F0f0XR7snLX2UKSjdWjyoQLDsCJY9o0f836cxH9GQS+KYXw61GkpnsAU6nW5xcfHu3bs7GQj88RLimF5Oym4P4HQF7YzjV1iHKziHK9gfxJFK9qUGegtcOMq5ytA/dR6WbXwxIb7Zh5uq6aEVN0EK6lu2adimsKGlsKF1m8bWwsbWosbWwsbWwqbWojdoK2puK2puK35FyzYlTlp/obS1raS1vbS1vbTtfbS3l7a3X25vK21rr+xCtSOVaMZVuvbRLz7WPRnjrfaOmq50Eooau/NfC7jwVcCNr0X7TpzFb8ZZ8k6QO0bY3l7a3lba1lnVg+vBmka41+i6x1zLljMwlvE5UXoLTpruRGlb4PKGAV59P7u+n/Ob6OPU9736kV3fz35zy88VdoPdOCDqQGoHiY4J8QbT8Gz3gf4XCeE8ejgRMEnMkDJuSBmHUMb3y4L5M7XqJSjZnG5aHaNO5fZLA28/WhrTn+oSecDkEQhlvLPykCJuQBwN4YeX/0kSEjuAyH7/TOqVpLzmk0llttugY1h8Mbs+7wq0pntynD91uRETHvcDiq499G1SWfMIlGCcVNzuGlO3VMOw+ZXFcXGmumrmlQphexu3pYXR0MDvaAdKxU8CfpCra/r33+WdPJFx7myAhzu/r/cRk27t6BUO4FnCZTJ/1dY3uAqH0sZV/OlfvubyGTAmvZsMMUSWCYOKuAcLeN55fJ+94ZnDi62UhpeJvXK3t3jl8sMvi2OvSN2yuN55/CO1cmc13/y9HvNdvPP4njncpDYxRbYmmHr5LyOhe/fuJbVxPdLJLpdGPw7XS6MHLo5+fg7rcmnUNXH79b4LI66JYy6XRv9xBvPl+ZHPzmI+O4v5/BzWiXPXB5M0HpBFJDIl6+vrGxsbjx492n298z9aQlwLYBmeEyQbgwRTO0LQNMBs7Kd/CIyWQQ5kVDnCXqJqfuKYt14dlml4RpBsougLg5PTULxjdwZ+wf4eJj6Y/p0ZmHAMkefG+Gu0NwPmWLYY+id48cYwbR5G/KhQf1t4UPw0krqAF28wdE9eD4xrAWzTC6r6IV6yiROsjQtvjAtvjgtv/PkI1vGSDYr6IWvXc6A3JFR7om7cs5cbMSiNQajincCVMQhV/PIdlXS+XbbQqV1GjulOWNdI0vl2gikRrTk2pIx11hxSxkMlMX2CiHKk+58iIfkcqOrEn04pD4k+Hhr7XX0fvnGA1I2Rnk6tYOru9OFkP1wo8gqI6cfxvj9fABlTjbDmIKPKDpRkUn3nyPmif/z7Z8x6yEByat3337VfPN+ZkbFGJAC16ic2O97fv+Tc2ZIzZ0qSEmP8/ETwQXD1KjAb71NJ05ABUVn9XQbjuVrBax1kTm2fT8hnAJxzI/Ky4EA60z2L65vH883jeefyfHYnj3cgnf1FKuv/OU2pGrUl9uj+v/P0L1JYrhmcfWns1D59I97hnsUNKhIM85d883ghxSLvnF875q4cLOAcrRKMCdfFu362/1wSevLkCQQv982mH7g48tEe+mNwSyEcvkzVmR0vXrzYXT/O8oklxDBtcacAx/IrMI0vyKr748IbWM4KmrW0dzCsq6O860TZHYb+Kcf89mHZpi267ilV/Yii/ukvBU3zhGl88W7A2zFrn1L+jJip6kc07VO2aWun2c7ZxQAAIABJREFU/ya2aYv1F2OXaN8O3ryFpK1k1J6oH/eEvCkhpCphSBnTK/Fl2UuePH8wt8GTL3St3tFY14iOG3TRXOOALHhbQqp4qCSmXxBRjnSHEBhs056a/lVEDtDP3qzeg4SENiCfe3Ippz4s/ge/4PjaXiqSIv/uXEFNN0k2+9J+F5xJrfyfLzw4xvXD36dcyqkPCD96+PuUyjbkOG8+7tiFoNjv4Yy5jJKezK9O9331lSAv68EEDijkj9msOF/f0jNnLp8+XXrpUrSPj7CvD9itwKAHViswG19IxcBqBXarqbWLylsWTgPZDBgT3468zHdJZ3nncL1zON453J9f7Ew2xz2TXYa29NLmGibs2tnbHMN6I97eS5tLhej2p7HKMVP14/YSpPlil3qIswDnLEDoc/9Iov/KYXcmsIDjn89xzWDmw80S+7/OdNzz589VektCCdktmeByEetyceQvi0caObGVvbm5uRcDgU8vIcMW1wI45j3B0AOa9iVN84K6N2iaFzTtS7pui2EADANg/s1v5tc/RuNfjNdiYxkAd+fexTZtIakrGbUn6ic8IbwIuCwGqY5/xYA8iGErUCz2GK+N0G25dZx/Uyx2443nYIowjPYYQhXnrIZQxcOkMf3CiIphdwiBwTbutW/vjsgO+ll7kpDABvRr4HxmjbtvuKt3aHkrLrdywDco/tipLJ7lHpJqPfx98vEzua1D7JNJl3XXQG4ldACvd9wHjQOMPpz6TFqlwLZV2jzyXXL518cTjx09hUzPW+/suD+C/jE0tDs7uykpqbuw8KvAAEkfBNht24uL63XAbAZmE5iZuYlBUYdYvBkgtL3IGjAcSKN7ZrO9PgSPLNbRGsnhanE5xry88ZNt5V56n+6rWkl4KT/hipiqvsY1rrN0a+PSZbl9Y4A510Ga/kci9YOaeIV3Dts3l+2VzXbNYMZVCCZkdyS7jmb/XBK6detW9yjfL4ty4OKoywWMywXsa7z14+/HrzR04ALGJ5PSjZM8fvz4IyUknAMi+wdnBRZaAUm2UQAzMIy/LiGuGXBMgGqYpTrgvKVO0UqfcK9AhCuQX14sv4+VvyrvjfavEPMugf1VEa30sRfaiBYoRbfknCLbi4SG1fFOBpVhvJnKu4+XJ4ynONNl1nUi0164dFsqXWiHKkIQ6thXNZG/n4TYm1Uoo8D8VLhz1nkn+mvgUnZ9YMRX/qGH04o7a3vRh75NSiloHZgQ1PZOtg3xL2TVTd0C357N50+B9JKujmGxfAEolwBJtvnjxWLVEhgkmstbxrKvDCaVdFe0jndXQSn5ZeSMjMdUEr+xwYHFPpXJptHoNQoZaNTbi4trNUCnBWbzc4lQ3ARhGp7SNA8TKvluGXSvbOYH4Z3N/DKFuj+V1kywtZMcXZTp6lHLf14kuabTP0+inu9UVmDMSN58CdLQQrD/0CTrJDs+S6J8aCu/kMX0ymZ6ZDG9smjd5EWpY7fPVjELUNJ/DgltbW09ePDA4XCU9FJ9syguSeP7z6NfceAC+sAFzO/PrzaEdk0ajy0mqXSWXe5EeKt8Sgnlwwx04xbHAtjmHeFYAFP/ckQ2xl07vwpKHoLWh6DtIWj9m7/ZOz+BtrugYfplFmnuFEo4ytS/eLfXsUxbCOpKRt2JBrxXHz9ySB6L0iSgNAkIVRTRfOHh05tkS0qvxF220PbgyQ3RXL1wrpZhy0WqY5zVnAyrEwZlsQOiyEqUB4TAYBl369t7R7hnCQntQDrz+GJ2fUDY127eYWUtoz1YYljcD2fTqtqRHMUCIIjWT6dUCG0PTiZels6A9OLOjmGxYgGIpwFetPbjpRL9dXDo26SSBnQnivHN6ZzsSmjfpPXHpLJvv08pO3yMk1MwkpKs6e9jNjaWnz51l80GMhmQSbdVpFEDk2G6vZNKsRKU96Ivc1zSqR+6orNbBs0nh9E2aQsuZBcjDKdaZN83SqpHza5p1H9cIiX1KAuH9KXDhtNtsm6Ko3rUDGXO/teFyd+yhrRnFt0jk+6RSW0ac4imngv/JSQEfj4ZMhqN9XBmTBHJL5vmmUb0SCX6puP9MvAuF9D7z6MO/G7sP49yvYjxTR/frc4FjE8mqQ3DeyvXw+7lj5YQy7iF4BLRhjDN05TZrYolULMIqv/mbz6UBVA19bxIePs0RBA8zBFwp94voUynhASRQ4pYtDYBrU1AaeIx2sNMex5KE49UR5MsiUTzeagiAK4MQagi0dpDzmpOhjUJcFnsgDjyCvrPkZBiAdR0U/Kr4VzTjW9O55S1jK4BkJjbBCMYjTeAZBqMsJdOJZWVNmIq2nDT98GFzLoWOE+5CMTTYFxw7euTmcZ1EHn49OmUitzKtqCobyrb8Y0D9Ir2iR6cJiThZNTBqAu+foH/+FxUVqrv6XrG5QChEIiEQCIGMimQy4DB8BA/xu4Zx0k3TtQLXNP3tIDm67imUSoxxqRuRe2YWWa9wdCuliD1OVBN9oDGJZVcgTaOihY7SbbTLdJ6nCUHqknuVrqmUTx2WxiN6pVJ261CBtUjg+qeTmkatQktz/81zoSc5enTpxsbG3a7nUjl1EGp6c2ks7WkkDyS6yXsgfPDvyv7zyE9k0b9MvD7z+1Q4TzKK4OS3ESxTE399NNPe5yLA3+whDhmQJDe6qCewtliKUvfM9dOs9fPsNZO/83ffCjs9TPUqz9O2I/BlSE1qAtUzbO3Ot4rCTUSvPoFkYifJeQEoY5Aa+Mx2kNITTRSHfWWe16B0iTAZbHQP09CYgdognGoyruqJZBW3AkjmrSroGNYNMZdduZ4pKru1kNorUN8rum5YgF0oaRY9oJkBojsgKa+3zjAlM+D2l4KgmydEC40wzjwSQvX9MDZ6Ah7oQOrKOtjFtahBgrqdZU1GwP9gM0CPB4QCIBEDFRKoFK8II7Ly2rx3KUqhNovm+aaur1s2l7wSKd4ZVAD8xhuqeSQQuYga7Z21BxcwHRNJftk0b6pETRPWLwzaZ2Ttow+VWQJ2yWV3EdzfN8g2p9E2uWYvtm0gDyGVyZ1p0jc0sgHc6ideJvQ/OxfSUIAgOfPn9++fXtpaclms8nlcqFQkNVO9Uwj7j+LPHDu19l/Frl/D9XeZd+ZIZ+0cf9syr6zw86D/MJZ5IELaO9MyqUGskyh3ikzwk7lE0uIZthimwHL9H7YJjBEVzUSwhHaKLQ+fsT8S461v/mbD2LEdAhrPIRQx/aLQ4v6QjDcZY7ljc7GNG4NkZcz6042Erz7BVEIZZwzv98HgdIegsvjoJKoKxjPXjyTadixb38QAhvoY+1JQvwpIJ8HIgfgTwH1MpDOAp4FyOeBeBo411IS2oFiAcjngdAOeBYge2cXfwooFoF0FoingWIBSGe373dwVuBPbdE1D3GC1W6ipbqdQE7NBXgc4POBgAdo5DvQfv2Vqom8cnQfiSC5MUy1nW9geWdS3VPJr9jLcmduKST3NPJ/n8MndsqO1wg+u0BwTyO7p5Jdkkn/uEDYl0gMKWD0UuxQxjSMOT0mWggrZLok/8pyar5Z1MA8hlcG5b0xHEgmfVXJxrAXeOZ/qTMhZ9na2nry5Mndu3c3NjauX7/OFyvji4muSWP7zg7tP4fYjbMI14uoA+eR+87uWu197DuLCMoaP1lD8U0bc0+ZcLk06rw+5JI46plKCMzCF3bRpDLZ+vr6uylKdy9vS0gwB4T2D16kS2AFk78mIbYJMA1ggMSvGw8elEcOq+OxhkMjxsN/8zcfB8ZwCC6P7eWFFPcH9+N13B0k1ET0HhBGIT9KQmjtoSF5HEwSVYXxhHxqCV1BGfnmp7ssAvnz6nxAPAPkC28gmd3OCLz9BbQD6dx7flEyC8TTgDcFRNNAMvPGrzglJJ0DvCnANT0nax8NY6SLdfVgEv8I1m+rqqLmFHcXNNQ3YpoxChRvha59SJTeHMCpUppZwQVMv2yqbybVJ4PikUraI55ppP2JRJckomfam7vSSC7Jk19eIuxLJO5PJH5+Ae+WMumR9itHc08heaWTA3Lpnulk9zd3uSZPemVSivskZNk61/Jyl89WPguG/wkl9KpsbW09fvx4fX19mCgIysK5XMLuOzO0/+yO7DsD90oe8UnFfXkavku19+KWhDtTS6YxmBA07Vwd6VgZMTxnPDp/4puyycxWMgJHNxqNa2trv/po6rvlD5SQGTD0oI/IqxsLhkkjkao4jP4Q1nD4b/7m48DoEgZlsT3ckCJIcD9et9OZ0LaEVHEY/aEPBa07NKSIg0mjqrB/moREDkCQ3OwdVXdh5DCiqRur6BlR4gTXhI7tCsolMExztA7xFYtAMgNEP29XLIIWOHdgwuC4B7owchR9Rr8GFIvb50naa0Dk2KrpIYungf464NoBr7J1NitNXFAKzamqr4HXw3g9RDOae3VStsnUP+JZXrJNz8b5Kxea+J7pJN9MckAu1T+b8kGLzXxa3JKJ3hnkgFzq6xtdk4kuKZMnaxhI8hRD+3D3z/afXULg57vmlpeXhyY4oTl416SxL8/A9+3M/rND/lmTB84j950Z3KXaW3x5Bu6dTmhBC5zTgCqVisliY/H0USKdyWJrtdq5ubmNjY2nT59+qIHAeyQ0C4S2D16kS2AFk9KNfKiBathimQHT9B5YZkDXAwiBVzsSDBVHOOfoP+KP07/5GycobQJMEtPNDi7sCYLgdWzLG/2NYdyCk5cz6042T3pDRVHDqjjnmk8fBEZ3CKGIG5RGVWM9e/FMhuH9fftD4dsAhLV5ZdjINz0V7LwIpBPNMvjxUun3F4oyStvdfMIu5Tady6g5/H2qc6pNYAVE6c1hqjU46pv+ce0IZ56quu88pmYZ5FQMZJT2pBbVHvk+zdM/MjG3Nru8X2gDPMvL7PKu42dywuJ+zL3SeTG7HkGaonbj+mpgdb2MjjHdEGMeL75B1zzkGJ/xLFvOSMQ20M+45ptJPpA48ct6Nn8ezgACcqje6US3ZLxrEv5AIt4jbfL7Smo3Rk4U3+CaXuz+2cpn/uklBAB4+fLlnTt35ufnUQTO8QqiVxrhwHn0l6cHvzw9uO81vjw9uO8swj1pNKpg0jMJ++Up2L43K+zEl6cHXS5ivykn6Y2Whw8f3r9/f319/erVq4uLi4uLiysrKxsbGz/99NNbab/3Xv4ECdWMBA2IwuHymGFNPMq5eMzffGrQ2kMIddSwJu6N7f9aH/iwOh4qju5iBRV0/6qEoodV8R8pIWXcoGxbQvT/n733/Grr2h52/4b79f123/uOce/5xTmJE3fTQfTiFMeO495r4t4LtrFNr2qo9w7qvffeBRISXfRmXLADBu37QTHBDnECIbF9DnM8gyG0t9Zac+65eSJF3vt9SMjaDew7eQfHC5o6gJ0HL0tcL7nG8V2HrxrCgK4N4JomUrJ2HDl3b+fBy/tP3fnh6PVvdv9kagd0IYCtH9l3sljqegylOaA0G4LlbiCa8PyQLgSI7M8/X5+6/+St/afu7j919fP1KQ8gfK5rGiftpqsH+NYnMve00j/31jmuCcxeRXvXHmeuPc784iTrixOsL06w4veMeV+sPc7ccpa7+Sfup8eY6043gy7zTpYJG4h6hrJX6p7+wz9c/xkSAgBgdnZ2YmKiq6tLplAVw4WF15o2nWauO8n44hht7VHKF8fpX55gbDzFSDvPulTLpXOkhx9x1p1g/uKhfe/i032oTw/gEn5k4dnax48fx79xMDc3NzMzMz09PT09/erVq79424u3JaSKAOrWJd8fRdUCsA2jl5BugSsm9S7+b92lXkDkBGBNyhJyMlyTgTbmzv+79P96CtGWLJQ5Y1Gw1jy8rTC+G9aai7XmvH6Qh7Hk4GzzNSzEWHJw1vz4VrQlk+07TnHuQFsyf/nH/7YCjCV7wZ7zw36s4Kz5jZrsOnHy5YZkGNMp873Rb2L3awlxNyN1OQRb4XI+8XNtw1kK0MacEuoGaLNE5FqZ6z6oWgCYZOwewaP0Tr/7/lvKAGCLAruOXM/79sjuY1f/57NN3+2/+PXunwq+O2buArRtAFnWdeDM/bbngH8c8I8DujDw/eGrmiDgHQH2HL+1MSk3MA48gomOX6yMQ5X3mDoBkWNqS0rB7mPXdx25vv/09Q2JOVUYla4NkLh+lvtm42f02+d4AJC5Xx6vM312jL72+DLvJrDirD1O33CmOee66Otb/MMP+feh4kaahaGKip0vlb9/1915jP8pEgIAYG5uLv65nM/n44lklWje6Uru/hLO3vucQ6X8o6WcUhSPzpHYbLZgMChS6HcWc9cepa7Zi/x0H+r3QX66H7vhBL0UI+3o6Hj+/PkyPm37w1hhCfFdMYkXEHsWQeIFhE4A2qS4R0yCKtORuhyMOe+XaxV/3BSgzTlwQ0r88fxPuCEFZcrEzl+P+ffBmHN5/rPS4C1p8JYsdFvcek3celUWuh1/hur8AW3ORZtzYPokju+0JHizTvOFLFTMD5yjOXdjzLnxKZCmTH1HLcn+HUS3mev7kef/ydqN4PhO0V17sZYCjDkPZy0KDgmavSeg+gRjZ4OluxFpykCbc9539ZYPxpQHU2XVCJMu1SdBmU6p741+E7ljaF7vudK9VbzNKH0O0V64jO8+UNzb8NYCjCnnAW0DpEkidC3e20tFuRQJWbqB/afv0RS97mFgz4nbujZA6p754dhNfRugbQOYmsHsrw7W4mXlSFkFWlZc21Sw44S1B4AzTN8fvvrd/ovWHgDNDVRhVHHYhjF9BBA5ptZtyfxu/7kdBy7tOnr+s/UpVVi1pfsPViJxPL+Osn9xgvn5Udqybyiwsqw9Rlt7knWiXFSDlsKoJoIg1GwYk3im/+Qfrv8kCQGvvzU3NjbW3d0dCAScTqdOp1MoFCaTyW63+3y+zs7O4eHhiYmJaDTKEWu+udm87gRjzV7Umr2IT/ci3wSxZg/i3wfwG0/SiuFCr9f7+PHjZX/g9u54DxK6i08Cy9MaNdloYy7alPexgzCAWK5jLYM8nHkbypiLNuWhjDl4y9cdY1pV20OEAfR7L8SYCuC6NLguFWXMkbUWG9obDO0N2nBVcFAYGVFpwpXxZ+iOA1BdMt93wd6D7RzT9T92ayNV9h6cwH9JHrwnCxaDNVsxpoJ69SZLF9LS1WjtRnWOaqMT9r5Jd3BIKGm5hTRkIw1ZROv2lkEeVJtcrfzc3o1le87UqzfiLV9hTYXvvYbLA2XIhSoyq/iJF2oT3yGhyo9cQvF3QoU7Tuw/feuTz7d8f/jqd/svFOw4Hn8n1KQbSc7afrkEfu4O/Hwx/NTV2p0HL5u7ADjDTpJ07j9119IFQKjW21WMW1WMO9VMlmbI0A6IHC+27zv/ANJ8+lr9Izjrmz3nYHSHo/8PViJ1voA0BdIvcdcc+jAuoHmM+u/DlC0/Nt9DG+nyTrZxXOx8qfDN/fk/XP9hEopH/OawT548iX+Be2BgoK+vb2hoaHJy8uXLl3Nzc7FY7OnTpz09PQKZ9kgpZ9Mp+hdHKWv2IdfsQazZ07hmT+MnexCfHsCsO0kHXWRV4kRut3tkZGThvcZXNv5pCUFYijvYxAZpKkyVFb8F9cdGHsqQh9BnQzTJYHUSRJMM0SSJ/DdisTmkLqdetQWmSUXqczDGIlsXRui/BteCoJoUsDoRpklDGfKQ+lyoJhWsToSok8HqRGlLsbSluEG1BaZNg2iSIJqkasWXIv91aevdMun/xJ9B6LIQ+myS9QeW87guXOvqpZCsu+zdeGXoEcW6x9/PEQVuQDTJ8taS3nGbr6+ppZ9naIfIWu+rQqXmTgTFuhuuTcebvmW5jvv6ms0djfZuXO+ErWWAZ+5o7BzV403fIPTZ77uqywGhy4HIQJXchPPVf5+Eit6vhBR+wNkP7DlxuxwpZxuihTtPEsURFNu/4+BlQwTQhACmdmj38Vv+McDWC9iigLUHUPjnFH7A3A006Ud+OHrD2gOUIaQXipEX7yHP3YaTpV26MKBunUY2e4X2iWqsto6odw0BKLYfwXLrwr97u3RlAJB5ZhiK7msQVcJPTWsOkT87TFp7hLw2ftGw+OOj8QtcriSfv3PTJwdJ39wREYRhieulIvCuxf/3SGg+YrHY3Nzc7Ozs7Oxs3D3zm+Y/uzMYDA1E8f6S5uSfaJtOUNYfp64/Tt5yipJzmXmpjssSKILB4NDQ0PT09N+3zt9IKAyoW5Z8u2JVAGDrRy8h3TxXTOwFRJ5FEHsBoRMAsxS3MAl1olSoIqtRk4PQ5n50NGqyULoCWcs9QwQsDRRDVClcz4WfZ57KW0r04Xqu+zxUnYbSF4j9NzH6IrgmU+y/ZYxAuO7zYGVSoyZL4L1qiEA0oUqSedf4867HL6Jcz3m4BhQfHKxKEfluhocULMcJsDIJrslCaHNh6nSB96qzmxQcEKlDlfYufM+YLTggdnSTbF04vPG7BmWCNHAXAACu54IuXN8xord2Yi2d6L4Jt8B7pU6+Sey/6ellDkz6w0MqRetDTy9DFSyn2Q619Auwhq/js3x0NGpyGiSgCnbC+apEKNMp8b3Rb8J5CfE3oww5REch1bttqVA8RXhbAcac84C+AdIsEbgW7+2lomgBoJKxe3iP0jOtCrzrzNIEAbFjfN/JYr5lxNQBfLv3nMT5M9/ydMfBy7oQYO4EKtGqc7cRxvZfXxI/fzVBgKke/OHoDXsfkL/9WEkDF8Mx7Dp8/XYlg6Hqu1yCullOuV5Kbtb3PwCzblUSSxp4e47d5JsnNK3vuGP6HN/8BM/1XamVZl3mrDvJ+PQwac1B4hfHqBtPMdYeIX1+mPj6Gpcrxrrj1LW/XjpzAYeJaw4Qtv7IKkboObohhW9uGfdZN7YBBP1/rITeHXNzc1NTUwMDA21tbWq1msWTwMjCR0heOZqPZYiEUqXL5eru7p6YmPj73gPF420JKcOAqmXJN+lSBoDmuIScMbEHELkXQewBhA4AzFTcRG2tEaSAZZkwVTZcnfOxkQ1WpLl7mY+f90r8935+9UwdqqZbj8aAWGhQ5u6hz8y+pFgOIrWFAAAwbMc1odrJqX5NqPbZyxG286zUf39m9qW5A+3qobGdZ7tGzf0TXorlAEyVGR+/Xp4s9N1ydJGMEVh4SInUFkCUGWjd16ZIo7e3aeRpmy/Kkbc8tHRgZIEHEv89eyexWrqxQZEi8F4fftrm6CI7uinhIaU+DDVGYD3jdp77SoMiBaJMR2oLnd2UaummcvHnxkgjxXKwXLy2tV/Edp4HK9Ped1WXA0yVXSfKKGNtPVuZAGU6JN43+k3oiqG5cQltQhlyiI6C5Uoo/xcJNUkEzsV7e6koAgBUPHYX71F4ppXvvAmkoR24+oh0vYxiiwIKP3CpBMtQ9xw5V3b6WoOxA5B6JnYevMLURDWht1+oDgJ0Vf/2fRecA0DWtgPb9104dv7OltTC+/XcGrwK2RyQuB4fPlu65/i1A2fugAr2Yritzfp+iXvm3euReWfZxglMs/dRo/xUOX/7Lc7XN7nZ1/jrTjI+P0T4/BDhXRfB/MMd3roa5iHCF0dJW8+yPztE+Gz+hYcInx0i/Psg/pMD+C1nmOdrZHh+q9D2fHl3FzS0Afj/VgnF49WrV0+ePBkcHOzs7AyFQq2trcFgMBKJRKPRsbGxFy9e/MVvvv2ZeA8Suo7YWsVPrpeAoMosmCr74wKqzIQoQU9eDLq66eWiL7pGzV2jZrr1+MzsFFr3DUq37dXctDzwCKrK+nnmKdVyqHfc0TlioFqOvJx50j6sDQ+p+yY8tbLEOnlSlWR9aFAWGlRUiL+AqXLi49fJksS+YnngUaV4nbe3ucnxU708BaxIJ5v3Bwel3t4mTy+TbN5Psx5vH9EF+gQM28laWQLOsNPWRbR24ln2M9LAA1+U6+/j2TqJwQEZ2XygTpYEUWQgNUW2ToLEf8/Ujhp60hqdcBsjjQOTgc5RE1ydB1FmvvfaLhWIIqtGkP6IueXHiq1/JKFsoiOf6i1aKhRPId6WjzFnvy8JKQMAosk7f99bbQjQhgAMt5VneaoNAU26Mbwwogsv/kKR8yWG26oJAmhOi8j5UhOM0RRRqiKqDQGaEKBuBdStgNwXk/ti6iCgagW0IeDdi5n3ENc8SRJ3NNLtdThNNVJ6uUaU8BPrk/3Yzw7i3rik2JusPUL8/Pe3/pZ/H8CtP0FNv8Rbe5Ty6UHimgO4Nfuxaw7g/32I+MVxavZl9qVaMYrlYhvHZd65VQktO2Kx2Ozs7M8///z8+fNnz549e/bsxYsXMzMzf8cX4RaNFZYQ1xkTeQChexFEHkDgABqY8mvwLZWcpFpRBliWCZFnfVyAZaAGWcazlyPGMKKMvzY4IOsetdHMx1/OTDbIMmDK3JczT+T+UrA88+eZp2Tjoei4q3PEJPeXKgIVNPOxnjF7ZEhbJdpSI04oE3wZGdIE+2Wl/LUQeXZ8/BpxotBzR9lSVSXaXCdNiT9fL02lmo5KvCX2DnLboMrRRWmQZUxO9Ut8JWWCdTBlLsl4CKv73tKOxeq+x+m+JxkPdgwbeK7rJOMBUwRFNR+BKnKYtjPBAak5gqGZj5sj6MiQlm45WSNJhCvzoYqc917YZR2LzGpe2kP65jNlWyBMh9j7Rr8JXDEUt/dc2d5KwSaUMZvozKf6ipYKxVuIt+djLNkPGBvATRK+c/HeXiryAAD5cxJS+H+53M78r3IfoAvH/QGoWgFdGJD7fves1EcAuQ/QR345qbVtgCYEKHy/7rDwfz79eeS+ObFrmmt+wtQMUaRdSKbjYq009RzrkwO4T/djFr1yzL8PYNYfp2w4Rf3zF4z5ZB8m9XzT+Ur+8Ue8r26wQRebUs83ZV5q+u4W51S54BFCjmn2NuvHpJ5XyzPQqoQ+kPhnJeQEGhjyq9At5ezEGkF6gyQTLM36uGiQZNaKUnrG7MNPwljN91Meqm+mAAAgAElEQVQ/j5vCaIrxOAAA5jBa6n0IAADDfAYizXk585SkP+jp4Tx5MYDRfN9sOw+R5djaSXOxWablJ4HrNkq13d/Ln3jeS9DtqxOnx8evEiRw7FeVgaoqwdYGSWa8RLWiVIrxqMT7wNXJaBtQCly3GeYfu0dtLVExSvWtsQ1Zyd9SKdhkaycSdPskngfeHk7nsKl9yODtYeO1e6sECdYI3tPdbI0QyIYjlgjOEsFXCxO7Rsw004lH3LUNEtB7L+wyqBdnVnLSSiibTj/aAmYsIiHkf4SEPmRk3jmpe4atH0M1eW5DZF/d4Kw/TvlkP/aTfag1e5Fr9iLX7EWt2Ytcsw/1yT70vw8R0i7zPj9MWLMX9YfXiflkL+qzw4Tj5RIo2QglGyrRykeN8oeNslKErBqjbqTbyJIOrmlS5pn9K+tfldCHEP+0hOoZisuQzWVNiVW89DoRqF6c+dFRI0wlaA/4eniODro1QgRLcnGavYGoyN5B8/Xw1S31lfzEBkn29KvnVOMJmKzI28PzdHNcnUyUaidUVuDqZHq7ub4ePk69h2o4ERnUa1rAVYLkenFmnRhUyU+wd1BVgbpy3qb5GWuFaWjV9xTDcUMIaQ7jsJrdqkBdjTDN18vvG/c6OmjlvM2VggRHBx2r/gEmLzSHsRTDcYgkTxWoFbrvoVXfw+XbaoSppZz1HPu11j45Vr27jLuRY7s29rRT7qsAS3LrROnvvbBLpU4EqmhOvU/edOrh3yUh8qqE/gRSzyzbOIHjtVRiVD9VCrbf5qacZaw7Tl1/ghJnw0lqxnnmD8Wci1Xc725xPtmP/WQP4tN9qPilZd5mH+p/9iA/2Y/beYcLoztY2qFmwxhd2U+RdZOlXRR5N0M9wDVPil3T859SLhv9qoQ+gFhEQsoWQO5fGooA0KQfvYh0cxwxoRsQuBZB6Ab4DqCeJr/UsOkRc2sFJ7VGkFErBH2MVPGTy7lb4j+rBWk1grQyzuYKXkIFL7GMs7lWCDKH8XOxWYL2YBl3cxl3cyUvqYKXUCNIrxakzf9aLUir4qeUcTZX8ZPjw9YIM2qFIFs7FaXcWSVIXThjtSC1nLulXpRD0B6SeStqhRkVvMQqQarE/UgdaCjnbi3nbtW2whwdDEMITTGcquQnV3C3YlQ/+HoESMWOcu7WGmG6sQ0jcN0r5Wys4ifXiTIfsddzbNednawaQXqNIP29V3Wp1AgySlkpxcSNJ0o2NdAdYs8b/cZ3xpCc3rNle6tWSkIsCd++eG8vFZkfAIvHivEeuWdaEVjy6fYBIvXO8azPKPKeRqazGqO6DRZfqhb+WME/Xcb/qUJwuUZ4DyKpwanBJH0ZSrnjNvuzw4R/7UH8z+7GNXsRa/Yg1uxBxB/8z+7Gf+1BrjtG3n2PV0c0MVT9YveM3BeTemcl7ldi94zE80rqnZP7VmbZujYAtyqh9x2/kVAboAwAct/SUPiBJt3oRcQfS6iOJr9Qt/EBfWt5c2o1L72Gn/EfRhUvFSIulHurm8yXawWZy8ixgptYyU2p4YMWHbyKl1rNS6vipdbwQdW8tDL2lkpuyvzWOmF2NT+9jL2lhp9RwwdV8lLKOQlVvNT4DnXC7EpucjU/feFc5ZytC5/5iKjipj9iJN/Bbzx+bxP49yVULdyENmWTXPk0f9FSofgKCY58rDX7IXMDuOlvkJB7WuFf8un2geKNiV0zHNMTmqKPIAghWS4oxQImmaAUC6rJQxSGGaoBlm6UJO6owelPlQlzLjetP05asx/z6QHMpwcwa/aj1xzAbj5Fyb/SdL5S2EAyUeW9IsfPf+uadSEAp1uV0HuO9yCh8zUb7lO2lLFSqthp1Zz0/zS4GVWc1IfMDY9Ym6o4adXcJY9QxXlXWao46VVv/5o2/8I4vzdaFSet6p2jfVxUstMeUpNuYzccu/uud0K/SihQtFSoqxJa0t8BHyD3AlL3rMj5M9/6jGOaZBsmOKbHfOtzsXNa6pmTeeeE9hc0RRROsz1qlJ+vEhx+wNt3n7f3Pm/ffe6Rh7zL1YJylALJdDGUAyLHz3Lv37vgVQl9CLHCEmI7YgI3wHctgsAN8BxALU1+vnrDffLmUnpyZXNaFTt9lVWWR0VT2gNy0i30+mPFGxvoDpHnjX7jOWOIvyyhhe+EGpokPPvivb1UpP+hEvozyHyA2DnDNowTxR0IlhtMMlRjVJVoZQ1WDSWbUM1esrSbY5qUuF/J/v7FrEroQ4i3JaRoAxQBQOZbGnI/wPqTEqLKzlauu0vc9JCaVMZMKWelrrLK8ihlptwnJtxArjt6Z0M9zf4xSkjmnpb7l3y6/Qcg9c6JXDNcyzOWfpyuHqSpBujqoSbDBN/6XOSakXpj/8wytCEAuyqh9x0rLSF7TOAC+M5FELgAvh2opSjOlK2/jd14n5zwiJFcykxZZZXl8YieXIzfehX+5YHr6yEMt8jzRr/xHLFGds9PpburhfEvJuRR/YVLhewtwNvzsNbsh8z1DSwxz7Z4by8VqQ8Ai/6rJTSP1BuTeueknjmpd+4fc888qxL6EGLFJBT/OK7ZHuO7AJ5zEfgugGsHwAz7sbtbL0M+v4Xecp+Y9JCWssoqy4GaXIxPuN646WzVp9+d3IgRRt9qPK59DiMYvlh1uEa0AW/Po/m3sdq+WSqM4FcUbyHRlVPBSQI3Kbm2xXt7qUi8QMOqhBbynoqwKqEPId6WkDwU/8Ll0pD5gCbtH0nICbCtr7CiodP3jxwp/j/XYJuL0cn3cGmrrLIsUm80JlyoXb/z7P86eu08Vfuc54wt7DeOfZYgm7xefw+s2Mrr2qkaPWx98aN1agnYXvxkeHpCNrSP21lUw/sGxvaxbbG/qJ83JITzSF3TMt+ST7f/KHwL+Mdn1wQBrHZVQu85VkxCrD+SUPzvAkk5/gAh3Xcp4+idf11t2HqrMe02YpVVlggy7VZjyoXqTbvO/d8F+zaXYXRN5um3mo1rnyOrJh8i1SWUbYrR7T3AnSdA3VOg/s/zDGh4DFQHgXOM1vxHhDKceIJjm12V0H8SqxL6EGIlJXQB4W6yx3gugOv8XRjG59Cm9hu1zCPX9x68nHb4+ubD1zcdubHKKkvh5qZD1xJ2/bhp54lvb9Sy8LKRJuv0W53GccYYxikwI3yjjljHP6kZON42daPjxd32F8V/ko4XxcFn1zitxx/gq6qIbpruGdcRe0dv/3nEXqB+VUIfAKsS+hBipSVki/GcANfxu7Bts2T1RAO9tQSuu1ZJO/+g4VxJ7bmSulVWWQq15x/ArlQQStFGJL+XYZzi2GOLNhtROVJD8t+skVyvgxQj6oqR9X+eu8j6O40NN+sYFVgPXjbCtr16R2MvCbEHqBeuSuj9syqhDyHekFAlwykLATI/IPEuDakPYP45CXEdQLP1FVUzieB11dNa6qgtddTWOmrLKqsshdZ6aguEFcZKBhiGKbZ9bvFms8eaLTNk1Ti0KVKOcZXALPdh5pKlUIp0QhhhknKsyTy9qOf+ioTu4DwS17TUt+TTbZWVQh0EMKsSet+xwhJi2WJcJ8Bx/AFs2xzTPE3XT9H0L2j6l/9NTNH0z2n6Z+/k+UdYlhd/Lq+pFZyUYZxutsY4f/QXn20HmMZXZPVTomJiqZBVTxmGabZ9kWH/sMnfgcgD1K1K6ANgVUIfQrwfCXGdANcBNFkBhvkF3fyUbn7238FTliXGtr3+nxa/U5ZmG8CwTH9UZXnCtMywbQDX8bt5cexAsw1gWubo5icrWM/XP/8I01Oa8clyMD2hm3474BOG+WWTFeDYF893VUIfC6sS+hDiTQnRnbIgIPMBEs/SkHoBpmb0QuOfkhDXCbDML6lmJS/0QBO9r+u/r+sv+e/gvqL3AdNXTjZY4yp6oywuoMkySzFZ2C2lqt6Pqyz35D33mvxgmqn1tx7iOgG2DSAbtfw2sDr6cGXz0vbf/zOs7Cy6/vva/ge80H2ymc40PV2Gh36RENYjcU5LvUs+3VZZKdStqxJ6//G2hKRBQOoDxJ6lIfECDM3o+UY30xrjOAC2/XfhOAC64RlcdlsxtGMIuDMF1LwA6l4Atf8YU0BN/Gf8wW+2Vs/v8IeD/JbnQNU7XvgSqJsEytpi55rbvkYrqfGPdObL0mSZhUtqBN3f9AHXp4Dqf74s8WOxaGXmn5kCaqaA2udA+cJ9XgJ1k0B5aO4sO7wHJsKwLDGOc0Fe5jmshijr3/te8npnDyxyHBemPwXUTAFVz4GK36y5bgqo6Qduacd3oTQXGMbHXOe7ev63CN1AnWDsDtYjdk5LvEs+3VZZKVStAHpVQu87/mkJsW0AXISjeEG2l6dDszfbY3cjseK/QnjuTiRWHJq93vLq4jyBVxfmH4dmr0did8OxO+G52+G5O5G5u+G525HY3fbY/dDc9ba5mwuGut0ZK+0EHoZjd9pj99vmbrS8uhiO3ZnfoW3uZny0SOzeIiuJ3emMlXUAD1tnr7xewIXWV5ff2sc9fUk5sg+pz4XyJBzbL2Xh2gGERISzZpqfH2udvfHXyxJPJxIrbp29vKAyF1oWVKZt7tZ8ZSJzxZG5+EvuRWJ3g7PXFiYeid2b361t7tZAjNAeexicvfpGXj9fVAzvhigyEEIDxx6L59VsBRBiHsGRYZk61jp7fUXy+h3uxo/Xoj0QnL0aid2N1yQ8dycydy9enPhRDs3dWDhOJHY3vlt47nZ3rLY/hmmdjdfqjRlbZq8bn55ktOTUsu/QdM85S/HQqoQ+EFYl9CHEPyohjgMgqYZr+T/QW3O5HTtF0T3i/r2ivj2ivr383p3cnm9FfXtFfXtFfXs4Pd8IortEfXuF0T2ivnchiO7i9X5nGbsXek56DTH4jDD/q3nsLr93h7hvn6T/gG74SttTJj+6wzL6wD0O1QyfVwyeEkR3ifr2CPv2CKO7+1+YtYNXlYNnWiYJqqGfWp5hhNEfhK8nUg6eNo3dEUX3tj1livp2C6O7+L074wsWRn+Q9B8afumU9h21jj8IPieGnhODzwneJ1BhdLewb3d8teK+vdyO7xkt3yCNySWEMyzTXPzzGZruRQ33FMWbye3YKYzufl2WPaK+vdye7a9n2SuI/sDp+SZek3dXRhjdw49+L4z+4HsCnS9F8Dkh+Jw4/6ty8Aw/+r2k/4Cob7d7AuyegHB6vwpMYo0jd4yjN0V9e18n/n3oKUPWf4wf3emZgNrHK9ueNBtH7pjHigXRH37Jq38vp2Mno+VrlDntJuwwUfEk/uaArH5a2XyQ6s/6TV7xg/7964P+B0f5D+H37tSNXFnQA6SFPeB8XBmvoaT/sHzgZOQZW9J/QDt0KX6UNUMX+NHvRX17eL3bbWPl7gkwt/dbxeDp0FOafayy9TFFN3JJNXgm3ifz+Qp7d7OC28ne/If0FKTIz3OtSujjY1VCH0KssIQY1hjbATTbF4ftAGA8SxkrDW/PJjoLKN4iiqeQ4ikkuXO5rUek4Uskdx7ZU0DxFinarzcF9pDcuXhXBtlTQPH8suebFBDdOT2PDdquElZgtzJySxm5JQ9fM/c0dE3opW2X4s/wWo8SXJmc1kPuAXxwhDvyPOToazT31hu6K1j+XZ4BAtGVRfEU4lzpuq4Hms4ShG0jp/WgZ4CAd4Kij636rlKcM43iKcI508KjInsUTnRntw43k9w5dN+3gtApkjuP4inCuzIl4QuOPgTFW6iI3OgYU+m7ynyDNP8gDe/M+HXN3kKyuxBnzYOpUy83gBD8Xq4L4DgBtKT9IS0Pa80kOvMp3qIFlcmThi/yWo+S3LkkTz7Lv0vRfp3q/YroziG4Mn+nLIVEdw6n9eDQM39TYK8o+FO8DpK2i63DnMAgU9p2Mf4M0/893pWhaL/h7Ef3Tpp7J836rlJ3P44XPK7puK/vKsW50imeIoIr09WPaRlm+YaoPY8NnROa/ieO4AhXFDpLcue+zquI5CnEWvJg6uQb8G/R4kGOE2iyAXBe4CE9C2vNJLoKqN4iivfXRZLceeyWA/LIFbKnYNEslgTJndcc2BfPSxG5oe0oiU5YFJEb8WeEoTNEdzbTv9M9gPMNUsamIu4BvKG73NGHJLvz/YN0qncb2VOAc6YrItdbhllto0LPAHH4WaB9XBadtOi7ymner8me/IXHkeItIjjy0abcu6S191F4tgNo/v3OfwuBG6hdldAHwKqEPoR4W0KSICDxASLP0hB7AfqfkFCzDQA3ax/RU9CmLLytgOwuonq2UT3bsI5U/yB18mUv3gkiuwto3q9fzb5Qd9yjerZ1P9YxfTsJzkycI53gzMI7M4iubIIzE+fIILvzSa6c59PDzj4k2p5EcGURXFk4Zxq35bCrH91oWYdzphNcWSR3PsVdyPB9Jw1fUHfc8Q/RBMETzj5U26hAGDrtH6Q5+5AkVy7V81VkTKLuuCsLXzb31HROKDkth5z9mPCohODKIrvzqZ6vOsblgSFGcIQzOhUKDDGDw2xJ20WCK5vszmcHDngGCBh7UnTSrIjcsEUh3NYjtiiM6v2K6Mqmer6KZ0r1bCO7itDGPIg85So0C8IOc10A2w7Aeb4SUhbSAMJZfy0L1bMN7wQ9ftkdGKJjHal4V6ay/dbs3M8kd76y/VbbKB/nTCe6snCODIIzE+8EEV05eCco/kAQPBmLzXFbj+Ic6fHKoOwJhu5yVfvtRus6vBNEdGVT3IVkdz6n5aAodNraC3ZEEdzWw5ExsT0Kk0euhkeFqvbbOGe6ZwD/+GWXI9oYHOHYozBNxz19V6lngMBpOUh25y3MC2XMhSrSzlWlg1ktHAfAsgD1LNtDahbSAFp4uOPgnOm2KPTFzDjRlYN1pBGcmXhnBsGVTXBm4RzpJHce1fMVyZVLcGbGs6N4isjuQrwThHdm4BzpZHc+1bMtvgnvzCC7C8nugnimeBeI5v3KN0hB2xNe90AuxVNE9XwtDV+SRa4EhhjS8AVjd2XnhFoYOuPqx/oGaWR3gSB4avhZoGtC4+xDtwwzDV1l6o5iZx9S1/WI4MxcuHiqZxvFsw1vLWjUZt8nr7uHQDVZgXd1/mISuo31iJzTYu+ST7dVVgplK4BaldD7jt9IqBWQeAGRe2mIPQBdPXq+0c2wxNh2oNm2GHaAZQFqmcqHtBSUIRNvzSc7t1FcRRRXEdaW6h0gjT1vQ1g2Y2wpeEfmi5lxefiavrMMAIDWYbY8fN03SHX1YYPDHFn4qm+AHBhiMDw78PbMyZe9tl4Y1pYWH4rkzOX4Dw0+9Vh7wEzv9wRHNsW1jejMlYevtQ6xh5567dHG0DCvc1zVMaYwd9e1jfAp7m1kV4G2o6R/0h4c5lh7Gtz9+KFn/v5Jh70Xbumup7m/ITiy9J1lnMBBnD2D5t7eMtxMcuYRnbkYWyrN/S3WlmbrhfVNWgODDHN3LdqaaOuF2XqgA0+cgSGGtO0SwZEdXx7FVURyFKINuWBp8hVwFpQd5jqBJivQ0OS4T8xC6jJwloL5slBcRXg7aHwq7OrDws3rEZYt4tD5l68eU1xf9Tw2zs5NG7ur9J1l/kFaYIjh6sMqIjeCwxxLTwPeDuK3HJ+ZneIEDhMdOfGhcPYMQ2dF94RO3V5MdhWQnHlkVxHZVWjtBYdHRD2PDfZeeHCI3Tdp8w6Q/YN0ey+c6MzF2dO0HQ8BABCHzjmjqN7HptahpsAgY+x5myh4lvhmXih9DkSedrYyvZbmYdsBlhmoZ9oekDORugycJX9hXhRXEc6ebulpmHzZy/Du8A8yXH3othGBMnzDHm0MjfA5gcN4O0gevhoYYrQMsRzRRrKzgO75zjtAbhsVhkZ4ktAFvCPT2FUZHOb4B2k097ckZx7FtY3iKiK7Cmjub6KTVvcAge0/8LoH8gStp1uHmoae+tz9uOAwJzIq7n1sMnRWdIwpWL49ZGcBwZE9NT0afWzmBA6OPA/G/zujc1wZGubNN9g8ZFcRzpLfqM66R/zyHgLdZAF+t/N/g8D1WkKOabFnyafbKiuFsgVAaVYl9J5jhSVEt8Sa7UCTbXHoRqCKInlATUbqM3GWfJKjkOwsIjuLMNZUZx9manrU3tvojKJdfbiZ2ReytqvcwPGZ2Slh64/qyD0AAMzddd0T+pm5KWNn1c+vnnj6yUjz1smXvbYeGMaaFh+K6MjlBY4HBpni4PnxqXZp6DLelklyFOo6Sj39hL5JW+e4Wh25p2kvCQwyJaGLHWNKjC2tybdPErpo6qqRha5ADJ9r2ksio1JHFImxJGNt6QR7jqDltG+Aau9tdEZRnn7C4FOPM4p2RJHefnL/pKPZd4Di3MZvORUaFiDMm+nu7dHHFlHrWZrr2+4JHdt3kOjIiy+P7Cwi2gtRutwGSfLlhixIc5jjBFhWoJ5pv0fIRGgzsOZ8oqNofmecDTT01DfwxGnrgdl7EeER0YuZcYIj191PePKyj+Qo6BhTxGJzqkjx1PTY4FOPtQcKAICg5VSzb9/M7BTHf5hgz4kPhbVlGLuqjV015u6Goac+uvs7gj2b5d1t6W4IDnMHn3haBlni4Hl3H17fWeaMYu29cIw1lWDPtvVCo5NWdz+hbUTQOa5yRFHuPtzwsxZR8CzenrUwL6QuByxL/ak8rZrqbrYBTDNQx7CWkEDxvEgL8iI7i7DWNHN3/cSLzmbffgAA/IM0/wAtFpuzdIPHn0d6H5vQlmRt+wNJ6LI0dBkAAEXbDUcUFX1sc0Uxz6dHyM5tqkjxzOyULHRt6Kmne0JPcuSRHAVkZxHJUUB37wgOcwStp0eetRi7qvA2EMGeo4oU23sRPY+NvY9Nuo4yWdvV8IiYFzjW+9hEdm7D2UAc/5H+J872UZmrDxt9bHH1YVx9uMioJDjMwVhTFy6e7CwiOYuwxny4Kusu4cu7CDTLAryj89+C7wJqViX0AbAqoQ8h/lEJ0YxAJVl8n5zUqAVhTHkEWwHRXki0F6LMKa4odvJFlO8/LWw5Lw5e/vnVU1nwGt31/fTsc6pzuzx04+XMY5Q5xdGLmpjqhBk2Rh9bI6MyuHHT5IteSzcUZU6ND4W35XD9J9x9JJhhg6LttjryAGMB4W25ZOfXHWPKlsHmrnGtJHiF6vyubUTUOaYRBH5CW9IJtnyEcaulG6psuwMzbGwZbFZHSjx9ZIItj2gvxNvyGO4fhC3nhS3nNJEH3RPGJu+hngmzInRb2HJOEPiR6vwOb8ttH5W3DLKFLWe5/pPRx1ZjZw3F+a27j0C0F85nSrQX4q0FCG1OnTjpUn3mQgkV40BwdTramLdwZ4wlffhZS3hEzPWf4PvPWLqhL189xlozLd2Qxy+6IPp17WOK3gkzWL929FnI00dEW9J/fvVEGrrGdO+emZ1q9h7CWbPjQ6EtaYbOanXkAdy4ydoN4/iO4W05GAtI1HquY0zdNixsGWzmB86wfUf6J12+fhrVuR1lThW0/OSMYlx9eKZnryR41dGLbh+VW3tgnj5Sk/cg3pb7Rl6a7HpJyo9lqdWUXyV0jzifV+H8zkR7Icqcauqqn5jqZHn2z7x6znDtEgcv/fzqCdqS7ukjjU1FMJZ0rCVTFrpu6Kz++dUTdaTE1YdvH1OoI/cnpjqRpiR3H/HZz8PK8J2+SfvM7BTdvQtvyyHaCwm2fJprp3+QiTKn8ANnTF0NWCuIYMvH2XLahoWtQ+zuCYMyfIfm2uHuI0Uf2+Rtt1DmFLwt19aDcEVxhs4qkuMrWw8iMMhqGWy2dEO17aXzZVwI2pgHVWbewX+xKqGPlFUJfQjxtoTErYDYCwjdS0PkAWh/WkL3SElwdQbKkIuz5uNtBXhbAcKU7IoSRp+H4cYEpDkdY81+MTMuDV6nu36YmX1BsBVJg9enpscajUmuKHHkWbBB92XPhKltRAI1bJx80WvuhiJMKfGhsNZstu+4u4+MMmegLZkYSzbeVoiz5tKc34tbr2jbyzvG1P4BFs35fde4vn1UUa/9vNl7hGArRJpSzF0QWegmypzh6iM0e496+2lYay7WmoO15uCseRhLFsywWddeKQlebTQm+voZJPvXKFM6wpSCsWSxPAdcUSI/cFYSvG7uAqsjD8WtV/wDLJ7/NMqcEV/bLys058PV2TXCxIt1IOgCCd3GZkBVaUh9Ls6SP78z0pw28qzNGcVCDBvhxkRhy4WXrybRlkxrd+PEVGet5t/to4rOcV2Dft3Y87C9B40wpbyYGRcHr9Ddu2dmp1iegxhL1uuhUvUdVZrII6Q5FWXOwFnz8LYCrDWn2XuMHzjr6aO0DYs9/RScrWBm9oWw5RLSnM5w72W695HsX3v6qXTXbnHrFUnwSnTSpgzfFbde8fbTmr1HMJbsX/NSZdWKkn8sfUNCdwkZUGUa6s288LYChCnF2Fk3MdXJdO/7+dUziuM7Wejm1PRoozHJFSWMPAtB9Bs9/ZSnLwfErVcev+hx9OJCw4LOMW3nmFbSehWsX+/uIz+fHpGGbghaznP9p4j2bThbPt5WgLPmUZw7/AMsnDUfY8lCWzLxtkKcNY9k/0YcvCYL3e4Y0/gHWFz/aXsvenyqvU77GctzkOLcSXPtkodu6zuqaM7vhS3nfAOM1iFes/eouRti7Kybr2QcnLUAqc+FyEG3sWvvIlDLk5DQMS3yLPl0W2WlUKxK6AOIlZTQuUY3zRJrsgMs2+LQjEAFWVxMSIAq0xG6HIw5D2vJx1ryofpETz/t6c8DjYY0lCkHZy2ai72SBe8QrN/Mzk17+xmGjrqZ2SmYPsnbz5h82Ven/mLgibdjTFOvWf9iZsLWjYTpk+JDoczZDNcBV5SEMKbHn8Fa8lGmLLprv70H4x9gDT7xyYJ3pMFbzl7iyNMgx3fa00cjWL+GGZLMXTC+/7y49bqhox5jyff2M8C6zaKWqyz3EZQpG25IJdm2Dz8NUhw/II2Z/oEmrDkfbcpRhx8hjBlM9yGu/70x8UQAACAASURBVEdTJ9jZi28fVcMNKYq2e6PP2mTB21BdAsach7UUxBeDNuZBlVlV/IQLNSBIc5jtBJhWoI5pv4XOACtSG7U5GFPe/MrhhtTJl33efgZUn9hoSJe03ozFYihTliZSCQCAPFTcPW6IPrbXqb948nLAFSXBDalzsVeS1htU5x4AAJjuQ0hjJtaSj7UUwPXJqvAjdbi00Zg6Pz7SCBK3XrN2IzpG1e2jKr7/grLtQWhY0jmm5fsvOHqwUF0C0pTp6aNRHD+IWq6GhsStg4L2UbWnj4YyZaFM2W/kpcisFiSdfpRSRXE32QCmGahlWO/g0sHyVMSbeWEt+TB9kqkL+nx6hOHaDwAA2bFTFrwzOzf961HWfNk5pnv6ckAWvB2LzXr7GH2P7cEhga+f5YwSMOY8ceu1ubkZazdCEymXBm8hjBnxxWDMeTjrNl8/Y77BsJZ8tDmXZP/O3oN2RYmDT7zaSIW49Zqlq3HkWVDUcsXeg2W6D4J1m5VtJZpIOc25VxOp7HvsdvYSo4/tLPdRuCFlPtM4GHN+ozanQZpxE/15cSOKZQHe0flvwVuV0IfBqoQ+hFg5CWlGzzW6aeZYkw1gWReHZgAqiOI72ASwPB2uyUYZctHGPLQxD6EH8X0XtOEqpCELZczFmPJNnTC68yDSkK1qK3X0EAX+S/r2uvndYLoUReiBpOUWXJeqb6/jeM4g9KD4UDBdqq0bHehnw7TJ8WfiYM1FJOsOrucnVy+J5TpibAfDdWnilhtjzyI94xaMMR+mTdKEKx09BG24Or5/+4jG1o0ODUns3dhGfQbff9Hf3yQKXG/UZyD0oOCgwB2leKK0oScBsm2XKHDN1AGVB+8FB4XK0ANHD17ccoPpPDz8NGjrxmBNRSjjL8mi9LkQeWYld+u5ahC4Kcx2AEwLUMuw30RmNEhT4Opfy4I25iENmdpwFd93EaEHIQ1ZdMd+cyccbcwjWXdYu1C6SK2stVgevAvTpWjD1TzvOaQh09QJozn24y1fW7oQBOt2lCEHbcxDG3ORhuzOMb0sWAzXpS6oTC7B8i3O/JUuUqMJV4gC12Std8Gara5eyuizsLOXBNUmIgyZwSFhs/sE13vW2UMkWXegDNnGDrA7SqU59iEMWfN5gWWgKl7SqQfJv0qIbr2NSf9tXvGDzvac0kVqCJZvzZ2NOPNXdMcBUwd0/ijDdWks11FHN87SiTR1QKStt2dmpxTBErz5q9m5aXsPDqzZLGstdvTgbV3oZvdJhCEzPjJcl6YIlXSO6hr1ILTx10kxpgKybRfdccDbx2C6Dps6oFhTIdN5ZOhJYOhJgGLbDdEmKEMPXL1konW7qROqCJbUqzfxfRcDAxxtuHK+x+aBq7LrxOnXkZ/dgaNYZuAdnf8WPCdQw1+V0PtnVUIfQqz0O6E/klA5UXwbs7VBmgZTZSH1uShDHsqQhzLkw7UZEE3y619zwepEhC4LZciDapLB6kS4NgOiSUIZ8uHadIgmGW0ogGpSYNo0tCEfokmC60AoQ378tXBthipURnccatRlvh4tD2XIQ+pzEfospD4HZ/5W3lqCNhQg9FkwbRrFtkfTVoUy5CP12TjT16pQGdpY2KjLROpzydYfWM4TDMdhtLGg2X3a1oWh2PbBtOkoQx5Sn0O07GA6jzGdx6j2/TjTNzBtKlidgDEWCnyXzZ0IhvNoow4E06bhzduZzuNoQ/58sghtToMUVM7eerYqY6GEbiDS6yXJUGUWUpe7cOUQTTJcmx5PEKHLAqsTUYY8hD4brE6EalJg2lSoNhVtKIBokuHaDJQhL146pD4HrE5E6nNep5+DM32tDdegjQULyv7LJoQuC6nPZTgOiwO3YNo0hD4bpk3jes+JW27DtOlwXYY2XOPsIWnbqvHm7XBdBlyXQbLuMnXAMcai+SkQ2twGCaiCk3iy5A0J3UKl1YmTYcosxJt5oQz5jToQRJP0eqm5jb9kN3+U8xt1ILA6AaJJrlNtIpi/e/pyqG1Iau1CT0x187wXYNo0qCYFrE6EaJIWHm6YNk0SuM3xnIPrQCjDr5MiDbkIfTZSn4M2Fkpb7hItOxt1IJg2HWf6WhOuxpu3w7RpDMdhT5Th6Caw3WcadZkIfTZEk6IN1/C9lxq1oLc6CqrIqhWmX0N8dgeGXJXQx4gisCqh9x9vS0jUAog8gMC1NIRugKoaPdfopppjLBvAtC4O1QCUEcU3UVvrxKkQeVajJgehzV1p8iCqNJgatOjWRm0OXJMFVac3arLjz8DUIIgq5ZetmiyIKu3XTRoQTJ0BU2c0arLhmiyIKhWm+XVYuCYzvhWmzmjUZr8eIRuqToeoUmFqEEKb83q3Xx7/so8qp14EKmNtOVuRDm4KNzsAhgWoZdivwdNqhckQWWaj+u8oS26jNgeiSpnP7jdbs+GaTKg6fX5nqDodqk5HaPMQ2lyIKhWiSoGo0uCazPn0waqUxrfzyihvTjhxP7mK4mbZAIYZqKFbbyDTagXJENlfPNw5jdocomkXx32e57lMNP8wv9RFe+D14n9nKE0WVJ0B12TN5wJRpTRqsxHaPLgmE6xMgqhSYeqM+ewgqhSYOuPtcTS5EFlWNS/tKuzft2FIpgV4R+e/BccJVPPHbmE9Avu00L3k022VlULuB5DqVQm95/jHJUQQ3UBsqRGmNEgzYapsuDrnA6FRnQNTZcHUWX/3RDBFdq0go5S5+cfytIUSugpLreYnNUhAH1RZlpCXMrtWkF7G2nr8XtJCCV1vTKviJ63I4YYo08HKVLAyFaJMf+/5wlU5DZLMKm7qZcint6GrEvooWZXQhxDvQULXGjdX85PrJSCoMgumyl4uOVBlVr08BabKef04FfrmPlBlFkQJqpenwlQ5869qkKeBFRnxVzXIUyEKEEyVA1GC6uUpKO1XCE0BRJn5epycWmligyIdrsptkKfVyhIXjLN8IPKsan76Q/qmM2WpCyV0BZJSyU2sE2dAFX+lLIsUCqIE1UgToMpfM1qRRBbN6xFjy9HixF8lRLNehadUchPrxSDICuf1VjNk10gTIEoQXJVbJ0uul6X8HTkuBKrMrhODKtgpl8Brbq1K6ONkVUIfQrwtIWELIPQAfNfSELgBimr0bKObYooxrQDDsjgUPVCKF12FbarkJtUKM8CyTIg8a3mA5ZkIVRHHcblBllErSWpUFbIdFxtkGWA5CCzPnN8Ho93RZD9XJ02ByLPqpCl10hSm7QzBsLdBll4vTW2yncVovysTfNGoKiLo94g8xUzbjw3yDKgiByLPbJClq1qrWbYfq8RbGNbT6taaBlnG/ODLpkGaWclNK6FuPP0otYEVbrIDdDNQQ7NfakiuYCfUCNL/SlkWmU6WjtXtNLTB4aqCOmmqqrWGaTtTJ02B/OVEFsmLk/aAvvno7cRKsptpBegmoJpqvQJNKWcn/MXD/YfNAFPm6ttgeP3uavFWoee2yHv378jxDWRZNYKMsqbkC/Wf3IQgGWbgHZ3/FmwHUMUbu4n18O3TAveST7dVVgqZH0CsSuh9xz8toUd40WXIpvLmpGp+er0ks0GStQzA0qw6cVqjYpuzk14l2Eo1Hm+QZFoiBK7jar0kAybPB0sz68UgUxjNsV9zdNJqRSkNkkya6WSNMMkQQnAd12tESaWctdoWsNxXLnQXOzqpXSOWYL/M3d0k8TyESHPqJRn1ElCoX4lW7bjX9C9loFoZqH7I+bxGmLy8Nc9TLwJVsFPvkzeeeviGhC7WJZc2ba3mpdeLl1mWRakWJjXbLnq6m0u5X1bwN7dEJQjl1xW8TXXidLB0xWb5Ja/m1BLKpiO3EitJv0ioimq9DE4ua9pazV/hvBZSJ07HqHeG+hW1wpQS9hpHB41lOVfKXVcrSl3ZHN8ks5qXXspMPl/3yU3wqoQ+SlYl9CHEPy4hnOgSeFNZU2IVL61OBKoXZy6DOlFGgyRH5i3vGDLIfZV9497woLZtQO3pZpvasJYIoUaYyjSf6xqxeru5vWNOQxABk29zdNAbJDnqQH2z9VI5bzNes9fRQQ/2yUP9Sl0rXNMCVgXqTG1YvHZ/lSC5TpReK0yzRAg04+lm62VvD9faTmyyXnR00DCqXTXC1OWtvF6cWSsElTWl3iVuOPkgZV5C1TT7hdrkR6ytldzll2VRKnhb6aYfta1QmumU0HW3fUgvdN+Tesv0wcYqQfIKTlQrBJU1pdwjbzx8M2H+nVAV1XqpIfkRc8uK57WQamEKUrHdFMZRDMfZ9mttAyp1SwPPccvWTgZLcutEGX/TvJWctIf0pLM1/7MqoY+UVQl9CPEbCQUAoRvgO5eGwAVQVKNn4W6yKcawAnTL4pD1wEOc6EL9xkfMhApOao0go1YIWgY1gvQGcY7CVx0Z1KOUuximn/y9IoWvhue4TdQdqeAlNIiyA70ijv2G1FMW6BWR9cex6r3WCLlOlKX017Eslx40f9lsvQoAgNRTJnDeaxvQyL2Vcl9VoFckdj8saVpLN/1ob6f2jXv7xwPebr6rs8nZyWJbr4UHdVj1vip+8vJWXisEVfPTHzGTb+PXH7+fUs8Ks+wA3QJU0eznqpMeMDaXs5dflt+QUSNIV/prW/vk/eO+safd2lZ4+6BB5i1XBxq83dxy7pYVmujXvIqJGw7e2FpBdjOsAM0EVFGtF+oSH9BXNq83qOQlCpzFnm52/7h/aDJkbsMH++T6IErovN/Wr24Q59QI0v+OeWuFGeXNqSXUxB+r/nUDjKCbgXd0/ls0O4BK3thNjIdvmxa4lny6rbJSyHyrEnr/8baEBAFA4AZ4zqXBdwHkPyMhA/AQJzpfu+EBbWtZU2oVN72al7EMavigEtaXYFGBu4vDNF3k2m7h1YfuMT6HiLf1jno4tptlzVsV3jqxq9QQRIf61FJ3hdJXZ24j1PBBCm8t03TxAWs9XPrt85djjnam1F0eGdBrW+C6FkRbv0bkeviwaUO9IBsq3ubp4tYLcq6R/jfHepOsO3EW839pAlCy7kQZe0sNH7S8xVdx0h/Sk29h1x+7+4aEzlYl3aduLmWlLLssi1IryOJYbuhakcW0NXfpnxqCqHuMf5ezExztjDJ2QjVvxeaq5KQ/pCffxm84cG1rBekXCVVSredrEu9TN5c2rXBeC0ivE+bg1AcdHayHTRuuk/4fla8eLCq4TvrftggVKt5WyUmu+VvmzShjpdwnJ5yp+NeNhmVKiGeb5ruWfLqtslJIfQBC/bJ5VULvNVZaQsYYwwLQzYtD1gMPscJzNesfULeUMVOqOGnV3PRlUNacwLFcd7azuoZtzeZrljaS1F2hCcBk7kp7hN5kvnqX9m+m8YKljaRvQbRG5fYIXemrNwYxNVyQwlPLMJx/wFiv8cMc7Qyho0Tuqe4csjjaGY52Ztewtdl87R7t8ypOWiU7xRwiMAwXRI6H4X5ta69MYL/fPx4YfBxsEORVsJOXt/iK5rQHlMRb6HXHipPrmWGWDaCbgSqq7aeKxPvkTaWM5Cr2MsuyKI9Ymyi609oAnGW8pPI19I+3aANwjR/2YnpS19JY2rS1aoUmqmCnPaAk3casP3BtSwXJzbAANCNQSbGeq068T95UykyuXNG8FlLOToKJvzEGcXT9OYmrvHfE5WhnSFzlk88HWqOKSnZKJSd1xSet4qSXMpLvEbeeKf3/btQj6CbgHZ3/Fs12oGpVQh8AqxL6EGKFJUQyxugWgGZeHJIeeIARnq1ad5+0+RE9uaIptbI5bRk8YmyRu2uZ+svaAOIuZS1UuJ1nvRuKqgnKoxjZ/kfMrSX09SJHqdaP4FmKzUGCxg8na04bW7FVbJDcXUPRnoEIvqJqf1J6G/DKw6WsBIRkV6BbIrKXIsS7eNa7eOWRh4xNFc1p1jaK2gcV2Ep0fuTk1CDbdBMh+R6vPFrHyytvSlne4stZqSXkxBvIL4/eTqpjhpk2gGYGKqm2H8sS7hI3PqQllS+3LItSQttA0541B4mGFgxZc6Z/LNAW1eAUh9DSvRj5/mUfgsXzIiXeRK3bd2VLOclNtwBUI1BBsZ6tTLhL2PiQtvzD/cf9wNwKF31na6Nq/Qim/lKgWzI4EaJof0RKfsArjlSzQX/H1BXNaY9oSXfxW049+n+v1yNoJuAdnf8WTfbVd0L/f3vnGdbk2TfufnmP432/vJ/+x/E+o0+XigMUEJC9EcTVYbd9bNUOrVZtVZQZdhJWmGGGkB0IAcImEEbYM+y9Q4Js2SMh1/9D0FJbW6E8JeLvPM4PMeO+r+sK8TwCyX2rhBAhVeCvjpB3fOYtfx0PqoEPywzPsfBLtvBLttyyXCtPtl5gqm1lB90n0QjD0ArmnSlti3emHvJgHsdxzDxZujl1fkml90PSz1V3sSs76ZyyB2EZ73owdXLrA9jCn7zY+m70Y4KmCIrgWnq1R1kbeXCstn1YUNlBS6/2JKTZp1Vimvoz24b4mTXerJI7FR3UYN6Zmu6kiMwPXGjqOI6ZH3frw0629Eu2wCVZeNJMHKN1vnE1DUnqehqhmzhjd4q+N9MUt+1l+aV4jjk+2bK+N0XUx2sZzKEIvitoDE2tdKUKrpW1J7jRj3qydLY7i+fMi2riHKN76b6BH+1phKpu+xu7U074ME23/3T/rl5sfWFrrKiP1zEsSCy9x6vyEDSGR2ReqOtJxiaZYOjH8P+BnfolW+CTLX2Yphiy4fe+Bx1DoiFCL6MQIVXg2QhltKIMEeLVb830BkR/gQgxypAvOfcmVseVrO9JN/VNMsdxtiM2yQyfbMkquVPXw8VxLOLzryaVOlR3saNzLnLKHamF37tQNVIqXJnFt4lZH/eOVqVUYoJ5592ZOoEpdtVdbFbJTx4sPQzjeGFTZGzul54svdyGwJx6f2LWR8UtMcSsj/25NrF5X0ZmfeJCOxrMO9crrUiv9n6YoJZW5fFopptc8I0/18Y3yXR7g/dhmWESjB2IWpfuG4Yk925EiFl73dvYhaTrSTPxTdzmsvzWKlnRCm9iOeZudC1uhfPAo9qgNHsPll7nSHFjf3pYxvvYJDPsTuwLxzH3YZthyMYPI7U/vXUCR2lIrFZGqOZ7H4Odndez+00yoQquE9LOuNKOkfiXh8ZF5PxvnCiHy9spA2O10TkX8cmWWI7Zju8Xm2TuSTNxiTO46vaOQ1B0YuV2IsSrWU1v2PLLDdwpc5tRNERot/lVhFpQRgPi1W3N9HpEF0zciRLRyhXsKsSq/A3ZVYhZjgJYdd9gDO+HabmSjDypZj4si23ozTTFsi07h4VZ1f4ByacFDVE5NUHU/B8KGiJzaoL8kuy8maa+bEtvpllI6gek3G8d4zW8mKbuNP3kUpceSVVg8llPhokr5Ti/Pqy6K6mwKSq7JhCXaONK0SFmfN4rqaIV3HahaLvT9HmVXoWN0UHccxiavi/LwjlBk1fh0yetCUw+68Uw3s7gmRYYsoljlMFN3KEvfjxH4s+zqxCzAgUnd37jdvKnYA2XOCMPiun2luW3NHej6galnBO2kjlCF0+GkSfD2Ith4kk37BguETYnuNP0fVjmO7AjpgWGbOwYaXADd/DzW+eDOYOsSsQoWw9O7v0WY3M35KjrDs/rZ31ZFspZ8BvCsmsCsGxrD7qBD8vcJUG7vJXeNijwZpp5M7f5k/Y7elLNnGMM74fpfHp7v2dsXmL1b//Y/6bJtchfGaHq1fT6Lb/cwJ0ytwlFF0KEdpmdjlCZgl2JWBW/LbNsPSpz8obX1a/d3nlINMSQLDwTrLanO9nMm2rjQTZ3J5s7xeo5x55wJRkpL3gkWHgmWHkkWHomWLqTzV1JRl4Ua+WjPMjm3tSTmHhTT4qVB9kCRz9NTL0cmvy5U4yuB9nCi2LtFm/iQ7NzJ5t7Jlh5kC3CUy7h6KddSUaeCZbKLbjFm/jQbDHxZtsbtgfZ0inK5MfA4x9+/887vqG0knV2BWKWK2Jz5n7EP7ji/PaDcH23OPNtL8tv7dHCl3YqIuUrTLyJcl6eCVaYeFPljJRrtRN7sXKKNLkTePzDG2/ccA8k8RdZ5Qp6qTw8bfQHH8crLvsfhOtjdnRev9TSi2JNTL3sRVFObWPi7mQzL4rN01nvrK5xZvfDDC47vfnZzfPE9EfP+5n/TZNrkD8PIrT7QoRUgb82QuUKUv68V1zJVw7nvnY56BBi5BJp4RJluQ1doyydI81coixct/IQlygL50gz101bcIwwdiSauG66j9OTzbpGWToSTZ7e/+kWnDZds+UxE81u++l8fPOtj69/EsDsoJfKlStDKVz2o4muOl687Kh2n2DgEmm+vWV53qwdI4w3r5Vy7s6R5tubyG/Ny/w2/viH37/x6fef+9HaKMUryndCMTlT3nG1V50+vOJ06D7BYNtP9wvM0dKRaLx5Rq5Rls6R5s7bfbL+SAuHYMOvHNXOX9Z+EMhJKFxhlisgQi+dECFV4NkIpbeg9AaUVrc1efWIJpi4HSWililYlYhZ8VypJSthaY9cI/jful7/6r71FQfzKw+MXxGvPjD+6r7Jpz+YXnnggKW0xPFnGeXrymWhl64R08cwUcLrmJ++un/y8ku1LFcfGn913+jzW6e+uPODG7EkMnOCXipjVSBmBaIULYWliF0jBN+5/njZwfKyg9mVh7s/4J3Q9Is7xp/98KFjSFZU1jStZOV3fuZ/LacG+fEmneMb06pXefVbfrmBO2VOE4qCCO02OxOhtBeOELMckYsWw9IkPvFNzqH5DkEchyCqQxDt1ZD6ICjRJVwQwOqJyZ2mla49XRZGhSKheCmCJ8UmtDiHChyCuLs91C1JcQhiOYcWYimtxIxRSvEys0KxMa/ydXLhQmiK2DO23jk090FQ4p54uqkOQQzH4EyfeBExc5xSvMwsV0CEXkYhQqrAXx6hCsQoV1BLVmJypyN40vA0aXja6KuklJg5Fi+Yp5fKn12WCkQTrsXmzUSkS8PTJLs9zi3PKyJdGsefoQnXfv10U4pXonMmwtIke+npjkgfjc2bpgnXtlogiJDqCBFSBXY0QpEiSqmCWYEY5X8svWydJpRRXz1ppXJ6meK5y1L6si4LTSijl63/9rzKFLTS9V0f4V833z8yqRr5pUGEdl+IkCrwbIR4zYhXj1Jrt2gdohZsLUKvrrA+r7zKCDmRGlOrVtPqtv5yA3fI7EYUKYAI7TIQIRD8q4UIqYgQIVVghyOUUKpgVCB6OQiCzzWxGuEhQiogREgVgAiB4F8tREhFhAipAr+IkH9ifVozSqtHKbVbtA5RCiZuRYooQgWjHNHLQBB8rolVCJ866URqTKlaTa3b+ssN3CGzIEIqwM5GqJFRiZJqELsaBMHnmlKP/NMfO8aJIEK7K0RIFdixCNELp66HVN4gNt6OagJB8Hf8MbrpKqEGk9DMhQjtqhAhVeBXEWpCaXUopWbLMkvmA+iie/7pP+K4P+FSQBB8nj/iUpxC+FG8AU6lLKV2Oy83cEfMEqHIguWUIojQbvJshFKbUGod4tZs2aSKtQT+RHT6YGRaHwiCv29spphRNJdctb6N1xq4U2aKEBEitNvsWISSqxWcqnVOpSypYg0Ewd+XUylLrlbs+v/Cr7gQIVVgxyIEgiD4cgkRUgUgQiAIvqJChFSBZyOU0oRS6lByDQiC4B43XYQiIEK7za8i1IhSalFyNQiC4B43vQEitPtAhEAQfEWFCKkCECEQBF9RIUKqwLMR4jYibi3iVIMgCO5xeRAhFQAiBILgKypESBWACIEg+Iqq4hFSKBS5xawYhmccyzuO5R3H9iaxfEhsH1KiDynRJz7pqb5kzhOTfROUcn0pXCyFi6WkYCkpWGoKlpqKo6XiqGk42hPpaTg6D0/n4enpeHo6npGBZz41E8/MxDOz/FhZfqwsP3aWPztbqd9TWTl+jExsakFkaVXun5kmRAgEwVdUVY7Q2MRIGOu6U7SRQ7je3RCde6G698J074fpOUToPSDqPYg88TDqhGOUvlO0vlO0gXOsgUucgQvJ0DXe0I1siEkwwlCM3anGHjRjT7qJJ93Ei2HixTT1Zpn6sM18k8x8k8ywSeY4jjk+2QLPNfdLsfBPtQxIswzkWQWmWwVlWBEyrYMzrYOzbEKybUJzbMJybMJybcLybMLybML4T8y3CS+wIWRb3gs7Qebgtj3TZyOULELJ1SipCgRBcI+bVo/C81U0Qvzq6ITSj0IyzriSjByj9Z1ilKUxdCUZusUbupGN3BOM3CnGHhRjD6qJJ83Ei2HizTT1Zpr6sE19E818k8yxHHNcsjmea4HnWjzNTADPKkiZmQzr4EzrkCybUGVmck+G80+G820j8m2JAttIgV1UoV1U0ano4lMxxadiSuxjhfaxQvvY0lOxZRvGlZ+KqzgVVWIbkmt9N9igvD57ezOFCIEg+IqqshFaWJhnC38qH3ekV1zyZVliyEbuCSYeFBNPqqkXzdSbburNMPNhmvmyzH3Z5thEC1ySBZ5jgeda+nEt/VMt/dOsAnjWgenWQRnWhEwbQqZNcJZNSPbJ0JyTobm24XzbcL5tRL4dscAuUnAqqvBUVJF9dLF9TIl9rPB0bOlpUvnp+PIz5Ioz5MqzCVVnKdVnKdXnqDXnqLXnqLVnqXUb0urP0hrOkirto4vsgzNOx6ditjdZiBAIgq+oKhsh6egIp/J2yzI+vfUGgWfvSTfxZpr5sMx82ebYRHNskjmOY+GXbOHPtQpIsQpIsQ5MtQ7iWQel2xDSbYIzbYKzToZk24bm2Ibl2obn2YXz7SLy7YgFpyIFP/cmpuR0rPB0XOmZuLIzpPKz8RVnyZVnE6rOJVSfo9aco9Wep9edp9e9y2h4l9nwLkv0HqvxPVbje6ymd1nNG7Jb32W3vktreJdS9UFUwfvRnPvr6+vbmCxECATBV1SVjdCIZJhTeadlGcdr/p6Q9gIRFHoTDAAAIABJREFUSrMO4lkT0m0IGTbBmTYhv4xQBN+OqIxQ4YtFqHYjQoz6F41QZP570RwHmUy2jck+GyGOCHGqUWIVCILgHje1HoWpZITEkuHEitsty1he8/dBLxohq4A080CexdMIBWdbB2dbhuXZPi9CccIzkcWWUSXWMWV2kUKLPxuhpPtra2vbmCxECATBV1SVjxCO1/J9UNqpF4iQFSH9ZGTO+xE555QRCs46GZF3NlZwgcg/Hc63/c0IRRZZlXQT+O0eKaIbdUMJpAp7ctXZrUaIvvMRakCcKpRYCYIguMdNrUNh/L0QITzXJI7/+cra/NT8YFTeBwE805Dsk/1jFauyBW71j0HZJiG5ZoRck2C+KbHQNqb4dFTxyTCBWUCelnimvn00o6gTv7w2HVduS6o8FVNuGVdpSak5Ta97FyIEgiD4H1T1I5T2whGKL7i0rpAvrT7m1bj4pugwy65PL4gRQmm1DwMyDDjVPwja/LObMbEl5yMEVuSyDwrasZlNDyUzokZxYkGH9+Ol4ZgyK3rtR0U9uLL+QFb9x5SaU4z693YhQkkNKKkKsStBEAT3uCl1KFTFI9T8ohFKEFyeXRwV9af0jVV6c7Vq+1jtI3nT88Pcmru8OseFlcmCNv/phaFmMS9cYNk3Lhyb7agdpMoVa7WDCQUd3tOLA6QK++Hp6sHp8q7xnNHZJlbDBVrd2ReNEP+96ESIEAiC4FbcYxGaXx5Pq3aanBtkl9/seVTKqbwzszDCqbrdLsmTzrT4ZelU91EWlscTyj5alS0WdwUR8vVGZ1sbxeyCDu/JhV523b/l66vFPbiiHh+EUFm/P7nGGiIEgiD4n/LliFDqi0ZoeW0uMveDvkeVvY9KB8drwnJPzS2Ncapud48W946V+GXpFHUQFlYmKOWfrsmXclswfrka/RPCppFkZYQS67+Ura82iGnVQ1G1w7Hprd9T606/cITej0502JkIJTagxCrEqgRBENzjcl+GCAW+WIQohVcVSBGRfa6gKQghVNQW7p9htCZfSqm5V9lDXpXNk0o+Gp6qG56qiyk+s7Ay0fUoP6X+5rpC1jjMKuzEzS2P0qovLK3NNEuT6HUf5LTfo9aeebEPJrwHEQJBENyOeyZCfilmsfzPeqSlYdlnYgs+7RktpZd+R8i06JIWsiu+jy443yrOaBzito1ks6u/DS0wy2lx658oaxInd48JCjtxGc33u8ZyY8qsBF3ewzPVXePZDSMJtLpz9PrzW4gQZ0cixK5PrEeJlYhVAYIguMfl1u6RCAWmWQemWeJTjAkZNoQMK3+eMSHLOjTHLijLNCz3ZFieTUiuWUS+XVi+ZYTAJrrYnlhoRSyyji6xjSy2ii61iy2zjym1IVeejauwjau0pdScTqg+9cLfE4IIgSAIbsu9FKEgnjUh3frJYXtsnhy25+Smw/bYRRbabfqyqn2s0H7TYXvOPDliwllq7dktfFlV9B6l6oPI/J2LELsesSsRswIEQXCPm1yLQlQ1QkmVt1tX8LyWG1uJ0C4cOw4iBIIguE1VNkLDI0Os0hvNS75c0bd+yTYeVGOvjdM3mD89fQOeY+HHsfRLtlSmKDDNKpBnHcSzJmRYEzYOpH0yNOdkWK4yRbYR/J/P3RBddCq6yD6m2D625HSc8HRc6RlS2RnlmyGy8twNNRspotWdf/qXIaboXWbjeWbThqzm86zm87T6cwlV7xHz3o3i3IUIgSAIbkGVjdDMzAw196e8vu/jCj/yoJm6xRtiyMbuCcYeFBNPmokX3cSLYerDNPVlmfmyzbBsc1yiOZ5jjk+28Eu28N84f51VIM8qKN2KkGGtPE1qSNaTk9flnQznn4zg2xLzbSML7IgCO2WWYkpOxQjtY0vt48rsSeWn4ytOx1ecIVeeSag6Q6lWlukspfYMpW5Dav0Zav2Z+Gr7GOGZwNRT3NyInTiVA0QIBMFXRtWMkEKhWFtby8xneFGtQjLtMQmGriSDp+ft9qAYeVCNPGnGXnRjb4aJN9PEh2nqyzLFJppiOWa4JDN8stmTM3ZbBPAsAtMtA9MtgzIsCZlWwVlWITnWobnWYbnWYXk24XybiPyTEQW2RIFtZKFdVJFddPGp6JJTscJTGykqO62sEbnyDLnyDLnqDLn6NLlmw4Ta05S603GVdqG5Nu5x9g3NlXK5fBvzfTZCrDrEqkCMchAEwT0upwYF56lchBBCi4uLfX19ZGbQQ8Lpm74nbvjo3fDRu+mr9wP2xA/YEz/gTtzC69/207/jZ3DH3+COv8GPAQY/BRncDTK8SzC8RzC8F2x0P8TofqixQ5ixQ7jxg3DjhxHGD4kmjkQTp0hT5yhT5yhTl2gz1xgz11gz1zhztzhzDMkCE2/hHm/hTrbwpFh4Uiy9qJZeVCsvmpU33cqHYe3DsPZhWvswrZ7qy7LCJVp5UC39yF/ycphSqXR1dXUbk4UIgSD4iqqyEZLL5dPT093d3dk52ckpiRwu+0VM5rKTN1342ZQ/NHHThd+Qu9nUZxUKhQMDA3NzcwqFYhuThQiBIPiKqrIRQgjJZLLHjx+LxeLe3t5uVaWnp6evr08ikczNzW3vD0IIIgSC4CurKkcIIbS9Nxa7wp8Z6i8i5MeuZ9YhZgWil4MgCO5xk2oQQYUjhBBqmVzIHlviT63yJ1XR3ImVssmVoceLf2aOECEQBF9RVTlCc4tLYY3DX/Qv3ZejBzLksKaKPpSh6/Po46aZtI7hbc8UIgSC4CuqKkeI2dhrW79wdQY5KRAGITeVFIPQvTX0iRhZpzfX9A5tb6a/ilAtYpYjehkIguAeN6kaEXJVMULLKytXUsvMy8dOVk990Ln62YD80z7ZNu3/HeVKP9uSAz/7+YD83ZYly9JRo+xOp8Ts7U32FxHCsepTWlFKA0quB0EQ3ONmNCNiMUoubNyJcOwko2Pj9vFZ+tmdhjldpgWD5sUS8+KR52mxfSXbseQXmvD7DdJbdRKrv4mk/dmPaCsUigB2tSOj1yG+7T4JBEFwj/swoe12XHtWaevO5WNnGJGOniZl6me0GWS1G+f2mOT3PaNxfp8hf+Oy0abLW9WI32f0u3cw/qONG2V16Kc2HmdWfBNBlclk25jszxFaWloSNbUkp2Yy2cmsRC4IguCeNz2bPzAwuL3jzfznEEuk9jFp+rwWg4xWo5wu47zeZzTJ6z1Z0GeY26Ob3W2a12tT0Gec16OX3W2Y22OS12uc22P0S43zevWyu/Vzekw2bye352RBn0FOj8HT63N7TPJ6n27BMLfHgt9rld+n3MKJ7G6DZ7aQ12uY2X6C23CcUfZ1GOXPHsB0bW1tZmZGLBYPAgAAvBpIpdL5+fltf9HyP4RYIj0VnXoitVGf12SU1W6c0/VUk5yuI7w2pwZJ4sC0RV73+cI+t0Ypo3/6aHr7V+VDdvm9htldpjldZrndmzXM7rxYOvhBUb9BdqdeZqdWRodWRodaaptbozRrZFYns+Mor107o+N4RodRdpdxTpd+Vqdpbpd+VudXZYN5kjmz3G79rM7PhQPvF/XpZ3VuHo9hessJTq02reRqKPnPRkihUMjlcplMtgYAAPBqIJPJVK1ASBmhyGQ9bv2J1AbDjFajrPan6qa3XSjs9W2SxnaNs/qnyD0T4R1j0Z1jiQPTniKJSXa7TnqbT5OU3ju52YSeiQLJbEzX+LG0ls9L+u7Viu/Viu/UDHs2SnrmVh7WiW9VD/m1jNJ6Jw0y24/zWmM6xxN6JqI6xziD02HtjyI7xqI6x4JaR61zO/Uz2zePxyCtUS+xSptSeDU0fu3Pn8oBAAAA2HXEEqkdMUk3qVovudYgrdEwvVmpPq/JOruV0Cr5d3F3QLOkSDpL6Rm/VNId3fmI2Tthktmim9ZkmN5smtli9iv105uM0pt10hq/Lu3xbRT7Noo9GoYrxmb9mkfc6oYw9UMeDUPYRrFFVsvx1Ma0wakfqwa+LevLGJ6+XzN4WdhzvbzvirDXPKvFIL3p6XgM05v1uXW6zHKt+PwrIXEQIQAAgL2AWCK1DWPrsCv0kqoMUuoN00RKDdJEJjyRCa/Ru2EosEnsUTdYODIT3S7B1A5UPpq9Wdajxa1T3lMrue5IUq3Sw4m1Rzl1+qkNuikNxjzRcW69OqdOg1P3Or0qpmP0y6IuE17jxcLOC/lt+9k1Bmmi49z6tIFJYpuE1CGtGZ8LbBJHtEoIzeKQlpFzuS26m8ZjmCbS51Tr0ks0Y3OvEGIhQgAAAHsBsURqG8o8zijVZZXrc2oMuHVP1efWHWJVXSvppHSN3izt5ounotskdyt6c4enDLh1Osm1Btw67aTaayVd/o3DSvGiIWLrSJFk5mRGow6nVrkd3eRam3QRuWM0um0kokUslMwENg4dZFYZcOv0kmvJHVINdrVPw+C1kq4vCtqdq/sOs6q1ObW6ybWbB2PArTvBrtShFmnGZF8JioEIAQAA7AXEEunJYLo2rfg4XajHrjzBqX6qXlK1dmJloGgIWzdwIbuR2zeGre+/Kmj9KLfp/ewmi9Ra3aSq44lVH+Y0XS9uf+q14vavC9ssU+t0kqqU21FnVtwSdgaKhv6ZIDzIKM8YmPixtEudWaHPqdZKrIxvl5in1CZ0SKJaxZmDE2XSmeDGoTulnRqsCv1NgznBqdZllmkn5B+NzLgSFA0RAgAA2AuIJZKTQVQtiuA4tUiPWXYiseKpuuxyE05VSu8j//p+dveoaHwuufdRWNMQvr5fNDH7UbboKKNUi1l2hF6qRhU+4yGaUJddcSKxQi+xQp1RGtky/HGOSItVpp9YSemQnEisOMGu0GGXmyRXMbqkd0s7rxa0fJnfHNY0xOiSXuI3Xy9qs0qp0WGX/2I89BJtUt7RiLTLgVEQIQAAgL2AWCKxCUzQjOdrJxTo0kv0mKVPPcEqPUwp1mWWPizr8K3piW0ZuspvMk0qv1XcSm4T67FKTZMqPstpeMZPsxv+nSsKFvVbJldqMYSHEoquC1p8a3o0aCX7yYX67LL0vkcG7DJdRqk6tdi5vNOrutulvBNb0+NR2Z3YJc0bHMdUduFqeuxSq7Xows3j0aEWasVma4RxLwdEQoQAAAD2AmKJxNqfrBmbq0Xi61CKdGklG1JLNBOKv+U3xTYPYqu698cJIkQDn2fWm7HKaqQzNwua34rJfy+1OqKh/9cSG/qprcMfpNUcp5bcErT4VnWrkwsNmaW4mh7hyFRCy7A6ufA4tdiYWUpqGdalleyPE6iRBK9H8i/niFzKOv+PmKdGEmhTivWeDoZWoksrOU4u0IzKVCdwLvtFQIQAAAD2AmKJxNqPdCw6Sys25zi5QCehUKl2vMCCUepW2m6fVL4/mn84Nv/HguZ3uZVHYguM6SWa8QK9hCKteMHBmPxfqxaTvz+arxaTf6+wxa+q+yhJoBkvOJFQ9G1OQ3Bt71GSQJtcqEMu1EsosmSWHidv7PE4udCIVmxKF2o/ueYZtUl5R4m8I0Hsy3iIEAAAwJ5ALJFY42KPRmZoRmcdJ+XpxOc/9Xh8vnps3tG4PJ34fF1yvkZsnhaJr0PO14zjH990t99RM46vHpunvWlrB6NztUk/b18zjr/5/tqkfC0S/3lb047JPhqWciSA+RU+HCIEAACwFxgeGTH3iTwannosgqcdnaUTm7PZ41swe/vGvJCakekaIZzDeNpFzwCIEAAAwF5gbHziLJZ4xI+uEcTSDk3Wi0jZrO4W5P7C8D9WZ4tqBLEO4ykHXMMfhkVv7ziwECEAAAAVQqFQyGQyQlKa2oMATRz5BIFpEMJ+1mBVUduPchBDfOuLm1n5Bds7Ch9ECAAAQLVYXFxsbWv7gRCl9ZP3ceeg486Bx52eq84u6hJ07D72xHUHr1Di0NDQysrKNiYLEQIAAFAt1tbWJiYmmpqayEncgFiyf1Ssf1ScKhod5x8Vl8rjdXV1zczMwDshAACAPcLKysrExMTAwEBnZ2e7qtLR0dHV1TUwMDA9Pb2906oiiBAAAIBqIpPJVlZWZDKZ8kxvqoZyVCsrKysrK3/m1LQQIQAAANVFNtajeNSiGGtTNdFY2/p4l3xu8k9OECIEAACgisyPdC4JHqxXfIEar6LGr1XO5m8V9VfWBRcXi3Ars9tPEUQIAABA5Viakk5H26LS02jwBpp4gMYdVM8HaPQuavsKZVj0x19ZXV7a3kwhQgAAACrHGJ+AaLoo1Rzl2KOSC6j4A1W06AOUYYvYxksEjcbshO3NFCIEAACgWizMz3WHvo9iNFGMJiIdR5QTqivpOIo4uhp4uIh4Z3uThQgBAACoFmOjklZfSxSmjsKPokhNFK2luhKPKQjq87hDmbgv4XtCAAAAe4FRibjJxxKFqqOwoyhSC0Vrq65EzXWC+iz2UAb2SziAKQAAwF5AKhE3+liiEHUUqoGImihK61kjj/7yn5qIqLHpGm0UdhAR1VGUNorSQpHHfmMLGw88hqL+aPtEjd/bQvgxedCRx74H030hQgAAAHuCUYm4wcsCEY6gYA0UromIWpvUREQtFH1i40LoIRT4Jgo9hCg2KFJ748qwQyjzBqKfQYR3EFETRev9fNMzm9p8U8SxJ/fRRNEnnuxLE8Uaomg9FHEURRz71Ra0UOixtYAjU95qPN9LECEAAIC9wKhEXO9hoQg8jIKOoNCjKPzYEzVRmAaKMUZV4SjkCAo5hLhfokJ31ERHrRwUchiFHUXhmijgDdSVjYR4xHgPEfajyhAUb4VCj6DwYyhCCwUfRIFvo8C3Ee7/UCkexRgj/9dR4NsoQgtFaKPwYyhUHVVFIKIO8n8D4f4PiatQvjMKeBNFG2wayRNDNFb8Dk14qfF8IEIAAAB7AqlEXOthLvM/JA84goKPotBjPxuijqJNUH0CClJDMWYo6w6qT0AVoSjkKAo+gkKPoSA1RD2L+gpQrBlqZCD/t1BdHCLZbNxKOIRYH6PcByj3Acq6g/qLkBCPcu6h7Luo0BNF6KAQDRSsjmpiUOo3KOc+yrqDFsZRKxcV+6Ksn1CQ2i8GE3psnaCxiDs05nEgDSIEAACwNxiViKvdzVfwB9f8DysIGijk6IbBR1CELqojIakIVUagmhhUgke9AtSWikoDUWUEijRAvn9HPfmoBI/CtVFXNqoiIqkINbFRbRwinUT+7yDGBZT1E0q/iVK+Rj15qACDUr5GGbcQ6SQKOoiC1VGRLxqpQ8VYxLmEkq+g5VnUykXRxijOGgVvGkzIURRyVBakPoc9JMUcSPWGCAEAAOwJpBJxpZv5EvbgMv6wPFBDQTj6s0GHFRH6qDkJMT5WhJ9AqddRZSQqwSPqe4pocwX+bUXCWTRUochzRgIvBf2CAv8OqolVkOwUwccUBA1F8DGFv5oC/zaKNEJEA1QTi2jvI+7XCvIZBe4tRfAxRZC6gnAMVUUpyGdQoQ8SeCpynVAlEYnoiqSvFP4HfjEYwtHVAPXHPgdH3PZzvSBCAAAAewKpRFzuajbvo7aAPbTmry4P1HiiujzwyHrKNYW4dr0uQdFbKCedXs+8t96UtF5DWi/0lXv/Yz3fY52PWRcS1lOurUearocbKupp67QP1yNN5UQTeaC6PFBdjt+vaEpcb02T0z9ZFxIUIw3yuFNy/AF54BF5qN56hJGiPWO9MnKd/e91xqfrBE1FV956bfx6qK48WFseuHk8Gst+R6a81IZc9nE9IUIAAAB7AqlEXOpqNuOt9tj30JKf+mqAxoY+b8grIuW1ZFmxn4z6oaw8YjVUXyYkyBifr5Hs5cUBqz5vrRKOr9E/kZcEyXKc5ZVR8vIIxUi9vJ4mryDKcl1X8Wqr/uqr2HfWqB/Jcl1XHv63LNd1jfnFqs8bqwFHV7H71mgfy8sj1gfKV6Nt5AKsrCRQLgxWiOvkVTHyisjVaJtV/IGfxxOgMY89Muap1u+0jwMRAgAA2BtIJeISZ7MpzwPT3gcXcEeW8eob4g4tEy1XQgxlxYEr1M/kPYJV7o21HFd5W4a8iSsrClxy/8ey579WWV+t5fssuf6/JZ99S5h/yMrCl0OMlrzeWPY9sLEdP40lzN9Xk76VNyWvptxa8nprGXtwGa++jNdYxh5a8npLVh65HKizhDsiq4pb9tOQlYQsh5kseb2xjDv882Dw6st49Vmfw6MYtd6H+5I8IEIAAAB7AumIuNjRdNz9wISn2qzv4QXskQ1x6gteby9gj6wWBy8zr6xkuczefG0ly3mZfmmRaLtaFDiPeX3e461lxperfJ95zD8XsEcWPN9ZK49aDLdY8FHb2Ii32rz7GwvYI6vZrrLmtJXUH5fizi9g1edd/77gvX8BpzGP+ddaRcwiwWDB9/Byyp0FvOZaSegi0ebnLWxy2uuQxPVAt8M7ie7/hggBAADsBaQj4sKHJo/c9o+5q814H571ObKh98E53LG1evZqDXWB/Imsv2I5z3ulKGhF4L9aQ13m+zx2/edjzJuLrKsrhQGPXf8x63Pksfvbq9WU+TCrWa8Dsz6H5nCa82FWS5wbq+UxS2n3Zl3/uRD3waooaa2BvVpNXqR/OYt5YznXc60jbw6vOet98LHz35bS7sp6SuaCDGa91X4eyRMnPA8Ou+zvuP82GwMRAgAA2BNIR8QFD00kbvukmANTXodmfJ7ofXDGc99i2r3ZyFOzoRYLnBuz4VaPA3QfE4xmI04+xmnOeB+c8dg3S7Sdo1yccX9rxufQjOe+BdY3jwP0ZrzUZjz3Pw7UXyoMWuQ5PPbXmXb5+4zPoRnMGzOe+2fDLBezMbNhljOe+2bDrR8TjGe8D854H5rxPjgbZjkbYrrxT59nHfM4OOC8v/X+2yyIEAAAwN5AOiLmO5iIXfaNuO4f9zg46XloQ69Dk16HJl3+NYl5Z9J9/6TLvybd90167J903z+JeWfS48DGHdz3Tbq9Nel1eOMhrm9Oeqht3OShNuny+qTrG5Me+ye9nmzTQ23Sfd+ky+uT7vs3Hu6+7+c9uu+bxLwz6blpGJuUYtT6HPe13H2L6QYRAgAA2BNIR8R5900Gnd4Zctk/6n5wzEN1HXFV63mwr/HHtxiuX0CEAAAA9gLSEXHOXaMBx7cHHPeNuKqNYlTXIecDXQ7vNNx5k+H6OUQIAABgLyAdEWfdNe6+/1bPg3eGnA9IXNVU0xFXtX7H/W13366++SbJESIEAACwJ5iYnExzOlN3683GH9/ucDjQ53RINe1xPNj80zs1P7yZfeWf9EAnuVy+jclChAAAAFQIhUKxsrKSH++TceWNilv7Gx2OtDw8qoI2Pzza9ECj6vZ+wbdvYM+9XszPlslk25gvRAgAAEC1WFhYaGluYrp8xrr0VuFtDeFPWipo6U9awh81M747gD/7t3DPewMDA8vLy9uYLEQIAABAtVhZWRGLxWWlpexwr9iHF6OumUddM1M5vzMl/mAfcec9UghWJBKNjY3Br+MAAAD2AgqFYn5+fnBwUCQSCQQCXlpqWmqKCpqRkSEQCFpbW0dGRrb3NghBhAAAAFSQ9fX15eXl8fHxvr6+DlWls7NzYGBgampqZWVFoVBsb6YQIQAAABVFLpevrq4uLS0tqypra2vr6+t/Zo4QIQAAAGDXgAgBAAAAuwZECAAAANg1IEIAAADArgERAgAAeGkYGBhwcHCg0Wjb+DjA9PT09PT02trayMjIMzeNjo4ihNbX15UX/kogQgAAAC8NwcHBr7322muvvWZnZ1dcXLylx6akpDAYDOVGhoeHlVc+evSopqbm4sWLDQ0Nra2tV65cEYlEg4ODOz/05wARAgAAeGloaWmxs7NTdui//uu/vv322+7u7hd8bHx8vKurKw6HO3v27NWrV7FYbGhoqFAojIqKsrOzCw4O9vHxiYiICA4O/vrrr/+js9gMRAgAAOClYW5urqWlBYvFHjlyRJmiv/3tb1gsdnZ29vcf2NTU9OGHH0qlUh6P991337W2tjY3N3d1dSGEcnJyLly4QKPRPDw8KBSKj4/Pl19+2dzc/JdMCCIEAACwSywvL586dUp7K2hqampoaGhpab3++uuvbUJLS4tCoTwvRSsrK46Ojubm5gihlJSUmzdvSiQSmUwmkUjm5uY++eST69ev37hx49atW5GRkfHx8cHBwTgc7q9ZBIgQAADA7jA1NfXazvG///u/BQUFv7mjnJyc9PT0oKCg+vr68+fPe3t7MxiMqKio9vb2+fn5ixcv/vTTTzdu3Lh7925bW1tISEhtbW1wcPBfswgQIQAAgN1hfHzc3d39+vXr33333bUX5tatW/fv3z9z5sx///d/Py2Qra1tRkbGzMzMb35qbnV1FSH0/vvvk8lkDAbT2dn50Ucftba2Km+Ni4vT1NRkMBju7u51dXV+fn6lpaVYLPavWQSIEAAAwO4wNzcnkUja29vbXpj+/v6amprbt2//61//UuZHQ0MDi8XW1taKxeK5ubnnfXR7dXX1+++/X19fDwgI6Ovra2pqio2NXV9fn52dpVAo586d43K5dXV16enpTk5OmZmZNTU1f80iQIQAAAB2B5lMNjc3NzU1NflizM3NFRcXq6urP/1Iwq1btwoKCrq7u6VS6eLi4u98eWhpaenOnTsIoYcPH964cePx48dVVVUkEqmgoKCystLNzU0sFldXV8fGxkql0vDw8NbW1m0fGHtLQIQAAAB2E8ULg558T+h//ud/Pv744+Tk5Pb2drFYPDs7+4en1l5dXY2IiEAIhYeHCwQC5ZU9PT3K39TFxMRIpVISibSysoIQmp+fj4mJmZiY+M/OHCEEEQIAAHhZkMvlbW1tGAwmMjJS+ZXSqamp1dXVHXnL8uuNwDshAAAA4Gfkcvn09LREIhkYGHj06NHy8vKfPJePKgARAgAAeDlQKBRra2uLi4vK36H9xbv+D20ZIgQAAPCSsb66ujr7+MXvv7i42N7eXly26SvWAAAFO0lEQVRcnJOT09PTMzIyQiQSn96ampoqFAplMhmXy2UwGAwGIzExsb+/HyE0MDAwNjaGEFpYWCCRSFKpdMfnAhECAAB4yZgdGGj29X7c86JHjZPJZDk5OUQiMSwsLDs7e2lp6bPPPisqKqqqqkIIUanU4uLi4eHhixcvZmVl5eXleXp6ent7I4SkUqm7uzuTyXRyctLT07t8+bK7uzsGg5mfn9+puUCEAAAAXjJGOzt6wkJG2KyZF+tQWVmZk5OTra2tjY0NHo8vKCggEAj37t27fv16bW3te++9d+nSpdTU1IsXL4aFhXl5eTk4OLDZbJFI1N7eXl1dvby8nJiYKBQKpVJpQUHB2traDv52DiIEAACwayxPTMz29MwN9L+4swP9bWmpvVFEND4+TKNOdnX94V46Ozs9PDxwOJyLiwuRSLxz505vb29XVxeRSFxYWAgKCmKxWFVVVXfv3q2qqrpw4UJ9fb1EIhkeHnZ0dEQIUalUW1vbkJAQb29vY2PjzMzMHVwBiBAAAMDusLK02ObrMxRPGo6L3ZIDEeHTPB7q60N9fSNUymRnx+/viM/n9/b2ksnkmpqaubm5mJiYoKAgGo2WnZ29vr5OpVIvX76clpZ24cKFwMBAa2trAoEQEBAgl8vX1ta8vb17enq6urpEIpFIJCosLExJSdnBRYAIAQAA7A7jY2Pd/n5obAz19mzFXtTbi9rakEiE2lpRV6eEmjDZ0f47OxIKhdeuXbOxsXFwcGCxWAghT09PLy8vhFBxcbG9vT2ZTO7p6SEQCLW1tefOncvPz5+bmxseHsZisSwWa3x8PCcnp7y8vKWlhcPhLC0t7eAiQIQAAAB2B/HwcCceizrbUV3t1q1BtTWotgaJGlBLs4SSMNPV+bwdTU1NXbp0aW5ujs/nK4+bEB8fT6VSlbeSyWShUCiRSK5fv37t2rXU1FRXV9fQ0NC+vr4rV64IBILBwcHg4GAmk5mTk+Pm5jY3N7eDiwARAgAA2B2Gh4Y6sb6opRlVVmzfinLUUI9EDd3hoavLy8/bV2ho6JUrV/z9/RFCExMTzs7Ozs7Ojx8/Xl5eJhKJ+fn5XC6XRCK5uLiMj4+npqYGBAQghJhMZnp6ent7O4lEYrPZfD4fh8MlJiY+evRopxYBIgQAALA7DA8Ndfp6o4Z6JBRuyxIkLEHlZaiqqiuE0JLPX11Z+c0dFRUV+fv7YzAYJpNZXFwcFRXV19fX3d0dExNTVFTk4uJSVFREIBAmJyfPnTvn4eFx5coV5fmE6urqlJ/tnpubUx7tlM/nGxsb9/T07NQiQIQAAAB2h+GhoS4Pd9QoQmVlW7aoCBUUoKIiVFraFeAvYNDHxsaWn/NOqLe3V5kNuVze29s7OTmpvH50dHR5eXlmZmZhYUH51Z/Hjze+Azs9Pa28sLCwoLw8MzOzuLiIEGppaZHL5Tu1CBAhAACA3UEiFlc9fNDk5dHkgdmCnu6Nrs6TsdGoUIAEBd3+eD6VqjyZ0F9zyNGdBSIEAACwO0xNTVWVlKQxmSkMRiqT+YKmcziJQYHdXu5IUNCNx/JpVLFYPD8//zIWCEGEAAAAdovl5eWJiYmhoaHBrSCRSCpyc3pcHPtxvnwGQ1mgl/dw2hAhAACA3UGhUCi/ELolFApFX11t6a2bBQz6yMjIy/seSAlECAAA4GVifX19TCJtqKgYGhp62QuEIEIAAAAvFwqFYmVlZX5+fnFx8WUvEIIIAQAAvHQoFIqX949AzwARAgAAAHYNiBAAAACwa0CEAAAAgF3j/wM2G2zJEp9ppAAAAABJRU5ErkJggg==" alt="" /&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;新搜索界面&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;搜索结果来源于百度，从界面能看出来吗？ &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071436274986.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071436485246.png" border="0" height="410" width="536" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;新收藏界面&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;点击读取最新，将从网上查找收藏图书的最新章节，并预加载目录。 &lt;/p&gt;&lt;p&gt;选取自动更新，每次跳转到此页面将自动读取最新章节。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071437191928.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071437461421.png" border="0" height="399" width="536" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;本地页面&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;本地图书页面，不自动同步网络更新。 &lt;/p&gt;&lt;p&gt;新增生成文本功能，在此只使用下载的本地内容生成文本。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071438169300.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071438546950.png" border="0" height="410" width="510" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;书页&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;新增生成文本功能，将先下载图书再生成图书。 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;如果网速慢或下载进度停止，可停止后重新下载，会自动下载未成功下载的章节。&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;文本生成页面&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071439097389.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071439297932.png" border="0" height="410" width="513" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071439408772.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071446214101.png" border="0" height="410" width="514" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;章节页面&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;新增背景色、前景色设置、阅读模式 &lt;/p&gt;&lt;p&gt;增大了字体、调整了段落间距。 &lt;/p&gt;&lt;p&gt;这种可以拖动目录阅读的方式是不是更好呢，并且预加载了当前章节的相邻三章，阅读无延迟。 &lt;/p&gt;&lt;p&gt;键盘快捷键导航也比鼠标方便很多。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071446416181.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/20110407144658854.png" border="0" height="410" width="512" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;阅读模式 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071447156259.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071447512880.png" border="0" height="410" width="513" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;全屏下的阅读模式 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071448251462.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071448468658.png" border="0" height="410" width="508" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;排行榜&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;能看出来下面是起点的周推荐排行榜吗？ &lt;br /&gt;&lt;/p&gt; &lt;p&gt;加载进度条做了调整，现在只要有一个Item加载完成，进度条就消失。 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071449489166.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071451076963.png" border="0" height="410" width="511" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;设置&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;缓存不再细分为缓存文本和图片。感觉分这么细没什么意义，现在图片、文本都自动缓存。 &lt;/p&gt;&lt;p&gt;增加了预读取目录 &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071451087411.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/bluewater/201104/201104071451121919.png" border="0" height="306" width="405" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;img src="http://www.cnblogs.com/bluewater/aggbug/2007913.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/bluewater/archive/2011/04/07/2007913.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
