From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: =?iso-8859-1?Q?Vincent_Bela=EFche?= Newsgroups: gmane.emacs.devel Subject: 5x5 Arithmetic solver Date: Thu, 19 May 2011 22:21:53 +0200 Message-ID: <80wrhmfnku.fsf@gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: dough.gmane.org 1305836532 10766 80.91.229.12 (19 May 2011 20:22:12 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Thu, 19 May 2011 20:22:12 +0000 (UTC) Cc: Jay P Belanger , =?iso-8859-1?Q?Vincent_Bela=EFche?= , emacs-devel@gnu.org To: Dave Pearson Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu May 19 22:22:08 2011 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1QN9jS-0003XB-7U for ged-emacs-devel@m.gmane.org; Thu, 19 May 2011 22:22:06 +0200 Original-Received: from localhost ([::1]:58188 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QN9jR-00031r-KA for ged-emacs-devel@m.gmane.org; Thu, 19 May 2011 16:22:05 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:59097) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QN9jN-00031a-41 for emacs-devel@gnu.org; Thu, 19 May 2011 16:22:02 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QN9jM-0004v9-3d for emacs-devel@gnu.org; Thu, 19 May 2011 16:22:00 -0400 Original-Received: from smtp10.smtpout.orange.fr ([80.12.242.132]:28881 helo=smtp.smtpout.orange.fr) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QN9jL-0004ux-K0 for emacs-devel@gnu.org; Thu, 19 May 2011 16:22:00 -0400 Original-Received: from CHOUNEK ([92.139.227.58]) by mwinf5d45 with ME id lYMv1g0021GE1uc03YMvzi; Thu, 19 May 2011 22:21:57 +0200 X-Antivirus: avast! (VPS 110519-2, 19/05/2011), Outbound message X-Antivirus-Status: Clean X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 80.12.242.132 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:139531 Archived-At: --=-=-= Dear Dave, Please find herein attached a contribution to the 5x5 game. This is an arithmetic solver based on a matrix inversion in a (Z/2Z)^25 vector space. Note that will work only with a reasonably recent version of Calc because that needs a bug fix on matrix inversion for matrix of Z/2Z modulo forms. The code works only for 5x5 grid size for the time being. I think that it is feasible to make it general to work for any size or for any pattern (I had in mind like replacing the 5-toggles cross by some other pattern like a V or Y or X pattern). However this would need some further thinking. Also, this contribution could be improved in several other minor aspects like: - showing only one or a limited number of click positions for suggestion instead of all of them --- that could be based on some sort criteria to select the position(s) to show, for instance give priority to the positions that toggle more positions - or by updating the solution incrementally after the first matrix inversion rather than invert the matrix again every time a new suggestion is required by the user --- even with just a 5x5 matrix the inversion takes some time, at least on my machine --- but that may be due to this that I am using MSWindows instead of GNU Linux ;-) --- - or hiding the suggestions after some configurable time, like one or two second, or more Nevertheless I believe that this solver makes this game significantly more funny for my tired brain, as clicking on s (to require a suggestion) and then trying only to remember the position where to click, is quite enough thinking of that kind for me. Very Best Regards, Vincent. PS: The Calc code has been reviewed by Jay. --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=5x5.tgz Content-Transfer-Encoding: base64 H4sICCN41U0AAzV4NS50YXIAzDxpd9tGkvkq/op+8NsIjAValO1k40uR5SOaKJZGkifxG/slTaBJ wgIBBIdEZmd/8/6FraO7cRCgZCeZN0osEUBVdXVdXVXd4MPlw5GKvvhLf3bh5+sHD+jvN1/T3/Hu g126hif3H3yz98V4/PDrh3vf3P/m6/tf7I7vPxh//YXY/WvZ4p8yL2QmxBf/CGNfxUUv3EGwCOMw LzJZqDLL/x2s/Tt+Hj9+LB6SDQjP80QeLtJIiSgsCviTlr//Dn9mcqEGAwA8TNJVFs7mhXAPh2L8 7bffenu747EQrzKlxHkyLa5lpsSrpIwDWYRJvCOOYn9EuAdlMU+yR+KFvFLiVMksT2LxJICr9Dv6 PUqy2TOE/FGGcQH/1K2gDzMFGgkeITv/7Y13vd37ePsHtbpOsiB/RNzneio5sXIxD3MxDWFm8DeV WSGSqXj95q14uZB+zuzaS4SZ4vRyPb1HYpWUwpexyFSABhFOygJIFULGwb0kE4skCKcrJAL3QBIq E8VciUJlixxHwgsk/1rBFGUkTstJFPriOAT7y5WQyCzcyecqEBOigxj9IlYhPM/ElcpyuBb3zRia 4I5IMiTiygI5z0SSIt4Q2F2JCGRnUTtmXk0wEGFMZOdJCpOZAzWY3nUYRWKiRJmraRntID4Ai5+O Lr4/eXshDt68Ez8dnJ0dvLl49xiAwQTgqbpSTAqNLQTKMKVMxsUKOCcDeHl2+D2gHDw/Oj66eAf8 i1dHF29enp+LVydn4kCcHpxdHB2+PT44E6dvz05Pzl+OhDhXyJYyU+iR7pQUBBIMFNhYpLX9DjSa A29RIOZocZnyVXgFnEnhg83frDUkIqMkntEka8YkxNFUxEmxI3Lg78m8KNJH9+5dX1+PZnGJRnwv Ygr5vWfEC3rZYgGRSGarR9pcwSjCBTIBnopaKRI03wg1IuEPspb/VoJdwHgwHNpnrJB70DBNFlBl jLTUMo1kTIZDYGmWTOQkWunZx9uFAIAVkUTH0SxdnLw4YWYSYsdPAhZlmaIVwrQJIQsDGpg4nKAY vSCJ1UgcFASwSHBiYDdISXCwWRFUJq/zigYYSAY8hAuYOCBdkaMuZADsPH7MXBwnySXMH8YBQREH ZUoEwGJpBqQHP4mSbEQzQcIY5SJAzHl8QFcgM8TeEanK5jLNtWUzM9coiUTMkn0thrmML3MWxJmM puKVzHOg+QQMYvqdvAQ38eejQD0j2WCUmasoxbiAY2VJUPokeaB5nYXEtVYL+RsEDjvDU5n7YGV/ H4nTJPPLFMKhePIxyecSJvMdGFa8yMuRCkoeK4zzNMyMImQcLjAoIiE/k/6lygxdvcyJ5yqS/+cD 7JMrvjMZfwdOnOWjHGKEr4DoTI1iVTwTX4q/gRxOR4QTzxRFkycf5WqUjib61nezBXjTyE8WzA9p W4IG8iS6wtG1ZQfK2DTwmotrRfYCj111JSPveq5iD4ikEJwHQriZ+q0MwX63/Wg45CUI1utkEf6u dBhDB3YDNZ1lCRgA+kccRoDq4EdPnIObrDqWs5EDMI8YSWzTEoE30kxNwyUhe86QKfs0IpL20Ia8 HAd/iEOcExscGtDmSJ+wHDHxYgVxUmyjkaHM7HDbQGmd9NJDfSvxAAn/LPACyU2lX4A4UaToI3VP +5xRVnqU+zjKu79qFG1+XqDQEUe7YxztBV1AxMqVn8QQIlDX2lJJcGgqJbkHmWxj4LhcTG4edw7e GCkPokZB6uGAjoYg80sKdzQmfYDlBt0wSGDgAGJAhq55hVYF0R252K+PP0mSSIGr3sAAOrA3x8ik jfB7/JyVsYBZ5SZQYbpVJ44Ia5TB1N8k4AvW3K9kFkKkVsbg4draZN3m6RokXIBP5yNjxAZ66aVJ LvbYyOBjSAIHG/Yhp4VQ2YZfVfDvbgOPwToXuwj/I32kqN2GIgWjKDTfB+DiEApCrXp8gqLcb+NN yulUZV4M7iqcr+DOVyhH5w1eaz9EEVD8Z9gOBkFFC5lidIkUJLIuXAj4dam8HHLBXHmXagX3hhBw YI0Qbl6mEBbyXN8X+K/Qz4AwBGZ8QredfUd0/9zZBiPzIZNSxEEP+vusB/8OWoU3jcIULCLLQLU9 FEQ/A7ej8M8y/bCJQpn24AXJddyJyXj4uAczUtNiAyY+7sEs5KSbWcakUqUHlZ51Id+M6qJ3ZUkk 5PBDB+okiW5CVJ2I6mbEtBOxVycWL+7E26ATiznpxNygE4s57cTcJNg5pIcbDKFfsCoONtlBv2DT LEyyfiuYhlnex2yslhutVvZhOn1ObiQE6SKF/JsE7A+F/ZyBsBmdIqgmEq0+hYbforEoC1qabwgY nbQmfbQmqleinYSWLULLJGNifTE03izdWF17mO71YOebsSmb9fJyNuudhvPbZhKQ0BY1DnClwTXs OMF0Xy8xJoOm9Zyy1dYqxlm1B8V0CvW0XkWPoVYXxyIv/TlVMYPBsXgq3B/F+S9j+LcnRqMR/H0D tH40FQ4VV35SQjZEuRGVkkhcaNrXMofMBWpITNKRkCaCiW5VfOrMLYdSPYCSKhDTDFIiSJlyyrJm 1KPJiwHncbhWQ8aVXGK9ijQ1MzYB5OpRV3I08kvpz6vngLODjOwQJ4At4b8Ip++eX5yd/PDSOzx5 ++ZCvD47ejHEiWVq0HjANfQaN3gTBgqh/mwyBN40QGKGU0qyAM9kRITpQyV/aVUFBgz8UChA1Xo2 fxOgq23XpG5kBDZzsle20rB3KHOzV6vGlcma7I2GfQytcQDHFRssZGKO5k3WVsuasBGj4lKQfdMs qUyT+Qoy7Lj02O5rSRUC11MszkfxNqW72y5eO8TjP5036ppMu+0sdR8Vovigwc8onq1jNAJmBf53 cLIu8g0HNOCO53mGrbe5Eocy8nXd6tQRG85vSdoxD1EJwgRepzFmMyj34ZogKXTAdUR/MO7FxQDr NMdtBN+OcalVssTGGAVWp45bxVvLs67EX4MIKdOelrFvS3GMGdvGCsQ22YIPi2EutvNU+aGMtH9A UWTBXDLRA0r6KfiZavpXANkGsthzwgA7CeOAGgcIZNGxKTsYvH//P3Xr+19UqXsJ9b8HYarthDig GyQcM6663FRHdyoMmo/EFZUGbpmbJ2js9bHpca6K3yC8f0QBkiwMxMCon8CpmCFXcQgNqsWqjswr LLquCOtSCAJr4CUx2FRhyUItG/tYf0NtD34uuFpxNQZEVZyEV4ItsiYf37lzR5ZFEiUyqKlGuF9y iwXiQ67TEecUFY4FLOskmXxUflHrTFLjjjcRdsQEu49X3BXBfnUVOrEjhrVIikFLty6pLl9Avcu9 TduAGAyQNmh/ksgsqEyAtP7+/ZO64J8NXgFV0fnz/v0/2yXQhwEWqdg57AWHcoiBMFnuA6Lah8Ew M+4Do0KHwXgXpRuMS5PBOfYLRKzjZAecCZMfBiaYsidnOlaioA1JEyI/DHQk1W3BDrLNWAX8sveb uFNDbCC0A5RFpKDTHK4bEQEtFoajFo8NrCoufRhQtDf8NYSlUWzI/+AM0BWo8Su54eOcOpVXtZsT /ASk6s+9ItH9h3YrgoCMFdIFpVJuLAvIMFJ2HqHdsxqnaiYSACGGU+HCxN04KSzMkC/dpy0sN1Lx DNTtgiNMq1bQ7nBoWheaLZvyWkaxycfQLkVAO5SFMImNx32eYTNo2wWaAzdbqqxsFeIBR26nJe2a dHCqEDsjFXg1gAgSG+4zWowtO5GVB0qPAWBtxH3hDG1TxkqYm13uvZbg9oY2VNaSqVvAVc2t+l2S ozYAXCwopa4uSVakxmooy5zpMd2olD61NPVSpTasGHIMDKQN59isHVoxewy9tXTXp6dH5N1Yiu+Z Ksos1kqiATkkca+1zLgHr5twTIIoXilqRjd1gb5oBBElCZdIKy4zdjF9dcdeE2UIEbumKVeCWTAD q1sOpIVfn7KvYGVyNZUlzfiMp4lSvpJRaRuRBBrGVIMIWVCiTbXEzzvveObkt/ybKQ6BZHM84Lk1 Jg/CbqeK5rAECeTtsCCXfxwcv32px0MJtMbT5Jqj8hK5PlVaWzeOyAM1OLeMcxSzUrSU20aMG67a pEgD1EsGfWlLMvux1XBsQXS/w+3+mNVYrOUnYNVirxUDsUdi6JYAYiBMl49xRCHwLEEJRHWh0NOk MjQEOTv5iXwQQMtFLA5PjivNVNptU6SY/Izu7DZWkBYKzh+AhoRnEZ8QotsSjRgPN5O620HqGV5u 5oHGAj4Ir8YDIn4iD0zqbkWKza6uBgDx2Ohd5Bal/1p733sHwjE9e++QpViaoARtoLc0vbxc8DTI R5EEuOiYVvQGN4Si2bEuspmfmrd8CjOtuddjR5spu3x5KjarwQu4x2dfkvTeJClwn0yHR7u3CAtQ rmAxd+5yHvYZHmdJeI7ZySkyvdNmN1b3PWMnBvguJA09c2C55s1J0C2S5Lk+eVBbWU3jpApIaxUa Li1EBNKYmY5KsPRCFcmg7UBFjEBg5XGDpJUmoJxNcDNzeh879STIDCbcNAGO/6RQyGXlOqbeXO4O hr2zWgP945G3QUeLhvzqd5UB0eVQOP+irTJnuBHX0uixqVsht7iZdi0AYv+O2B/V8va+WTjiX2S0 vc/RAIyaKc9e6waaQIicPMUUvKOjPKzSXcq/3VxeKU8tMeuEFEan5LMESiJ/LrOaUfOTiZqFcYw1 XTKlLoRw70Ig0xm2OYSwh5wyAnuMabdqF/QDGXQxZ7Cog4OHhCB3X7XapgCytcY1zgQs6lpmAfNt 2cLwX1PsUPO2VR9iKTrGqARdqbU5DUqetoAbVhEPvH8CaxLdDRTMXfFdfWsC9aflcWhHaXHe4pj5 tUAk9IZXEkBVG63tIKwnSn8o/hi3A0ILSEqck/iR+C+ok+hUAH50hNtey3xtSlAW1QywvdC0aiC9 1Jyaswk6KOMTfVUtNZXFckD0FmHMi0JDbihb96tWvVbJsUXpromuBmdZq/G0Obl3a0/GQ0xI2nle YPI8ms4PSkGqTd1ZWDDnkAos+DAfVqB0RHGiwOj4dAWvav60LrT1LJI7OvViTSeQtX7Rekn2n5RQ VyHc1Tzv9UTMrjSvnmmb0o7OD3OTqd7F7u2Jthv5unFdFGqR0k4XPadmaJnjaqH5tBtk3TW3paz3 COv6Mqgbe7V9mwQb+MPmrNkzqCcyZrxP4JT7cHab+FMYpebgJ3BJ8J/PIu0+34K/2q7HZuYAsC1A rLuabJqeJkJlKi+j4hM4R1awratlditDgBU4UyrglLLO+zSMg/pJO72Nwj12jVtI2gnFY6TZrKQD u8/PXr588fJMXM9D3Iblc3UTjB3Ga/jYLKEOiusET9XLBSxsWb5DpOgkhT0tLtkjdQMGD3+vGudu tSgH9f1X3pCls4OWzppFwAcxldlI0Cllw9xAc2w7UptHxy5DzcTWGsbyOQvX0n/EiSTqr6eVzDsw EFe/wsIAOLZubaNVO0bXI5urBVJhNWjUIekBG1ktFLYieAdli3IDfAFGoeo7F3rRqx2NbQTyKhnF 9y1cVCRU6e2lv8b1UPAQHUkuNZDCGBIWL1W0C+SlVc7MYm/Nh7umkVxVortBlpYcNyLanDbpDzfO pD4FvWvXUH2bk7UZN5XZGrp73pa4i9aJBzR0KLhlseI2W3BtsrcrmNbItESsk6juLZf+1KWa25d4 bF/8Es7iJFMduUxzhehxr/U+W2Mds74hfjGHlpxaIO9eL4kWk2mrecOIvAr+YnsJHcN1LHxdY5kF rj3Q2ipSzc6O9jNuufUtYshErA8IrC1knDAu8ZTQf1bG2GjBMn+wZt9gw4SF+49VSWfEojvhn+AC ilYqPnahM9Dafk5bfcTiWm3QAnLrzqhPxkAuiumumIRFbl7UalrLZwj/80VvugvaHbHC3rxM9Gby hHsb9B4KrUrACrGqBippNqrMxprhNh1sYE5C1FIpylIEJlorLqUEv2dILxckq3xtH24AakqzZIZn y4GsL8uc3iLE42yxfYVHSM7eKpevn2DUnhfG8xA0T/t/4s9q832Gu9mAzmXzqsdVqlK4w5uaLbKG vm4q9Wyc7YTp218V7eDZid3eee2YPCjAHEtqvAGj7cyMx2XnQQbRGDLk0Bw1g5tP/7yfte2CIsH9 ztp+wWESX2GHxmwUovGC/UAWgwZKZ+BgClm4xAaEu0gC8TN6GfZz8gEdqYQbYKtjMhbcWrSHIXdo +djlFwTjxiM2YzwbKbaRn8EWvn+BjR83kotJIIW7GgruvNWhttbhlgRHkGAyS7FNTI6RSf64a7p4 W1sr/cEsR3XxwAAonart7/G8G1LSNYOWCMrM+/Hg4uzoZwy2JCzd6KKTlLpzRgeX+P6IXk+11dKv Lb3ovXiZ4vuQaFrbXJ3gRzNx7dR29ib9q5BEE1FUyCDmmnjde9T4DTLcX9qlvqAPF1V7hC7romCZ gZghQXtMysbtD/ylYjoSxzYsomQ2M+dQXQxuJqetH14GIHPAQB+xMRBaIwiAR06x9t6ieKD3UiKo v7y0RcT0kCm9Mflq7QBDbbjmdotubZuYVYeD+sMcfPD5RAO9biSOT15/5bA0urjGMz8LZbbot5wX alLORFpmKcZ23AQaieME33XThkS789bBnlsH2xnQjtFzdDDdokWXOvfDSE4MMpRDnMoBENCHFYfJ hfmAK12Fsc2+qg1QeHgXlRYRD1yw0JEx/GqDhYwgqcP3UtUAt/YTai1u6e72jRow1W0Zp9hQM/UQ uzK+Corn89DWuZ9t7ZF2fxsAYptsEx/o5rc5pAAXeGbI10c38E3RhcyF49QesXC8CbX1IBnadg/F icYlOuhypCsak91TM9vkvdqeuNm07I6E7nuTHew/FY0R99/H3IY382H7WUg/S9qG3/mwYV+dRze0 H9a2hUN82T5PFqraCN6pOiGRPhZu18Djo/MLuMrw7eHaIf7v5WKBBdq1ooOLeKafj/QLer+b3IFQ IbKcnxy/vTg6eePplwXMJb540DrHbx4d8SF+ivh88OT7n8RIvNaH9wVccXNm0GJE7yZbivgdFiEX KF2n+wf6dH+ODoGw6FWvbz7Vj1GeXm0Y4J0Ej7fqMoi7Z+f2BQh8LYLF1/MOREuUHPir95zRhNWS +0VTzu64oCr4kOueIGeT7HNNv6q71cpskjVdy9ppbRX9lYLPzpIyaP18pT9KXaqzcxN35HRxADmX nOUA5Nqk0OOTvMGNPSHAgv/xiy2o1XNlFKBbcvgxycIZ7sWAOrjriJEwmz11bAoN5Bx6MYMpAQ4e PKjDY+r91MEeCBhp7iCvZkCSnvEqmqkzcbQEUegYLvB7BjII37i50+pM0ugUUmh3HeXyCtZ2j77H YqZqXSGdd/EJQE5YtsYcjvQYyDWPAbzTAT09lmFcx3vExZCArQI7oE/xssp81nUxrvZL2RTyckKS wclxODLKAN5zDG16fdFs7D1c7j009zDZwG/soG9o0F/QQIVnmDMRSDYyBMDv+WDftQD8Jgl9qQnc BLJj8SKEMG3Uzr7LZHDuuNWT09eJjE1Jm1a7fNyvpUPk+IYQ6lbzv2go15Gk19r8ONUDZOwnSn5b GG/t0FgFFm166i2JaDqaF53w4VdrmBng+zX0CVLgazwyLkJNEL9JQtd4mooujaXvY/0HNDUmzQpi hspG1MReJAUk5Wad/4jn4/NUqUCTkfQlCpMyjAIcTEWKOvYgYv3RzApY9asvOMHdQ02BE5xAb1hR 3kEJbZqFixA73iNxar4lhMhc2/a/pjBRBX6LTBgoiZGuNO/QUGpBS4+WD8SNMC0jnk0m8WtrjG7m UH/MEt5LYXnB2mEV2ShhOCo2telWobKKOmvOoKuBLUO23aaixzqvM9v+4fqm/5ZJri3Qxw4gsuPL XVgRIVKCgNDyyROsEfsJBJM8TaiVbVGw3A53xMdhff+an5ocC6i6vEUtwiFA6nkJrc8kx1UUtyzM 7WYjrCk6IAb/F+skiiS1+NS3fyZCPJRHEtxE0fWQYqtfQGOsD8KnwprjPKEd+HDYJdTNA9+9/cD4 MkZ7eh9vN70xzq+XML2+0TUh0Oinz2h8tzZW3UIbcDqOm2/qsUFsTgdGIG8I7IkOdo2n4uGOQPPH oDHDrzQK/7+9c+tt47jieF/NTzHxi0gfUuEuKSuWwNaWnhwViIEEqIGijmmRaVTrQlCWTSHwd++c M/fZmd3hzjoFih1Dlrg79/vt9+el04dOPq75AuJa2B480Vt63rg+YqWcU/C11ZYH8fQXbxThHz9S T/vxFgkaNxrfcQ+f2mNQXvRPT4UvH3CVd/k7DcU0sbTHsLEcl3j1JliHj4cyquUMbZGD1dXy39id F2M5HuEB5Be+csLZnLhVK+Z6SwoMrYoMoxmpysTDSJyIcuIdKO+lCRPdSl2gq1tS4uILaiwL20Vg vrKx5ytDc1dDTxTNLIFSU4T6QzM34BUQV/1DSqGsecHaoG8kiW0CL1RZPw+G1FXjf1MeMv6bWj+F 99t5LpsUOTYWp/pf7bORnSadAZ/4Yke3EsxbntOTaP4+5W9F7hof+CO7CO06e3bCrGkl7u2dmJyT j96c2K7ls3d8hXTCvKiId2/5C30sqAPi9f4Ve8beWu6f0VP5J758gz/io7R3/tbYUI9eeY7kY8uv M+vROdo5t707fyVsnZ+p+C4oZLI0vDTJD9XcSzElkyuTh2t6Ws0Gy4aVn24hjDAtIkhxMB0KTs3s tW9+6cviE95hinBXgqdPL574NIFP0D+zGeN1LNIq2CkrDg9L5bpkVecRt6GGecpm3LMjStrdNY9L NSoYv0lgxh+J30jEb6a8LAPRC/mnhjIW8VgsaoJJKOc6DcZtMTmx2tUN8QemeCnjqXG5bgrbDV7y 93ykTLIapd+1WtZPeNIXbDrGzTHHF3ps+nvrXSnf0cuh56g5YmUlQWVjJoTcFOHW9Gv5a+F1V35M SpNFo4Gcc5/Fs6jUeSHGLy/VZW2qSyvVVtN0i1CkWLRZp8yF3bLOrvSYNPy058NyV/AJ1sLNf3xc zkbs2eUO/56hHfBKHa0IGyV5cur7XUqHCzeV5B/3POp3KVyWo4DfXv00Qbr1cSFWwcNyXI6ClVJb mHEbypf7u0oSKpGnWBsHDD9yS9g1enXumfGFimhneiPel7pDpOt0ZFzqIsNrrJgdpKC6uhuLLWra KOA/5btwD6kvUGIM9AVr3L2UlRnXmiguZ79ia9xtVEvi4A7jzz/9XQmECH/0TqO/5WltkorzLe60 IlxypRbVaoNAbA/QebA4bbjbijGKJk9y5lzZxbP25zCr9K4cLTLubjaoN/teBXpgb0iI8GhvxTu9 w8MF2x9x0ECbLrROx3F+ilKrhd4YlbvEoZzSvqTkl86upVzLqvWze+3fnhBw40wGcJmkK9pnXoqX uJ+BNZEyiEY3ew7yRBwf0kxVFoeK3z9E/HisZVbShpRaraxXqkGaekXn8avJ73eXUh7wbmsda5CT tdxdlStBPF3DMww5Dcb8p+1V3of8le38ExAkQHA9jyssKbG4YdsR22p/tmadqZ/tFKJgbjDQ9ttA b284J5uVPUqd7d7m7ClVTO6HmUjjnJYNy3cXSIxeeOuoC1UBVle8nd1LfcDqasj4JfNa7tVfLEqs wVeGC0MP8bQNLeC677W5iWA8uZgUY9HAcXjYvrZ2U5hksz5c3S63qC+L+n2oqMuDpdgZX+Qhweux uQF6x+6Xj8pT6jSK3YXawfonu/3j9Xj6lX4VX41HeNKBz3i0vrJ/jY0KE4/9gmA6TMmPi+nhIbeC +VK+G6KDH7/q5YoEWXGTXcRrsl2ucF0qy1m8ul4v6eqj2B795LxDyWvRYUaXbqrteUdy3rG6ffwe O31/byr3eMjnI9jKd0g36GP3IV9bS2zKOW2Tub6TGyCMJrKxaasAW6xRZrXeSe82vJDK2LQUsUkm U8wLiHpeI1S1vOT1ZUX7jXd4l22zFrd73V7MPVPZ4Xk5buZgTmCbxd+PqpmYU2FnEPKvG7gqQpbG Cl3n4hFV4l+0u04kFaOtX3HZcSXuU9NeK2pzyf1W2mXl2UobIWJjWF3exgqNAAke9t1c0ZWiGxL8 sk+6Kpec3+grzfpU0rpwZPJxaJ066hsu6hpBmDYa6NqleRVTMPK8qe7CjrERUKkQ0u9CKkZ0B/dr V6HI59wdVMJjqu0jHwkVKY4/fIXfUffwRSH0c3NFSl+FMonSKBA9ebi9xvMB+5asuT4Yz6FoFg2Y 4tUWlbvL2nnzAR5F4cN6rZQnb3gkl3xQeYpK6l+ubr976tf7h43KYiG5E84/mVyJ+eh8kqGs1hJy sh8GK4LH9eLOoxU6fq4Pf2GVUfXym2bc2kWHth2t6ODn1OzYhbJjt1/48iscTAS25iS6PkN2iRmy Z4Q+ILRvokPKdJIgxV4KobyG5iYiNq3rGazw1pXw5NFxckjhLEgIWoAwbuAGkMGVSVpK9f1DU09T U087vNUYiK3t1AhUMyAQo9a5ZCT9htYlZ5rXeNoBIWkhEYGYVpCc0tvY49+Yg81bqfyTtYOq/E90 AEgaAmqaHx8of37YbHBWpIdHpwzoBjxOebAAzoQAOlvvLq8f7vESmDjufktrOyVog2dddHP4UYlW iTlhVS1CFw/eErzZiCvVOOf/sl1uNmuhRf9e2TqQdzrkPE0sN+gOpZZ8P8BbiYgJyooh+iH9WmWZ DtcEy5ggJmR9+IR/87efr6Rmn8Dt6KIPX9CsUbqeVsH/62/u6caIZB2urn777ZuFUf/9T7Oy5H/L 73+aT6dHf5kW89l02n//059hFouF+MIivLRD34l0wPuRzfd4K+Z7UTkOBrgQ958+wW9+mkznk7Jg RXlSzk/mzxlggQ4AIGb9aFK8YOX0ZHp0MlXWX75kk3kxPmbA/y+m7OXLAfO+EwV3oVln34oyoeWg +F4SsL8ihX+gB518SQq0+JYUhqlU35PCKGeK2RwzBYrZ8Xh2RJkjJ3/dyHB3pMOdIcQNQef7K3Hn SnErLe4EMW42gHo5bgjpccMAYorc/FU7TW7uMFuVG9rKcvPA84W5IVuZG9KluUEUXI04Nzjq3ODM 38xHPdMzj4RAt/746H7Uczf9xNPo1jVmH5FuoF6xItPNu5HWQt3U58yfj3nvXBzPea+sepw9Rbj3 VeGWMtwgnLbW4c4S4s5S4m4txU05/rykHH9RjH+gHB+wkJ51naA1sEZFa9HTxiWtmzStU0StA6rW lMAXfBibMyjLI/wtkhjedIxq8U7UCo8a3oQ5Vs3ay+xIJEj3glp+kXYvsIh4L4i0NQTXtXxvQL+3 cWt0Etv4m9gpNQmvLsSx94hp/daL/WJBl8fHNF+ZTX8YF4Us6AaNvb1F9iZ6JzqosidSly7DF9Lh ayWE5SlhgakzKkBXiq8lpJspxlenxkdF+GKKnRFfmI3Lme7/9zJthe4ale4qUncijyNad6rZJovd QUDtDuJyd7C33h20E7yDBMU7qErewd6ad9AoegfJqncQlr2DgO4dhITvVEjNynfQKH0HKdp3XbR5 51FH8ndihXyEjXL+fD4uj8OtshFBN+MErmCCFDp0i6FDPYcOuSA65JDoYJ9yM6wiIRYdfBgdYjQ6 pODooHl0sIB0cHIqjqRDNpMOR/tA6ZhFEjDHvlTR5fi35tJFD2yB6arXtRwyzzEzHmC+18HpYNPp IqwQno45mA6oC38Eoa6iW4OoW1YCjDqkQOrQmlKHDEwdwlF3QXXIItUhD1WHXFYdDKwOabQ61ODq UOXVYS9gHRxiHWqQdfMuxqxDO2g9uaqZaUUKtg6aWwdWB66H3obJdbfXc9l1yITXYQ96XbSSBH69 uuG1P8EOmQg7ZDPsEITYcScxB2PHYg9w7Pg4ArKDJNkh0OTsFveo578ezK6rb4xmVxYe1d/LkVkc hoF2aEe0c2f40xXTDslQO9hUOzh4ACiuHSywHVLIdmiBtoNm29G1CieZbocMvN2pHRW+3SqaTMId OkLcoR3jDg7k7pQ1Uu7QFeYO3XDu0BHoDvmkO+Sj7tAB665KKAy76wLtjnaHBtwdEnh3bYfVAe/Q gnjXbsLIOzQx7xCB3tXzJOq94gli79oHm3uHLPC9Eo4k392gYuh7Qtg17HslbILf/UT+JzGRLv5e 8Vvw76FkBQD4lOB8Al5XyCoCD9kQudPHuhA81FPw0AEGb4aqzDTgRYbuUXjIYuFj0Uqg4cHH4UMT nY0z0ckg4tV0Yh8kHuqYeOgCiodsKl6lK4TFy5pXBePdaYYg46EJjTf12IbjIUDHQwiPhzo+HqqA vBWcRuQtP+oZeQhA8hCh5CGAyVvPFCdveWmB8irimlIDH5UP1epLObMzcByEcHnYh5cHG5gPBqoX DanMPORB88p5R9Q8fANsXvmZzM2rITAOzkMTOe/WkER0vuIolZ03zag9PW+GiABODuJ1O4DeS1Ya QV9xVMRamYDo3Z6tlqIHNZ1P4OiFTfmrHUkPdqttZulty40wvSwX9o1wet/zTnl65bkP1JtAs4h6 5c39XTUZEabeOEmE6iGHqgfd5PK4eqiA9dAVWQ8dofV6+Vxl68HA9aDpegjg9WoO5PL1ap8wG7C3 Pcog7B1v2iD22oM4Yw8+ZA/7UvagMXtoz9krpzHQ3jqQsUl7SETt/cObNNZeD90ObA8h2h66wO1B 8fbQJXBvPMsh7o0vWci98SaXuTc+ZUH3uieIU/dQh93bL5u5e9Mg/bNF/wqBfdlgELtrUM/eQxp8 D2n0PWTh95DF37sHQXEAHxSBrw68Kwx+4KwxQuFDRxg+tOHwIXQnFsyEVZL4UOnZ4yi+dQsxcEOu CcZXYddcOY1fJRX302uBfPd2qI/k/59Qdr3pTW9605ve9KY3velNb3rTm970pje96U1vetOb3vSm N73pTW9605ve9KY3velNb3rTm950a/4LRcn1PADIAAA= --=-=-=--