[Avida-cvs] [avida-svn] r869 - branches/developers/avida-edward/source/python/AvidaGui2

baerb at myxo.css.msu.edu baerb at myxo.css.msu.edu
Thu Aug 10 12:18:05 PDT 2006


Author: baerb
Date: 2006-08-10 15:18:05 -0400 (Thu, 10 Aug 2006)
New Revision: 869

Added:
   branches/developers/avida-edward/source/python/AvidaGui2/trash_can.png
Modified:
   branches/developers/avida-edward/source/python/AvidaGui2/pyEduWorkspaceCtrl.py
   branches/developers/avida-edward/source/python/AvidaGui2/pyEduWorkspaceView.ui
   branches/developers/avida-edward/source/python/AvidaGui2/pyFreezerCtrl.py
   branches/developers/avida-edward/source/python/AvidaGui2/pyNewIconView.py
   branches/developers/avida-edward/source/python/AvidaGui2/pyOnePopulationCtrl.py
   branches/developers/avida-edward/source/python/AvidaGui2/pyPetriConfigureCtrl.py
   branches/developers/avida-edward/source/python/AvidaGui2/to-do_list
Log:

Trash can working.  User can drag out ancestors from the petri dish or drag
things out of the freezer



Modified: branches/developers/avida-edward/source/python/AvidaGui2/pyEduWorkspaceCtrl.py
===================================================================
--- branches/developers/avida-edward/source/python/AvidaGui2/pyEduWorkspaceCtrl.py	2006-08-09 19:23:27 UTC (rev 868)
+++ branches/developers/avida-edward/source/python/AvidaGui2/pyEduWorkspaceCtrl.py	2006-08-10 19:18:05 UTC (rev 869)
@@ -16,9 +16,8 @@
 from pyDefaultFiles import pyDefaultFiles
 from pyButtonListDialog import pyButtonListDialog
 from pyReadFreezer import pyReadFreezer
+import pyNewIconView
 import os.path, shutil
-
-
 from qt import *
 
 class pyEduWorkspaceCtrl(pyEduWorkspaceView):
@@ -140,6 +139,11 @@
       self.m_session_mdl.m_session_mdtr, PYSIGNAL("workspaceOpenSig"),
       self.fileOpen)
 
+    # If the user drags something into the trash can
+
+    self.connect(self.AutoclaveIconView, PYSIGNAL("DroppedOnNewIconViewSig"),
+      self.DroppedInTrashSlot)
+
     # Start the program with the population viewer
 
     self.navBarItemClickedSlot(self.m_nav_bar_ctrl.m_one_population_cli)
@@ -441,9 +445,6 @@
     # (actually only works with one population will need to expand to
     # two populations in the future)
 
-    descr ("BDB -- self.m_session_mdl.saved_empty_dish = " + str(self.m_session_mdl.saved_empty_dish))
-    descr ("BDB -- self.m_session_mdl.saved_full_dish = " + str(self.m_session_mdl.saved_full_dish))
-
     if (not self.m_one_population_ctrl.m_session_mdl.saved_full_dish and
         not self.m_one_population_ctrl.m_session_mdl.new_full_dish):
       m_quit_avida_ed = pyQuitDialogCtrl()
@@ -466,7 +467,6 @@
       ())
     self.m_session_mdl.m_session_mdtr.emit(PYSIGNAL("doDefrostDishSig"),
       ("@default.empty", thawed_item,))
-    print "BDB -- in Restart_ExpActionSlot File name is " + file_name
     self.m_session_mdl.m_session_mdtr.emit(
       PYSIGNAL("freezerItemDoubleClicked"), (file_name, ))
 
@@ -493,3 +493,21 @@
     apply(QStatusBar.message,(self.statusBar(),) + args)
   def statusBarClearSlot(self):
     self.statusBar().clear()
+
+  # Routine to process item dropped in the trash can
+
+  def DroppedInTrashSlot(self, e):
+
+    # Try to decode to the data you understand...
+
+    freezer_item_name = QString()
+    if ( QTextDrag.decode( e, freezer_item_name)) :
+      freezer_item_name = str(e.encodedData("text/plain"))
+      self.m_session_mdl.m_session_mdtr.emit(PYSIGNAL("DeleteFromFreezerSig"),
+        (freezer_item_name, ))
+    elif (pyNewIconView.canDecode(e)):
+      ancestor_item_name = str(e.encodedData("application/x-qiconlist"))
+      self.m_session_mdl.m_session_mdtr.emit(
+        PYSIGNAL("DeleteFromAncestorViewSig"),
+        (ancestor_item_name,) )
+ 

Modified: branches/developers/avida-edward/source/python/AvidaGui2/pyEduWorkspaceView.ui
===================================================================
--- branches/developers/avida-edward/source/python/AvidaGui2/pyEduWorkspaceView.ui	2006-08-09 19:23:27 UTC (rev 868)
+++ branches/developers/avida-edward/source/python/AvidaGui2/pyEduWorkspaceView.ui	2006-08-10 19:18:05 UTC (rev 869)
@@ -34,7 +34,7 @@
     <property name="minimumSize">
         <size>
             <width>195</width>
-            <height>521</height>
+            <height>491</height>
         </size>
     </property>
     <property name="maximumSize">
@@ -115,7 +115,7 @@
                     <property name="sizePolicy">
                         <sizepolicy>
                             <hsizetype>7</hsizetype>
-                            <vsizetype>3</vsizetype>
+                            <vsizetype>1</vsizetype>
                             <horstretch>0</horstretch>
                             <verstretch>0</verstretch>
                         </sizepolicy>
@@ -123,9 +123,15 @@
                     <property name="minimumSize">
                         <size>
                             <width>0</width>
-                            <height>60</height>
+                            <height>30</height>
                         </size>
                     </property>
+                    <property name="maximumSize">
+                        <size>
+                            <width>32767</width>
+                            <height>30</height>
+                        </size>
+                    </property>
                     <property name="paletteBackgroundPixmap">
                         <pixmap>image0</pixmap>
                     </property>
@@ -847,7 +853,7 @@
 </actions>
 <images>
     <image name="image0">
-        <data format="XPM.GZ" length="82147">789cecdd47b3f3c8b927f87d7f0a45637763024d6f16b3a0f7f6f833310b7843109e24c8fef293ccff93cf2949254d77cc44bc75e3bd6294a45f1104d23b2470fec77ffced73bff9db7ffc8fff56944619587fb37c23ffdb7fd897f3f9fe7ffddfffe7fffc6fffbd51abfdadd7fb5ba35febffadf1dfff8ffff6df9dfc6fd6dfb49afccfd3d9945d7ffa94b2e5f1f388dd7c7aa1b35b4fef4a721ddf5fdfd8f2fbc52bbbfdf4bd2d5daf3570fdc782dc8477385e7c8be3f7237203e11bb96c79fea864e3f89fef7b4f87efe416be0f3fa49beaf7559b2d8fcf4a7213d79becd8f2f8f28bdd95d7d3c8ad5a47c66f2edd529e0dd9f2fcc333b98df3ef919e6df5fdde21b76be6d3cb2bb943bf8fd8f2fbc5896dc9eb3fa43be27cd2c36f7207f9933b6c19fea4c6eecbebdbd25df191bfbf8cd8b6fc1ef1e9898ffcfe9491fb35e3e9ed902dbfbfa9ef8dbaccdfe4cc96e5eb5a49f7d5ef438b2de397bb6c79fdeb3bd940fa3a5bb68c4ff8c996bfcf0ab60c8f5bb15de911d944fcf3b5b4f1bce2d3d38a2dcf57fa6cc4ef463610be87ae5c47fe1a6413df4f3e95911e13e4a7a98e3f2dd8f2fca30d997e7f37d88e2cbf57b68ccf7e4cb610beaba68ceb5d9bd2d6f317327feb6407bf5f99ca08cff095ecd6657a17683!
 f6c75fe9b4db671fef10b5b96b7dd1bd941784375bc5397f93d9dc1f506ae574ca41d115ee9ed88ec20bca74499ca53cc96e5e9b165cbf270bf925d9c6f80fc15bf467dbaa2bcba2a7c978cec223daaba32e23340fbe18adfcbf03b211be97956a6f4f0d8b2fdc873721de959cafc7d1e8de367095bc6676f92ebf8fd5963cbeb4df1fbba3ade09c875c42749c80d847f6fb1657b3893ed95500df971ef90ebf8be5c90e9f7d5842dbf4f5272130e4db68cdf599dbfd990e17743728bcae34aba293e32bfe6395b962fcf27b710df242277ea327e0399dee25b3a7ee7915b0d79fe534e6e233c95c596d70beed26df16f647e171d721bf11965ca0d597e663d72a72ecbcfed9d2d7f7f92e551a88def174d3285d71d93a97dcdd4f75d8427c9d8323f6657721ff15f1dd8f27c3b59dfc4d1edba6c1ff237720fe70b7f8cf6f4cc467a5dc8069dff936c36d01f21bf7beaf8a464cbf85e13721fe52329d8327c7b8f6cc2b7be72431e1f8fd9b27c38c8efbef8c8fc1a2dd8b8fe4519f93b3e93a9bd0c2ab64c8f245746fe2deb6c595f96115b5e3fd3c85603ed13d2cf10d793bf4fae643adf7e4036e1854bb61ab2fc9c0db28df04c1ad2a6385e863f9e902df8b660cbf3ddc664a781f28beb895f237fae38bf253e323fb2b57203f9ffc596c70fd4f136da13efc296df17311be!
 dc74d19f1792ca56d15dee28d4cbf1fd49511de414076109fb9038bf063bcd!
 865cbf08
ece6c995e714cae3764fee638bfa3c2e7213f9c4603f93992e39dba2bfe8dfcbd7322bb88eff6088bf3cbfc1dbdb1519ea7e44643f6ffc30d5b5e6fae8e6fe27a558f8df198ccbfe7f013bf1f7c92eb48bf2a61633cf2456ee0fb55c496e1df1ec8dd26ca8b4c1ff1eb6653a6e779c696e997cbfefa991a385f61939b287fab05b98deb8703653abf4c5f119b6653fefe7224b750bf324719f93fc9d932be49c546fed5d8681f0b721be52395edaff896daaf6ca38cfc99cbfc146a23fdc725b9d394bfbf74c83d9c7f3d221b4d79fc4896f746477c909f151bfdbb49ee223d9213b9df447f2adb2ff16d97da8fa57253e6f7ce27f7109f624aee23fc43976c20bc0f59dfc4d1d43e663ad968caf05d6e64b329ebc7ba205bf01ee7ef8b33caf4da1d95511ef20f720ff999dfc9d45ecd0d65c4efbc6063bcdc259b48ef44fdde44f8ef23b2d5447b29eba738bb81f41b966ce4d71799ce37e9912d94af3220dbc88fb24376e8fcb27f13bf36d13e1477b285e317df641be5bf54c7bb541f909fd6f308591e1b64ab25d3673824d3f5171b65a47736213bf8de477db6c40005e98bf26d8b7f23d373d822db48af419bec207fd24a19d7df5d6131a194c7e77d721df14fe47ceef9eb26eaab41a6fa3e43fd73c5bf91edaf93915db44f63a4a72b26a8d2e12bb98efc76647b23ae5e!
 47f9187f2be3fca3115b5ebf3ab2d1dfd8ca2d84774f6e20bf929d724b9edfd990a9bd7c58ca14bf211be371d9ff89d039489f780a8b0ffa9b82dc4079dafd581e3facb1d13e69ca2df9fd49b6a7cfe6ae29eb6b9c28b764f84f25b985f02dc6e41e8e9f227d4474f0fde395dcc4f577efe4168577426e233de2882dc3b769b265fa5e56e40ec21fc9f6439cad8dfeb31a2b53780ce596fc7e89ebb5f97adfe42e8eaf7ce516c693b2fc89ab7591fee381724b86bf5ab3315ede92fb387f69b0e5f5cb8c6ca07cdc913edd6617f93f3695513e7707b63c7ea28eefe1fb6b403670bded802df3eb86f2d613c7cbf03d6c72bf29ebffb2453650ffd621d96aa13d42faf455fc2719d940fede22e5964cbfc9982d8fbf7bca6d8c471e640be97796edbd389bd196d7770ab289f29bcdd858efd891e9f7933bd9417cf738bf29be97e935deb165f99bf8641b8e476407c73f5ed858ff3ab265fc2284cf6cd5da323f43fcde52c79fdfc96e4be6e71ed7b35a54bf42a4a7ddb410dfb849b6913fce99eca07fd8b9caf8fe7421bbb08bf2ec887f23f3ff1e919db6f4b44676e11dda2347857f89fae48a8ff41df9e78af0caf8781e5bc63f5d925bf04ab6b7cfe53cd4e771ac8cf233a994713d2f203771fc5ee6af98aebac8bfbb068beb497b23b2a8b0b2bd91e5557cdb4078976372bb!
 8df47d903b489f5ce6474b340094ff7532b52fe729b9d346ff6e90bb341e90!
 e35b11db
2eca5f5e29e37a2b84af2d8cf59d1bb987fc1de46c99fe1b8d6ce0f8bb6cff4568db6d19defb994cedd16e47eeb7315e5d938db64cdff8a4dcc1fa6d9f6ce27ab92c0fadaef837b2be8efbe43ee29beec9761bf3731cdf6bf5903fab8cdcefa0be7c918db6cc1f07f9dd6fd1782d9e29237ca14336db58af08c916e25f54641be97991e5ab255a938efc7eb4259b543f52b285f02d03b28bf094727c218e363b32ff4e5736eaeb0bd9a2f0237d456a217f832db9d191e9b742fe58227cf278bb4176305e58c7ca6d995f4b9fecb6657a043b36e23f80db351c6fa33c8ada8ff674b651467e0e50de6d71bc3c9ffb4a6e52ff81f8382d1bf1b59b643adf7da68cfab3b6e1761df9ff4079735b4e479eff81f473dbb50ed6f3bec875b467e54d19e9b9dbb2d15e74c82db4f79e3abe8df8dbb23d12b1a9a3bf99aec90d94ef47878dfede50a6f024e4267e3f91e3f3e7f214cae7aa456ea2bc8f3c721be78fd5f7ed0ec66f4372a72dbd95e9f99c5e217de6577213fd6b3856c6f75e496ea1bd0b6ecaf87e1392fb5dac2fcaf47a0e3f907fb9ad8ceb871ab98ffc2c647910df3611ffc2227710fe7197dc457a79cafd0ec6fb727e2162dfa1f473c95db487bb8d7257a667b926f750fe1723b60cbfff45b670bc67906de4ff52961f919a5de4779c2a7751bf9be43ecacf78c5c6fd2!
 ab93e2a7edd43f87715d9447db8a46cacbf20fd7b6da38bf1d0806ca13c2c515efae223d3272e95f1fb53976ce07ac30199ce7feab0319f7d55ee62bd4ece7fda8688bf8caf3b243b1d8ca73a6c59bfaeb27d689b22bc185f1864b78bfe5ab6076dab6da3fceed6ca38bed2c90e85afcd96f97b39905d1cbf93ed6fdb6e3b5dac275fd8323cab13dca9e3fb48f6876da74ded99fd0d776a084fd156467a3d7cb6bcdea9c796f56d3823373b984fa2fcbb6d17e999a07ebae278199ed9802deb4ff05046fd894372a327d33794ed8938bad195e1755fc86df4bf53399eee88d60afd6176574678a6afca5de981466ef5e4f1d706b98de343391e7c2e97207ebb15597498b2fe98e436be9fbf923b482ff78d4cf56b7d26f7513f6259fe45e8287c65aadcc578b243ee207d4299de9d960aefa94feea07c9e5ae42ef9954cd70f75b289f4cd70beb6385e7eff88d9b2feedefe41e9c0cc97d9c7fa4b1e5f727d91e8ad08a21836c8f4232b53767e51ecae37942eef7507f3fc916d2e72cc7079dae38814c8fdb84dc47782f1199e61393091bebbf6c8477e2b0e5f9f701d984e7b2bd12a9d545fb52a56403e395f84319c7ef96ca3d19be6b4c3611ff4b8d6ca17fdc207ffa1d6aefef5bb289fa188cd9f27c434719e9b3ef922da47778524679d8ddc954df4774be6e1df56512b07!
 1fe361bebcb08bf21ce87fe614eb6319e38076cdc0f6f93a9bd49466ccc0f2!
 cb8dbc0f
5266fe426aeb795f5bd63766cc46fb76063fe7d213b48efdb832dcf1fe3fa66b7d693f5273d90eb08ff744c6e7465784f888fa5cebf5376907ff313d94578239d8dfb2b062cae87f602f96777ac3eeeb7a13cd8dd1ad227d7c9755c7fd02753781eb27f15b1a9e17a0b8fac8e5f29f7713dd45757fd7efdc196f13f2bb711bee19ddc81e7723cd0ad897f83f95c13eed6fad81ff149a6f32f42e5be2caf71406e223c27874ce38d50a6bf087d0bbfdff7d8588f9e93293cbb191bf923fbffe77233c5f7466e617c717d55467efb1fe436b5977d7207f9ef99e47e4f969764a28cf34f64fe88d2d8c67863df52467a467d7207e5633653eee3f805b98bf2bbfa50467aed91be2d159e937217edc3a041367ab23d9e9b64aaef3b395e14a1e9e07cdb5732fdfe5a23f730fe8c87cae84f6e1d65f457eb3a1beb836b659c7fd625f7919fb62c9fdd8e381fe65711b98ff00e62b2d5c3784ad69fae887e5fd697c19d6c23fd0bd9ff757b5d0be3a54853ee61fdef44b6111e17bfeff56ac88f19ca43bf4bfd45fc4e3670fda241b6683c9d2923febb0799c23376d9b8fe918df52e84478cde0cecb708c874bebbcfc6fdc81999ceefecc90ec603e194ece2fb58ae2f75456b8ff44afb640b3ee86407c7ef7a6cf9fdbe417611fe1cf5cbecd530de8e513e2d953f79a68cfaee4ec936c6!
 67b70f3285775029e3fcb794ecf6717f0ae115bd05eaefa6a16ce07ef8984ced458eef6df16f64fe4cf66417f5eb768545f871ffd86423bf866cdcdf9e921b863c5f94939b06c6bf3532b51731e2ef745d03eb9da84f4eaf8eeb57155bd6a7fc85dc805716b943fd07d2cb15ff06e51fc7bbbdba21c31becc92d94e7912caf22b59ad41ed5c96d2aef277207fdcd6347a6f62494e713a16b20ffd392dc3270ffaa416e23bd6e5b6503f3fd6f32b5279ecb96edc93c2377917ecb1bb987f2b23ab2311e90f9db7bdec0437bd122b7303f3a68ca48ff51446e237df215b983f29136c8761ffbcf6479ee3d17b011ff3eb98df1e47aa98cf44f7532a5979f91fb288f914136fa58ffc2f55a2a7d6e4d7217f3ed5c53eee37e534ceea1fc8d6aca185feeebcab87e7626f771be70a68cf4bcc9f1d033f486fc3e56eef565f95c0fc97d03eb771ad940781eca265c79ca864cef9d2cafa2b4f6903f972eb98ffc8b3bcab87eb8231bb8fe6e4036e17441b690bfabb132d23344fc457389f2e8f5c8d4be8d8f640bf93bf962637f4e41b671bdc592ece2f839beef89f3a1bdf3c80e1c5cd932bd22e46faf5f33315f95fd49af2fc287fbed15d9447b364ac99689f17fccc67e820799faa778497610fed59b328e5f796cece739b151bf066c19beb50a8f0bdfe9fb7ead8ff1d81b1bf353!
 d45f43e49fbc7e7a219b26d6bb3664ca9fed5d19e569bd5046782e15d9c6f1!
 694719df
e77bb283fe70f1427611ff8dad8cf80f2d36eeff8dd832bd03d467a35f477e650f653abfa36c62bd7bc5c67ac8982dcfb79e911b48efe9912dbf3f4dc82d8427c1f54dd5de8477b68ccfe855d944fcceca96ccff14ed8929f203f71366ca085fd964cbf36f3336c6cb011bf55b1d4fe9b1795336313f3fb1e5f9b29cdc4078271d6584376cb371be98dc44f908d13f58aa7c6dbe9511fe47938dfb6167b63cdff446aea33dbecc9571fc6cc246fa396c79fde5908dfdb7efca16c65b2a3c0dccff568132bedfa8e39bc8efaa436e1932bd22157ecaefa8cec67a98cf96e1cd50bec4ec10ede1ce8455fbb171c97513f39591b285f59539b941f9b75136305f6f29e3fa57978dfb0b77367eef93297eeb395b7ebff854c6f52757720be78b5a6cac1f7594517e0f28bf4e8fc673d33b1bed07da13a74feb71558b5ca7f6c852467caa031be3b92eb981f66af3a54ce9f9c196bf4f3336f6d3e76c79bd2862a3fd1a939b18ff6d3c65b4179b4f36d2efc1c6fdff251be915b331befa31d61752650be38984dc42fbe8d7d8f2fc0b5b998e37c96d9487f55419d7db16ca387e81f471557d4abb6cb4175765e4a7fd496e60fd27f495515ffc3ab989f1425a2823fceb011bedcb922dd33fbc90697defb65146fadd1d36f61b9cc96daa8f3d36f6abdd9471bdbcc396bf4f13654b5e6fa!
 5c2dfc1f5c62d36f60b96ca16f2bb4dee613c7b93e549b4764dac9fddefca289fa9a98cf294ac95913fc15019e93952e7a3f58eeca28cf1e6265046fddca9df537a4cce6ca4a73abe8dfc75dfc91d8c17bd4a19bf5f976ccc8f5478ba488fd10bb907af6be43ec63f67d97e3db713e37ac94619e5e9342453790fd4f1149f501d4ff109d76cac575c94917ffb25b983f8665b36e69fa132c2b333d898bfbd92bb98bfcd5372cfc2f874473690dfa92c5fa2f569a13f5b2e94a9ffa8b131bf50dfb7917fdb4419bf778fe40ed61fc39532e21b2ed9581fff52a6fee7a48cf48bda6cec2fb4c95dc4bf8cd9d82fe0927b28ffd58fe5f1dbab32e2b350d7efa3fc46291bf75b366403f3836b9d6c22fd7c9b2d7fbf91ed6fbfa9caff2625b710fe5b42eee0fbeb0b1beb796736d6674c36f673d5c85dac4f864d658a9fba5e17e72f5ed8584fef937bb4fe305746fb79f594f1fbfb8a8dfdc40f369ed75b90fb489fc15099f2a7a58cf35df8789ceff64a36e0d3942dcf7fbd934dd4df85c6c6f8491d6f5a689f03b28dfa9ba0feb444f994e5635c28233d2e7b7207f52fbf91bb70d461a37d6c9169bef8889471be89ba1eddbfda69caf8fe5691a93c3d1aca945e8932d26bdb66637ff1854ce9b152c79bf87ef36379fd2864cbeb9d3fc916d57fb4876d915f183f749529bf3436f!
 a97061bf3bd15d940fcbc3699eeef540b65a4ffd054c6f9c3902dc313abf3d!
 998af4d5
fc88e85f996ec1f9fb787501fe22eb947ed5f5f19e1bd1fd932bcdb37721fe9777a28233c79ca467bdd60a3bdebb091bf23b281f36deacac8cf474b19e9535ed978dea0c7c67cff4436d1de9f87cab8fe79c0c67acc926ca1fd19b2a9fdccd8280f3ed9467a27723de8b95c4ced7b44ee63fd31b394d13e262b650bf76fda6403e39555a88cf41eaed8f2fadb3e5b867f37269bc8effb5a19e9932cd8e89f466ccc676e640bf57da4ae6f233fa380ec20bccb06d9c57a567556c6f913e4474fc407e5a5ab8cf2376eb3b15f78c9c67a73453671fe2d1bf9971dd8f2fc07936ce1f8d85736f13ce15819e931b4d9287f3a1bfb27d4f9683da2582b5379bbb1d17fe56407f57f9cb1b1bf72a68ceb8d8e6497da07a467cfa823fd4f289f7d559f572999c217e7649be6b3af6407e7bb3964d744ff89f018223ff03c8845a6f67d3755a6f97fa16c61bfcd85eca23cc73d65d40fe71b366a581fbd9bca38dfb8a94cedef9c8dfd21141e117feccf8ac94d7888f099227fb15f2560a3bedf9411defb85ecd0fdb9576594876ca18cfc0c066417edcd8d6cd4b07e357e2853ff44e737683e343db0d19ebe901b88ff6cac8cef438c0f2c51de115e84df7a3ec021fb675319e19b9fc92d5a2fdc93dba83f7bd457bbef5078913fb6080ffae32e1bed454e6ed0f1afca08af73203771ffab!
 6a2823fd26a83f8e51c37c24ec92eb36eeef2dc80daa7fbab225af377c233771bf673252a6fe2361e3feb14ba6f1dfe483dca6f47a57c6f7e592dca5fc4679730d9a9f2f1fe436d5a735b98fef577336da77193f511a5aa84ffb1a1bfbc35a6cec27ae2b23bebb09b98df34d3565941fff9bdcc1f11b8b4ce3254f96a7e7e39098bfce5232e587fb49a6f9e0d6534678ae1fe436ee275ed7e41ec2f3d890fb347fa9b1b17e6a2aa3fe6e5b6cb4dfb2bd15a5a985f0a46d32e5c7f49bdcc5f12b834cd7dfbc2ae3f8f848a6f4af64fd17ad4117f15f04ca966c1f820bb98fefef5d36cacf926cd27aae2ccfcfedc0f07849a6fbdd078bdc4379b8e46cac2ffbe43eddcfb39571bd7b8b6cf470ffb2544678672332adf74ea7ca28ff01ca47dbe860bd38b5c97d5cbfdcb2f1bcdd8f317f58920d1bfbd3c66493cacf5a19fdf9764fb6505e0ad9fe1b1dc3c0f1ee8d4cbf5f3b6cdcefd929a3ff761a64ba9f7c3f2923fe23fcbe2bce8ff19e41b669fdca263b182fc50736c64b5765b49fe527d9457fb83c29d3fc08f1eba9eb156332ddbfd8c6ca38dfd827dbb85ed05346fe0cd5f10ef6e3acbe94919fa5c7c6fd861dd9c5f5b20e1bfddd1036693d3a45faf4c5f5717f7043a6f3ed57b059a3fe7faf8cf8663fc6f3a53a1be3fb1db949eb79681f44f1c4fd666f487670bee0c0!
 c6fb1fe66417c717c83f439dff6a9269bdba6892697d6f102a237cf1864ceb!
 9727b49f
a6288f783e07e1374d5a2f7aacd8a8cf2732ad9fc65b7287e62bc86f31baa5fb2d7732ed07b846b059477d89f7645aef2e1bca36faa705b98dfcf2505f6cb386fe72312753fcbc35b9050f2232adbf0e911ecef30122997f7d32ad176ddfc974fc744ba6f8dd0fe4ae8df924da3fd7a4f5d8f54419fd73742537717f76d65746fb5b1cc96dc4f73263e3795d874cf7f3671765b4ef81bc9e289d4ddc5f1dadc914ff754ea6fe376b9169bd25e9b0915e5f6cec7f59927bf041b617cfc7fd31de99be93dbe83faf477207e9bb79217791df57878df72334c93dec27b86e9491be3bd9ff980db385f9a2eb9169bf8677544678464b32f5e7830d59ed6ff852467c6e67721fed699190693e10a9eb5908af8ff83655faa72e99d26ba3937bd4de9fc9624827cf7f251bf87e50235b187f6d23b28de3139cbf6576b1be3af49411be6246a6f58ef91799c6bb5e9f4ceded2d56b611fe3a99e69b5739de31db623a88fdd017b289f87b2bb285f48a1cb28df04f9a6c3cef5453b6b15e8af076447a60bcd726d37ce2e62b237ce73b1bebe70199da97b9ad8cf2559ed9b2fcdc2cb283f15eaabe7770becd02b6ea387e8cf4ef9ad4bf6e0e6ccc8fbec816ea9bfbad8cfa1394648abf5fb0f17cc79d4ce179e4ca488f35ca474f841ff757d764c796f9e11cc92eee6fdcd4f72e8ebfcd61a!
 b86f4f065ff62f6c5efd19f1ed9d8cff74ea6fd189789328ebf2fd9781e09e9d917e7975e9fc8751c3f29d8583f7c61637ff28d4ced7b5463e37e11da2743a417d6e3af644a1f6f4c76911e17941fc3a2fee47265e3fa23369e0f0dc90dd4af3227537b95233f4d955ea717b28bfd21abb332be5f7fc2223de0231bed61874ce129bb6cec4fd7c8d45f0c2f6cec27eab1b13ee9b071bf73ce4679d9929b38bfaf8e6f213cdb13b96de3f98925d9c4efd7280f82084f86fcb2447c647e8c4c32c5e7d060cbf0a52db6bcfea1cec67ef82eb941e1f9203751fff21d5bfefeba6763ff5f838df1a54e6e21fdab071befa7a8b3f1fe92011befb35890db88ff7e4d56fd17ea83adf2bb407d12a353c47f17b3b13ed624537b72c8d9781f82456ee07c87161bf3a16fb68cefa1c696f19d4fd918ff56e426dac3d453a6f0256c79be499f8df81b644a8fb1ba5e07e15dcec83d7c3fbb93a9bcece57c52b46654def7373295875d974ce5f9d066a3bf9ab0d19ebf93697c561ec92da4e7c96563bdef4dd9c1fbd04c721be951a9ebb7917e9541ee20bca3808dfd6c291bef5389c85df4176548eee17ce31b1bf72b3236f697c6e4be8de7897cb289eb9d3ed8f2f803eaababdab703d2d755e56bd12753795a646cacdf1a644aefed9a8df743d4d832fee34f32a5f766c8c6feb20d5b9ef!
 ff0456ee1fbd5838dfd7c3336f6d7abf0b571fd7dc9c6feec111bfb2bd66c8!
 c5fdec83
4de1a369571beb062cbf03cfa6c94d7061beb012d7297dac71d1be399151bebf30736eec7a9f3751decbfb0c83d84375ab291bf9f6c8cf7ba6c99dffe898df1854fee537fb967cbf39d5336ca974e3610df68c1c6fe86331bf7872336e6ef0599eab3bf62cbdfcfdb6cec0f3ab0e5efe72a3e26a587babe45fdd18e8de74764f8ad1ab78f2fe4068df79b6cb43f3fdfa37d7963cbf270b2c9cd3efa9b4c99eacf3b1be32b832dcbcb2c64a37c176c3cbfdf20b7a8bd5ab211ff8532da9f9d8a5f1bc7cf6a6cacf7996cacefbcb0e5f5f6051bede1818dfc98b3657ace9a6cb41f1d32b56f4b9d8dfe7bc8c6f55fd978feb2c1c6f3b04d36aebf67a33ddb2923ffb3844ceb855375bd2ec2e3d6d958affaf91efb75a76c79fd206063fed76263bdc867637ed063e3f9a98b32f2e75cb231de52e1a1f6dbdfb3d1bf7eb071fd365b5edfdbb2519f376c3ccfa4ca570fe9b3fd31eed728d3fc70d86723ff0336ee97f6d8985facd9b8fe968df9863abf81f9e340951f6a2f06291bef2f3ab0f1fcfd271beffb1bb0d19e9c94119f259fcfc1fa92ca1feadfaa1d1bfb5fd8489f19d2b7aec68bfb17328d7f823599c637874f36fa2b8b8dfadb62e3f98537328d87972e1bebdd051bcfefe56cac5f6ed998dfdbe436da9b599d8df1adc9c6f94b36fabb1b1bf56bcd46fddab065facdbe!
 c91db42783295b5e6ff16063ffc99d8df5a2231befbbb0d8286f2b36de0f55b1713f3a63e3f9e68332f23f53e9d9c57eefe29d2dd367aed28fda83a5cd96e11b1b6cbc2fbacfc6fee29c2dc3e376d8d83fbb57467972f9f7085fea937bb8fea0c3c6f3391f6c79fe72cf46fbd26563feadc24bf57bd266e3fdde2a3da93efb73b6bc9e3f63a33df9f91eeb5b3fdfa33eabfceee37af3848df9bec9c6fd3a155f03e93bfd6463bcffcec6fa81c6c67ed96f36da9b031bf76f7536f67f369511be297f8ff0791336e6d35b36de07d465a3ff54e947eb3fd5898dfd9daa7e5894fe47b6ac1f912a8fb49e7640fe36547bb1cfd8787f8bcfc6fd8f26b985f585d9898df1c0918dfa19b065f8b62bb21affbeb3f1be0d8d2df367f9f33dda872b1bef676cb3b17f2367637c362053fd5f1a6cb43f1736eed7fd1c8ff9bfc796f159f69491be971772979e6f7c2863bfa8abced7a5fbab6365d4b7e1882dc3e7a76cc4ff958dfba1211beb4d3fc7e3fd2e1d6584cf5bb0511f3c36dae72f720ffdc7e4858dfab065a37e466cf4771e1bef63db2be3fae72b1bcfe7f2f51cac67a8f850fd1f5cd918cfc46cdcbfefb271ff4aa537d5ff41c2c6fb47f66cac37a9f053fdbef4d9f27ad5888df183cbc6f8a950c6f5c67736de2f53239b947e151beda9c196e73fe76c3c3fb054c6f9d6091b!
 ebb7aa7ea9fabe56a6f80ed8186fa8fca1f5dd93aa4f2ecdfff07d53cd5f0f!
 4b36cabf
4556f5f18d8df663c1467ff8a58cf4d94cc91d8c7f978e32cea7eb6c3c5fc6c723bcf63bb98bfdc7fb6f659a9f5cd8086f8f8df9e08e8deb87ca280f339bdcc3fa53596363fff84d19edaf5f92e97eb8775046fa252d36f697786cfcbd05fe3df5671b36f613b8ca48bfe1838dfa3b6263ffc7988df5df3599ca6f7e60a3bea8f4a2f23b50f947e5f39cb0f17ece822d7f3f192a537ff6c5c6f85dfddea2f29eb1519f7fbec7fa91ca5feaaf1e291be5f9832ddbcb6c40b671be7bc846f854fad9685f52153e07e97346ffd3121fcc175d3295efdd994ce3c799c3c67e04753c8de7dc92dc43ffb736d978bfbdae8cf05fd4f77d3c5f74fe56a6fa7465a33edd95117ebb4d36f0fcd5a1ab4ceb430e1bf7ef2e6c8cdf74b6fcfd95cf87f45f4cd9785f1c9f0fd7775a6413e19f7d2aa37f2bfbca94ff261be569cbc67cd057c6f56f7c3ccaf7bacbc6fdca57b285f99bf75046fc2e5336e267b3713dfe9eae376363ff618f8dfbfd2e5bc6df37d8b85f3e2453791c3cd8180faed878dfc65a19edf97d4fa6f679aef2c7c1f9c71b36d66b54797151be7db4d72dbb86f31fd03fb445f9c37e548f8df58b0b99ee370e4a32959ffd075bc6a7582a23bd0e73b64c9f5c5d8ff2bbb8b1f1fb1e1bf5b3a68cf84d12369e17389029fffc808df6b1a38ceb070e1bfb031f6ca4df071bef0!
 351e7a3fb89c3031beb091a1bef7349d898dfa8f4b4911ed7055b86677061637f6741a6fc2deb6c8c2762659caf74d8789f0d1f8ff35d366cdcfff924bb48bfc58c8dfbe1e8ffdaa27c607f91a6ece07dc3987f74ac1eeaf32155a6f6ee4036d0ff2ed4f706c6ef931fe3f9e43736e68705d9c4f8f2f1c64679bb28d37c6849a6fa789db0f1bcd98a4ce93dfb203b74bfbb64a3fd392ad37878c7c6fe96808df9b8c5c6fdd17736cae7898dfdd43e99c653a3bd32dd7f99b1317f5bb2915e188f76447ee0fe8ecdc67e153abf5d87f7288f5d355f3ab86cbc4fc523abf9f00799ea8367b3f17eb457b28df94ae1b0d15f0d94913e459f8dfece65cbf2521cc82abd3536f61b8dd932fddc1a99d26ffba98cf40b5236aeafb1919e251bfb7d2c36fa7f9497ae6a1f473b659a1f976cbc4fbdcec67e0f978df5f76f36eeb7eec9943f91fabe81ebad66ca08ef70c2c6f33baf6cbccf6cc0c6fa1cc2df53e3c3ad4ba6fd27b3886c61bfd6cc62633c5357a6f1fb5419e9ebe6641be3df47978dfee4a64ce3bb131b7fafac203b283f879932ad7f8dd8b8dffb20bb684f1e5736ee779bca74ffe4ccc6f35e2d36c6e34736f23f66637f04eaaf18dd633fcd2e53a6f5bc091be3b19332aee7eb6c94bf111bfbbd7b6cdc4fb0d9d84f1490eb743fe0cac67cbbc5c6feba1d1bed4f426ee!
 0fbb4c6c6fb8328bfec26ae376c90db685f56189ff455ff7bf0c92aff3fc8f!
 47cd6a1a
74ce3458d8dfd398e327ebfff64e3fdd2151bfbb79a6cdc2fc8c8b47f60ffa54ced097f8ffc1b9055fa0f776cecef5eb191df161bcf37e8e43ac27b9fb0e5f1e733b981f0cf6336c2d360633f94c346fe9fd8d89f4de927f203ef4fff319ef73a905b38df8ad2d7eee0f80deabfa1d60f8e2199c6439bb9327e1fbc9055faf5d9d8df6eb2b1de8aeb192afd367b36c60b0b3295cfd1071bcf9f7db1b17fa5cdc6fd889feff1befc2999caefa0c9c6fe449d8df43db0717ffe8b8dfd721b36d6ef6b6cac0f1ae426ce3709d9781eafcf46fbfbc2c6fe4e8b2dcfefd4c92d7ade509d8fd63303757c8bca53878dfd353736f65715e436ae57a9f375287d297fed2ed26759b251bfaf6c8c9fd0fe996abe3dcdc936ed3fd6c8341e9a8fd9327f9c924ccf6b052b36eed7f8cad4dea2fd36ed1a9edf3a4c9591bf118547f587878a8df9ca1b1bfb25266cdcdffc64633fff0b999e179a99ca885f7450a6f04dd8f27ac1371bfb013ed9980f51fcec26fa9f485d8fca4b90b1b13f246063bdf6e77894c73a1bebb50d36e61b7336f653ccc8547e1e1e1be571c496e72f776cb4ef945faa3cc53a1befb7c8d8785ef9932dd3f788f8586abc160fc82ef2779a29637ff4b460a37fa4e3ed3af6bbee3aca34ff7965633e3123d3fbd492a632da1b6fc0467b7065a37d7963e37c29b989fda9!
 a74099c6637b36f2b3c9467e7db0b17f70c6c6fd35159f16d5cf3736cac38f71be161bfb6d1e6ce4bfcec6f36b37721be14dd5f9da2eeeff566c8c0f166c1c7f2477683ed162e37ea18a2fb51f8b231befbfd9927b48df7bc046fbf54dee23bc4ba497adc6635b94475b8c7731ff1829a33d380cd8d8cf3761a37db8b3d19fbcb3713fb62253fe45af6cdc0fbfb251fe5d36ea874da6feb698b3f1bcdd0b1bfbdb776cd4ef311bfb432e6cec6ffa60633cf9f37bdcaff6945dbc0f252653fdacee6cbcdfea9b8ddfb7d8785e724fee20bca3091bf5236763bc1fb3b11fafcdc6fded1e1bf3e5808de78955fa7571fec58a8de7b90a36febe92c6c6fdb02d99d63fa71336f65b9cc826cafb1176d47878e9b1f1f7374a32bd6fea1028d3f8b3c646f91bb271fc838df7b51fc84d3ccf7b182b537b6193557ebfb3b1ffa1c1c6df67f1c994bfd1968de7f14236f697d4d878ffc71799f277f5cd46ffdf61e37d5e291bf7e75ed9d88fa17e4ff9778ed8783e41c587eafb1cf5c155fdf962c896c7e70699ea837b25b729fd5b6c9407878dfb6d7736ee2fabf3d1fb54dc848df0d795f1fba264e37e4a8f8dfbd317b22a8f061befbb75d9f8fb1926b987efd7b23c88d920958f837213fde33162e37e82456ea1fcf80d36de379692dbb85f342dd9d8dfb057a6f1a04656f95723537d!
 1bafd9d89f3064e3798e4fb241f5499647bbaec27b7f23d3fba90e7d65ea7f!
 3fc8f47c
d7f4a18ceb9d9b64ba7e6cb391be5336ee2f6a647a9f4ffea58ce32707369eb799b3119f906cd17a08e2fffc037bb83f1493db38fff14ceed0fcb84e56e5c122d3f9af7d36ee5f8fc9f43e557dc096e1d3afca78de78f6ae8cf2914ec8f4fe898b4d36e1870abf8dfc39c8f2fefc7359141f657aff977624f7f0bc97d363e37d571b36ee97cec9f47e14eb8d6c203ea7355bb62fda998de78bb66c995e86c7c6fcc261637d7fa08cf6caea9029bee9888deb35d9d86faa2be3f95e5399de6f733eb2e5f17a8d2d8f370e641beb49f19d2dafaf21be2dbb4bf16b907b284fab1eb94fef0f9eb011bf2f65cc8fa667b60cdf3156a6f9cd8ff17b8f4cefbf30a76c191fadcd467cd66c99fee6898de7197e7e2ff343ebb0e5f50c8b8df2f0c296e5dbb829e3fd010e5f8f9e4fff56467d30d5f94dacef996f6cf97bbd64cbfed5bcb1e5f9f40b5bc6df18b3511eea6ca4478b8df747fefc1ef3e79fdfa33ff9098f8cbfe9b271bf3b205b28ffe63b1bf79f0c36c2bb65cbf0da3b36de0f3b6563bdafc596e1b575b60caff5cdc6f3f61736de2fda57c6f3d6ae2a3f16eea75a2a7c369e6fd35579b1717da3c5c67e69fcfef90771b03fab43a6e773779132da7b4323f7905ea39e32dab7cd954cede1e58b4ced4754b1f1bcfc8d8de70326ca285f5a8dacf2bfc1467cda6cd487908df!
 4b4d8323dcd9fdfcbeb9b191bed75c196e969ced968ef1fcaa8dfce908df771a9f4b370bfdf7a67cbf2a1e56c191f2365a33cbfb0657cb46f36e27362e3efa9d96cacd73cd808ffa732c23b6ab3657936166cec877d2553fb68eed8a80f4336d6e3fa6cf97bebcc46fd3db2f1f7534d36eac3858dfd3d6336f24b6363fc7760a3bd1a911d84c758b2b13e726763bc5ab151bfda6c8c1f547e39ae3c9faef2c3457cca95b28bf71d537e380dccd7347cdfb13bc8aff59a4cef13cf0365b4f7b64ba6f23f51c753f9b60336de27bf67cbe3ad0f65b4cfd6888df5b53b5be68f6391a9bc9d0e6cf4a71f6c5c6fc696e9655cd8323ef6948df8bcb2d15e45ca287fde275ba6a7f36379bce193a93cd90e1bfbffbed8327ff5215bc6c7f4d888cf8c8dfaf363191fbdc196f1b14a36fa872b1bf549a5a78df8582a7e0eea473063cbf01b191bfdf92b1be16fb111fe3a1be14fd9185f956c847fc7c678abc3c6fe903b1b7f3f92af8ff1c8489d8feea799151beb1d5736f6c36ed9787f4c4f19f5e17667e3fed3071bfb11305eed3835788ffad3b569bfa7df25d3fb253717328d0736b932ca77f5ce467a9b642adfcb1d1bfded9a2dcfef9dd958ffdab0d1bf1a6c94078b8df2f0733d8c7ff8f7e80fac2e1be39f031bfba37436da9b57b60cef3151c678d9d5c8541f9c091b7fcff3e!
 77bf48f5736fac7822de3afbdb2519e9a6cf48f061bfde39e2de3af1fd9182!
 faaf052f
d306d36ded7356663bef4cd96f1d13b6c191e7b4ba6fa54bdb1657ccd071bfd67c646ff99b211df848df62c60cbf81a2f6ce4778d8dfd385336c6572abfa93e192bb24bfdd12b1be3c5111be381988df990c946fee56ccc372ab68c8f5e6723bd6c36d66b557e52fdbba1bfeb8afa87fe80ca87437f9fe54ae929fa33cc4f509f7b5c1f6fcab49fb541a6f157f2a98cfc9fedd9d89fbc62e37d74011bf79f96ca680fdc0d99eab33365a37f1ab3d11f256cbc3fe3c2c6df5fec28d3fcacc546fffdc5c6fd88391bfdd18a8dfd094336d6c35336da9b904cf573d565e3fd297536d6774b36e673011be3a19ff321be3fe743791db0657c6d4d19f1331e6ceccf8ad958eff931e6672336f6935fd878bff1171bef3fcbd8d89fcae145fbe5f7c8543f1d938df8fa6c8c6f3fd858ff8ad8783ff73b5bc637ab29237f2f7c3ec4af7c5346f99faaf051fd0c6336e6732736eeffced8789f7ccec6f38f7d36f26bcbc6fbb4bed9d87ffa737dfc3d82848df5b0a332b52f4db62c3faeca4fdabf64a37fea393584ef5e2923bef9968df3517a39f4f734524a5f51ffb13f02f9d957f57b53b2f1bceb5a99ea93cdc6f3a1ef64aabf831d1bfd91c1c6f8e69b8df66cc2c67a569b8de7d7b66cecbf6cb2319f1c2b237ef6864cf5cf31d8288f3336c23360e37d085f6cd4bf948df6a6a34cfd!
 7f8d8df583151bf915b1f13c15870febb7c6884cf56555b211be4f369eb77d28537e9cc8545eb31f63bde9938dfe4da537dddf4f876cc467cec67c4363e37dfc2db62c3f76cc46fa527a8af289fc35d8783f5b8d8df1c45e99de276829637c6953f914fd17c6ef53658c1fdcb332d6470aca2fa789dfe74bb6cc8faccdc6fd27942743ad072cf76cccd7e6ca88ffa841a6f23db0d9b87f3263cbf00d1c369e67dab371bfbf60e3f98f5499d65bd4f7d4bfcc6f6cec5fab29d3fe9e191bfbaf7d328d5fcc1736c64b5d36d6970b36d6130764cadf33e65f8643fb3d6c938dfa7953c6f9f4071bf7a328bd457ee2fec8858df1cc2b1bfdc1cff168ff4365c4c7f96063ffca1bb981f7ef152d7213e32303f5dbe4f9415d99dadf2199da8ba3a78cfa1a1664ea8f5c874ced79345246fadebfd8e8bf13b63cfe982ad3fe17944fd3a1f7159b5d36c6bb4336f26bc3c6fe0d5d19e14d4c729ddebfdc6663bc3a51c6fe8da4a18cf95e5eb2f1feef9c4cfb6f9c77657affe0894c7f1f6685f260717be1b3f1bc6ca28cfa9ae17c9643ef93d422657abff39c4ce5c35c29a3bd35976cb49f6f6cbccf7ac3c67ab0a34c7f0f417ddfc0f9ef2a3c0da45ff5c2c6fe35972df3c379909b28cff7848df2fba54cc753fa385d7cbfc7fc51fc07e5617924d3fefe4d974ce5477395e9ef2da0fd!
 b445fae1fd5c4736f6d3e7642a0f679f8de7277436faf31732c54f7bb0b15e!
 7a233751
1e82a932ae17f1f7e81fad0b1befe7fe5046f97156e416d27ff0a64cebb1361be56948ee20fc3ec6438e4def271d233c8e43fb7da33199e2bb2ac80deabf176cc44ffd9ecab7b967e37eafcb46fc6232e56f3e51c6ef1f23b64c9fe448a6f7233b77729be26fb1b11e9a2b237dc3331b7f4f73ce96e7b33be40ecad7f94599d2f3c2c67ed826b90bef307e706d7ade42437eb80ebdfff49ab3e5f58e9932ed7f6993e9fdd0d6828dfbd53565a487c5c7d3df37f966e37d4e6732bdef3a1d2bd3fb65dfd9583f5992dba88f275d99d693facac81f5bc58fd267acb3d1fe74d9f87b92577297dac34a19c70f3c36ca9bcc5fd13ad3feb7e59a4cf5c15e2823fc679b4cf1333ed8789eeb416e23bc832d1be5eb858de7ed3e9529be4736da0f8d8de707ce6ceca7afc854df86091bf567cac6fd9d9132fd7d018b4ce9e1466483def726db5f913ad47f690e99faa7f182dc447d3eec9571ff76b623d3fbbfadb532de07aa876cccaf4c721bc79b6b36ea5b4f19e9b3deb2b1be7360cbfec651e1a3f2539c94e9fdf7037297d2cb22f7901e975736de8f9eb1f1f74f4a369ed77963233cb2bc8bdad740fcfc0e99deffebeec8d47e5a75659427774fa6fd29d64a19e9a7ddd958cfbeb0b19f6cc796edd73157c6fd107341a6bf87642dd9683f376c8c4f7236decf6191bbf4f71a67ca3!
 89f3161e37c3b369ed7ba92293d271a1bfbcb576cbceff39b4cefa3af7e8ce70dd4f90ce4f764c346fdfb62e37d037736d6eb3ed9785e0fe5ade9d07e32bf456e633fabf649a6f4d00336e6475b32c5775427537ca70d36f6c31c94519f666fcab8df75399129fee58c8df733bb6c3c2f5067e3fed69d2dcbc74d5d9fe27bfd66637e16b1f1fb1b1bcfcfccc9b4de98d5d998dfc8fe4ba49e2a7f05b983fd3dee824cef079e0fd828cf1336f63bbb644a1fa7cf46798ed8b83fafaed7c3f387e31199d22f1db0b11e1d2be3fc7645a6f816eafc26a5f7071bebc7c89fb60aefa6a78ce7c1567d3285ffe82a63bf91a5beef23fcf98c4cd7b30b36d63b1f64fafbbe4e8d4ceb5511beef88ebe1fd7a4b36e6875765a4cffeac8cfc39c46ccc8f3465cc47925732a55755b031ff2995113fa74336e87ec34119f99f7964ba3f690fc8f4f7578648efae43efa34e1c32bdafdfda2ba33e7a311be7bb9269bdd42ec934dfb6109fe79f5fc5fb002b657abf6b49a6f72bbb36d9c2ef0d5719c71f2fca482f5bd9a5e3e578c679fe7920bcdffc8d4cefab3e5e95f17bd72253f8cf6b655a6ff966e37df71599febe8281f6d070e8fde0fa896cc361c646ff7c63e3f9c70ed9c17e9529cab7e1d6e8fdbe680f4d75becc67a3bd1ab0d13f8ec92eca9f99b3b17f7dca96fdeff1a68cf9af8!
 7f6dc74d5fb6c4fca585f5aa3bc3e1fe7c6f327573285dfd8b1f1f7764fca9!
 8ffce476
cf45f07b28bf869151bfb316c36fe9e628d8dfe7dcc467a76d968dfc8223e581fb1d9d88f8deb8b09019e2fd67a6cac7f7f93293c46872d8fdff1f7b4fe82f0dbe2fc323c56a88cfd4747f53dad376c1d72c3c5fbebd03e3b1c7fe4bfe3d2fb75ed331bfd4dc1c6f367ea787adfb6f9c5c67c1dc7bb2e3dff597d90e979c1c422d3fbf69c111bf5f98b4cefc79acaf2284a079dcf3a921bf4fe9dad32f68b5a191be93527d3f9ca111bf767d7cab41ff94e6eb9d8bf8ef3d7c507f5cb2753784f86325dbfc7c67ef99d32caf7f5934ce1790c94e97d215d720bbf3f3acac8bfbd6c2fc5d9283c56834ccf7f6c1eca385ef3c84da4ffed9b8df31bca88eff240a6e7f1aca132ed5f4f94111fa347a6f77deb5fcaf43c8b6c2fc5d929bcae720bf963f7d9b8ff3262637da341a6f713de3365baffb962e37e9cc3c6f34e3336f68b94e40e7e6fdcd968ff1fe4ae8bf568d9ff8ad852788b804cf1dbf4d932bd2f2e1bfb01ee64da3fbd9db1e5f5ac9c8de74de4f8ca6dabdfefb7ca2ef6ff34c8f43c83bd6463be7125d3fbc9b41b1bcff744cac88fadba5ecf457946f9eab8eaf988944cbf37c76cec8f3d93fb186feb191bf7ebf0fbae4bcf4399311bcfbbbcb0f1be9d1ab90feb6f6c3c9ff0c1c6fb725e955d84a74e36683f3ff2bba7ce7ff1c87dec5fd7266cb4674736e2d365!
 a3fdd195d1df1cce6cf4ff03b289f4d4647f20be55e7ef29e3f713934ce1b5266cbc6fab6263bd5257c6f8422bc926c2a76d95e97905757d0be99321fd0c713e1c7f52c6f1eb1d5b961fbdcfc678c8239b34bfba29e3f7c63b1be54f63633e5eb0d1ff47641be1dba2bd7efef90994e71bd944fcefb932ce3738b2f13e23878df9fa926cd1f3d37565842f1ab2b1ff68cac6fe9b4f36e6d31f641bc747c86f4bfdde4ad8186f2cd8586ff864a33e1cd8b85f62b26578d77b36de677727db943f111be5c160a37f4fd9d80fb364a37df2c80eceb7fb62a37f42fa3c97cb6578f33199c2abedc9ea7a151bfb41876cdc1fdab291bf4d36e6e33d36f63bb4d978dfce9c8dfa7966a33c9b6cb4970e1bef374dc8343e345b6cb4c70fb60ccf7ec7c6f87fcac6feaf3e1be39d9c8dbf1718b271fd6f328d872d8f8df990cfc67c3860a33f467c1c553eb4291bedc33bd946f9f5db6cac57ecd948ff3b1bef87ced8783e2c6463fd64c6467aff7c8ff194cbc6fbb93d328dcfad161bf7c33ed9581febb3313fefb231de1db0519e2d36fa0b878df23163a3bc9b6c843765e3ef3decc8943ffa8a8df96ec046f9ff391efdc9cff708cf9c8df4f3d9084fc2467ebb6ce427da1b57a5f77cc846f98ed898ef5b644a2fedcac67e6b9d8dfee9c246f87e7e8ff02dd848af988dfd9c05d9a5e7!
 5bceca549f5ed8a8ff33369e3f7a6723bc7336f2d766233d0d36f2b76223bc!
 1a1beb21
251bcfe7957fed8faee986aefdfc2fff7b53b7745b777457fc7f4ff7f5400ff5931ee9673dd6937f792ef9f9d571fa779fff0c79f24cc9bfff5f92a9a7e2bf9fff647aae177aa95ff4ab7e133997fe8bf354e23b7caa5f1da77ffdf94f9227b1fcef67ea9bf887fe7d2af2a5d2effa431fe8437d243e637da24f65ad32ffee0c9a3ed3e7e258edaf5f53fe93e4c942a4a72d5234459ee023fedf525fe96b7da36ff59dbed70ffa517fd15ff5b7bfcf139973335137ec5f1d8fffb5cf7f923c31f577fd43ff14fdc44f9e68b27ff9d2bff59a5e1779d2d09b7a4b6feb1dbd2b72af429ec8dc499ff54cfc9b9e38435ffc4cd364fe887f3fd3ccffaf61fbfffff357ce13d5a76b96f8c7d61ccdd5bc675fa1f95a20523314897bd222edacc5fa4e4bb454cbb458cbb5422b755bbbc8564d8c009e67d2aeda4dabb4bbf6d006da507c46da589b88a3a69aa83fbf3a9efff8f94be749a5cd45597645da2fb4a5b6d2d6da46db3e5b326d27523cd6f6da413b6a2fdaabc8117c327da8bd69ef9aa57d88631c599b0cfdae7d6a5fdab756d3ea5a436b6a2dadad75b4aed6d3facf7ee657c7f31f3f7fed3c79d60addd57662a0f4fcdbd4e6f3ef3deb9ae188dec1d1e6866b78866f04fa91f3243542e324be89b40fa4b571366223d1da466a64fac8c8b5c4288cd2b818577d6bdc8ce715e!
 25f1dcf7ffcfcf5f344a4ebdd78180363688c8cb131d1fa46644c8d99313716c6d258895e64ff873c591b1bbd32a2679b676c8d9db1370ec6d1088c1723c011e29308e7c6ab7e31de8cf7ffca93ff9d8f68576cd17bf48d0f51ca3f8d2fe35bfc6fcda88b14af8c86d1345aa21f7915f5a4f9d376196da3a32f447e748d9ed1d76b6230a019a596e87bd310fd4d267223304585334dd33252d3d66ebf3a96fffcf96be68948485ff3c5f857b43fa663baa667fa6660865a629eccc83c9bb199682d3315a5ff85f3437ecccccccdc22ccd8b79356f6665a6e65d1c933e6b89f910b992c85a22da3b73600ecd9139fed571fde7cf5f344f665a20c6568e66e9b63931a7cff686d27c66cecd85b914fd74faf7b9416d5760aeccb5b9d1cec6581cbdfd9363701e439c6967eecdc3af8eeb3f7ffeaa7922c64c96f847338fe6cb1fdaa6679ebc9a6fe6fb9fe6c873dc35323fcc93118a9a35fb57f9818f3e343fcd2fd13ebabf3ab6fff8f9ebe409cdf19e33ee678e3cff11fdb4f92dc64817958ecf3647b43c99de324449ffd3946e9a35d12ed9cfe3fe5d8e9875b36136cd961847b86a5d40ff8bcc1fff7279327fb6592247d2e72aa1d916ed54c7347ed2f7d943eb7b7dff8ffdc81f73e5d9a3ff617cfce7476dcdaed913339fb95c09a3cfaf4e037cfe1a79f25ca7c5baa09ca35!
 bcf3c31fb87d2d22dcd32cc01cf0a5331534f458a372df35fb55e9629becbf!
 e7d8e88a
32ccb16e777e4bc52fcb731156170c4388f66f57afcebc6c87f853c9163de994805911e966b79fadcf22cdf0a8442eb6445e6f5dfb44329661cff7b1feb6cc5562246ccd133ed459dc48a58fc5cc5ff2923bf739ec85488add4caac1cf3eae72aeeb30db30aad656456f9effa867fdf6ffc8bdf1cad8b75b56e5665ddad87deb306b276f23d159927bf6c1dec57e709f7af8635b446e233962dbca9ed8c9935b1a6dab751fc9b1a923c67f17fdedbffbfd4949935b716d6d25a596bf1df1b6b6bedacbd75b08e666c74659df917f7c57e9b3c71ac17ebd57ab3dead0feb539b1b8ed9d6e6d697f56d7ac6c5f4fe7c2e22f3646f247f585bf95fffbc1ae9f323ea615bbf3c3f5a6ebd6bdf5669d59e7ff5da6afeba3b917f8d3c113d47cb6a5b1d7366a456d7ea3dcba976b1fab6feecd1c5fcfbcf52f5b952f2a21f6d4d3f5a33f3f91179676e9fef3910ff3cdf4650ea0d7366db3f79f8b30ec32d5e6a14a2aea94f431fda8e39b55ded60d47fd73ca19cd16ccff6edc00eed9331b623fb2c5ab0ae1deb63f343e44a937af267aa96ea633e2cd334ecc44ecdd0ceecdc2eecd2bed857fb6657f65dfcf7c31ed8437b64a6f6d89e3cd7657ec6c8d6dfcd279f6b2df83cc77756694fed993db717bf779e1c4a7b69afecb5bdb1b7c6caded97bfb601fed17b3aebd8a347afdb37a62!
 888fe8fd0bfbcdbe991bfbddfeb03fed2ffbdbaed975bb6137c5ff6bd96dbb236690a6dd7dce69f4a368e5feed384d6faad56351327abf7d9ef4c524e1f97c8f693ef4a1636935a3fd2ccdb23dbafe592a8abe5fb45ecf27501cd7f11cdf099cd0393991737662277152277372a7704ae7e25c9d9b533977e7e10ce4ddc8e7afff74ce2966ff2ff28a3367e88cfe2b4f9cb13331467657b447d3e77a0ada17736695cf3e5c94e0cb738ddd183853c37066cedc59384b67e5ac9d8db37576cede393847e7c579b5a6ce9bf3ee7c389fce97c8956ff9dc7b433eddda763a4ed71039fcc79581bf6bc344eb66cdf4a6d373fac6f677cf1357371257330666a065a64895673bf35c47416e68a94829d1fab886f129f77acbfdbaaee7fa6ee086eec98ddcb31bbb899bba999bbb855bba17f7eadedccabdbb0f77e00edd913b7627eed49db9f39ff64bf6217fc893e755c538c37217ee52f37ffb3c59b96b7763779ff73afe21b552d9be5feca9bb7577eede3db847f7c57d75dfdc77f7c3fd74bfdc6fb7269faa6a3e9fb5793e8ff27c06c3d33dcd333cd3b33cdb733cd7f33cdfc9bdc00bbd93177967e32272fe2086683956d1e495327d6836bcd84b34cb7afcee796234bcd4cb649efc499b22c6b41fb6e9e55ee195dec5bb7a37aff2eedec31b78436fe48dbd8937159f197de6e2!
 33f316ded25b796b6fe36dbd9db7f70eded17bf15ebd37efddfbf03e45bf22!
 c6dde646
dde792d7cacdbbf7e57dcbd516e777ce93e76a8a57f3ea5ec30cfec54a49e635bd96d7f63a5ed7eb797d5ff735dff04d6fea5bbeed3bbe2bf3e18f9f99efb91ddff703b7e587fec98ffcb31ffb899ffa999ffb855ffa177df41cbdfdcc22eda939f7afbaadc786f3eb66f17f853c79ce192dd7bff9957f774cf4ebff9827a6e73ffc813ff447fed89ff853b7edcf9ecff0f9737fe12ffd95bf561f95276ed7dff85b7fe7effd837ff45ffc57ffcd7ff73ffc4fffcbfff66b7edd6ff84dd156ede53c3215b39d99fde2b7fcb61eebee73efd87fe589d9f23b7ed7ef3d7b8f7fcc13bf1fe881f6dcdc1058811d38811b78811f0441e8cffc3038055170561ff9b465db9b07719004699005795004657009aec12da8827bf00806c1301805e360124c459e349f7d89650633ed2598078be70e3f31280f7ee52eef5f9f27325f34dd0e9646e8683f3311ea775fc54c3d0956c13ad804db6017ec8343700c5e82d7e02d780f3e82cfe04bfcf32d3eb5a01e348266d012ffb61d74826ed00bfaa11e6aa1119aa115daa113baa1178a6c0cc3f01446e1398cb557d5bb1b6998847297b8bc8ff20bf7ddff65f2a40a337b16e67fecd99127611196e125bc86b7b00aefe1231c84c370148ec349380d67e13c5c84cb7015aec34db80d77e13e3c84c7f0257c0ddfc277270f3fc2cff02bfc0e6!
 b613d6c84cdb015b6c34ed80d7b61ffa43f7b14ac803d57cc8cf4a4c97d96daaf1b07ff85f264a66b27c39c9fcc7fce939375b24fcec93d7927ff149cc2d3e9149dcea7f8948819e19f7c4ee9293be5a7e2549e2ea7ebe976aa4ef7d3e334380d4fa3d3f834394d4fb3d3fcb4382d4f2b992329fab0e7e7b43e6d4edbd34e84c8fd7577e7ff2279227ad4d35efb3a1dfcfedfe789519c8ea797d3ebe9edf47efa387d7af3d3d7e9fb543bd54f8df07e6a9e5aa7f6a973ea9e7aa77ea4475a644466644576e4446ee4457e144461748aa2e81cc55112a55116e5511195d125ba4637d3f8bbfbf669308baae81e3da2c1afdc47fc17c91311ff68188db4977fae27d1389a44d36816cda385db8d96d1cadb46eb681334a36db48bf6d1417c8ed14bf41abdf9e3e85d7c3ea2cfe82bfa8e6a513d6a44cda815b5a34ed48d7a51ffac9fb5b37136cf96d3351f664dcc19ff38fa7ed58f6226343fdb67e7f7bd1f2f9f22a9345f778dedd9b54eff98274671f6cebe185085e7d339f2c7e7f3393e27e7f49c3dc7c362bcbb3ee7defc5c8871efda3f78b37379be887faee7dbb93adfcf8ff3e03c3c8fcee3f3e43c3dcfcef3f3e2bc3cafceebf3c6accbfb2f7f773f4cdf9b5731f13f9fb7e7dd79ff7be6c9333fe43fb6981138e7c3f968e47f4c238c88ce2fe7d7f3dbf9fdfc71fe3c7!
 f9dbfcfb573fddc3837cfad73fbdc3977cfbd73ffdc89f5588b8dd88cadd88!
 e9dd88db
dd88f83388c4f71149fe3384ee234cee23c2ee232bec4d7e78a26d66dfe6986faa2e5f1edf45bde8fffd91b2277be557115df2df3eff22395b5e5257ec48378188fe2713c89a7f12c9ec78b7819afe275bc89b7f12edec787f818bfc4aff15bfc1e7fc49ff157fc1dd7e27adc889b712b6ec79db81bf7e27ea2279a932746744b4cdaa1f427f701c40ca96e6d7fd5bcf197e6c9736f55aa2f442d993f5befc44aec3fa48a18133dd7cdf5a6ddf51a8993b88997f8499084c929899273122749922659922745522697e49adc922ab9278f64900c9351324e26c9349925f364912c9355d449d6c926d9263b9127fbe4901cbde85fe589181bbf272fbf699ea49aa9bf6bb7e435cc8c46f2f6c7fec4349277eb7947dd4f3e92cfe42bf94e6a493d6924cda495b4934ed24d7a493fd59f952935532bb5532775532ff5d3200dd3531aa5e7344e93344db3344f8bb44c2fe935bda59593a7f7f4910ed2a15c31f8d33c4947d6f237cd135337bd241da793742a60e8c3e72a2d4642c9c7738dd89ca522ddec693a4f17222d97e92a5da79b749beed27d7a88ded263fa92bea66fe97bfa917ea65fe9b7bf4d6b693d6da4cdb495b6d34eda4d7b693fd39f5b2a3233b332dbc9332773332f4c8cf21fef04e31e81e9699decb7bc7fa28559a06b67270badb3e99d0e26f5b8b45f21f1fbd909!
 bd8af69a45d959a4659c25599a65599e1559297c8976d9d5d3b25b5665f7ec910db26136cac6d9447c37cd66d93c5b64cb6c95adb34db6cd76d93e3b6447f1dd4bf69abd8991ef5e8cb2feb0a34fcc205fc5273dadb3f7ece3b7cc9399c89324fbccbefe307f97e5563e37921a65f66dbc6435517f1a593d6b88b46c66adac9d75b26ed6cbfab99e6bb9919bb995dbb9e3e4b99b7bb99f077928feff298ff2731ee7499ee6599ee7455ee697fc9adf72d176e5f7fc910f9e23afec64697ae3274f2cd35899d37c98ffb2bbf1bf7adcf57c7e371fe7937cfa9327a62ff7faa4cf9c10fdc9ced6cc9a3dcb67f9fc9927f9225fe6ab7c9d6ff26dbecbf7f9213fe62ff96bfe96bfe71ff967fe957fe7b5bc9e37f266decadb7927efe6bdbc5fe885e66985519885e5e4855d3885fbdc9d9f7d67dfcf55159527a65778855f3cd7857fcbb515bdca022d2cc2e2a4b5b867f74c5fb625af662dab7951f2a11f930f332da242b45d455c24455a64455e1445595c8aabef17b7a22aeec5a318788762588c8a713129a6c5ac98178b6259ac8a75b129b6c5aed81787e258bc14afe23c6fc57bf1611ac5e7b3cfb2549ea446587c592b33d6e65aa0ed7ecb3cd1b49d187769c5b791aabedd9a3d9fd135b7e636fb2e6acffec4f4b393f152d40bd1762559d12c5a45bbe8145d7f5cf48a7ea9!
 97da73035e699576e914a3d22dbdd22f83322c4f65549ecbb84ccab4cccabc!
 2ccab2bc
94d7f2e6e4dea5accabb3d2b1fa11ce189fcc8cc87f66d8eca41397cb6aafaecf7ac2772ae28e625e5a81cdb5b912a9be78a60f2917d9793671d79966123b066e5d434ca5929daae72512ecb55b92e37e5b6dc95fbf2e06dca63f952be966fe57bf9e16f0aadfc2cbfcaefb22672a75e36ca66d92adb65a7ec96bdb2ffdc167c319e63e18b79b19ebb249ee5c035c43c6874b12fcec5956b3de9af7d62ebaf902717efe25f9e7b886c9127b287bf84cf9d43cf1ee5b9dbcb7e358dcbe91239f9e57c892fc925bd64973c685d8a4b79b95cae97dba5badc4f9fe9f7e571195c8697d1657c9994ee657a995de697c56579595dd697cd657bd95df6978338cff1f272797dce4771ef444b2e6f97f7cbc75fe38d45bfb6ed424faaed2f9f972f23d78f6224e4c97d88deb3dfb566cfbe1ef3c7cbf7a526d2b27e69883c69ca3ca9fb4174bcb42eed4be7d2bdf4dcf6a57f7914da55bf6a57e36a5eadab7d75aeeed5bbfad7e01a5e4f97ed35ba9eafb1935f936b7acd448feecb715e66b4aff9b5d063fdfc7c6eefb7cf93c5f30d04d7f27ad15ba25e34ff3022ce78e7b698335eaf57d10f5cabebfdfab80eae4331ac1df9b3ebf83ab94caed3ebec3af7e6e9b7dbbd2eaecbd0bcaeaeeb72774eae9b282ee3ebf6babbee8bd1f5703d5e5faeafd7b7ebfbf5c3bef1f5be8db208e45dd!
 ff9dfbf49eff7cb93c3f3fd41d6f359e8eba7995dbf9e6d3b3fe393fef1cebc555ebfafa29e849fd7fa25b936aecd6b2b6805b1dbbfb6af9d6bf7dabbf66ffa4dbb1937f366856f37fbe6dcdc9b77f36fc12dbc9d6ed1ed1c7d798f5b7c4b6ee92d73c434e5fa2dc673cf3daaaf7a6107b742846665747fe533737f853c41ec9f3ba96ee5ed62defc9ed336c33fdbe165ceaedfb7ab48c9dbadbadd6f8fdcb90d6ec34b79337cff36ba8d6f93dbd49bf9737f769bdde6b785386e796edf56b7b5c893cd6d7bdbddf6b7c3ed787bb9bddede6eefe24c1fb74fb5526f5c8cf4f675fbc63bdbf00cf8ef9a279433224f34e356d32fb7e75fb10aff6c45d09cdd1ab7e673a67e6bdddab78e48d36ef4ee476ef752dc7ab77e25a69fe7e29927be5f19955959951d34bc47e554ee6d5379955f0555589daaa83a577195387995e60367f0dc99ffcc9730d75a55267245abf2e7fba57edf3cc1dd55cb15a5d3ae0a23ad4a7bf29cc5fff3c748cb5975112979ad6ee947559dd27859ddfd28f0ce79f5a806d5304b659eccab91c8897135a9a6d5ec9c54f36a512dab55b5ae36d5b6daddf46a5f1daaa3933b6ef552bd566f46fe6c29cd87f928c7d57bf521ea4a82bb9fbf699ea4749f51d494ead308abb2fafaf33c3167d57725fa93aa5e35aa66d5aada5527f7514faa6ed5abfac107e!
 a49fa7dd7efdaddb89b41eb6adfadbb7d77eeeeddbbfbf72038dfc3fbe9fa7!
 217a3eaf
bf91edf936026467b7bd1d3cbfa6259f7f49e3dc7e7bf6f9e3cdfe874cf2db9bbed5ed8d3aa34067f9e275a7a2fefa29edcaff7dbbdbadfef8ffb20c89ff5c477efc3fbe83ebe4f543db94fefb3fbfcbea8ee97e97d795f5dddfbfabeb96fabf0bebbefef87fbf1fe22cef47a7fbbbf1baf5a269fde7a956fc531ecddfde3ecfccef544b3ee9ff7affbf7bd76afdf1bf65ecc49feb43779b65df7e6bd756fdf3bf7eebd77ef3ff487166d03cfdb3e0cd1ec580ffbe13c5c4fe4c9e9f3e13dfc6c9a361fc165fa082bf7717a448ff3237e248ff4913df247f1289dfc71795c1f377b630c1e159e2f1563b097ffa7bdf3ea51254bf2f8fb7e8ce51d610aa77d3adebbc415bc918949bc7729cd77df4caa7abba7a7efecbc71a5db0a55211090e2fc32e2c471ffc89e599681f7d1783f930c6628c3a54646329ab162c7c28ff407e2c5ec91f14c64325399ce4c6633777d667e7bc8421665ddac97f5b3c18265c3d4669fd9286ff3715639c2ac9ad5b27af69135b266d6cada39bf0e2883d2ec04729704099882d9a3ff477f3cd0f4f62bfbc9f304e6b12b1da72c5e4f1aa55d19fde8f4e73a060b90e62db9042bb0061bb005bbdd0cec975b7000477002677001d70507b7d4803b78e4ef7c66159001002040005f032080020638104002b53e000d0cb0c001ffc76be67dfd1a845f99!
 09884017f40a559bd7acec2efffb019398813e188021f804233006155005b5eb13ec0b3f0175f0011ae9211be43c9aa005dafb4ecea403cbb004273086099cc2199cc3c5f503a6700957700d37700b77703f35e09ff50ec6e5000fbf3213784c647cff3a835bec19fa91fe537142049ee0194ce0055ee10ddee1033eaf4f982db71b01ea10400811c40b0b9adb032490ce4e9041be3c430165ce44410d0db4d0410f038c6017f6f277f48f7d3800dfaa5345d49c95666d38849fc5fcc23b5587df9c77352f3866d35ea1eb1857fe4fdbf42f6c7a822338861558853558871fb0019bb005dbb083f29087262846c9bc91fa854553344373b4588f508a966885d64f853668bb526807db68bfbda0033ace4ee8f4bcc0017aa9482431baa06b96a15b79539c722874bc7f55260941f7c9ea35fffb03165f3bbd6286f224376fc72ca508208810c288e4b9af471431c4914072db493952f3c6f6813432c822873c0a288209eaa21eeaa3011aa2cf94656d3442e3fcbb2aa88a6aa8fe3aa775441fa8819ae576a197febef6783f93428d08b5501b75fe69f7e35f72c1e582c96e94125cc2131ce3044f0b2629c7333cc70b9ce265eaf06a23f11a6ff016eff01e797cc047b4c6277cc6177cc5377cc70ffcc41906b31386188129c679dcba6082296649b73cc5fc7d674b7f0a26b3425d!
 108b52e3ffd3a5cbe35b1fcbbc1d15d6d8608b5dcec47f330938c25ddcc3fd!
 94e1c1bc
8187f8138ff018577015d7701d26f803377013b7960de8f163dec26d9c6701a44c4a2f26073249f4f1f3553d62f2cbaf9fbc6aca90f83898ac7eb06bf750ac6f957ad32549c8346fc7d96944e6644152b2fcf6134f56644d36644b760513d8267b7220477222677299b7c915adc98ddcc9833c4946005204124470fe5d8450c2082ff56248c464502e95d884fef24ce6b9cd922e9144113d8bd3f62c2eb2e2385b9d0a3bb0d5a9d87b3539cf126288258e78124844baa447fa6490b2cb30e5870a19924f3222e38d809d94914ad62255522375f2411a2f26cdec4c5aa44d3ab48cd49dd1129dcc4e34a60998d1e9741af7e88cce695133e27b6fc47b6786dfcea4a88831a1295dce12baa2ebd2a15ca51bbaa53bbaa7077aa4277aa6177aa5377aa70ffaa4190514524431250b5e9cf07d124a29a39c0a2ab3705b2d6754514d0db5d4514f035ad38876698ff6e9800ee9271dd131ade44caab446ebf4a3ec688336a765da2a76667e57237aebcad65b991477e5a38815e5016dd34efe340f1faf85f8299bb1395bb0942dd98aadd9866dd98eedd96139dd68766427f864e78b2f98b00bbbb21bbbb3077b5e3ba0b9a02c63804186a8037b86d19a114619639c092601678a6966662766994367e627171668135d59c4ba5fbb567e71263c59840bebb13e1bb021fb6423366615566!
 535569fd710cc87851df6913368b0266bb136eb2c1bbccc4b7cc2637686adc25378c2a77cc6e77cc1d3798b2f1794aff89a6ff896ef78ce042687233ff0233ff1f3b24a3fef657ee1d7d989df98e3f772c41ffcc9b3b85afae0e0355e8c7fe5713c87f96fdf73c431279c72c639175c72c53537dce6e6b8e7615ee38147bccb7bbccf077cc83ff9888f79859dbf94557895d71e31aff30fdee0cd2cf0166ff38e288b9298908688d15a24622a66622e161b27d2548ba55889b5d8886dbc2c564fe238ae14aa83625754e27abf1af73b994c36e122f6e2208ee224cee222aee2561011f765241e3919953f3e73cb041050208105115430c1851052a8978647e32684164658e1d6a9f01b2182884457f4445f4cf85e0c602286e2538cc498ea4d4f54165654454dd4c58768f0bb68967a39956a693c39c489f87b8fc43c67d2161d59164f59921319cbc9325a46f963527091d38248fefa4ccee542a6729962b96252aee5466ee5ee8b49d6beadf058eecf5c1ee4519ee4595ee455dee45d3ee45366126cea124a24b124923e5792492e85945249cdefd21473a0d2c655e9a497a13c787f7dad77afc7cb48761194bd82c55f99b8cabe1c889b1c8293fcdc0ce5488e654556654dd67ff313b4971fb2219bb225dbb2a3caaaa4262a56899aaa999aab854ad552add45a6dd436dbab9!
 ddaab833aaa933aab8bbac607758b57d9e3365277f5f8f2935fb73fc9c7cd0!
 ff55c575
426e37fcf440105155258114515535c0925d577eca223be535a191c94552e65e0704b94574145aacb6aaaa7faab861adcf76aa83ed5488d554555554dd5d5876aa09a6a16ba9dd943b5545b754ac93b35a27e0626ba5c9ee8929ea84c655f04fe95cd8b495fc73ad1533dd373bdd0a95eea955eebcd1793747e3ceaadde2d0f7aaf0ff7121ee8a33ee9b3bee8abbee9bb7ee8a7ce34d050238d35d154339d775a5a6a05a6731dafa6466b6db4d5eefd79f0bb9994f2a4567b1d74a4bbba971e7eec27baaf077aa83ff56821f458577455d7f477ec5a58fda11bba09bd6ee9f6468083ee98b2299989894d62a66666e6666152b3342bb3361bb3353bb3370773342773361773353773370ff3ccb38e42bcd5bdbb477973ec9a941f2633c0408396d1bcb67a182c40deab0f8a3ee4372ae2220786186a98e1bafe7446a43323e78d6266a530a38c36c6d8eb05348dbb47c69b6022d3353dd33783873443f369469b5dce676c2a6a65aaa666eae6c3344c73b1352dd3369da26f2fc6af2ffb85fda4a89f90df95255bb6253bb179b655f88beecd6b4f58d86fbe22139bd8a99dd9b95dc8d8a6bb59dabbadedf236bd9eaf9d6b27e5d70cb60a654ebbb26bbbb15bbbb37b7bb0477b3285ecd7d95eecd5deecdd3eecd36616586891c596586a99e5af88357bd5a3653f43b5a037eb484c!
 27adb8112e56586995d5d6e4e346cf3da27f626259c53aeb6db091edda9eeddb811dda4f50b7233bcead62ab9ba1add9bafdb00da86cd3b66cdb765c592257721317bbc44dddcccddda2d09372a95b961fa56b51fde4bb064afc37936f268fa2726f992573b7726bb7715bb7737b9d67c785bffcce84eb65e40eeee84eeefc6ad38bbbba9bbbbb877bbacc01071d72d811471d73dc09279d72da19679d73de0517b9aeebbd3ed9770337749fafeb172ca613f65b4da09fe13cd0bb99bcda217ec58d6d322f97dcc88d5dc5555dcdd5dd876bfcded3cfebf33a0f2a734dd7726dd7f1e53faaa81da92f59e8273ef6c969eea77ee6e77cf367ad35bff0a95ffa955f17d7c5bca8235cf84a91fdbd3fd7faa3bd9b4961df55c65e757aca7bbff15bbff37b7f10477ff4277f2a3c4526fe9cdbc55ffdcddffdc33f7de681871efdb5da5dce0079ec89a79ee5c15078e995d7def897e2b977e5e44b15e9bb62d3df4cfec55e95ffbe2c29ce409762ef7df091effa9eeffb41e12bfecc954cc453f6fcd07ffa911fc385afac94affa9aaffb0fdff04ddff26ddf09e5500a931087244cc32cccc322a4611956611d36c51ce3cfd067fc3bfba998e4de827929799cbeefda6dd8857d388463385913cee2646db92c07e572911d876bb8857b786ca2f00c596e20c080e423e040020d2c70e5!
 820832a8a083093659e63cf82b56fecde43fb03f9fb72d32b22f85df521c5c!
 f0218428
74436f5d09fd3008c3fcff6718b97d18874aa8e6360eb5500f1fa1c18eec189aa41b5aa11d3a51392a4593e8abf2e3e467985ffc4fece760f2bbbd72a142b22e298bd2354a4abc78359a46b3681e2da2340f62abdc967218ada34db48d76d13e3a44c7e8149da34b748d6ed13d7a44cf288b405926afbab1af1a76939fadd7f8b1fdf73ffee7bffe17b8144d7a</data>
+        <data format="XPM.GZ" length="21370">789ced9cc78e64b79286f77a8a82b81306bcc71b5ccca2bcf7be06b3a02feffd60defd32e30ff20172a144026a42687c4d170cc7e0a96efdebaf858b83dd85bffef5c7dbbb7abf310be65abd2efc653f1e1e7efee77ffffbfffef8b32a8a85ba5868fb76a1faf3bffef853d50b664114aad0653d61733fe1b22aebb29db06e88ebb2293be2fbcc96c6af11b7917bea5f271e4a5535c405f11899e69b2b62159b26be21d6a5ad8609873d621319fbbd10dbd2959efa97125724bfde218ebd5549eb2d4eb82ae201a83fec12c75f7531614bfb55f5a44dd86d1137558bfd55cfdc55741e7f4ddc4636b41ec91f69a814cd7f651e31dfbc13f7b19fe4759279843ec225b1aa34fa03e92792817ce694d936749eb04c6c2a5f933e2c9dbf7295e7f917896b5adf1e81eb92f54dfa8cbd450dfb7c4db88e06ace9fca164aed06f347155d7359d2f907eeba66e1b3a9f3867ee6a47eb9d10b791c91f04c913a9af493efd4b3cc646e3cdc0ac703efbc3ac59bf5562cc1767891bd8f383d934d46f495fb5aa4d4dfee47466e807f2ea389ee68b4b66db90bee40eb363792cb1a96d4bfa08e44fb5ad3dceaf3db8291a8a0f41fe3099cdfd32f348fe83f3fba668697f4bfe1c67970dc91bb689cba8601a2fc05564b28fee88eba66!
 d48bfee93b8693aac2fb6987bac2fd79807b607e9278eeea12f51308f2dceeb88fb381ee7a57cd00cb1c1be37cc634bf6514fccba23fd9947e2b15190376c25e67eca078d6a4c4bfe282a66db421ef28746c77ec4c766e28ecea730dfb56547fad2e4cf8d6f3cd673c46dd196bc7ec9dcb4d0ef0a711999f4a10e33d3f9fc7ee28efc5d91fc6dd5d698afd6989b0efe44fa8fbd6d4bf6b65b99e18fdfc44ddbf7383fe469dbaea3f8f6147f6dd70e389fa813f7e44f9ef2474ccf06fa0be4ffedd8ea8efad51eb3e9a0ef0d66db93fdbd66761dfc11f2a8b49e5e61e67e83f5756be1cfea99d8c47ee493bbcc246fa0fba0b5aded901fc97f626f01fda823e6aa237ff1145fadef1ab07e9b701c5d41dfe22433fcbb65667bb8b3cc642f4bf1d095d1a1e13f9bcc3df677c7c455d7f6b80f7c669c6785b987bed47166ea7714cf5d3d091892ff85b9c5faf28db96b703e9918ebe90be6be877f527c44e9bb01fe42fe1f57e3fdcd11f3d0e37c7b8907f217f7cb3cc23f24e489cb71fe53c47d3762bc7c65562dfc6d2331e451ab8907dc7f2bcc86fb317e88fdb0f72ab3667ffece4cfbfb4766d3d3784bf9b61b3b0776749f762a33c553a73b3be23ea67cde99ce0de44fee00dc173dc59f877e6cec477e0fe0beecc95fec61e201f6b7cc15e493e4cf71f712f12abbc4ec3f3d7!
 33d92bf9986b9813efd1a738bf18ee2b7f37d3d907fa9c7c423fce98099fdd!
 38f8947b
29fa17c114fd7f0fc93cc34dfad67867d6e89cb741e77c7ccf2a8f7c4981fc055da2fac3177d84f503cf675ecc7fa97ccc3087dd279a2f4e3007fa0f8ebbb5ec17f03c567dfc77eacbfceccfe625e980d8fa7fcda0ff14f50ef2d316be44b75ca6c06e8df255624afa6fbb71f7bcdfe7dca6c110ffa96d90dc8ef940f7ad5eb11f1b1c16c219ffa6076600179e3ea986febcc88c775e612fd8eeab1def41efea843e291f425614f3314c8affe9eb9c27a92fc2d4a53c0dfe50573c9fb3d65867f6e30d7cce49f51fa42215f9799e93c729fb9ec70bf8f8915e94f9f67c67d807e1f2f78f4533c45e998dd53665acf537c45e93a85fbb365ee717e43f1114fdb29e893f269947e44bf3699e11f94bf62b9d129dcb76fccd1a3881f126be4f396598d745e4df618da61c07c49fe3f74c388fb244866a5285f8b2f66f60f41f976e8633fce7bcaac475acf6e339b91e64bf28761182cfc5151fe1cc6d80fffbb62b61af1b3cfec30df40bf6af0e8771e3c162ccf6b624df1e94be612fd8aee8f410f06fdea93d9b27c4fcc0ef74b784bac112f0e1cd783bc14ff51fa12faf57d66d2bfff64ae34eabf73e61afa52544fc6dd0b8cd79a393ef8e87c2fcc9542fd04fdba745e2b88fdd8607d4ffe107be30544bc9b58e3bd49f688d277f07ffb9e58933faa7be6de403fe41f6315c7a31e!
 37ccbd863caf890deaa7bdcc141f623733de878279e0f5a87e8dcf1b5e4fac3373bfdd4d6c48bfee877954b8ef2e12733fe5afb11947d8571c332bac27be3343df741f8c6d1c8ffaa267e67edb26c679ec2bb346bcb887c4d097a6f7eed84579509fdc32eb1eef8397c406f297cc46a31e843c7d3c1fad2f5a6685f1f28cd9c23f82486c30be6376d0b77960f69c6f60cf219d4f2d315bf897873e075568e4b396b9047b8ad7711c1d383c2736b81f307f5425d6d3547fc4dd0ae43397383ed169bd37e61af1a328bf44edf2fe728fb9e27a8ae27334a3873d34f4176f3bd47f6a646eb0bec6f96c941ff1fbc95c617df19319ef059f19f5c62b738d7e4df7c9e814d72f9aea83a8dd1af631d799117f81b9e17830cc2de25d2d3277f03f4df92f6a2b3ee0881f985bd433b266ee31ded17d16b51d9fecb4de37b3d2b80fd05fa958f0927ca49f387ad488bf036605766366e47b3a9f6ae278bc8735b362fbff66c6f7119119f5ca3eb366797e33d37a7a97d9b03cdbcc96f7837c6d2c9f501f6c306bbe0f3e12637d7fc86c2dfce987d91bf813e55fd52bceffe637b1217f3592d9221f7acab72a5e6f6c2fc9acb9fef96436f037f1cb6c918ffc0fb3b3c8e70eac0be43bf79d18f2058a5f352acff6c579465d229f588aaf284d097f5277cc9525fd0b8cd7ba617fa4fb65221d!
 c7cb4766c403e5ff78da0aebbb81b985ff9913e6cea2de80fc4e57905fd7cc!
 35ea39f1
9618f16cf7991bec675733e37b1871d44687fc215be6dea0fea07a5ac7e8b59087ce1b77ef51efe96de681ebbffbc406f7619718f3ed2df3887ca97c66dccf8159617f45f93a9ea647fdea1be601f3dd2ef388fd8d498c7e99c62bd8df3f316bec27217fa307ce7f1db3e2f5aac418af8f9935fc5553fed5319ba0be959bcc7c3f19c5ccf120299e7497c68b4566eed7afcc0ef25bc3ec2dc923b05f1ff7477cae804d61299eec32730936b0efa02dde4bfa2731e4f76789b1bfd9607660017b0ca6867f4be87b3405dfcf9fcc25f46b6c66d297237f8fda2b508f8b65e6cae27bd13a736df13d13fea6e378ec47efcd68ac12f9df5c3257e8f7dfcc35f6572e33bea72d313716efb3cfc40ef18ef3d9381ef5c7197387f11ef671a6e4f7d12a73cbefedddc43c5f327758dfc1fe3e8e473e784accf21c30f3785f300fd05f7848ec50ff68e611fb79f24753981af57e38626e2dfce79ab9e7f7c669629e5f6546fcbe25863cfa2c33ea1df24753267d866fe60ef2aa5de61ef783ee13431e7fc53cb23fdbcca8a7bf12e3bce288395e28c43e31eb8bbeef9a2ad9231c32777cfe1d66ede0cf69bc61bece8cf351be3575d2bf5d64567cdff5cc1af2f8cbcc88ff3231d613b7ccbc9f84bd62f6c57aea9a99c7cb8299e5b10db3853e02e6b7e93c7a9fd9607fbf99d8e1fb8861e6f!
 9be66762cdf5d66bcd7ce3323dfa7fd3caf0ffd74c97eae6656e80f3fcc1afd7e8bd9623fff91193f7f78624efb3f67c6f7ccfbcc248f7f65f6dc0fffed0dbf7fe50a33bf7fd536b31de1df27cc0e1cee12633d79c5ec597fab99297e2de4eb6dc1fa14cc25e40b149f26de4e78dff95b66b67f80bd87381fe7bfcf8cf7f47966e40bc1ccebbb13e6da217e29bfc5c77df267c5ecf0de9015b377c83788ef31ade73d7385f39a9fcc901fe757491e393057a80fed416296772733de9b8ab971a86f618f787b72bd8cf8d769be2d32a3fe5aca8cf7c77d667c5f5f64ae79ff2e33de5f2133ea459719f5e4c0dcb07eaf33439ecdccd81ff21a5b20fedd0d33af271e991bec6f4be616fdf692b973f8fe06fdd934df3c3337e80f37cc2df6379b99919f1e983bb0be64ee31deae6546bec17a2eee87f1037383fdfd0373eb50ffdd3277aceffdccc8877566e4677abfc46cd1e0fb80d8676ef1bdce0ecc03e6bb2233f449fe19b5db28d8a363ee1dee8b07e634fe997944bfdb60566045f9cf96b11fdf9f3433f70bca473656eff8be26497fb68ecf0fbc8f6c628ffb9cfcdbc6db8febef556683f5b44a8cf1ea3633be8f503cdb783bf17e540fd9de1ad453f297d972bfce4cf248c5ecf87be94f66cc179951ffde66c67b5266467d4df9d40e79bf1be634ff8ed933937d6dccfea!
 8c7c43bd8f1f75b81fd952b79bdfbccc8bf749f44ed16f83e211799f9fb86f!
 c60ae387
f3d64c6789f98df3781b9e6f1542f446bf0f70579c85cb3febe33e3bd79c1dcf0faf097785be17deade99d37cc7dcf0f7dc15e696f70b99f19e80bfc4db8dbfe73c3137585f7e32b7fcbd662b31fa759519f103fff0697d49f9ca156ee0f5c85f5d1919efcdc7ccf89edb66c6f702ca272e665b7c6fb19e79c47c49f9d7c5eccaeff57366c5fd5f99f1bd663933beb7a13f665783fb96ea2717b313e22350fe733a36bc6f293ff8c92f1a7ff89ed983e7ad49919b925a1a696373d2cb20afe39fddc4ff6ed13f6b49a769736a13d6b8bc93f7f2413eca27f92c5fe4ab7c93eff2437eca2ff92d7ffeb1c9dfd9e46f6c8b72492ecb15b92ad7e4badc909b724b6ecb1db92bf7e4be3c9087315e6e672de9346d4e6d22e4913c9627f2549ec97379212fe5952c64292b59cb46b6b293bd1ce428e4ac259da6cda74d84104a686184154e7811c4b5b811b7e24edc8b07f1289ec4b37811afe24dcc5cd269da9cdae4437c8a2ff12d7ec4af58144b6259ac8855b126d6c586d8145b625bec885db127f6672de9346d4e6d72200ec591381627e2549c897371212ec5952844292a518b46b4a213bd18c4386b49a769f36913259550931fe519159f84caab2096d5b5ba51b7ea4eddab07f5a89ed4b37a91f7b396749a36a73679556fea5d7da84ff5a5bed58ffa558b6a492dab15b5aad6!
 d4bada509b6a4b6dcb87594b3a4d9b539beca85db5a7f6d5813a5447ea589da85375a6ced585ba5457aa50a5aa54ad1ad5ce5ad269da7cda443ad5a95e0d6ad4520b3df90b0f465bedb4d7415feb1b7dabeff4bd7ed08fb396749a369f36d14ffa59bfe857fda6dff587fed45ffa5bffe85fbda897f4b25ed1ab7a4dafeb0dbd396b49a769736a932dbdad77f4aeded3fbfa401fea2375ab8ff5893ed567fa5c5fe84b7da50b5d4a3b6b49a769736a934ad7bad1adee74af073d1a698451461b63ac71c69b60aecd8db9fdc7267f5f93c1dc997bf3601ecd9379362fe6d5bc8965f36e3ecca7f932dfe6c7fc9a45b36496672de9346d3e6d6256ccaa5993b559371b66d36c996db36376cd9ed93707e6d01c996373624ecd99399fb5a4d3b439b5c985b93457a630a5a94c6d1ad39acef466f20f16a41576f217558db5d6593f6b49a769f369131becb5bdb1b7f6cededb07fb689f4cb0cff6c5beda37fb6e3feca7fdb2dff6c7fece5ad269da7cda447ed845bb6497ed8a5db56b76dd6e449b6cda2dbb6d77ecaeddb3fbf6c01eda237b3c6b49a769736b93137b6acfecb9bdb097f6cabcd8c296b6b2b56d26ff04d9f676b0a393ee9f9f33fe6dcd06a79c76c659e7c4a3f32eb86b77e36edd9dbb770feed13db967f7e25edddbac259da6cda74ddcbbfb709fc2b92ff76d3af7!
 e37edda25b72cb6ec5ad469bacb975b7e136dd96db9eb5a4d3b439b5c98edb!
 757b6edf
1db843b3e38edcb13bb107eed49db97377e12edd952b5ca95f5c356b49a769736a93da35ae759debdd20eedde8a5174678e5b5bbf793bfa2edbcf7c15ffb9b594b3a4d9b4f9bf85b7fe7effd837ff44ffed95ef817ffec5ffd9b7ff71fd1269ffecb7ffb1fffeb17672de9346d4e6db2e497fd8a5ff56b7e5d16cafb0dbfe9b7fcb6df89bfeffa3dbfef0ffca13ff2ffd4c27f5bf327fed49ff9737fe12ffd952f7ce92b5f4ffe4748bef3bd1ffc18641041053d6b49a769f36993109f88c1051f42b80e37e136dc85fbf0101ec353780e2fe135bc85f7f0113ec3d7ac259da6cda94dbec34ff80d8b61292c8795b01ad6c27ad8089b612b6c879db01bf6cc5ed80f07b39673ba36a736390c47e1389c84d37016cec345b80c57a10865a8421d9ad0862ef4346e98b5a4d3b43fffffdf7ffc077e9b1f64</data>
     </image>
     <image name="image1">
         <data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154789cad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d0326df7!
 ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df218e05!
 82c261e95f8bfc04f1a1e8bc5c4dfe0a19017a725d8c60000000049454e44a!
 e426082<
/data>

Modified: branches/developers/avida-edward/source/python/AvidaGui2/pyFreezerCtrl.py
===================================================================
--- branches/developers/avida-edward/source/python/AvidaGui2/pyFreezerCtrl.py	2006-08-09 19:23:27 UTC (rev 868)
+++ branches/developers/avida-edward/source/python/AvidaGui2/pyFreezerCtrl.py	2006-08-10 19:18:05 UTC (rev 869)
@@ -4,7 +4,7 @@
 
 import os
 from qt import *
-from pyNewIconView import *
+import pyNewIconView
 from pyFreezerView import *
 from pyReadFreezer import pyReadFreezer
 from pyWriteToFreezer import pyWriteToFreezer
@@ -23,7 +23,6 @@
     
 
   def contentsDropEvent(self, e):
-    descr(e)
     freezer_item_name = QString()
     if e.source() is self:
       return
@@ -33,7 +32,6 @@
     print type(e)
 
     if ( QIconDrag.canDecode(e)):
-      descr()
       format = QDropEvent.format(e, 0)
     if ( QTextDrag.decode( e, freezer_item_name ) ) :
       if freezer_item_name[:9] == 'organism.':
@@ -45,7 +43,7 @@
     # Check if item is icon
 
     if (pyNewIconView.canDecode(e)):
-      descr("caught icon")
+      warning("You can not drag an ancestor back into the freezer")
 
     
   def FreezeOrganism(self, freezer_item_name):
@@ -65,42 +63,39 @@
     apply(QListViewItem.__init__,(self,) + args)
 
   def dragEntered(self):
-    descr()
+    pass
 
   def dragLeft(self):
-    descr()
+    pass
 
   def dropped(self, e):
-    descr(e)
+    pass
 
 class pyFullDishListViewItem(QListViewItem):
   def __init__(self, *args):
     apply(QListViewItem.__init__,(self,) + args)
-    descr()
 
   def dragEntered(self):
-    descr()
+    pass
 
   def dragLeft(self):
-    descr()
+    pass
 
   def dropped(self, e):
-    descr(e)
+    pass
 
 class pyOrganismListViewItem(QListViewItem):
   def __init__(self, *args):
     apply(QListViewItem.__init__,(self,) + args)
-    descr()
 
   def dragEntered(self):
     self.setDropEnabled(True)
-    descr()
 
   def dragLeft(self):
-    descr()
+    pass
 
   def dropped(self, e):
-    descr(e)
+    pass
 
 #class pyFreezerCtrl(pyFreezerView):
 class pyFreezerCtrl(QWidget):
@@ -143,7 +138,6 @@
     self.resize(QSize(232,383).expandedTo(self.minimumSizeHint()))
     self.clearWState(Qt.WState_Polished)
 
-    #pyFreezerView.__init__(self,parent,name,fl)
     self.m_list_view.setSelectionMode(QListView.Extended)
     self.connect(self.m_list_view, 
       SIGNAL("doubleClicked(QListViewItem*, const QPoint &, int)"),
@@ -154,9 +148,9 @@
     self.connect(self.m_list_view, 
       SIGNAL("rightButtonPressed(QListViewItem*, const QPoint &, int )"),
       self.right_clicked_itemSlot)
+
     self.setAcceptDrops(1)
     QToolTip.add(self,"<p>Storage for environment settings, full populations and individual organisms</p>")
-    descr()
 
   # This shadows pyFreezerView.languageChange, which was generated by
   # pyuic from pyFreezerView.ui. @kgn
@@ -177,12 +171,17 @@
     item.setPixmap(0,self.image2)
 
   def construct(self, session_mdl):
-    descr()
     self.m_session_mdl = session_mdl
     self.m_list_view.construct(session_mdl)
     self.connect(self.m_session_mdl.m_session_mdtr,
       PYSIGNAL("doRefreshFreezerInventorySig"),
       self.createFreezerIndexSlot)
+
+    # If a freezer item was dropped in the trash can
+
+    self.connect(self.m_session_mdl.m_session_mdtr,
+      PYSIGNAL("DeleteFromFreezerSig"), self.deleteFreezerItemSlot)
+
     self.createFreezerIndexSlot()
     self.m_list_view.setAcceptDrops(True)
     self.m_empty_item.setDropEnabled(True)
@@ -315,21 +314,20 @@
       self.setText(item_name)
 
   def dragMoveEvent( self, e ):
-    descr(e)
+    pass
 
   def dragEnterEvent( self, e ):
-    descr(e)
     e.acceptAction(True)
     if e.isAccepted():
-      descr("isAccepted.")
+      pass
     else:
-      descr("not isAccepted.")
+      pass
 
   def dragLeaveEvent( self, e ):
-    descr(e)
+    pass
 
   def dropEvent( self, e):
-    descr(e)
+    pass
     freezer_item_name = QString()
     if e.source() is self:
       return
@@ -351,3 +349,17 @@
     
     self.m_session_mdl.m_session_mdtr.emit(
       PYSIGNAL("doRefreshFreezerInventorySig"), ())
+
+  # Routine to delete a file from the freezer and refresh the freezer list
+
+  def deleteFreezerItemSlot(self, freezer_item_name):
+    if (freezer_item_name.endswith('.full')):
+      tmp_file_list = os.listdir(freezer_item_name)
+      for file in tmp_file_list:
+        os.remove(os.path.join(freezer_item_name,file))
+      os.removedirs(freezer_item_name)
+    else:
+      os.remove(freezer_item_name)
+    self.m_session_mdl.m_session_mdtr.emit(
+      PYSIGNAL("doRefreshFreezerInventorySig"), ())
+

Modified: branches/developers/avida-edward/source/python/AvidaGui2/pyNewIconView.py
===================================================================
--- branches/developers/avida-edward/source/python/AvidaGui2/pyNewIconView.py	2006-08-09 19:23:27 UTC (rev 868)
+++ branches/developers/avida-edward/source/python/AvidaGui2/pyNewIconView.py	2006-08-10 19:18:05 UTC (rev 869)
@@ -6,7 +6,6 @@
 from descr import *
 
 def canDecode( e ):
-  descr("BDB")
   
   # use the same mime as standard IconView
 
@@ -17,10 +16,8 @@
   def __init__(self, dragSource, name=None):
     QIconDrag.__init__(self, dragSource, name)
     self.ancestor_name = str(name)
-    descr("BDB")
 
   def encodedData(self,mime):
-    descr("BDB")
     if ( str(mime).startswith("application/x-qiconlist") ):
       a = self.ancestor_name
     else:
@@ -30,7 +27,6 @@
 
 class pyNewIconView(QIconView):
   def __init__(self, parent, widget_name):
-    descr("BDB")
     QIconView.__init__(self, parent, widget_name)
     # self.setAcceptDrops(1)
 
@@ -42,23 +38,22 @@
 #     return e.provides( "application/x-qiconlist" )
 
   def dragObject(self):
-    descr("BDB")
     item = self.firstItem();
-    while(not item.isSelected):
-      item = item.nextItem
-    ds = pyNewIconDrag(self,str(item.text()))
-    ds.dragCopy()
+    while(item):
+      if (item.isSelected()):
+        ds = pyNewIconDrag(self,str(item.text()))
+        ds.dragCopy()
+        return
+      item = item.nextItem()
 
   def dragEnterEvent( self, e ):
 
     # Check if you want the drag...
      
-    descr("BDB -- NewIconView.dragEnterEvent")
-    descr(e)
-    descr("BDB -- NewIconView.dragEnterEvent")
     if (canDecode(e)):
-      descr("BDB -- can decode drag")
       e.accept()
 
-
-
+  def contentsDropEvent(self, e):
+    if e.source() is self:
+      return
+    self.emit(PYSIGNAL("DroppedOnNewIconViewSig"),(e,))

Modified: branches/developers/avida-edward/source/python/AvidaGui2/pyOnePopulationCtrl.py
===================================================================
--- branches/developers/avida-edward/source/python/AvidaGui2/pyOnePopulationCtrl.py	2006-08-09 19:23:27 UTC (rev 868)
+++ branches/developers/avida-edward/source/python/AvidaGui2/pyOnePopulationCtrl.py	2006-08-10 19:18:05 UTC (rev 869)
@@ -8,7 +8,7 @@
 from pyButtonListDialog import pyButtonListDialog
 from pyGraphCtrl import PrintFilter
 from pyImageFileDialog import pyImageFileDialog
-from pyNewIconView import *
+import pyNewIconView
 import os.path
 
 class pyOnePopulationCtrl(pyOnePopulationView):
@@ -102,7 +102,6 @@
 
 
   def dropEvent( self, e ):
-    descr(e)
     freezer_item_name = QString()
 
     #freezer_item_name is a string...the file name 

Modified: branches/developers/avida-edward/source/python/AvidaGui2/pyPetriConfigureCtrl.py
===================================================================
--- branches/developers/avida-edward/source/python/AvidaGui2/pyPetriConfigureCtrl.py	2006-08-09 19:23:27 UTC (rev 868)
+++ branches/developers/avida-edward/source/python/AvidaGui2/pyPetriConfigureCtrl.py	2006-08-10 19:18:05 UTC (rev 869)
@@ -123,11 +123,17 @@
       PYSIGNAL("petriDishDroppedInPopViewSig"))
     self.connect( self.m_session_mdl.m_session_mdtr, 
       PYSIGNAL("petriDishDroppedInPopViewSig"), self.petriDroppedSlot)
-    self.connect(self.AncestorIconView, 
-      SIGNAL("dropped(QDropEvent*,const QValueList<QIconDragItem>&)"),
+
+    # If the user drops something in the Ancestor Box
+
+    self.connect(self.AncestorIconView, PYSIGNAL("DroppedOnNewIconViewSig"),
       self.petriAncestorDroppedSlot)
-    # self.connect(self.AncestorIconView, SIGNAL("clicked(QIconViewItem*)"),
-    #   self.setAncestorDragSlot)
+
+    # If an ancestor was dropped into the trash can
+
+    self.connect(self.m_session_mdl.m_session_mdtr,
+      PYSIGNAL("DeleteFromAncestorViewSig"), self.deleteAncestorSlot)
+
     self.ChangeMutationTextSlot()
     self.ChangeWorldSizeTextSlot()
     self.m_session_mdl.m_session_mdtr.emit(
@@ -668,6 +674,9 @@
       
   def dropEvent( self, e ):
     descr()
+    descr("BDB -- e.pos()")
+    tmp_pos = self.mapToGlobal(e.pos())
+    descr("x = " + str(tmp_pos.x()) + "  y = " + str(tmp_pos.y()))
     freezer_item_name = QString()
     if ( QTextDrag.decode( e, freezer_item_name ) ) :
       freezer_item_name = str(e.encodedData("text/plain"))
@@ -691,14 +700,9 @@
         core_name = os.path.basename(str(freezer_item_name[:-9]))
         tmp_item = QIconViewItem(self.AncestorIconView, core_name, self.imageAncestor)
         #initialize Avida (which repaints the dish)
-      print "ABOUT TO SEND INIT"
       self.m_session_mdl.m_session_mdtr.emit(
         PYSIGNAL("doInitializeAvidaPhaseISig"),
         (self.m_session_mdl.m_tempdir,))
-      print "INIT SENT"
-#        if you are reading this, the next line doesn't matter and should die
-#        return
-        
 
   def petriAncestorDroppedSlot(self, e):
     descr()
@@ -712,14 +716,20 @@
         tmp_item = QIconViewItem(self.AncestorIconView, core_name, self.imageAncestor)
         return
 
-  # def setAncestorDragSlot(self, item):
-  #   descr()
-  #   
-  #   # if the user clicks on a portion of the ancestor icon view that does not
-  #   # have an actual icon quit this subroutine
+  # Find the first item in the AncestorView with the name ancestor_item_name
+  # and remove it. Items in AncestorVeiw should have unique names so the 
+  # correct item should be deleted.
 
-  #   print type(item)
-  #   if (not item):
-  #     return
-  #   dragHolder = QTextDrag("ancestor." + str(item.text()), self.AncestorIconView, "dragname")
-  #   dragHolder.dragCopy()
+  def deleteAncestorSlot(self, ancestor_item_name):
+    descr()
+    curr_item = self.AncestorIconView.firstItem()
+    while (curr_item):
+      curr_item_name = str(curr_item.text())
+      descr("BDB -- curr_item_name = " + curr_item_name + " ancestor_item_name = " + ancestor_item_name)
+      if (str(curr_item_name) == ancestor_item_name):
+        descr("BDB -- in if curr_item_name = " + curr_item_name + " ancestor_item_name = " + ancestor_item_name)
+        self.AncestorIconView.takeItem(curr_item)
+        # curr_item.~QIconViewItem()
+        break
+      curr_item = curr_item.nextItem()
+

Modified: branches/developers/avida-edward/source/python/AvidaGui2/to-do_list
===================================================================
--- branches/developers/avida-edward/source/python/AvidaGui2/to-do_list	2006-08-09 19:23:27 UTC (rev 868)
+++ branches/developers/avida-edward/source/python/AvidaGui2/to-do_list	2006-08-10 19:18:05 UTC (rev 869)
@@ -59,6 +59,12 @@
 
 13-Jul-06 Change the patterns of dots for multiple ancestors
 
+09-Aug-06 Deactivate Ancestor Icon Drag
+
+09-Aug-06 Rename duplicate Ancestors names when they are droppeed into Ancestor View
+
+09-Aug-06 Ask Charles about running test CPU on each org. 
+
 ************Jeff*******************
 
 Priority High
@@ -124,6 +130,7 @@
 - change the text in analyze mode to list the population instead of what
   it currently state (12/21/05)
 - check why repeatablity does not repeat
+- check why program runs so much when program is paused
 
 Priority Low-
 

Added: branches/developers/avida-edward/source/python/AvidaGui2/trash_can.png
===================================================================
(Binary files differ)


Property changes on: branches/developers/avida-edward/source/python/AvidaGui2/trash_can.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream




More information about the Avida-cvs mailing list