From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S261823AbTD0VUV (ORCPT ); Sun, 27 Apr 2003 17:20:21 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S261809AbTD0VUV (ORCPT ); Sun, 27 Apr 2003 17:20:21 -0400 Received: from tmi.comex.ru ([217.10.33.92]:44970 "EHLO gw.home.net") by vger.kernel.org with ESMTP id S261835AbTD0VUG (ORCPT ); Sun, 27 Apr 2003 17:20:06 -0400 Subject: [RFC] concurrent JBD for 2.5 From: Alex Tomas To: linux-kernel@vger.kernel.org Organization: HOME Date: Mon, 28 Apr 2003 01:29:03 +0400 Message-ID: User-Agent: Gnus/5.090018 (Oort Gnus v0.18) Emacs/21.2 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --=-=-= hi! I've been trying to implement new locking schema for JBD (Journaling Block Device). JBD is well-known bottleneck for some configurations and loads. The main ideas of locking design: 1) we do not lock the whole journal trying to get access for some buffer, we do lock buffer only. let's call this lock 'bh lock'. in fact, this lock is simple one-bit state in bh->b_state field. there are primitives to operate on this lock: jbd_lock_bh(), jbd_unlock_bh() and jbd_bh_locked(). any operation on jh must be protected by this lock 2) each transaction has own lock to protect buffer list. journal_file_buffer() and journal_unfile_buffer() uses jh->j_transaction to find that lock. jh->j_transaction is protected by bh lock. so, every time one tries to get write access for a buffer following locking will be used: get_write_access(bh) { jbd_lock_bh(bh); /* decide what to do with buffer: wait, file it, etc */ journal_file_buffer(jh, th, BJ_Metadata); { spin_lock(&th->t_list_lock); /* add buffer to transaction's list */ spin_unlock(&th->t_list_lock); } jbd_unlock_bh(bh); } while transaction is T_RUNNING state all proccessing go throught this lock order. invalidatpage(), releasepage() and dirty_data() also use this order. journal_commit_transaction() accesses buffers in another order: for_each_buffer_in_list(list) { jbd_lock_bh(bh); /* process it */ jbd_unlock_bh(bh); } so, it looks like lock ordeding violation. but, it isn't, because this buffer is owned by commiting transaction and must not be refiled by running transaction. the only places are flushing ordered data in journal_commit_transaction() against journal_releasepage() and journal_commit_transaction() against journal_dirty_data(). journal_commit_transaction() walks throught the list of transaction's data buffers and journal_releasepage() first looks at buffer (so gets bh lock), then refile it (so gets t_list_lock) => possible deadlock. at this moment I use following schema: lock(transaction->t_list_lock); for_each_buffer_in_list(bh) { get_bh(bh); put bh in special array unlock(transaction->t_list_lock); for_each_buffer_in_special_array(bh) { jbd_lock_bh(bh); jh = bh2jh2(bh); if (buffer belongs to the same transaction AND buffer is on the same list) { /* process buffer */ } jbd_unlock_bh(bh); put_bh(bh); } 3) transaction's state and credits are protected by transaction->t_lock 3) revoke list protection as we may have one running transaction and one committing transaction at the same time, it's indeed that we simple need two revoke lists: one for running transaction and one for committing transaction. processes may modify revoke list simultaneously, so we protect current revoke list by journal->j_revoke_lock 4) every time, journal_commit_transaction() starts to commit new transaction, journal->j_running_transaction is set to NULL several start_this_handle() may try to allocate new transaction. in order to make this SMP-compatible get_transaction() uses journal->j_lock. 5) to protect list of committed transaction JDB uses journal->j_checkpoint_lock 6) log_do_checkpoint() scans list of transactions and list of buffers to be flushed. it competes with journal_commit_transaction(). once again, here is incompatible access order. I use schema, described in item 2. The patch I'm sending have been tested for dozens of hours by fsx-linux & bash-shared-mapping & make -j8 bzImage on dual pIII-1GHz with 512MB RAM. Preempt was off. Patch is against 2.5.68-mm1. I'd like to thank Andrew Morton for huge help. with best regards, Alex PS. would be happy to hear any comments/suggestions ;) --=-=-= Content-Type: application/x-bzip2 Content-Disposition: attachment; filename=jbd-2.5.68-mm1.patch.bz2 Content-Transfer-Encoding: base64 QlpoOTFBWSZTWcl3axAAZVL/gH70xMB7///////f/v////9ga57gA9AUFLYakAthStB29imazb29 3r60o3mvt6iU61jvKusPX3nfVay+fe97pWPvvr7e+BoGgB0dPR6ABQAUAe8rvHL23n297xM19Faa SoFLvvgN4oPA3J3Lcfd6rbFKqKkUT1o9O3ce9YfPuvCgEgULzD3ar1JrTEjKoWQoooqNjbubs2Az BoO53Y8Ch87OeXe8294D3sa761eVaXbOgUzWCSPG73uqm2UOFC6UOtHvZ5sntRbqOsGNa0DXbWzi nvc5WWlN7pt2hbK23vq9aXd7HbdjfXvvlPu12IvXvru2SUtJdmdSoqmtLzs4EpogCAggQASYmU09 U9QaeT1MQnkJhMj9U0Gg0PU0ANMQREEBCamJPCnpqaGjTJkGQAAaDQAAAGEmUqU1TQENoPUCMTDQ AAAmCMTATATARk0wCTSQkKYmk0MieSp+k9UeCQ8SDQxMhoAaAGQAAAQpIjQUnpomAk8pp6Snsqfl T9UeaU/VPKZlGmeqaaA9TRmoAAaAIkhAgJoBMhMpjUxHkgmaBT1PU09Twp4o9T01AAD01H6TgDy0 QBQqBQLSVFIfAGUY22MHtLOPbVsSxHv/ancLvGatCAk2zh20zUu0lWwIhCEuiFCyNCIKfzSRRXkp VL+vl43eax5jsWQdTUlUpBaIghXTKQlJUBIQ7eBhHCiK5XtnIlWZIcJUFTkhRHVkUEQWTE5Iodl2 FBcik5pVRFTLQrtTlwooVMFA2XImc7+G8k8eDw7MVtai2jZQZ1HoccweXBzx44QuA6XVcI9uOHsk XVUvNkq7uN3XdlezCrQy3JiWiMwGZu0TUTUwsTBp3uKRuObxzukVOTtRufCLJ4JGFQVVV6sqcF0T 1zLlc26DjyzeLQvgizy5JnWcW6LuO7iBt3ZdJJxmXuOS7tp27LxqOrmc2RTljcdqk7UlNcJHEIWJ egR5pjM9y9JPQdq4465O3HZOt1QyNs9VzlQiHDn4/9lN6nOUKOWIMYoigxQQRWdQXUFu47c6RUEu lTsTYnu5HhRBZ1qYmboKK6w4tuKlGFamhK6l6pBLt3DY47g7JzhVSHuaVDpe6rprBcFi2sSJ0EnG VbpbNcPebyPIu5NJseGVzMKUwqOVi4ysyCsdzcZxzWnORYoBc7U8nGRwj3IitTmVXjrdw1zud6aw 3jIqiTVKsYiXHKs/Rma2B7GgjOIb287Gh+39+h1bphNTGUhVZIf0nZbeE28USTIemjtuknuU4enT kVlEZ0vd3OpYUUVE5E6O55y8TcGIeO5Xqu7tncHc9PHRJxJAoqckJnQg5j7KQjmICQyVFLRXWU/O aK6tkPFKizN24HOe5eqO7t3bu7pxZd3XhPAi60uay21GMGIsURBRf9Z/GyL/AdaE2CyLDpqDMZjD BQgjbiWI13Uodslz3OEnZVQUVydBoVU2VZUFlQXCi4hV4QHuCScHO26tiuDu6A5F60GUVBFMrwkH LZ566BJuYhQtNNtgUR2OTsuetCOnE4EeSFuknuKlSp0UknIciqBO7mtcndOJo5xIcirRKZxULmbH XO5yO47jurug7BiLcwzBARpbFrmYWYS5D+P2aNbpvLCKZmImpdDRBMFRBS2ERRwOoUDkkxz1ByOV BRd6LifFEt4u3Iu4V7uVTk4uzkccqEJqulWxw2iee4JMLg4RHDccNxwuHnQky61ucBQ6XGUyApaQ iDUVQEUPQWFRAcId3dbjg0nKhyc9lLo5xy9BpBMokbmHApk4paZpliwMjWJikkGnCJpkdlc8d3Ip Lc5y7Z5YHdbulPeVX0sqCKm9lKhscylHDBqkKpCySDGHuVIod3QCEJ0ccUBbY5OxPaTE3W4VXKtH Q2buVMhywEGnQ7Ig7BYhyndggcSbiVNGVEEdzdaHclzpoydmHv5+l6HrPRH0b93ecR/P5cf1pqVc /XJ2/d+8pI9iottR+vX/3x/4/w8q8+vbwWvRP5eV5yq/eC2nWaw/FkCs7J7Pic9uvqQ0gsDQzpFN 9FGexf7EBYow/37RPbSAT/yWTAJCIGX5/9fA49w7Ht9KQ/zXt8saPo7iE3Z9olHPFZPITgO1JvQ3 nAJJHZVTN0UodvBNCpY38HCWUNQ8XNHdpwV3kUM/+efGa16VkmMal5M0pZ0ZSsicp+XEzv0TlEjD MXWdZskAmjzXke3ZDC0FF3qY9NIaMQODhAYTBHScHxk4wke/2e7j1NlOnX7/k+nr8vonHjKb3iW7 j/JXiyq/sjv1UEsbbMv2O1/2++L7O3n4B5Me/Lo/C0QcpKOWYw7Z55vRds9PkfdnczquVH5XNdOf H6+vJ+f3U4PSFZ4ZJ8HrVGe3WTiCk6bStevUy5gizGzDE22SR71bCNoIgsiy2z1uYaTplxn72Gwf L3X2oV+xPRzlL2Cq3flaCUjZ35TErubKBGiDKgTZUL8V5TbhTbW+JVmE3nC5f5UlDBNNrV5o+pMa jC0Ewmf9qTpP0kbMRIM+H1VkgeVwuqCiWU14TLIHYjs54u34ocEgKAsN/ZYYvxadvFEZik8TlTxB tGuvW17J3vR8MfPtwaeUmScR1marUiyIqkEQR+/16zJBFG9z33j+nQ1ALQSplVUUXYhywlQSb3KT g5yiqg9FqApFDLQRSnp8/v7n1n0d8+fuRD4iEHwr0h+HPC+v36W0yvVr6Jd5yQ2sn/9L9tXb3Vp9 imr3L+GWR+C/GzBFmD7Uqvxae+z9HjnTax5T0xkc4JI7jWK7QHfBCobej2nD2BhnEovhg6oGB4pv MwP1aoqhuDJ4ZOTOwFBL607CTQpIPxqVZL7PO5RfZfX3+v2P7/hH2V+fqeWUSqFlaeb6ojF+h2zf K5nz0GvUpmq/lpFkw5Q1BPek/A1VA6Q7IcmeMhlhlCaSGCSPs2v9HBKMw79Gfs0261t189uMxrCZ jdXTPT22acifRaBudXaCmnNpQrNObKG0XENocfS3SbQ113yBmp8MDefLKd7J3Ybctk1vwXONQd05 cw0kFWRYx7iP3oFpaLUkYQz4m7meHfyw93TjE9OtSYd/JzpfY6TMb9fOUYjv6MrqypqQTBI8t/TQ w4A2LkJHXrYr0QsgB8MhA0phkCUkcaAfko2nBldcs4ltK1OyTGTNA2bTaa1SXVJz0fmx/bS43trB TksIqCQeUDBJAJJdkkie0bR2tMbzm5g6lY55SlA8zsmmIKeGF3SVonZJiTELGDBW0yRvnVDUz2b1 C7x8P8Ovh7LP+K2mP/p/L8fPo3fkf/KN6E+t0fSWacai59rv7GBwr3fsTngoctkXGe9Ygqdjp0XQ uFjV0nEJJmSZJsp3T3XynOAdM3Kd3KL2Jqw4vYhxjUPnPzTfPj47uhcx8/e1qzivb5a9PKXA8pCI d2aUdoCSCcM6EyEzcplhm8wovv1nTrqgaZUOdUUWTnKGmk1bo95mLxqrOJDdsFii+PcKCh4a7JdI 98e7rT39/fnvu7dju0cCeDp1HhSJqR9JIeQGjjOOH1OCLLRptdWHHHEcpxMEXTUaNTfLMYxHVNuI csMPqut0pTFMSUATbmceEoJFJDHJYwkzKlJkamrq0qJbtzKpFmJgnGGAtbAXTOkxJDoIRCI268J+ nEct4zafX+7Xp4pFHjfYvu/PD9rNG0N3MpR+m/bNT3x2+NldP7FuDp+WlO/Y+3FyZ7Tg9uLpcl+a TxMh79O3PNrJO6Xopv7fC7YFG+ifXuqkeHr41OX0YYLqhyarwpSiqCovoikOCvcquqPFOtsbPeS/ S/m8vY++wBEffiBAB9UqGQieMpQFARJQ1SKEgIA1BE649kA5QNuNPE6vdZWopCKBCHCIfyqtIa5k oAMo30d1q8vPOo+rCJ8nPFpUaA6khQhS4qMbhiAHJ+jrp/EQ7VczsRjVBRVVb8cF2h8JI7YQfLIf f/r+88BuXx1kgakx61h0TSUFPVv1/tH578RD0GT4H3YWfMymVYFIdHxRQSq+zXlNX/DyaQaUCgoP pkHJPQHyfc/Jr9qjl9+m/2foLX+cr5fj0QzY9y92xPb81JianhRa9aXbN9Oij9IwjpsfcAf+xAM4 r9VGRcq7abrPFOeMc4mGAubKlHlTwyPOw2D7i7niG65k7WQzhAKQgnaRDnEuQXp2nGxIMiBFX1xn RFy/koibsVtdhNZ2H+A7HjktExHlCtjlWIF13ETdHlEkC15vAhqV7vi9xdo/hWwp3hY5FAXToXqW Y3OFrWS2k/BkxhMawnQw04zNWYmmYkgqwmbpOxlmh2ycQxmmsU8u/oXhjGiYQ44vUfZQ4tM+NZ/Q 0/80fTxT3UPT6eN5Wzsp+8M8iXEZ8wpiejFu/t8+rlEcF6SZUeW788/hYH+N88uizaddOtPDbvO0 HRQrs4h24tmFWRKb4VeSZNO9aijwa4CSoOvFe1kd9gmLy0yQTyYQBA31nHSXm5E/C0WHUL4ahwdf w0kw3ZBJMzd6QpwOSTSzDyLITegCUeFyAqIFHi6kYkKjcH8YN9X4f2fh+B+hfgiFJ3/keqqvwmwh J5NV5RrQf9BydzIwXtiZzWnqyMQmVb1d2cSzQoVdU2zKUyYekLIFght3MIitFDQl6nW97rObykSi 89TnY6Ig4X7BhmCD+X4n2s3uBAu6tbX1ofb7vvV/YwfWthB1P6G+GY5BkxXwwycmgJ9HrTQnhJTB BQ0NLSNfKeDcC8AkXusx4Q/p/Xp7IV+J/GU9pBv4zt1LA/qDid/iWkPllw9S0/WqdtF1Hzm/HRq+ yx/BiMofCRUAdxywfungscGEdkKU/0OtNI+CXdHRQKbu2qUWkCvjDMWATFOc1kNbBq5roz52w6Rx jKTOj7e2U19ed3MGRjDMi74hUN8ZLkdBMHFd5sEM2xqVYlQVEWE8WmwYuF4YrVqpt9CbFQl/8cMG gYoqApgzthpQF+lYtDt21rFFwc2xC9rWScYGtyntbK/TnyJuqImJsvBDVZ5rAqDusHJmOi+j2n0+ r3Jl9f0/X+P66Gs3UnepAKndyKFUtynrRLG705LmtG96WiNverMuigYKhEylveiW6oWbQw5rWtBs ZpHJtQtyqmpTEzIhAjfyR0BED5QQPL2+Xh/rjzlec47n0NBxbccDTlH3R7zceoPiu+gfFPo0J4Uy v2GGJQ9QMMO/4YH2bR4n6fpejHD6eU8dpjBYIv7oeqjkMQ6NCfyFAH0S1S991N7Co7cb6UPTzOcX frulHZft0jD92GV8IvyRHTBCBIvhEqdRE1xQ6BUEWJA+Bu668rSxQgiFKfA/4d8zyw/mUPy9L4Vf uxd+BhEjArCErt6fXdeFkc6UmY93rvGtTmvUi/106S+3kty02UL2I1nJ9e2Z16ViKBnM9Z60MHWe dn5elc7UNv8mSWtBY3IbtCdsdjcpG489ek8z3qt+WtAxEM7NURthqXHNnabWerUvh7NYtO9P7yWC 5v10X9WmizQOkNumixDsSk4jWUYkM04KEmZShdq8W2cSD9FzOJK71kTQq+hqN73uygTAITuzhSlr 3UyjCOGotR2yLWd5K1aQ5qppcLxRBw1mLqgvm8PHs0a3+Hl4AhJfdDPA8oH6j7mdSVnL9NWc0PAo ROE+sXbbd4NmNkyoV+HaeqsUHbxeBgRy7MZWkmIkHxgNOQeZL7hyAMirHVWXqn1bcjV7k/UqraDH aMzloPjRTh2C+fGZ49Xlct08sGzbc7m1vBQiQ1zJQ0mPZ+XZ+WXY46JmTN7E3Ta2pTmJ6YoKs9RU LWxY2hFTE/P2aZ9L9baxulVjUE0867E5lS6Ozxym8OLHTVP2sKppV532oCz4ar1emrAvfeI2ORNC U5/SJ5/CPAqWyJSz68shNtKuZdY9k8IpXoUl/OMxQvLJuOa478bTCTAqIdb3DQ7V9qhjgRZs7E28 TJrohAV9O3l26+WxMWoiS6Nt157KfFqtBWChDTZbOGPJOdVOiJTcpJP+lzMqXpkRI1wUfiK5ad2c 0qrHstTGeNydpm0ssjjbUrPJYN4xWcyR7FYJZh54jWcb13epUwVLazLkzQfTxno1C5HUnKDlafF+ A87kUTdTVM3mnBDJjfz56nXwzv+pbsjGfhsQH0j02NCDwckmjU2cJY6NgmvKiMar+/Y5PK9w/ODG lmShEHkePfZuEbfbIi1MES6DwNAo53rM7aSno98N663RNV9pUjRlS4pbHfa8tLn5hjTr67/J0KMn 2alR8yi9oWVLkRuQbS0CmEbYK8cEPcNKR2qUJdnOFLs93e86kwkzpi8HMn9dLKp9aS117jy6uVp+ IS3S8DfUqIpWu8jTV/Q+Gc/EWe/vEOl6BuJ2KRIkmCiHZmQ30IcH8rMQyD96UUgIkPPruYe/1w5q yHPNGp8eIhN283Aeo+lwP1Hzc0Zx2PsUdnB2Xih012TMOUTtdHKYlNoRrztBOO6ajFeW5MGYvSUm Oxzx0k5Cj7/I8O913NEEBIa71lZ5lJTXuzpLNDW1mIvBAmS2l7r4bTu6FVuxg8hNrThqSYawUieT WvflJISSWpv7EkkJJJGKbvZlx6x22oVRsSIYIUO/dg5lRHI7wCgE3HXVRPu55mOlaoTg69a8RYF9 nNYZ31lqrPAoiqhigh5uzORZ7Dv5eDhxgmmbcXa+DPqPZkl5zpV1svaU6nuRpQ4Jt0d3PCc93PSX h+a/bBtvEHlXQ8tFcpZ2Lm3SzqeUM1D2ch6vNt5lBlYzo0e4fGKw1PTdrN3cNq1PQ03OnM02ORig gVierfFO3xtTuX5Mt3m4SVxzDuSxvUro0pE5zVOvwGWWTe8uTzZ2bGzY7kpKQgmQ6Q0C0b4XK3lC J/F35cyfLEEyo5yyMEtUUPWiZCF8oKnaXFPN/b3yz7yotmTcqOcG5EuCTQVtHi2wdRmd3k3sM3v0 EXPM95aFIkGm8TG2ZSdpO8jtPPYia67nWC9U6WyOzm0TmVD4OzNT97U53pG2b6btR9qaNxUw0qzX XNJD7lG0kOxjuB3LMM4iZg63PDVuxybGqSZkNzJsS8HZcO0O8erpbT5Uqcanc0JjilbTUKgbwZqz UeEuV7kO7HNRg6pdKDzQVxEyLhCRdzRqyOo3bJ2scWYuQZIDMsV5kT3fDeV2Dhqf0fCPaq7nZtd8 HRg6VrLqKuesHPGDCQkhhISOY0c5B5cdyJSqg7J5e1X4eh4OdN7sOQboyijuUcl26n/Tz40MeXXU 3MrOeHqes4EZJ4lvTITPIpKWnqt26+S5iIH3uXle2ptQJaSnG5vmrtg0HjyxaNekZlKB3wSLNMlX Z6vUmSFoaNpTRUbZsDxYhNk0nkQYNEW4EaWKaCDUcxkuy60ORMRK6L4sofk5k+2LjlEed2lQ1b8Z LFdXH0XTnmXy7W7YZyBG1ip1abT72e3TaItEmdbY2KN2EyXPZbnJgc6h39H9pKXiS3k2G+sJeZKe /DwuN5vceSDinhyROqofFVQIjtOMw7VVPAT1KoXSWZ5DwrOt4m2DMjKqRaI92B95C7rtVcjbD3CP B9vi+eqoVZeUjr+6PdFVhLYuRIk8DkhC0TdQo8s+vZVv03iK5pR5Ex98XY3QmYNBJ2GHEkzTqlek GFacnWhN6jXwONUiZ7jLD4uT6G+V6tAilslYlpvyYlXVxsEaLzCRqLVplTaIKD8Wuot2cfdoz4mQ zZuzq2stUQGHn4aW6MbN6d/c0et2cTCEzLQiGaEElDihA8RDwgSWm0y+I5bXw30KNcgjhMVm01dH dGG45LEvDGTWJHW9EeJI00qQINnJOWarriQ5hnlBoIj8kZXjyYvVbyVU35GYPTNcT120y/BShQfR auCTlapbw7mk3JIL9C5czvvfuX3lrmnpExEhKg1EnlSBaE9PtklJNsFWGrZYwtKAsrAwS5ZWSKC1 BjWGEluOMw/X+rge7Z/XheWP7vZWWoI+f0dfcbdnsrSdVhR75/EIQj+mNIySKiEUU/xWmMCk/iP4 e3vfn389fem/tR9XrPhIMoKQoqMKI+Oh9b6co4ufOVx9FchinUjhEPbZjfbNKPlR8aYfNCjkAH5/ z1OYYYThgvs/XlKG9qf3HuAMKWEgXaClgPxYrge3MCIViVRiiiBCO/6uvn1OJjmMhPOFpaeFiwOF esIiHiF6LafaXAYM7WG5/TwsWhtEvfYs3n3mLWMJiEzNF0N0ecATKMQU09M9vQ2DUDXTDJNoNUQe j3vSUhDveUsErtuVVJSiAS0FtEv9dy5dxHb9hPhpT9hkc4NBFxBrZA+rCeb4GrXUz8jOxxD6rq+g JJoiIHqlVF9yXApURk7BPY2arspMEK7cawKOlZKyZmtXQFjAWpmrXeKweHnhnLhpukurmyRfkx+H YL9pV21zDezOqnIlex/nxrwn80cBwdjXKGsgutA/rg8nc7zqkhuZDsUFCEIJppc7nqLgHXFvqtGI AcodxQDyOMd9mirUlmYmshcS2wo3MmOXU+kPdIQ1YmqkSRGJWBTXQHh8ICiITsZPNptb5zCLA8d+ uk69MvsEUX3wDjPiybQX7GBaJpoUpppQ1C8cFurTXc41Ll5kF5IaP1uCvdE751R0IlEzXI0dZwmD r4VqMYZ8dSWKRJgd97YxKgWm6lvI6TGg5l3CTNdxCSdvihsdmQz2WqyDhnE3lqiOy5sWsMfFDFYe iYvDnhJ/t1YfE1ivlqdRDcZNd/qTCUFG9Owfh5VibXcOw7ev9hweB4u2uv4+IJM/H+OiKz/oT/lp brz8I+Y0gvKiej93BpKZb/AZLMbpN76D7RpUz49pLnixKnrxSf8+PLjXO2U0NTnJM1lsnKL4T5kt qX7Z/Pvzf527fp3OSmvd2b9zh9CyKvgjvuQdKzsj837T0doBIJU6cX5iXEh076/I8us53VUrRieH 6ddLR+bSLyfNv1e+aoI3CCIjH23NdIXyHsO+gtWPstc+yviyOvXPLZ0YutufR4YlhyNIpKFefsg+ 6moiB/ViPHz+uD+K2pVmrLcuCepZ3d26GQ/FbPCBjrf4nCfz9UY85OHN5fKk5THS0S+6CPzTf30f VzOZQvw2IgVnYMCBJrBU4hvefU+YpDkObq7u36v3nKLNZCUYVTY65pmPj9HvaHZKBxJCBBWBHjuX Bmwwijk086T0fzRFGXwrCIcp8MStxiyHwPemzhohWx7tsElgq05RGiTbYjUEkU1pIeu2JKkqxiPH 0rLruxImCpZXb5aF1fwZQDjsu/VVWKEyx3I8qUjk3MtAGPVq30vn3/nVvqfU9dCn0QfoWuXyek6u iNae+XTNislbwj5E3S60jNqfCnNb+MKDyXTV1pz0chOl5ZdEfgweHho/L6A0Q5pQRNMJkdO1L3yJ rCSYOZkpNLZJOnQM6N1JWvXeWlnru5yvJNITQmJpWkQ6DxtxptNn8icNa/jD67xbu1sFZmkWgwJV pW05tq7xK/HGk+SzVari56b59KxcuTJXU3Ou7nNEkIitKb8KjWfCaCWHHE3ih8GXhrJ/f98FuhQi NPTXXFCYvXu8qOc4c6zn1m/Tm4pTq5ZfimbKRYviCqBXlHjKUQs+CNzkT24nSa7tjZGOQmGSNFeq 8+nsrOy14dOaq+Cgkpwigxx3nSrNHjLTS/Yxv7HNZvnbTpK+F6aqluVwZkmrNxO+lqaSUW9ItXhT RCL646PLSPwiVjOrPLSDdUNlmTl5ySxfwvzma78jkb495d5Or8R8Qy88rGPqpa14T9304yhiq124 z28u7Q9/yH3FPyqQ66qSBVUMiMgjIQ4nSIqDlyCCgIiJMQlNFJQxUUFREMtUBREFIMRRMk1FQzE1 AfzwmUmYp541JSFUJEFNJRUEC0SQkFQFOiTJj4GY0kaZMhyXImpMgcCUQ+iBGkUeIPu8Mp/+SAdW Ta2mlBpVDRCzGpR1fxAiqx9ozgmKHgf5FND4vxSdfp+w9efqyPWS+lQxx2eAoJwBIlUndQOgsgA1 +a0Xr9np7X9t+YVE7+1zn6oIXWWZQ5QvYxFFSaeB1p9UtEE1b1f6fgfQ40Ow6mB9aPsm82TBqgdN 1TQgsqCAZxEkcmUNsamwuwoI4tXmZ9XXTPo6rLyCJA+fa3cXKooQ7TcyH085nv9Vum31KLGRfk22 pRudZDfbCFNslRKZUSu9p8U1iVKehWvzlQpkMCaQFcfPoQNx0b4GdzxqY8de/4j6OuPV6jrI5dF3 yAkMe8mjWlxM0kn44/ttbPieswGszxNM6KkIJN4ddis6HheA8suTNKtPm+xSzbOcQhAkmKoKpq9y bXzGt9qtyin3ajmS3T5D/Kv5/if4afzr8Ip3K+iqBFXoWFOq1rWT9G5wbG9BrQxy5wXRnVWw6aUE rBNuaFStDENWFN3rM3pFbSCvHs1RzVjeUtVoYHkm63do7nNzhmTtkbWpGUqujWpzbya3llUZBu6U 293vW8pKnoZYytvJ1k7ephxu7O9oKKoZc6RWtzqb2drYOZOwgWHtM5j1L3pgha1Wqd656/ZUUE+d P1LKGlqh6J9orIHqMKFQUP5BWHskkMKJwk+YQ/HItER+WPxFMA6okCJICoaDUB7WETzfUWm8Seug S4RTIgHrFBflM0tKxsJ/hFvB3kD0wVWgCESGeXR1OR60IDvU/TdgvNmEhvdzBqrO8aRPWJ/fm2kr UtSUTn2ferzbdbzW9edi80c5mhWjVVCDnl8TRzX2hW8kmhj5lzwq+/XMzzVZu/ntp1VFB1NboSL6 63t3nmmhbx0LBX6a9cEpt8vj8G+XuTuvl8hmaYzNrfpiETcd3VRVrWLWt23L1e/MenyoAvSx9hSk +7STMF+GZMRF95gZKlKBMkw0B/fsAhTH+KwDlDsSOpmHAvefq6Cez+uRERFREREVfUHoAY2DxGE9 gE8Q/QH2/ooFVUiJhCHy+X3cL5j9x2pbaWlOe06WwVFOxexQiYNJqICVaTBvYDVIYjLqRPNN7KBq 60rkCPb6610mICmIE8QM6DrxVckPGZn9MFtHsjUnGQZm/mEH52Zs0VWYSl9R+ePEJw4hDr37aHg+ 6nlVyvBKgaUrJsSr7/xiIG5HO/QQvameiezwDPS0piQiYBtrKSknE9czJDfc1p3arttgsnp6XWhR EZYHn6Fc2LI0ggYIMHIrOizteHEEVD3zVEkkkimNprjS0D0qhJI5sa6yJoSTJJFHofp2CsDBAgOr NRmwgy6xEIOjdRuYWM8FZTnCnYnEKhqMzbjdNKVpj1g3N0kkldr06O8q0VE8cxMBwDHTq7mJzkzq uMfK8TUX10sFUCIeuRQEp70rvWlVUrfTD4Na2WG9A3NvewwFmmI5TstXYeNIISPn1BqHTYoqW44e kKa6J4y9ndhrFKTet5niPEeU85QsVBx5LyaFKrzgTVDd4PZI6qKSMzUWnOehMmk81VpElLiZfpzx vVJtUwORyB1pnvGwrWVLQ8JfjakJxAmUTEDt37cbsHczoWQ4ucVlOafkUKIxjSJTRGdca0o2Foa1 nKZxfToKrVrE9wOtxHPUIeHeFPRdtbaepXW6nONSnd6nU3i18AiIY7dssMMntww2BfFzUrC2b8A+ EVQpJTO9yLHVl5JSIa4xUDRrT6Sl1RQkYvwEK6ZnRmHBkhpqSYdYjGUqlKzNZqZS2pmjla1bD5jn DO+KkVEhMun6/pZvQ1HrZnLba5tedFryzM8Nw0MzRFcX0vedetdCdHAomHTMVTAOMmJQ4NIQxLjm tKvrTNSb02rWy41iW9mZ1EQ9nr1OW3zvQdGijOuDlQiqFspa062yHYlXtywddX1AJgmHw2CEhsjp 0jpPD1msnMnF1uw6m7zD03qtAPIiNvqCGutboktC16ynd4uYHnmuFW0F8vIyCRRMCQA6nmpvWiOd MvEuicrHI1g1MybCje950HAHTQUlmmFWr4mc5ZLJnnJ53kozmlcqSyPb8/2PaET8Shw25kISjLY+ NAn6hP0pkOZFRo59bTFm/GhVf/OjAUdmj+glAvz/aKX5gOlHyU+tl+5r7aNrGl63ofd1+6MtVYNi 85z7enpye31vNvaS9z+uExL7soYUD71flsh+DHdYbwTY+ig7o+ydsTWAZ5UhVUBOPDPafp7Xkj70 0xMHzRy3sKNAadHAwmsjKAjZEVueklobIwxPI+ZijnTbhzI7oR5J0JHy7e2Q/37PAMcJmOQRkXRf oPc+iLJvBEI3Q3yq4zaJpbuuK6d59JShmsjRcOOEJm/k7YgGKwuY0bi0H7MxBdrOGwjVJJJJarRd ZP0TsgSh8Ok72e3DoT4Fl42oOIOO+H8d4y9Z6Q/CxFekPEz9jqJQ103Cku9H0R5E6+vieU3q5cto 7UvWH1fhRP8d6eFDFfbAZy57kzcISAbQ8cwu2ImaTbhjuhkbFBT27yvCBrBNxEA5u+2tzxIm8neg k3nJ3ho6su0j8PhhzeWdYeCzhkVXDBiVGZF8KB6tsep9xiwKHc+fBFTpHh5pdHt6ShhIY3TM2fNi ReRwm7sg0xCzLnn+KGbS29yUQ+ystaOzGv2V6VmDpJm9OL3vMdJM9HCQgXprLqpsMWXs/W7HCZsL KAyjbxfej07vWunleenKMxDzGcZF6T4RgG/D8c893Wz9/PereacqduM5WLYonGnti+cMETKZQecB tJF8xinjdk/F7LJxFnuZLtt9bJU31YZ514UY6Ieg4x/ChqQ7bttu/ft50DReFXwgtN/UjCCqKrCs kSWTWULCkke7wgYxp2aHy7HRMZ1nLb10A90/18Ej6Pe4PvqRqmN0zRDtfjh4kmbCEm61foiSb4Vc xXMFOrj+bthd00p2+iTWMMCwvi38Zeh6fyDj7Hzvjb8KbHuj6R3Erjb7coIn45s0kXYNuHGOONwn MKifi1gkykEUlJpFmhpMqcKPnLIBhBQxg8oGmGvyDvIKCJz+GgaZIHukd5HRDEMyxC/5YdA6MOCV aLJJQA34+fAuIjui8CFCoCerHS9VJR5Wq34e0ufxEVDH7BFCkqQQE/vT5AQIf/PzJ/d/P7vx6J+6 x+7MLlszVVDOtUh+Dcfv0DLNP6COtAe0/XHKqBopiv+720A/vINoP88/6EhNFfRwfuk6TkQR3VTc PPB+w9HTqCBuHsTABZuGRwg/Toa63A64HpC5qkXvUIwdjc1k/gX8A0L/j5AgfyOr0RfQeaWDT02/ zAQnyj2pmBzNRLjyuZIWDCY/xE71UIghv33cbH9eQ/mt0HVQTooJYMy5EKwJXYh5I0ZB1mYFgJ7P aY1U8YkwB65XpkaeJ3gb1GjsvvSnpwvjNB9IWAx2j06025AFetKzFuEIekdDrv5ZbJxwBZPLcczR Q3GfEAoKJwDsgAfFEqOS4P7VUyES4r8eWUDzlpB84C8ul7fQsHfEOqdg9aaNq8wHsmZA9MszQAeP Gd+Yez2jumgoGzmWHOIZujjh6MESB5cpuTgN4Tf/xMhsXO+3h1BcSGHc95ChIcA8fr3lJsvYgbgC 9DEDRNw6h/LomMrigZahqd97jB/wQiZaRE+Jg+Ah63im4M03WHwyYGZjxTTt8blB6vCx4D7U7Nr7 tBOoSFns7POy9Yd85ggQo1+sDfYQ9BAF7kggZ7AGncmL4QQ6vJYKrltx4Hh0TfKmiOILxVQ5ZQ1N zHaEGlUKLpVtDRbS8S44GPKlyQHaVyMbGqagWA8TTc28+oprYECq0NwHqvuSyZxE3JdcRGQrFKuh jwAU/GfnOCoHUZGQB2Sdnk9727+nStfv13LAE8wPB+Uvl4PoNj9vQT8JT/BWv5o/mtOxg05OQUx6 vr/u+6Idx/se/4e3+v/Z+c/k/tPvtL7/4ea/4rUhNH9UyYdSchGv8P3/zMm2j7ZoPud7SaIIg6zc kJNP+zf3zaabFCJ+7GXZR/A586Gp8pzP9lH97qvyqofBPeBPoEv7/pD8Vvusy/Ca+/bEhhLbzAGE zoewfzXUaHKAcEvdLjELmA1vvObcTRPwUOeinCBZbH5Dc8DGWSNcQQKLcOG44n2j7p8Pt/aLQKiF NU2KhERcCZEc4oIQhF1j32tLRoPuJ/wt7k+YIJ/0E5/YD2Bg3vD/M7v04wWC4H7U8TmfzMnUUkFI sjBkkkGimCmRo1o+IHMexyqmiqrpw8gM3X9OuBZuD3ppqfIFrFHCRk/ZTV7i3ggeTXaI46b9oTUr +p6pzK7ZwvR7Wx1Mym7SyglAeGB7pgqXwGwOP6yGAbAxeTVFHNl8UTdfB343NmU0NMz3Q4STRD1k KBvfIqoc9iecS2dW5lzKZFEZTWQdFLDRDixiDGKMRFP5TeZqnoaDxTod6pjXQM42yjIsjAzpvW2g wPFIheAROQrp8paP0vYQjlldcbwIJTlQmptRY145ROZgWyAWEyw8oEGhhjw2k4W5BvKdjHo9RNOS aKa8+69iyWFc4AIijAFiyFTFShyMLpOTSD/PLsa2Nza28qh4AbPyJCbBB1JTh0QkQcsCLuuhMFew iSC2RLZZlyIgcKHknEIKbt4ZhBM2BUq4ZKVQr0YIX4DcVIZBjg4TeUGnYxlVC3T8fO+pVssYpPwx UydaAr0ILj5yXQJFSCZKlAZmABlFkbIBsnkhLzi8DRpDc8lwkY6wL4NDjp2m82ew/js9SPaFPiRd 5OszIb0LLruXJKQsuuTdzdbBcDhk5AQeR3agclOuKPXkhEhTxSm2oPTCX2nKGADKNYpDvqM6mEhh 9RSSbkPLjuUw6Not6bHjSls66pibA/SJ6AMhh7J9MKEwheHuo1lhUiBNLBvIGZ0KwpjfvSr5t6YS brRcJJYBGyQ1dyhgbuzscjBJBjFOF7tVBK69U3SzEDBALHJWkpJHza+scPGrMkW20s1mAJq5msBp RHMxy1k1gVJwTcYWmbqbuOGy3MlUQywpoSaopQUBRLYFYadOJoyisdZmQ0XD+Q0Q8T0lh4A+MO5h 40EeSoFiyqWSmLxRhRmQA5DbQN47Czz40geTgOY+D2fG3wsNW4JhLNSRTBebFxpaFgQOXfF1z5aQ W5eXdOCMGDITPQnJ8IPF7QTRTSBjeCqhYNTIUHhJAQOCDb8+FPW2LQMJkIQTq0W7x1hQ8ELRLwR8 3qyVwjw68QhYprI8X/TGBFEP0cBJjNjVYthG5enfDcbzt82NUJ82YPpkTPViCo5I1SAgE/XErJBG 7o6gn/vvD2sfQB91jJrrxXCeOv7Yb+udU22wJB7qDnDwvixE0iFeikbRi8KHsviEVOJyBsJ96RgC Bpm6TqIaB0AAE+X3EB1g4R3R4ISB/5scBaYhsT0ZNlnmJBS1tCGZmpP+jnsDz2FyDmHrRwLuJIIH Tmue80QidKeNqaIMKiweKcj9coiyyI7DkX+ISjmgndlZYDVA7ivygn6mASICiiokEDgdSDsnfAkV 5+NcbVezn20XLDEC8js1Yyy4+OmAsEQwRAqdrbNVvixDeTt6fQwPo69TIetA5Qbu7Y7oyJvIhPZV BFu3MHFJ3k8l7ef7h5QlIDtCtAZKoUhD5tU9dg42aT0gSJr0t0tJJ7G36KsWh7hRTEANyR1fRxgf XflJPFSNudXY4IpmQtsDNtkVP4VUlJCS0n9mDYQdpU5QNCOSlJqU0SrSCGNBf3p5gaHtrKIYSO8o SsERI6eATzb0XZKLpiqn6crmDKVnduEeGihE9cBIe2kE4y7oTPzqipSU1U5+DRaMIp7FjArPaGwh 8KEP1wzIGVbkKrZKUM/LELJ8vwPND8u/t67DowOcQwtAsKjFFCdHRiVxlpiD4SEKa0jhVciXJLnX KyKUg5w44xCYRwHnZGQhBdnC2T0MT+Xmq0IPpT/UJzYPZ28p3ywJcYLQF0JcglREsBU4KmgpL99g ChMD3GTIkfaCHXSDHrPIH4C+kTlv25sTGzY0ZonBNQZmZgSWEvcfxaHsG5GqUDHyTKiuZDQhaBAq IO47DglwSwHNIvQolNCEf4BKACQ/7IfQT0PTy0QwyEO8bEKkULaNlGHDawoRAaFVpUTUKSCmGKls cwJ7XaNE2F/3xy/rRkz5R3A6OGBoJU7ziEQs+QMXGIlWgpJfb1w+IXTWYYVjZhh1Pfp+aXiSaWBk JD+qOb5M56gIc3SJbYFsPZDtZBPqwBySk3Tf/FoDlPaNoAP6vypjqF83qEOj7UpBL045AEyi0tQR FGlVC8EZAFRkVxai/mJx36iG+mGgWfF02dow9rCo2CXs7fXhC8BxVUSiCFCAoQLoQuDaJU2mBI5h bq4JHgFmk5MoENCQRcuWhNMYkGZGkt5wZpAFhC0OOCA6lNxJo0NmLmGGFhvP5zipjWdMzVIbE2M6 KNAvXRva7B4WAoVh+liiS0NJBhks1UFQyVcZgYYhVDcddU23ZmGDMtBEtL0lQ5pzDSNLPmJwB4nE RlENp1MXooEwBcTTWiFaJy0ctNUNgd8Aw74dOSGmAkkU5DDZMDQwgJk0ZDcy50MOdk6mwCXz6PI7 CSeVFFRZVGTlwwnvbSuFVRHbsrCDnAL83EYbwijdE2SF28TqHIVzdxvN1FH3F+scZPyO1HVv2oeq wUWDh1Gr6+wD1W2qFJi5j+9DhcPGOp3x8YC59GT5ixcqaY51SjbaMhiwDUk3CEDhhDxJMmwKsr5w LCcLvG6chCfHc3FgytTzPZ/t2bnPjGQ42eQTgJ1YyPD7p6rQ1veEvJXuwfjw01i+L4zmUk+/HPGZ vsh7PqN35MYXcRAvHSB3Zmvxue7i1J1+40NMjSHf73+fBaXCsoCKC3KvQnQuhCESHUmeTMyIuaiO HKuZN3aVJTcrLepzfc2FESUDpkoLsG2hrGpr8zViiZoEwSJmZkGrZZjI8VZO+2XY1RJAF53mSLNd ST36CmQaZiBNYUZYfEtNRRoRYw01cv0mYU21gbEiEyps22Wxzsz7DZOTeYkcqmEtxb2YYQmhBnLE ZE38Chc4VyeWMYNcOVh2qO3UXNr4s6SjiROMJmabJiQ1E0kGk7kGGKEr03NKKZUQamhK+FrBR+ZS igqa6of5qqNpSdkdNQhMF0V4G3FsPuQcFTSRNoLp1eU4ptSki24wc9ckCXL7Q6I2wF9DrqULFxcJ h2Z8AkwkxyJHMCqRfkRqwqigDILEwBIKjhqW9KQSyNElA4yR5yhyRQLohloMNNtT47uLnmHAzM4m 3zs2cA90pvWrAuoJ7MDEKg+z6aFiBmbQZIEmSbTLV20UPR0XLkGUk2uAkNrxUra5nQTxV31xBvWr MSuikFHkocpNMaIudtCwaDydgqXLghRFCEWotNJkSyHATjobhIRLmEub9lsbrE0B0wdeiG0zSR0T sjoDMerEIHGyA8/SersI95RCJeJyClSCUywkYiaKnJiAVQrGr81XrC5vyLmYgTc9OH9wYSdx7toP YoWMgUVHsp5+f4bHPjG1uSkSklGM6Y844oZmesYAuQhETIM5NxEw11mwQ0YMQJStDusNDvZtZtBS 8rQaSyBmUMVo2Kk5uiLl4By1qxRkTbJhBOhTiQ8CzKBk8UJ2yK5nAdULYa68a6VIIRnSsxWVqhU8 oL0LM9CnSMAMxhDaEXBsvBupFo0bBBzAOkZKp3V5uLgPZa3fDoc4O85o3Oa2qQWhuBdLWlto22FS qK2CYNycihOBOw1/VobAepww+WZlgaiSFAkIGhzeSW39aYHxEuVS0edBXhFEwvI28YwDJtrjvhXj vxfDgtaqGFo638JmCa9PQKXDE3mCug3P1+SbjxdHr4PGPArwljjFqQCKcDTSzPchyMZF+/qXscB1 jrEONgsq7jm7sD9wgBgQ6vDTSuN6LySXoY9+Skwkm8yo5LUeQiYiQg7xXMgHTFqsfMzBFfno68p3 5mROXyvsPLgCwgCMhCbqqpVpRkfNYbBgaVVuQceodh0R4EXdmZ3t+m4UgeYA9vY/J3/V72g9EhB+ bFgchqqyxZDgB0iAHPoeAJxWI0NSJ4zIoHHPofiPSCR0c9c5EUrU9pIMiAyjJ5ulVkcnIsnEQ9tM GBwDr+JbEkQDWDuOB8cN6yynbm6e1iPgnM99aMMCMIgoTBJgYgXf5hB449vk4PM2zohqXWRWMBis xBQnc/glokJ5bw5BSQ9mLK9URCMEtsL2lkTf38ey7AJRR87G+gEOkAtVsB+Eq7nxScIOZ+MjR/bw KkJgGiKoXaMovvnvlUU+59aAE+cYH3wPe/RJoA/zm5swqCpliVpbVspSsLQZcBUdsIoHu7T2dSfs haOSrlAAUuhm2AAGgvYWrwcFBe/QGr6LF9BrBEWEoQSyxKtGoU1ndKnwlDikcD0g1CBAY/H0pfkj kxsDESK7jER34AzQXsw8vM2DS+wIsYKUxjxirw2nu4HuJgzQ6xSvwANHIXoc+sKoKTsKz030ns6l NJslVJIwipEIcQJkJEo0GkHzOIZO1tQqVbTA7JhEMmwOCAJNt4Suoz2mz6sWMxIEgRA6g7etzDC1 SVy4Ld3yZnfc0BCdSXgOkr1ZClaEuOEOyEPY/WX5vH9GxHrkdvOa1QF+EGDSsQEIMEiqB+YNn0nK ZssoPRboQxwt9EZjG7yZQKSYRmWhdBAgbuY06kgqYtQGBFClIUE1EEBMEEyEBTSEEJERRUxUlAQV BQFFVSFCRKFUQTSzOQYRMtTUURJSwRNDUtVJEUUwQpIKAgioqiJ0ygCDBQMuIFIG5OMJASpBKJKk inLbEF0D9diXKwgmgppmKonZPOMXQEoLoXIsu02QsBa4SyJcSihYIX2Ohd+ySBAN1wOGErpS2Ase UmKKDSMoWBoqJ/QmsxtAa/Tk28GXFxECUHAhFu0B6OY1+UvyDML6Q1uaCNGEGMQt3H7JQxUhDCAp iKEWglhpQpaFopKQewJxtAA8FjKJF8TMKNMbJ/GSinlFkrdOf54Iv0hKagwmsqgnSm6ECGBjKHWp iKRXY2PDdTzy4UkDsETvM05wJA40J8dlLddKXKUKPp+3z2SG4NrAkYp7xPkzzB+ZS3P2Jf3tBwEC 5KJ9BOgNpoXYhwO3k1wHxcwPk6I4FccpPFA98IH0SZJtIIUKEglQaQPvrhD2hF25obfCcQOSfLlI xTjmq2/dZC0YRIQFCp8Xl6UyiXhR5nzmu+6juN51CYiyIsm4GovgqgeXHyLgfYNU3EhsDDyZGTr0 9EvsOms/WJFcdLT6W5Mzr2vomun5HGrIrg0v+XL2pN9SBySEk9oLF2uoJgmTCk82k7TM3xLUuFUW jEYJyiJs2Co7REUlUtBTyT5XxT2sx5/O9+T5cEwh6QBO35u8mZEzuFPUiVktLERRMoCGPiONrgnU ZRWHY9zFzOUSiAJlAaMyEKdgLJXEA3AhgA3ncnZAPGQFiQGJCkAF+cPOh3ZiHT2CdR2+WtkqPI7X yYO9MxU/0DFPUh4pBTAVUpRKSSExNTCMGBInaBLPHf18S6tAIfvgIj5ef6jSnby74EhUETiVZRCW EZDZGIRmOVtkGD50+AhsjvJQ07JIEnjIRiQNAhnBDgXY2sBevHg1EAvBsjZuNjOjLchxp11LsjAH msCdcX5AzueoTvKGmX7Ovug+xHVSmoaVNQAf7I1DRtKbSBkhqRMirUFCRfMS/tBaO5bVgAKD5aqV 7qRdASaYEgJTNmOMW19uuhIH4dFMDd5EhiNUNjZBxIbGod1Nx+60dJHJFyiKEN4CJDIKy1QQpkqW BETrVDSAZLyKNbtaTWFEUJRuNXP1ZMUw9mDlinfUsxOUOslXUNqIUufuZrDVww5SUYyHlYbcmFIF Ij4vZGjKDUowyQ6HputpwiTkDbIUto6JX7EsTTRgxqa0aMM0YQYP5pU0iBoHZVKUTWNJFFgM4F7p 5fl4G5Ih4ETl5ExmNcKHsGXDzbhq4kyDeQcgZXVwFKahggZrNIUQwyhnCzQYaEzzehxk65XLLzHA 1IZEjEFPUxDyk8sNwMQzUFHNgiNM0jtIchEJ2l2YIJVVERyOlXGYgPViY2U0i7+V077Bgyk2QGOG LkrJtAc4dp1kZKmDIlhs0VB30tocgOFsmRWQj3hrHGce3N50wXr/Y9tDSPsn0QbEaL1kLzCAAJl5 EolC0KJ1hwJpia5gSlz5hoUSlBMhU5khpj8wu9TMBBBMKpI6NajdCyreBTJR6HI/Sl2FS22V2lyw QdkOozeWMiBZCl5mYBpAFOLvLhCG4bGR3IHvAWGE94ySB50iGcoKZwIUQelcJ/g3v4TKdQxQ1ADE iFAu1EAKG0jqEDDkGAChDOQiQRiw6SUQw1iC9/qPpEOgmvCYvJJB4RgYmA4OFnCesRYwBpNqMCQH 8GjwWhhA7QOfsE9GAgB+EKNkKNaNWzeAU26EpiqolIogoEZYkWDSIGIYxCB4ofcwgcxPJ3MJ68Rg GedHqS2rdM+SkNKB0XrSxBJjOb6xMfEhoq+Y5UZe9N5YaKDtTtLYil6KMCtoj+GkzGqWt1nxxmFD RKVQ806ZnKU7TvEcaA1vcJpOUkRElAURMSxBEhEhJUA2jSnFsnMtX/kxwCtERFiI+1KIkN86FujQ H1w5YCkC/AsL8KfQAfR38qviOMEpiLRrWXiDg5OFFc5HI5UUXDkQioiagkiYgKgqogkqB2RUXW1t sA8LNxcFnCC5oiiJqKYKiFmCGJoiintHvNJmtj360xVDJDFMkVNNJUlUQQ0FBKUBJEyG2xJ5IdsY QTkUkmTJuNsoDglH1Eo85KFpYHmwQSPdHwQxJkEZBgbgOJExxZfwHHkIGZcx5caJ4Fc4rzYn282Z C1gX5n0z0CNSYzEAoW2okCtbWAgnTm0QcvUtBDeQgF6MF+hDt91NmTNo6Q1MyhDBIeyrbkNxImbw JGdIyHAS5qmjpTm5IF7kWJZSxC288CGhEIJASgoROuwgjsprjAzKDhAEsSQOiGcAOmimxhfqghmA dVNI+rWjxpZXXtwwxCCkguoVhLACMjrqm90NZbBNmFMQspYaENOFaWAhp/ZZtdhSWJsyhm60TLhJ g63TcRf7abJkoXZzNFhgDhZgnWzQsVWCxmxlEYiy9VNmmckDG+8Qn/sCahWQzth+QjDfOCUXhCaB O8gYQLQwwihz7mKHOTUHWChoKKEoWh3g1acDFiw0aQgXAQsJkQBKVAwuLYsI7SKKtD4b6Px9BP0H TYCwoFh3T+mPEZJ4k4Bm5iw1FbaR9f4sgaVjzZicnNjUkubSlIiGnYNDIQkiHTie8DOyvxeyvGiU nUAOAKVLknxzBYjQfv77fAhn4fsx90NHAd4Dr1jhIij1NOwUEGEkaIjqgHiPiwKxNAlItRJQq+Yz CmfB+Z0bYZCYyrYgbSsG6YJ5ZDFAGAk0enAV3TzB1CT7XArmT3WHrJEv1thBojmE92B+cnqd10Lq Lku2yHSOcBKrIHWQNAMJQpjgFKAWSjMjIJLWoQDJFqIzSVpDTQUJLbdsLMgEa27sTxbGRA7IPiJM mgswAygMoWFrCVQDk9sZ6zRniw/rYOiPQeAExB+r4fD1OhqTy17sov5DsW66NqHTAG0JPlGIkY4I p7npO/24ux5Dg0OA5xoE4TZ+XY3BWCaV2bqDhhDCaVjHE0evwxPpAM0KHPR98CUlIIhUEqinY5jx 7vnjCqX5t/Ijxh3vFEIHofE9DQfP6qMuvrPydaB2BAAv9SgnI4lqPjEU/QQMIAF5sB9R3J51hF8S 7xeMPESyP3ogI+SbQEp9sILgXBOSH0GGNCn8uYI2iEKZAH1+fY96F0RA9TEUKWAjxzd6Zev1XfAo o2hcI4Kipr4gHPoGRwXgob0CAUv4ziW5cZ+/VMqgnBoxDogV27IGl4sBs6LAxKkLBBVIfj1YYwDT LQyGIi04k+1b+Ek5jQByQh9vibNFMQ70sb3eOnP8gnSU58BpfxTwvph9khCKa8EXBqbzBGSBkCvH LwQ0MNjkB6IpzLScwTlAQ1E3PYlCB/GIkgAKuj1p0z2DHuPHGcNf3Nmvn1jRMhIWokEpd5/eRFLc ErqPKPqYHUfvLNjxTFWBhSgfYW91ETokPzfd+3PYGmGiausTPcYYIYqHmXNaJMD84HIbRTYut4Gp DJMrwe1DJCznlEKTIblEpcjwQ6bj4fV9mz1ggj66iGo3jkHXfH4Ruwc3uK7vvs07HUV4H50wYw9U XASbVC+o6nuuOkzVQMjMpA1EuHRSwMPh1gEbwQSBNoDd3DS8PEpXMXcDb/GR0PEIGxDs6g/NR2Hq gYCMPIsfkuBYL1TQftipicuo7zuHvELI5IdLb+KxddcMNJRAdU5e57LBA6Y/A9S8sNHfslFQqdYq z11WE+UTwdhx0m52aQvHcnJx3KKCIpQw0FMbYYMw0hEs/BDNCJz5OlBwIhDAog5eE1kMrgRR2FNs byPKDp0Lp1ZK1Q1BfqAQzUhXRipkNgVgZJkJiIWjEByETYxMU1jiHXtnx7oiP8hEERyW6ZTPRaTn c3uQQgdBM6JCQEQIjI059eSm6UqVg7G3BlP6xaXJWZysWYZU/KHSD9gTmJodrDiTvz9lr0/nLWlw kYn5zp18gq+ysPoBH4Q6Et4TZSHZCrVK3+Zc5TqEd9FiZhCTMRzoDhxFb77gfORA6QuQixPrm5Cy U5UV8x8LPDeGAML7XCUqmIapdSe9uv28yQJwScmHeRPZBoNiA2KEphCl9UeoIA6SrEIXeh2hqEGM IBGSi39exH1GW/z6zzsBt0EJ7Q/VGARQLrZHgahqolEUjLAwqgBAD2Q3UfuIHXf8SL6xDJHGTBgR XHA57qLaIm7ZENxktqFbCZJP3xAIYJ6hNAbSIhl9MI2zIyYymYQmDsmkIzIjWkV/H0VQOsg7wChX AJ2FrLmaZEWifYzLqXjQgBEr1PnOJ2aYnn0U4+1wt7Hq0yAL/aNBeJhPYUSWcqGJhSo8okeYDUMF SEOIj6NBBqSn1gkd/4NK2GoObpttaG5JtSo4awKLwL+KYMjjWDAxJhrs+ytCqG0z0E6BEbMWYEsN /pMli4HQ+M6J4LO2++D1zJoQq4dsAWFITkItCUOGxepsBCegF2t+9CYA4MRwYDomsaDuKVyRm6NK NPAdNZ2q2DUxMRJ0xIVmyKCde27MJBJSGmfGaq0FUNRYuA9TxdB9xrdRg1NgzTHU1BKpJN/ZsARs Co7aihSQKKIcrqiZaHh7UrQBsUNxssNcF+rDOgVUO5eU6p4xNQyIntgh1iabhqBNaksv2ZVKOSBj ICxQcBnXbePiIqpJIFWWU99iPQOG9j5IHyT9XHdDopwR11Tqt9sobB8+17tyB1F/hSUe4KK6uDuj FgMBTQ+EMHz02wmUDKBmZkMmzFDiHo5gWLNyBpDsK0RcHXA2uwIBSFMDDBb7uoeM2EIZIM4HYsj8 vOIibOmFZBjcB5ebAQ5CS6gCgCIF3QknQO8MwU1U8ApCsccHOIcyBIriGRABRGeQBczDClZRKyTN l2O0hu5otZvKUJsSzBswhkmrICHGMBMBIFHGNGgdc9rxBg6w+kt3QYSQBTUUoRIkn2xEfbAZDEdx 7E1s5lEzDauAnIkXnWZAlioJUIlVqLYlgIyOrEYmwQ5wtEac1MVvJkYlO2Eb2NSaRtLByYAUmqLV Ys00hkKijDdfyrXpJTJdPsJ0pScvlWKZrmzwjNb5IIImLomIqGQnkqB9QI1CLGQIufY7yFmlAhNl MPinbVgMxmsXKdnSWmxFF1ulsp2TYmHnZOphBGYlDzMRtoUOMQ61NICcqHHIsdMFAUR1URFAmZcd kIM7Ju+Vyd8O5zR1xrlk2ndLNGxExDo5w79cJzofPqnhNCCM7i3wW7OlO5hinQhwNQpigwkkByg3 jUCYh2wCbVUTUPm9imQg1ZOFxnzYGq2ovPN9zBpnXem4+Y0n42vLukO3L6WzZwYCHY20klFcUKlC SHFoLXUvFTAsISnPCUgEicDoc1BBgkcQZG81qGnGhakIWgAnWeWs4b6ddVu8BfCQzC1gGzymSVnt DZrcmpEufhqR4ZmmxXOz55pTDvXDtV1i4Ll1l1mVWUTCCNO9FMyjU5mz0p5YqUgYHfUuLEHTWShD hFHgsEEEmh2AHMAkEEA8CRAvMm7CmE26Ih0udTkE6DV8UyN6JOiBgoiiYoSHDY0RWEVFmbIda7DL reu3daeZk7SM5J2BVSJUxYsYh0PY9uq0VEwZN4wIljziEgZpohTkz8nCGQKlgaOzLiGZ7B8eJyG+ Bu9jAzYO6wy1BExSFaNSclOFI2O82xIpySTlNAjUwmXEQwSYSpklmUg2vkTbK7PN0Os6LYbRlC1W 9xpg11CkLGeeAbFkTBelkmiJNZak3A1BOdpNgwMBjgMKLOmqCFciAlOabHCc12CmOM2eigvMu7yn 4ECpP3+j6bXATjqg6Va8U+TjYL9W9BGkerQcDZPyxRNUtQAnLMkQYIO0qZDNE1ZmQjAYmAY0ARoz oi9fnvdOO2hTArRyDuBa1MSl801PpgXXtHYz2DUDxyu1HWZoEXCG+ImZqvRnYVXKrd5gDgQM3NAU 4xBuJrEcPn62WgOsAB1IweMDAhx7HCrcuyEkcVSFG6TrvPXK6zRNObcP7QDZO+DR2ZzhmazWyWId t8OUSRwYlAWAMIqGuWFK+LI5mGQooUFKc4FHGAfbzMCgfuBbPB7j2xkolp8n+A9pQ4qE0QPKfRIE MQSGoDEiVgJWIgqIyH6ZXRESSbgnrHuJ94b9oaIHfDOQ95mplkZKCSqvdrAbaB5JDzljvMcphSoo GATFEIptBLvGMK1MflslCQPXvcwsjNHODxlcKZR0rFkhFR3OQQwyViDBEwS/WO8hvtYLBE1XYUuB gErFIoymAstvx3vZU0W3SZkEU1sb4bEmDO3J2dlf0hDuMFVBUFXBGSNRAxOxhRDxOP+rgsl4XsxD AHSpOKiBFO8spG4G69JeHKpSeXqs16dcGk2oNZk7oyrtFCGC96uIB2EzfADsgjIAR0g1CCe+53/G 8skKMq8i2BOAmGiKgFh2PeSz/rlrBl5QCDZUiRfoFUHiVHhO/ho3Pj4iccwTffVHcq/iTlb+PADk ZsGOqalz1dxU+/AwF+VMMAQ+ywlU9v2yp8xAGglS2n2BBhN5BUnZ4Kzugsh1vXHnLMzoS8zoD8lu JthEFEylPiMPo2EOsueOl0uIBARADAAQqSGYTPD2NdHAJjgQO5y6/nAP2H7Z+Z3BqAh8SqRfJWIG +qR9HAENwJ3JeHEuF/SvERygiCCZgoccUeQSxSRGbfqMwXaW5kGF5TWkkPWHpwT3QBfosg2gFRtI a3AAL0UQ8WkYLBWCAglwhwMoZwlND6AG4AimjygURiBwulFkaQJoVp6KW5crI3mjTPxN+hsqvZPZ GIGxE0SET93/7WliF2vcMjiHJw24PfofAYPGpxtErx+wCEOip2wVXu6dmLQJaTx8QrFcqlVUifq4 NRMIYZV6FJhhESGGxIdCg5hxGREapR5TRYBytY7EgoGUKIssH31MB7QDB660dcsBBoEvawx1mWZK 4Wk1IIOWbBrCRtFwsKXrwrrfHH2QzyuamofBYiaP1GCyZbT+Cdvp3+pAOSJFvhOpMemCD6IRTgao hR5Mj/0EmGBNkAjaQxiYjaTAoWKZI98tIu0hLr36VdyHVBFTA7yLif/xdyRThQkMl3axAA== --=-=-=--