[core-dev] Re: [codepatch] PATRICIA
Roger Kapsi <[email protected]> Fri, 13 May 2005 17:03:27 +0200
| Newsgroups | gmane.network.gnutella.limewire.core.devel |
|---|---|
| Message-ID | <[email protected]> |
--Apple-Mail-32-250454650 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed Yes, AND'ed. The code looks so OR'ish! :) OK here it is... The start and end index is send via GGEP and all quotes are stripped from the query. I think one (unsigned) byte per index is enough but it is using two per index at the moment -- you want maybe change it. See also my note in FileManager.CharSeqPrefixComparator. --Apple-Mail-32-250454650 Content-Transfer-Encoding: base64 Content-Type: application/zip; x-unix-mode=0644; name="Archive.zip" Content-Disposition: attachment; filename=Archive.zip UEsDBBQACAAIAE9/rTIAAAAAAAAAAAAAAAAIABAAY29yZS50eHRVWAwAkLKEQoayhEL1AfUB7X15 e9vG8fDf9qdYq8+TUDbFQ7dlS40sy4kSX5WUtmma1w9EQiIsEmAA0LLa+Lu/c+wJLEBQlh3n17CN RQK7s7uzc+3s7OxRPAzf74hBMumOo0l4kSazafcinuXheBx0n0Xj8EUQBxdh2nkbvAvu7n785+7x wYk4B8A7ojt4l3UHSRp2G7bffnc3DfM0Ct9F8YVI4U8WJbHod/qbvbvD6PxcrMzESkq/RanzKysr TQd6Z7Uv9qepWO31NkR/fWdje2d1Vaz04HOHW3vw4EFjYP018SK4lsDWdja2dlY3Gdjdb74RK9vt fk88gH/74ptv7opoMk3SXGDNziyPxp2DZDwOBzmMNHvkfT2ZBmmQJ6nv7XdBNnoRTB/dXSm9eh7F l+EQC5yEua/uUR5KuA8Wr8wFnkdZxVt87gGbDIJx6KtBgyg/rmj9NA1DqoEIXt1q99fFg1VA8YaN Ypi/jp6/jpo/jdVJEv8IXy2kz6kgp6FhBSQTCX+lSfFZTDTQDPhRf/vlQRK/C9O8YYU4J1Q+aFD2 h/D6WTCAkV43g83MMDwdpWEwbNbE6wDYfBAFzqzXVTiB8vHFAvg8BTEyF/T7CZLqJPzni+dPk8Fs EsaIzrsP7oru/ft3hbgvTkehGAMxi+RcBOOxyEZBGg5JwGUdIV6nybtoGGYimSIvIQ+LPBHBcCiC eAgibJK8CwlQFA8jKDoLxly5LYZRGhKW2yJJRRbmGTainkYu/EBMwnyUDAE60fz6RntLPFjfQtmC JD+dnY2jgQjOsjyFuRODcZBltowU/70r7kBP4DNNo3dBHooshx4PoDsxdOp5ciGev/pW7OI3Of2d izCHXy1b4hHgZZiDuw8QFv8L2BLPxsEFjj2bhoPo/FpcjaDD0C6MLU5yAd/FIMhCMQlykDuZuN/l ut7enCXJOAxicfTty1fHh28O9k8OoWd5OoM55XaFahdnKCPqELMMpubsWhyMo+kqIP98TKikKYlQ E4pRkuWAV2ibMcFYc5pmShNHL58e/vPo5bdv/vbj4fFP0PgSVlh6xBVpDvprazgJ/bVt+IOTQB+Y 6rY4h1EjuVxCu+INTfjP0S+dN9MgHyFm0tA8FVFGGApiDeEoBoKdjsM8RNQ/DbNBW7y5DK+vknSI hI0T07pcBrKO8yACmos6qm737oqNVSwNaFKjWtkTLAmwpAPykTsbFoNi9R+4YG194cyLHss+zPiU 2Gc6TROAD+DH10QLK3GSToJx9B+Yth+PX8pppOkCcmHZzjheBRz3Vw2S5QeshVkai/NOlD1V3NRa fmQKfVBf+NGHR4wdYUhXEzB/kSw/0NIeOwN0hX/4YSgOQAachL/OwngQZqpaHTUb3SFeHx8+O/rn m4NXL17vH++fvjoGyorDKwXzNRBt9N6Ux8G49K7xit382yxMr48TkGanwdk4FJfhNEcGyEcRSg9f kasIyPIsFBrOOPhPBPORhmezaJwjccbQIxhZFoAE4ElYf0iTsPHQJXTsNEgK5GZiPZy35DKMYUIF oAdlGIlBpHQRBxMQaYZM5zHg08PnRy+OTg+PT3aXxErnzYPu/dbyv//dXnrkUrhXbgA9hCDvI+hb awC9FINlEIByhpIcKAW6u0BNTTTZVZQPRqLlPiXB9rX4eqf4aAUeEQYf9hGDa72+jUH4vIlnk9ch 6Ib4Alk9A3LoPXJfP0vSQTj0vj2XD5GC9tM0uEa7C2lGU7nNorIgfm2hKF1+BBTVjS6AC1k2S1r2 V7MkQstYCCiJbH6ANwdgBhDp2oz4BvgUZQnDklarw6pvwvd5GGekQlVHwxBETcsyvTosImwGcWCw en5qdKgFChu0QSHyCoBwqh4+BKW6DWK919tqr22WZI5nWh48gD7cueOW63aPSOWg4sOmkP6BJ6Ga CAMgIYnhTqdjyST4MPn//IsqgEMA1CCjSSmctc6lVlDSQX1kgcaVnQ673UAN1oriXES7vUcieqwA dmAkF/kIHj14gDzgVDL9Vx3YVfVA0T0qF+52D+NsBuSHWHKIbhSg0QNWEaoONJ4GKEyyLBmgAhmC HMsNDsuApZaSFXdb/Hu5rET597Knb9E5IoDr78az8dg7XCopSyGlcUMtH0D8OB0AM1F1oK2AFKe0 2xUnSNQk082wQHYBt4kAFjEXZGmo6UV0UdESGGVKdMQRFLlK0DKbIOurF1AXFhRj4NIsmYSj5KoM owVY69BkTcCSAsv4UulygX1keURTg2UyIPkyDM3npBvAPkqhakpAMi+E2AsGKuoS2pQWCJX7k2Ej efSOeyWy6ywPJ8tlODkqvDScjgPAZ0TqM4DfF7MxCH/Gdwc0KWAUJMsMqRCbLYNJctAiIBfO0OY9 lzUzMUyDCaoZmKPre24tmtehnNLM/sFCy35PXEsCpUgg7q8C24rHoopxnWr4UTaerACdcHi3VL78 xOFmWRmF/mK8XALr8jL0qwE3l4BY3Cx2Ab+Sn0vl8OPAnc5yw6T2LPla+SDCMdCeB66/JbtXiqkB R/bMV/bSQk0+Qc0qAXm6pZvTKHRF1bwKKKn2x+MWtFNXuhpvFcJNfT74H/ufdrv7Q7YppYJNWBAA n1Yg2QzCYSNPNzwKqrqxssZo0tAHn6mASwSwOQl2HoFEk9INbSlyC53CwwMwG8K2OJvlYpjEX0uZ wUvR1c1NcoL1Vx+uKzeY1eJdq61jckrg8hiWoTEJtIRVxnmaTHihbA2ukT3isFwzK2RoI0aLrbco tt6WrY23HmujytJ4W5RWBcnmlnRmYnGzwSUAw873tMlQpBJNJuwdakU+W6HbPX319NXqDixXZjHQ BNivCH2aZFkEy7gOLjDGY189p6+yCdVdBKFaz2CV1lre3e15uMYahyyHMrPXTGAW2vRJyRJHWF+l a6W3gQv+B/21NZee74tv0GKfiPMhccjjPN9TBszjLvxQThEkjcDW/YKdL6hrNCxDocADQKJAoaYd 6V2ARWGAaytUXko3Kk8F0i324gLsjJgak1NS9MPItaZmpiI7qCHAsBw6l32w3J+dbDqO8pblAe4o zdFaRuJ8maQTYC/8Cmu2ESxs2gXb3iyt9ezc7+K/FStkw9Bzuq1nWrImYXxXLNJXi1yQCi0HYIn6 JHT808mT58lVmB6A5dfiTYbOjyc2MEvFSJzKQWDbejwISzH1B+3jpJ/oa2TRiU6Na3JYsVMxis/R j4VimghiiAjRHg5FANfxYJQmMTm73iWRcg7/mMakJixUqvUZuWzvqF0agS4JGK56jf2GyhkgMpJF WnIJ21/bXJPc83Cj/VAzDw6BLTQ0YoOcpP7XmRxGHlxK43YC3DOZTXB1MYvJaMumYB2D0HkVj68N 8wTn50AnmZiGKWEAprVNrsxBkqJBHodZ9kiMUMnAY1gyDKNzXJMPxsEsCzsNcARkNGk5DOGIGnqN pozaPWmVlIT0ML06ewsdQh/k+Lolf0TaviqJ0ZaS/LIMt+QT1JKYIrm/4ry37IkPNi0CslrWtMKk OqN6F4xnYWFeoVgHzOiXwID4q8QLpsN5J6ZCps8WD6g/Nklj/zPyrSPHkcCUBjuaF+Q01Es2IAFk MXRZs99oSLNIRLfZ75E7fHOt4CYEYOFkml+zGM1opRhNJrMcYVd5BG1SOA6zaRJnIQggdCtet9ip iS4nWISm/NeZRyl/QEwDcmUBZBiq6ODE6B7tAYwH49kQ94SgbjZKZmOwxNWjo1h1pqXafeSaVye4 /wFLQVyE7ijymE1RwawhK10ns1R8Df/GF1D7a7mVJFG4utreRBRuFP2EABfE5jCABRV6Zi9Ccumm 7M4djKMpMa5ZfgKLz8bAmrAKznFRjP50C1gc5kBulzCdL0HWszDART8MHtbM0PvT0+eZWtJDO7St 8i0YIcNrQqEN6yw8T3jNdy1CkPEiJf8WWZTTBBijU9IL1fOi4aLwh2IdKBOMs5a7HbMsfvtNWG+f HL/6x8mhfLfs3SNIadqGpwlJW+gEN2kmm+aRZ2Gt30YH4OZmeRbIN4Udj7QQRd1Fbvtw+OS6xSPE FU9O/yyDfsqyMLOBoEUxxs1SuQ0yGAVADMqqgEl5koBmy8IgBTx+JaD7J/TdhjGUNvslCG+ccNA/ gxEsUBNxhc7cGFhnQFsrZudNGisTy7jniXCkj65LuhQKoJtY8oquJ+1kapTWk9xZLN7mtbXFYlWF 5fzrCtbct4q0ITWdNEb32BZ15tmA1/iqgmLkalvWcvaMmAq2Nrfam7ii2nq42d7etgUaVeKZos0i sMSZ62hG5EbtZAayCZUhCrqcp4FpMRxqSCTqy3t3yv5SviEejWQeEoFt9Q50Z5Jmnt0Nt65PYnpg WAS2j2aOSKawHI3+Q8ZNG0lLbhfBkMHKgmHRpjg6umDFSlSW0+4mio44seFJTCPOeGXDdCoCUvQS HgkHhEbbUA5n2bBSqbRQWis9CuhPYKUUjkPcxiffIncFpiQBs4Xelh3GEgUAcZfRgFvbK6apor9e rcxpFjrwAd1rZCiMiceDNAGDsSGVbHjuI1hdIhi+C2DRchHiKJALv0Y/7jlgokt7UeI8DGDEYWfZ ACw66LlDvF5WJoJjjdCiztrd4gq4x7WfwyJ02bEpDFrQwpaIMUqzKNAJ1jxVi50F4z/N3YIn+Iht 4GLpMB66ZQ/jYblk8xWD6iYPfZE1Q8m7YblJ0QCVTxmpxWHwpOh29Ry5FiHNJe3wkd9WeT5Kg3B/ zZtV8dVXAO7eLmPe74+g/aviB5fRUTwLS+4rl6jQZ1Mwe4ky3+5GD/royinSpc+TM3cgb4E8/Rsq Z6BHL8t2t/sAmI+VKXbNOCU7YadtObmBmd+u9H/pFLfCtKnevW88+7hixn7ulrtV9BZZ1oGU3VFb vC0uJmj8ANCY+V40dbvfJlKXQkd/jHHRiVMFMk/u/YRGJqKAyXK0zqLYB8rIZJ+0j6RCi3hVSEJU UT1A9gEsS9yMpQipvbYyxtjehDfojQFDVvhgDZLpNSrZys092XtytHlWZlcjXMqUcVos56crpT53 zcIK4PDSqmJvD2dQ9al+w1CVjnZ3e8igb3d3XTbBh/eKXa/gAPWRuM0qeocfjbFq739BuiB7c9RB WeqgT1BLlZKTD6uB/C5UrN4gYamB2xgkNywJ+LZiw0p3pEZq4ELhbX1H1UdKEu87z84AfhT/yO2R rGJTwUfdgP4wzdANoQxX8kymuNuIG7SoeaMMvfzK1Bq2fXDkgo0M/UR3yC9e0ciRhFlF9lhEAvHQ Ec5dZb0O/BdEMSLCWNWuXFaT7xnHy0QLtVdKCiXxDvmNJIIs4S1298R5EI3BJirQVx01K+tPGSHR I/97NjvelnbiT8iP3AGB1QGTKM7HcZWX2/1V4+sB9fB3XAOoImbLrBQpVmwDZ/Se7RbyUne3K26O 2iIwJWNY4jpvCj79ov59ZWkWp+XgHN0YkeYGq/WSekQi09sWHmlo987fkWi3OKulxSmPzSlDmqQ1 F9VKZVg71Nob12j/3FIgc/eotQRmBYLfpJmJqmNuXwsoq9o0rtiYtbBVv4/sqe+Rmc05GKj5RoKz HDzilZol/qL1T81M8PpIC8yGqq5KWC6Eh5twlG98FkdV9NXhqQU6GbEQtQprXnS0EeroAmtXrO1q qhQXNo6k0u3SjFgLPDlFRezeZ5J25Ta2Z++03EREeDQIbicbp32JCpRfvDCulA5zGMzaf0ysMDmy trf67YfiQf/h6nr7YU/7sdzQWxP+ynGNFIFCe1LkoHbQS08xEjrO5X4U79/hA3zn+HFlf2Xxe8xL KKP4ifLgPnt1fHD49M3Jd/vHhwoHHwwBlKO0OXITfbBXCW0C21GotBGc6SMI51Ga5bpmkF7QSQ+1 rpnS8kytnYBlElD/qpCSCTq+2xOwzGctKiK48QQKu6QyOw78vz4Sl8DR6Jax5mqrivvYVttY58ks Hv4QXpdoDOQC4Rdd73pY9IRi7c7l091dBaEsGQkvQXx9FVxb6CmLDgkfpGNlb6z5Ly4g3IEXuq7O i6ghYExfnDAzSxR4Ra3bLSUnVPfmCXLs5kq/sRC36U1g+FXLfrLM/fCM2ql3WaqnetvMYABKmT5X 3qWpz7NkF73URS9riyIaZdE9VanSiqjCHGGvySC69z2A75OXeMf/BkhjlqGOy6R7G12QaMIuvQgG Z8Dzor/Z214imvdCeL1/enx0cLTPtGGqtbDecid/ny91xD9geuLkygvgLA0Gl+inRj83CIwsGoZ4 LizIRDQeX6BQgEnNqnuQj2YZur+R1M9CPj4RxfrUBOhsdo97K8uQfdzLYXc0IIIFBu3ReutUYnKa JmdjBCS3s0xwiPbjBCKbnWVh7oUBAuYK61EfCogIFSbwNx8Mi8Khf0yxYB8d6F3aBkDUvYuAR96B HRPAdEj/ehxWQcA961lMTahg04E5oUKDww2Hs7AGqUMZ4szYx9mRyKYIiEzwFpoXAIWjZKGU8Mve aeh6/R7G9duW3hbyAEse9LiA1YcPqBA/a5dHhSVPTG38wqiJB7Urg7foFa58i+DQR6NECij0AcL8 Gv6nvqMt0NEIQSlXEdFpf9BdbR/BqV++EBK0o7qyWMUyBj914qumagWSK3Hmx2Yj+VihQa262vxb KR3L1FYPRbDn19PQcmGj/OTzrP5zBIE+GiA0HLIj0LqIJkGKosFsQKeXYartJVODBLk45MgxE2EJ s3uOIfdZhIoQ1T2I4jAdo8/XHGbSUPSRB2h8FlsH1Ar2me9UGBtoTrg9RbQM9YEKi8QUBCf6HhnU RPQWKTKbTYFU+0XWK4YBW/NVbfwpQxwrY6vl1igyQu6D74q+lz/yUZpcycU5NP5qlr86f4K6Ljt8 PwinFCq15CBESjveLZiweoFu9HmLemmh1alyKiBaKBjaN3r5Ry5WmnzEaZiRaqgvZkc3HYzCwWXG cW54yKMDdPQuSKMgxmPA4u94tDd8P8XgpnehCWXa3qbj1au9vgplsnef/w46+vxaBkoL8W2Yq5hw +3yD3Cd2vH142EsDKsQaVxweIre4EwO4W7O/tLREoWL2tkFBfcyDVxF8Vobo0JsONsj9+yVO4cKh goyOUliUdVSbtGTC8U9Z99tvD1//LmlLyj2oTFyytuHkLVnbEKbXNflKyi3c2RRPwwHmGFkXq6s7 Gw931rZ0whJopSZfiQdYOWPJWs/KWLJFgXzw78MKb4FzUBfBvvnucP/p4fGbg+PD/dPDN6dHL/C8 /tLBqTowr07qm8NfozAAcS/Q4b1MVPksSsMrDKUZitM0iLNzeAsihPI3ADN9FzU8uW/359k/3pwe 7788wc48+8eSTlvQoDuBmI5SDGjhoIE6B4Cn4dffHe+riDRs/PXflryZCybBewq1RYHOKtffpfqR o6J4sf/PNz8c/vTm5Ohfh2+OXr558tPpIY67v4GBbQ15yg4T+n15q9STSh7b2nR4bGtTlEfRhNdK te70Vy022dhZ39rZ6Gumg2abMJ0Hapn5Vi3m6/fWKAYU/vTN6WNllTgER9RVSrygLCaKq5Gx3UBZ kppbuCkPepnJernCfDJklenonEdVpuUhHeP8uGZCGdhTakTIRpBZCqlalMsujQYjGVpTDCZ22ilW h+9vnr46kDHzPTxBRYjf2myvrhXiPuWJK1CTaPSeYczChVyoYhfk1ksaXYxyEeTS46jrs4F4MYuG bSHjdzvPWDi0RZ6P2xhaMkqmmBVFtM6u83C5R88kXHgKv4vbcTKItyIUKs5//kWkGFha3tRCE5LF muWQLUQg7HnO+2hwYKtwA/9d6bcBeR8eIY4w6A0DhfXRMre2ir7CMNfp32ZJDnaGDIghwFUmsrhz JzpvyQ5bjr1Ch/mE0ldfYXmo1kKy+Fuxjn5YXe9XFSlaagsfOueh5BGNO5a5zU6Pfek+tqxtaWAP MDtCKAPiCSra1gDkw507SjsZfubJajBXKP2Jnt48P3z57el3JQutSRe5mTxJxFl0sSOWxAOh4tnM QQbdwZWK2bL6babA6rtnCrj/yI8fPYb3k7E7At2cJ8a3v7FJkd79rTWVSOmu1VqUdbg/oFdV9B65 Zt0yb4bJywSs8OQ9Urf5AVjDOb1z5wkwNK1oYR02neUgvcNgIs6CRO2gegs4vllqyMhidBszM95T Tu2/MhP93PtF7LjuDKqrBGxNzX6ppvl28yEYXAEZFCYUK71KwcjpZCMw81bH4VmrRV+XX4AJc/L6 8PBpGxtZJvlylcKiAk8nZdNQB1HLD5bqUIEWzRkujBB81lr68fTZyvbSsolj548GSPMqj9HCgg/3 yijf0HYp9wfKzTeTMA9eBNmlRmA5TOLiIpw+GSeDSzoFTXa3bRy+ODzdbwsNqAOilIJAOJlJaVsE s4k5tqg0DNEVI5/TBJbdBD3xeNfS4Mh91q/HWut6fQj+KU9r53vd534szvKZmeWW3TnRe/8MPsug DhYFo6l7HpA5M2Ob7QChkyd6nK3y3mzBB+I0hFtp51YwPLYiJy5rS8IjBz7uBRdzwODctQryR7Mr aKPWGxkQfhJyijPW1r/95glGtYQT1SyRr9fBdIPW/Y5PKD+/C5VVm1OwN7LZT8JEAygaGosu9THU w5JGQ/IV1vIFjUWcfilitntk36/1ttssYe7coRwOYBL8zZgeKsbKvJSLiHAIBU6vp1awkm7yb1JD GWC071ky/2KGeGLrE0fwqxKHRmvge91QhSwnLB7FtoKISli23jOVvd7/6fmr/adsBt0hjhYZ7qga jgfFsEovWghRH3PtbTIq18B0X/NmatIDQpr2SVygofVllyztt3tidX27eKSs+DEEXZoR+1OxlYBd Q0JCBxtMV71Qqt8OwZUDGOVn0A+CqHVgPcw5+zxnHXWAYRdxNWc7pkRYZhbPzCy2yeaWwrqmfQXR IsQKeKuN4FXMwYfyjH2A5QylensSDBFzIL9gEZdfa1tT7RgCRsoJDdQ5bMnrmFNso0Sgxp6FNl7T jnK9Na6my+qk/Nhmg2MmutNhYcYyCG0EF1aJFqw9jDUERtEV93wpIQqVHnMdF4yG4EDj0elFwZx9 DR/GjsmuRXGbnIsz2u5AvFVTwwO7Yw/EUpuwrLuknxR6VrcT518Ikfy+8brnOByE0btweJimSQqT mUvFjBVPX71683z/+NtDkFqwtsTVEJYoqS88m4G4K+OtY9pHYE+OvlXi9SFT7zqI13VzENY+Pq59 QHisLYIVrc5Sy6t82lL8lZb6nF2GiVrma7WiI+5jlWGYhymY9+q4pG3cdgTPLh2rPAutiCBrizCX mTo4f9hVIs6jcJyJFp70IYfF6i/Lc3YMzQll7aNwz11ajhWHRPXqq6BK9dpqt2ptxfFeM4qm6xWU 8PyjY9y7J7Nz9Jef8R+ZP8x60+Kafl8RWCpL34XjcSL+kaTj4T1MdbuyJ+xHTmF+sURvlu41Kcxl 79Gz+YWt0pWFzTcKgpim4TtB4QfNTtX5kqDpaIrCGTpP3P0AdeHXS197hRRFqmpqwGmvDp4yRBPR Epcch8wxnnCBymA0A4sIrRWJFfHgAREVL53HQQ1Y/xAIpRzSUR2AUsK5/WFq7ATTKYjUVilbpaft 6hHOgVW7Hy2JYzBvC17uW8um8oQZSHOb2rEu+aZVDo2A2O7bH4+e2smOaTeJ5Z48yZpxpHqUkUkP QkVDQqlH9bk8nibHsIqh5djmFAWbD0k0b21stlfdvMgmXEQO1OOx10k/KHe2s02gt72g0yt9JARd K07Uuys7nKsiRBYZr3C61xGXMkagaJqUkOzrc2jvONx2j80ZY09/C/sUOojhDh0qgNV+hMnZBrgt hKoYXkjgMuXPIEmHT4EyWtJ1jN+n4fAEysqNAdTe34FmHAMJnh68lpr5+BD+npye4Ka5LEiLJ6DN +q09leXoE2zmNWmRd+ZeNiqLm3TdYfiui1r9Tl98j/EnD7d6otfbof/LXbKabTcbXg0E5KFeuwcM 1O5v0iL8wRSMIjyA778pAKbbc5uFjlKi10ysMtKKQ46u0mCKYoHTg53IpGHkt9OJ/QcYyYRJ6qmy SiimaVVkMjK4wwXon2+ysKqnHStZ/9yyhesesDywhKRYHoI67m6HsdsRzP/FobOQVZknnD1KMKQe FQvofUXvG3No1OFOdcLewHX4E5mB04/02pQapmitf2gEs20611a9KbXT4bQpZmj4ycKcLNSWrIwV a5pmY0OaGLEUwE5LynIheA8iz+KshRaNPNiKHowIF1fc/gNsvryGMusnHnJ1dFhUtRtXluBpyVTy DVjimFQCq1WvOkhrQOipqVYlc2qj7VAh1ufU1Gs2b+WVeY2T+NckMofG9BraWT7DahH1Hq+Z4YdD 5DefaIZtL37nzrzZjFLk6dltco5/+1DiiJFsdqa+z8WO5AurFw9KvVAH1yMekn/dRUcoH1uAPhaN czHHYdN7Gkkf0WCTibJY1EEwp5+Yx6oY9F/Lqh1TopnQU8Gt8tCXPM2UlIj/Xiux0yE7B2TKQQny EhCAGDbBf4JrMrKdKiBZ18xUAnKJN/y1dI4nqVrIQ2HfMt7to5Y299Sx3o8a9oILYVrh2icFsM9W Spnq81PF3hR6VEekFtZraNIsysrpRuf6QGx8u+tJl5jJgkB2rq6w9PPSsq5s+EQ/W/plqWlrpKkf lfDReBWqFjsYIXUWZKivhmFA53kSgZe6DE3y9QyARu9XKJ0wJu83SyU8QinNIXl6kvx1fAyPbNWh lQIry8OAov51fcpopeOh5GwBzSXqSAyyyQUZkJ4zAo+ne+b7r3vdH7MwzbppAkZsl8PUu5SekA6b 5u/zx91f9+ZAScbWj3G0J+bBdEs3LTe/RM0r/1PnQdceh3ek1mzQENvc97bsWps60Ka22g5sLzRa vUwoFSysnnH5xqFcTooIdUwNU5HrmmGM+Twz8/JaLr498y1zOEt4xce8sXJgbqTRyZjVb28wrklT bKf0dbOEO2JDr9/sROWlu3R8ItoW6CpriD+tl2ic1wulrn3Tmn0MSrVRka1Ng/CeMqo4IFV/dr8i 8Y+T26tBjp4FBvW2YlD4kbl5Su+K7sPaIUlz721FnhSdcx5PrNg53UzCMLSbfF7MRlWlHp/juYwK mWfqVGZLU/yy7kGecLSK1Yuf9UuOXfzFUiXzTlugh6BrLnX6jG4kb8tz3EneOrfgVvLBbeZe4n2z Od4l8sM4PqQj5W2RGdj0aTnkv+tkJgazLE9iJDw61Ec6VTmHglk+gmLHqAXED8E0i9qUoxwDky/x pxgmuRiGd7V7yLrbq/zwhA7+yodVziLTQ4MmxWZlU8X25Uo5CtoLTRAYEGfxj8ACiry2gtEd6p6Z opZYBK6rScZ4DFIKcrk6wdMXlaHvaiDYBBqwsg2OS38c7UWPu9Ee9AKalNcHqPwGWKNHxTviOZ4k zwIzDrfH6EHEyA7e3OyIJ9B/0UPrbotCy3CzGwM/er+orKdiOx9pYGeRTnXRx71T7grV6HONLEG6 ykcdcYQbpdg6lCLBoLsAfdYQAwIywYAXmGU8/Z0lmPm5I74DY+Fryh0eIAULvERK3pw4k5u6CD0y oA1Q6Ihsmd+Q/VnqS0echJh1NuOLWML3EZ8J1P5JvoVVg4WhWoyrHlumTxrappTaCdklvb3cUm2L rtg2lyVQwTPKClMotiLr33eK6y9KcBP2qeQvYm9vT7S2oSYCXMEDnRjH0uvTyqv3qLbuV6LVF48f Y9XlYvnHXWdsXmsPM9fu8Moh0tkMZjF5cRH94/A8xwnkgw2tJ9EFnvaIgni5w0mqZafMMgBzHbOb GM8m0NUAwEXja7IVKZsAX4iH25x4RgRpGjOh0+OXyZBPTmp4+JRybtN8Bzml/AXrEONf8zTA3AAq rXKmxAFBGIYDvlZRUOEF5Qi/0rOaM4L0FUADPFZakjolIQACwNBujRxAxUSV/ELJ5OYBzsfzoUYy tVliqVaQ5JpqdHWB4+fX6E7LDTW6U+cWNboNt5lG33i4vpBKt3eNoqRzAosjTDyGa6VH7tsJXmQC LIYZzkB1F97GYd45gn/2h8MU79Xw7EcxeTiGxIsoG2B/4jCZZUUh6QpHzgL432/GUXxpWwQfVJzO /eJLaOwDyIEwo50s+fIv2sP/g3UX6AfMkDUYKUVE0IbheTAb57bFgD14HAzSJL6e7KksLY+76gmJ ApWQ1u4RNmohx20ZM5wAuq/NvYVkrcjD5K52+Ew2lGzRtaHsZAWGNKutqKK0kIFMpqrrJJvjPjJB DIX5kCgmMgNCuuhgAOYHErQ+qWpu17GBkFjG83qYgcIPsUmqLQuqjG21p9rjpVaRx3axppEG8zFx gsGnt4sKBrk4LqheA2SUyt0eNvR10LeLEQN2cazoug0w4y17e9iRUv12caOALo4ZWbMBXjwlbw8r z9F8wX9uFy8G7OKYwWoN0FIsdns4eTZOgluWKgxycVxQvQbIKJW7PWw8TaCXt6xvJMzF8cEVGyCk XPDGGNElSsPgdcBfRkE2OoCVE9o6FVhydkbO9h6fJxRzPE7S3aU0HC7t7Z+eHr48PXr18nEX3+09 7p7t7fBmwDAJM3n2/RKTsV2LK7Ao7xngP8a0lWR3j8xRecu7Mv3kLXEZb4jQTYKA6nCaWau9RF2f kozHEd8FH2XSB+bYrmKWqb2mNLgSCgWYZ66wYA7p7qoGuJO3POO6TGWXgg5paLCYzsL0XWhnppzy mRC0SdHPVGO4Utos40HhDRaZZZMvCRqM6MpqSkg8w/u0ed1LN7EhJsUpXcUmb6qm4EIFrTWLx9Bh dAx+nYYSNQH7CCeEG3EuL8jj0PhS95c79nTC5PG12Gc00imlCENSNNNyTxf3ExnfJxG+ZzcQRbVd JRSyT3v/MosnpmhNslBPH3sguAR+c9wAKnzuKwxjfhSH/Jcwy1+TZ/z3hlLCjEh95hONHEfHJqOF hQrObgORUix2i2YsYVYKD+IC4+ji9Zq1VCNk3Zq1yy3fwNwtrTCr7N1Swds1eFXAh8GeRUnW9ulZ mF+FoUzWqdBIxFu/bnZnImCHEZfTvll9maJ2opaSIYPEuT6zegYy5zbtc40FA5SWuv5SVWV4WPVv OZTjRgsB1XzDtQAUv3WyKThxbs2qKcK9yXrA6z2pXBN4S98YR+Tmp8OrTK20h3lTxBSA3cyvQD1o 6Fwolb0VWim4A2+NVopwb4AfXbkJgryFbwVDltPz1rBjw7wJZrBiI6wUC87DSLEv7rFF9hq6ni47 Zt88bQvbBV2RiN6XRZV2GjKq+/eQMk3jQaVdsfZwa3urt9HbXl1d3drorfU31p97o2a8UPk45ZOj 0xMrr9T2L14AsmIhesP9Vcomfl+8OHnCG06YZ6P4svSg977f40/1q8o3VS8qnvsfe5/6HhafdesQ 44kBRax36gJB8YOFfrZK4hYnblPiOUPaeyzeojQv3rN+q70izNXuajP4C+yaFdukzfZ3QJy7otV6 SXcqY4DNcgdfyMwQj7zdbGGtrxhntDOs2vjF3Z2d0/faYFeruSWX4ZfK4D9KnBR8xZ9LnqxubK/3 V+G/zc3tjdXV3trax8qT/uYiAuVPTmnMKZysxccq9OaL4pUCNd82s3i2Dz4nw/S219fXNjc21h8+ 3F5b/ZNhvlCGoWN/il80yTDL4LsvimM8JH3bXFNaGnw+ntna3lhf3Xi41V9b29jceLj9sTyztvon z3wSnkE0+VSMSdP1ZbBLiZZvm1ncLcfPxymbW6vwv6313tbm+nZvYxFzDKG6rEJPNtd/d14Z/99k Fnrr4xZ88VHsMr5tfnHJ+baZpbAlvSC3fASzrK9vPuyvb/d7m9tboGH+VCtfKKcYtXKOpHKagPzG 0Hq6b+FTsYg77XStkNv4fCQRYXcK1Vxep5cmpfDtsm2BsW6bb4uRE5/Ni9nb7D3sgXbrrffXe6v9 zY0/1dyXy7yWmhsSwZwmqE4+kn8XZF/qRKn5+ZhiEu+UarpMzK8/FRcX2ey22diNVmjKxDdk3vXe Rg8s0/7aZn+rt7G9vra1CPP+qXY/J+cqVoSiVtjM51ynuaR5607zQgzH59uF29xaW9vcWn/4sL+2 tra++tEs8L/kBGzJPAFyraTSr9z/vLxh8pDh8k32CCsWUFA2ZJ1Ti8I+tmgNoJTJdP4pxpraCnN2 AjAeleRlAPepXPkFHvsUvnwn/OdPJv5jMLGTgul3ZeW5CaI8bP17M7KV5ekzMXKJ0W5/f8ETqPaZ uNlYpb3NhxurG9v9rc8aGPNHZ2Zr7piXL/TvlmLsT8/WogwGP/KqjYD7Q97W2v5+IlYXN+R12W+T R+ATM7qXD2+b2T2xmJ9zk6T/cLO3urrR29rY2tzu/cnqC7A6c5OtsT+3vlZX58h7oawefWGcSz38 bHzrYalb51pPgPBnjALooa93bXtjbXtzY2N1E9n2o8nZDEnGDUb5AaZVaTV1492Cf6XUCSAb3Cto OS6WW/cr+mbz9inGDZ5elFpuTC4b65sg3bfXt9c2+w/7m1urD2+JXHA8Mm6OUrR9VjIxjYPB8snJ w506P2k0ymFjJdz43ElsSk03yWJTqnRbaWyKgBtefLC1ufGJEtnw5QiY3zYYgOAb4y2RwER1paDv da85rY3/AgZvKpz6Vs3bisoTSlmbFHPwyLfxYJameGNHAvMeDehAsk7M7atylIeV4CpG/jI5mQ1G hyzWaoEXU/6oU8zB3Ew6mC44HBZPVvOt6gQKT1JB/1TmPJniTx2UdquZGy3GY3Uze0KdDsYEDAAJ PG/MuYfafA0G3veVZ24WLNzXm4WZTmZXTJF1H+Vbp3Z0ER0/lj/5hNmve6+RkmC6xmJ/fJGkUT6a CMZYgueNUrxjTRzFeEidh4RbE0MoPB0F8WwC9D7AvMPyLDddKTOMskHyLkzp6grguM1thnh2LZ52 xHFHvEjSNMqSmA+Gzp0Q6HcajgPMv5Yn4ml0EeXQXQJ5EgbpYATFQkANneIGbMc8Hnm0HtOlU4Qp BW1iYryBxCJexwZfgnQoUyhxL2c5QcIb8ygr2zi4yjgvdBKHK3g2/SwFoCOU7XyIH9TNkBJLY3m6 y1ySDAHkQ/0xn+Tm2ZPX3+IZdzwBTskqsXysUr2pDG/tYgsEETMHjiWLZYTOEPHd5lP4dcOGRtFI xoTbmEdTdRFIR6rmtiawYZBjKoJ0NsBbbXESslnEB2qRdN4FIOngx4pcmdBJM/EqZoB0W0s4SADW xZi60kK4lEaPTuUDelMa8jA8m11cIC5xhtNlJCI+5cYTEOQMcR5hC8y0PcYjxXipFzaG2MXceMB5 8AzTFmB2xjy0U1rx6XxM/4AX2NJVYHtPkTmH4rAjfgBxP9rR+aqcdvDR5TWjK8OEC+GvswhW8jxB gOjz2VhkgxSkUQwUEwLOQiUFRpiQPQxmlCMB5yQN34XBOBx2HnetjpS76RMxc3IsQAUWaFD0ODkL 01wyzvAivIIhYGJKxfiZpDZKakHcFKRg9KSY9IEMJzogiCMmfiH2vWsnHMPro9naasskAMuYiTvE fFCFU90t9T4jFv5AcKyeIFqoCxLfE0utACcElyEMHYieUzLyyMyoCFrLlyIDnnAqCJVswcoUDnYv CF4QeBlmmNCDJWCl/BzEwDonhjqva+Q11rwIYxDt4/G1OV5JwDjBg84uiWRhUp+yrMFEEZNprq6F bGuh/29ZSvM2g5RXJMUUK2FBW2YhqzCfhhPAmkY+//wgVVAiYRGdT66RVyLMkAecDKYqjehIjAIS nfIW5zjEguH4XGE7M5nltCQ4g0UWXgA2w2kAUiSeoXmhfJfccTC3PYx5RNRDU9cGWTEOmeZTSTaE 1wBv+RsmnLUShGcgpopjc1LomO6foHH21GjvJWaeVLVwGmQWDcXEIjhD6QMlxxdcFn0UA7KAMplJ 9b7qOebbBFORRYGuuFpRU0l34DEY/AAzwWs2kpOHiWiLlTD/ClL7BMUISMViOl+ZrNMr2vYwoSmL 0gqOQFGZXYNOA6EBSy2SQ3t4G99kNs4jKC2nMiU1xLdzMSxS0ANt/I2lRAwwFXwgs5nK7snqBIq5 WSY45VSmUtMgt7RRCQAO8VpTxmHodA/5MExjYqzWPrOnru5ICrZ5ro2JJfOlDmEYQDlEUKh6Y7oo D5HL3QumUySIRwIMnBBaAWaLL1RuHbLEQEJkySAiq4RFpUyaqtKx8kUtUqzhyK8p53wQyelE7VTV 7c6yNljBNkBrZnzNkAas+0HjUAYfgxVK6hqzmEp4wUt9iQOJVBHGg2CazVDNmlSRiPsOznQM1hCm 25F1KYVw1rbmBzQ2aEWYCc4ng7e4TcOhzDdDIlXzOyXbMKuJjj132nLmS3FNfiEpJDD7LasobUjl EV7VADIHr6xEswWwQGYeYG0WO4ShSDPRHd+xOSKVShU/aHlPxK6o6Sjli7cWkq1Op8NBZ1Yi4SK7 /bpXVEZtY1oT+38Pq5Q2jhsMz8NhxLLtdZCCNuivrLcZ3v5wiCbyyj/CbIyOi9Veb60jb/goN1m0 q7XJAqvpqbbwtXql7MUhCsd3IWXwVMa9NC+HbLoHlpHfEd+DyYaOIMnO+wcv2mI67YiN/vrKxhr0 Gy39Qhc/ImVoTXbQ+qzr7A6zpo3ERQwcb62rLW+N5SeDF66DrC0OwPAJ3Ui8G3hTt7fWt3trD/ur 6z2z31n286GmThNACC4EOu5PEmWY4XsAsxxm04QTOVvJuKQOYL6PeM3Z8yZ25y4fA2hMLs1t8CaL ekbeNn8HjZa6lGmltSYoNEN3lgEvySszyuBsX4HMsc2ZKJRvICtAhOmLsyik3YYcReaBdUW0v7uW R9RoLGUFevFi1bjUX73wD0BokATPjL2Gws8iPhZ2pCFKQXAaTlBKKGVl3+Ui+kuB9v0ZkooOY+YM W5SV74m0BeHhi9enP715sf+6bTXV8TY1N0eHjSSisWoM0bIxAA2mFLDCjAZmrgB13DBoc/hx7KJW w7k9FKu86NBlzqUMf9m+N4NIKYEdJo7DNHVDzTNQoiKdij1VpKmCaXnGJiiubnV+5hOxMxv6Eixl 7vDVw1aX5iK3iMZLa+piB66Hcapx5uXhxjRvVfmiqNu5eKyE88YEfduke8tzJ+m97RfE5YtnrWZ3 XYmtik1n+f54jPxizWd5Lu0bWBy1wfp0lrHRrdVITWalAohSVT8WrBoXczMmlUY6d0yO5l7hZYye aVuPzxnY4nDKd4rzlp5nWPiifkDosmDrRjcqr+Wrb5aTqMK6tIhPsHk68rlFNJbloh4pg0PfKObt 4XfheIpLdVrgIPdEMaxl5MVFIcNFltbmS7G70r6k/uq6JyWEISDnbrMbdm8Y+rpnzMriABr1WwP1 93tlZeF+76sFd1a4DJwJ0IhY/UL6gwxdGHI+OjdLW1xWop9rrFfouJJUxCVvH48y3kCmHZzx0EDi 1mmPgkXknEzDaJOCPLIWY2UXreOedd01Gg5wn17lsU1LrjK0pA1o3I0JszQ6Y8nNq3VrNaqhyWUp F3BWo846lRZ8mxv9lc3NXv3tMfgfTQm7lH0zJi/jtF0pJZXCJfnfYuGKKbdgSJGiJrjCc+PUbouS JzeybvTUH97Fwe2uOHFIhbbh9gsgZEcGuP+Ga7gyvAiWc4PA+OnKtGl12wVeBjYHMa5YlOERxnfP aJDfCWWeKzPwo/YEnqtbH2V4R+GsobXUPqcjTnjXMHYfr+22qoOs9d7/SPI5yg7RMvXc6s3Yc6RN dXwefuRkEFgcNQ2XxzkvsoOWy7Qa30UNfcx9wwuh2ow1PZy2WOmPbXgSn+d4Y/UPiANe5HMsXQlF HXkbtCpeHna3qyQOySNLCKIVSj/dCiUpW8AHdScL5RHpZvhwwmkKylLF4eBM84ALd0gXwKihFqlJ o+BRoYK+bPQFJu+cBO9bFvZdaIX7R1tOl80AzNWd6pEnRLQYX4QXqqtQoyIN+EKG3KGrOVcgvORt UDjnLul62BgMqbuqEFREldVp/6XWiuKhN8A9tSxARGQAtqmy767Qev6lZiWRAiYWjL51kl/eFyco EvFKIbX1wu4vUEZFxxq79J3KHteajW872SQiXs7b7y7VHHwsjiQkPTRYtexSwQuclP5slheQFEap 2d1EpUjbErBYyVSue+n3B4XoVMWyKj/+iC4GN7qseHj63KlpnZq1b76j9ba+CEGm3HcqqnTkudoR hq5dyc0QtUdMq+BR6KJI7hkuxeESYWcpebZ0r44YsAfAgcQDxelWuoBXsLcnoIvzmqDZT5ErYcxb jLgDBtbFVQoitVPR/XyUJlcyxzXw8atZ/ur8CRJDpoOwWkvPgmjMITpAfjtiSTwgI/ABfFvZo5+s o+BBm34WhSMPoGz4I48GgxxJzRuV5ZrT1WbpSOir1uR2JevzqxAviJimCe4dObnWvzBztu4CRh7E RSJFF16WwdvqVzTIIpCpwgQYmEOKYgDWIArF+JSSBR04QArrPUIiqQL6hsqX/Oi2NWltkthK2i4n lYVL+lY9o0W4wQqjFFmtNepoxOztWvG+YHDa7x6DCutUqztqR+2M0K6IEaqL6PZ7lfZBXtM6MZ7S tLlHJeYdvoF0V4yKqkGEYCbUAixWcQEWm6s1MZRnyJVF7oxUo2BUg4KRY2iMmloZjrnnx8VID1WC pp8Lw/YRoETHyEi1skizvXJaGvhEyyVfijqhzXbtzDCikWIEfStWvYLUQQeFdarx70jfBq5aZd+5 S/KWaAMWLz0iva/inqLxtVm4WgDtFWxV+3K38pGIcr21OU1AAONeawWs8D3GPUZ4cy6A0nfbIvKc nrJdp1pGi0UDlG6vCYZxhuyXRRcYX5g8izKaABSeYAOg9TPv4ihs6CL8BO4cGeD0JfhyFJp5b8DS WAXFp+6WKntgvHTOdG1msuyHKXs2FqdzTd613o8L55yII4gKTguvMX/PtebFV1/J8C1MJpSxzKMi l76lvCU1qBBhqrFIv/nKqODNUBrOlnC24UouGxiZ5Z5QZmt5TLbNWhzPh5KwtDo/9/aLuTJTXuQ1 CfLByBKaJCsNv91EZhIcBo/SUgP7GLGpQpwZUiOxyT3wS84KcDeTnK8Zk59QeHLsF2AFo/YpTE3d XueVhk5gPpmGZqgYPyYn0dCCimanpSuNWF+mJhf/UmZpODyJsGRUOKW76EbSrh4mnp1YSRH/24pC ct0fX1eUATXRHk+umVmUFmF0+DY47cJcqs2K5bYF4KexGx0ZqAF+nOl4yzJwAetRUW1RDP7Jyx/H ywwHbSD+h8+eqaNvgl6HGO3XijphhzbGzgqH2pbLjCgPmSnFI486WdoAFP7gEskYIfEo9IWAHnBq oNKPpJUEqwZz4lFFP2tviL29YgG8QN8kRkak0jUKnfxPmCZEtWyP8JESDBW6CPCoicTleZKWweHN oLLWlycmby4U2zZmkTpK5raclgUt7igrSFVlcbe5lS/a7pb6Yo7pXRqiMsCrhnj7ZrgbPpIlLGSv kxnYTO/kmcaEDjZcXIxNWIaxlXVAM5+Qyo9BPmp54L2tzrMSJW/nOEkuJU2W2IN5mTDtU3PWa9zD p07Js14MR3+A9qHFrtxfxZuHCx7bKC/xge0YVRNcsbqcu6Ns7amX9pT9xEKD+e03cW/OFpNFGx9N FXN99I66rPPR38g934AuCs5zy+8N9Kcee6UsnUwhOYxA5znCaRKVI7yUesJyLVanojDful1pEoDe yPJkivZAlmCITwZjhQGOx8kVLXPEbIon/DouSbi+7nl5LwoZhZxuyM2GTMA6b4hrP+Tyi0SEEUbC CPLTAqORG9Xtw81cv8ZYrnb8WvXnOnxdeBXe3gqAC0lEQAvYIkPaIn5ZPM8tTalLPDiR5WCj2VeP z7PHik9/nYWz0sYOqoESFaP4w+ALLf6C+FpuAwIhkSyskmEq2qFGmz8LMhJxf8P+cK/qVbwFy5F3 CqAUeVIlktRrK7gEzJocOcJ79NoIu8W02G3MGR2N0de1B0N5hmocvqezV0k6hPbkwTTubKdGDDaj gLLYmkMZ5XjeY2m7G5uerGvKa8EnLFEtjmScG1CCvQgra0s8qoglXhBi7zUnqpLM1MSAYpJ/KDZ1 ObuwObgwNd5IYnJYTcEYG80zNnnew5j+tkrZzCx6LoRKWbRcKFgMCGoSBXDqk+VXwfjSK82JAPis swOFMmEEsNzCw4RocrSSGBf152pVpWXLstTLtDpD6nDgyBVHMCaKozURjiw5P2dWYmgY9ZskVQEK rp5R8+FSTZ22wfoOMY4KIqkKlCuX6lYYBfBSAy0Gv2ad4VV6nmHdqN0FxnUTtC24fPJQ/gdTwpU0 rjSI5LHCT7AeLSxH0fy2d4CKS9JalN5gScnyaJ6l78L1AvKITxkA4bxpFVeq93xuzVoaWqBTsiiB a+olBfWiTpFylgiZZOMwztNrMoSyCs1e8B3ZKh79K2wy4K7FrzMgsjEdi0js3CbUxJFLazaRLX8w mlO3aGUOsdbDWtWa2h1xFNPuCh/8ooUJjk6DlJmi6EwMCWa5BFM6HZRLGCpThBfCoI3PoSuAIq87 DxpMSDFcgRljbYwgTlVeqtRUrHDAFY4O2p436qYT7KS/FP2uelLTojtcW22uzWWyY9Q4FyyPp+lZ AIuvXB10LllODnW5lGUTFs+PtWlkG3Ku40xDrKCh+k0Ft8aNdhY+Ac98wfP4x/ZRZ38EJ3UNj2Sf lknqlbpfy0VF5ilaJ6joZOEKU0COu3yu+PnRyWlHN9A0iAz1rjtIav6jGJoQ/ok0H9g6f+q9/yW9 VySmGzJymW7qdZ1d/tY03U0Y4wuerj/V2+dVb5+aFf7vaDR7iB+vzyRTfSKNRodt/tRp/0s6rUxQ N2RlH+3U6zW3xq1ptpuxyBc8bX/qts+r2z4HS/zf0W/uIBfTcKWtWifNKodjFXOTVJ4YLDIMhkic OkF9gLeMbuOzo+RNZB8GVVux0ZX7yR/RSZdW1M6gdXbniziX4duPmxcZNues/k2PZKhLSuzYsGXx V++xDLHjbpN8auorb4o3sLLc0wa3b2PN0zinRuP8MZiiaaR5ofyNzInbpohbnQN/wLFtCVgqpcYU kDcrMCj9WUz/l7WggVSKL/7CiOdLjMj9PSXupw3GLYysHHB5WyKbwsCt3OZsucnFYiF9QTWH2jkL bsab82n8Rj2tp3POklGZxaogIqm0E4xGQWdOkg3vSe7awFe3L8sm2Xmgr57RgKJYhoileKFAxuHR gGBzUUAxigYvBLhmoqucvFIgWVXImLvikFNWxHQhfKuAPBXAVQjIqpwCCrdCkUIeA2CoZvHKnoin AszmIVxM1fcqpJrVKFOeNK9GnVLyFerIPPGkKmoxWiuqzI9uV110RIFZ2ewMvT4mflAOpjAdKhbH jrrhfi8umJy+QMNEm+f6YKSO9FIHmMgPRMFjsrPzGE8HJpV729jxATDVGk68i2AdJtWuzhJqsjtW ZIU8DKDvITOx8mRoR5gFnTgYb5ajvTlezWsgbjmMkFO5X9WdTpjEHS+UCJ2bCsjtpqGASkEoqq+h BZav2HgXDcIVlBSBOrOrm9VAstkU70XL9JjovpdgrK6VSmUuVYZvZ7/SILTJwRlW1RDe4eUqI7aj 1Eq3w+BIvLct75FzG4RbCN/xg31pi6lnOFHmmQaGI8cClK6VFYm5Pq0jjnJz0lAOXnczGA4L+RLl njS8UC3ZwG7oBwM002ViliOsqR9Mu39uSMh+xYiJ37BT1xga6dOBepOZCjRJW8JeObtrpK+r+Atx hRVsL9mCfFFiB4BXIIsiQ2CLTRlAAypzQoEBVCKBRTkAcHsz0ndOJX0s6dsHAG+f9C/1fRAu3dfS +iKUVE3gUKuOvH8Ii8R9Q10iHaFzNUlBIi+mCAxZ+yj/y1AEN+WDW9UExApfGheUN0JuS/7XE5+f OQ4sUFS9kkf+Ll/P45GDZBq5N5oW07DbSza6WyCxlno2Au2bBmjHUmW0xTu79BtzcxkBwAvoNBDa 4cILvmzhoe4i07rC7k31WkmenJaN0lI2g8ltdF8H5TyX1wz47utA+xxrz1vdVK1rcJwtTW4RJi5D cEav2zsVeCR1FGQvw/co8kotka5nkwDAtOgn3rvZibmCWxpziVLZDgcntJbbQv+WC1v/aTlFOhrP L1+dHu6I/XP00x59/S6kSwTzUCL3SC4hQEKqC774xTQAntwpT9soz6c73W4wGHfGw0FnNg3juBMO Z93X3dcPt/G/lX5vbbszHZ6XK+sv3yVXLP5oIZOkl5mnqVN9Z6tJbSP29b1M8tgMXXoh9+Upkan8 jsV+7v9iKG8/dl+KaRLh/VPk3EY3CKaOoMT7Od2tKDcmoSVa8huxTi4Hvs0LRSdd4GID7oifkpnA e/SgxFXEaUxBxk2TDOhFw6HmWvQqDqVK0HfUjZNkispr2ez2UXmVfNMcpNXwaEwaDA1O5s+hCX0p b7cK8PrN/F4Z3YAsSSyn4WAU8wV4dAhNp8ugs0bYW7w8F/vCQJ/M8GoJvniPYUnmkhMsC8qLKsM8 BzmDmV6B8MJzTvxP26ec02jgZOugz1mYX4UhyxVNC3w/Y4hH/o6+nuhDcFBmYijCvlOBPs5MZaI1 TAjjE94En4jZlDHOHcYbSePkKiYh6wJyrzFe9kg4+P+unkjRUvKMvEpmrY7Tam2Lm2//lBvseizk 6mkNghg7TGEmSH46hSmU/jqnmft1Fn5tgdynA4Ya1zDk+Oucrsu1Cv1Ec/AvztT03mox8/UNemf9 6P4m/m039xt8+ckuDA+64r6Dv3//y0Vn4bX5wVePuPAa90T8WxTbsRsqtfIv/2CdNgqNcCs/FVup HI/8WNav5BJ7qtVVdPI6Srr22MOyorcjzGe/1Aj1FpFt3vR1jSfl4l3x/5yhaQC/uUBWEchTIV/A qzf0eeZW7QJeVIlq8MIu42lrbadQ6nvrx8tKaNSW+XG/qmCX/vxb/jCl1g1m//3mmP/8i/79uxfN 5gH/KTRoEWVbPGmLp23xrA1DQaY7lleE+5nuuC3+1RZ/p5IvG7InUzMS1RPf6xNzjS/JlCfKZqOb e/Wdwu7GMb7HfBK8seyVWEfxu2SMEumlOpK94wz3mAbxva/q/g5uJ8vr0a1OP9lhvaa1rTXIHfHk 68yrCsX3O+K46t1T8ZV4xnWz2YDferFo9S67xGQrKdkFvKmIOSAQwSBrM1q57Pgq9pfFUQb45UWJ fb53MIrGdP81HgmWQ9//q2hRKXppoXiVwbgjAnQ2A/t9Fdi1ZfEPsheUaVFuQdpIgP4nCgoVtp5b ANcr+qmXZXZXpZOa2gXtmOvVm/PaS2gvyXzUplWsdDVPi38qvodeUde9JtIxKNRBMpGrcWWrcYU0 pFz1fKnasQVSQwKzyYEG4/nb2jLFmRIzybXQQOv+NITe5MbMMjBj5Z1A3wUmFEc6NpYCe8GVUdEW tL3+vZqO81lKNrFtP+HgOl4hAYDNhKrhPyUetRpUL55VwdD7PqrkE19uF1Npvs5yVZbRWMelwj6N UtYhBXX1b4+yKuiqKk31W1UTBS01T0dBF5ooKAmkpJ3Wd9wyc1WTeXjfK+DMwoxJE69MijliOaOL ITqdjrFUDp7v//j06McTCbii0eKEq1pFI0EAImgQZTgS3YWZtN4AR1bW6rojW3Oq0l7u45WVFe/k dOlPsfHyRxb5TRfZKEyM+OHo5bdukdLnvmyzZrlssYzuuK/nkozr+61K/FbGqvyAmKvtc1eZ9f5x qzFXQbgvFA92ve/Vw27xEf/ru5fQcog5yfIKjlOZJwPz3ja4SM2+lNPOu8irLmdv7tavPysjhjN2 3Oz6szI0yt250PVnZRhucze5/oxx2SRLG5dskiz7syTFNlRnEZnaOYuHjmv6ZW2sSCGR2lCMo0uf uWvnRlMkWJloj4AFGS7zyb1XnAQ7dZqF2QbzUEgc4U5DXWBwt4vXP17yzQoUzHUVCvZEoBOH0hea ZYnCWwkG2BgBWkVRToRNDqmz0ByBsQNzrJ59fEiyGr+6lMQE1ZkslqVUgXbljrTGd4u5/5xC8uqN uiLqDo2KMtSdYYg3DNXdXuWPm3G4bX5axPLdYpV5UmpZtHBv6aNKBv70KROlT5d3pPCs2CkFoqaZ ucZ8OkIrnhfIfBxEUm5I9zKxNC2EjUkW1zCiySQcomCVub5ksyREZuheVnd2RXnN0YKRTtoYL5q0 UR1py8NJsVjxriPUE+XYtamzxms9Ptt7PNtDzyTT+ePubO9x92zv3r171q3tn1aI3SAFpPdeowXj 2UqSZFQtRspPnDRh6uO5DI4XVTLRHYhPxJVc/12pKOd8FHqBVYlGB6HFYekoQe9A8EOoGyTT6xsL RvwgACMc8VddQSkg5xVTQrKmXJ2g1GVU3JwXyoePmN+jl6eHxy/3n4uXr54e7gAng2yccto/Q3n3 DOUJDA/APeV34fjaC9H78PCfhWZ2Pc3sVjTjB0mf1og8TLg1YomB5YbkVX4ytXpjdc2D9PIT5mBF QCNJS42qUpQ9FZeEBfUryb3bPbnOQF52klneAfET5+O4RbxO9+0dnYjnh89OxcF3R8+filfP6Lo9 Bl5FXsxmOPOVjfr7rbvkIy71uc9X7xW3kOpqeOZqficIiQ3wpzvtw+MS4e7w6beHGnWE1devgFNO xOkreubN3ljuS2FK67Fb263pnOlVTRUWJVWfQtfgNwmqOTWrY5wXH8Px0bff3dYg9G1uzUZR/brZ AP10wwP63yMc/PKHp5smg6ghm5tIq6m+jHFe61Nz1eNcAq8R0X6qPXz9fP/g0NIRhGiLUP5xdPod v67DbYEqKkrOJ4SPVjHOpuQnUTGjj1YxCyBdzngT0nanYD6pfJSwW2QE2CMeQA1mfSOYwxcVbOd5 XD/U+faUT+j8aVCVO93QoNKoLejGJlT+h9OPfxpWjQfY2LD6nyKgPw2s/4MGlo3lhSwsjdI/TSzZ 6Y9G++I2VnNy+QRGVsUYjJW14BBuz8pq5IbsihfBNV8gez4b0y5blmAwXxRf3Purr8KoblmBrzVP NHe4eS498gzB/QVdRzmJewv2RoALsUlGezx7UaCIkfE8F0d582uUrG6pjYn5tym1yz6KuWfbDfS5 dyv5wFvo4lwr4zr8EIZxMuhOmkkCyByHwaXZZzIgGxz1y0YBxurx9kFip6WIYgytH4Q75nARnbjj c1gaFEbrZ+H4nUydiNQxGCdO1kX9xTr4WNVsfaACQXYPcalDEXjwiF6Xd8c99KZKtqzqy9lsGqYd 2YZNxGJACd9aB/jqZZKf8OG6cHhIO424bRmWqC8fpTBA3I85kquUwzRtkkyNOtCZJMMD4DKc8d6j 4sss+k/ofSFPYSE6sR3zWu2gYKnmB0EzQE58gSfTOFrH2qItH/v0TPPJ/Pr++ZYV84S/uFPOz57M zs/DVJzxH975st84iOZSHbwROB62ltSsYw9+XlpWzzPa9tY/l37Z/e+/4yX/pYMFiAL3Bg8wRWGS 7hqIfGxMPrdBF+BKIVd1Pk7h4bjFzcpNPZ2spUBTlb38UGhWTpQsZbD9cdv3GkwHD3sVc7tUb6PL qeTOql/q3JQ9tcWKIx1+PHfvXW9vjQrR0cVI2cL2Np1xNNPgIUG5hV17ueHNsr5UTe4C++MlajUk Oqokyvk9KNNlOfGKDdFXvpT7ZPH76zg12eNoL3rcjfbyEUVLJDrMSVekdKop6qhFblqtJiaOw5Ex 9fRVNRpTkEAl8cmIDvlDDqAkP0s5owojxIj2MK8gWJWnSFtON7uOsxBPhnc76Y7v7RoYCyQsUl9L YuhSS8qOa+/dnDLwpIw7PYhUAEo41fVgxUEvcNLcNx7yKM2THzgSgRdmYaII9zKi64bZPmU/evPw bDUldm10WwFlXmWHHZD1HoterakD0/Rqlr86f4JLhEwbSK2llyopLwPaoXUbf2+aX5ZL31A8+DMX mizF+JLWNT/ICWyYrTl5Fw11rsdiSQXQTYFYLFXK3KhTenquPk9n4eJjmSsk/JkR5U8FapFUiarO x+TbUlFd8wi/CSwdQjSZdmSkmM5daPq6Z4zqG9AXTG2fFknwZZXPCGLsYK2yqaKY4sTPmUE7+M2W 9IUZrBIrtzVbCM7KEmml5dUt3MIkNsoR+ZozmMp9okJ+QViup8Bl8jx9MVQ8dg50BpmbgJtjUZ2r cjnLNh8fddO/V6+CKybUzfWtOuwugJreUyjXMwusM2Rz5WSQTiLvwvwsckOhvXJovDAo2fcmy0kD S1/F5tZeGFxevTr3CDeapMoskJ75qruFd/G0kDbqK5lngeXCnLt6F2nVIMeXk7FEVloYmFqe5IjN 0spXTN5gHGSch8MsXjNODNMWJ2EaBePoP8HZmDx+pmeqeoYr3YFMikwTnVGdv0N/QXv/ePQUeHFt s7/dX+/3Nx/2Vh+ursHX3nOvZQX0m3OGKyO1H9W8Lp6cMd9g5LbDlllNeg1VrhY6pwEgYC07nJGH JRDAAibS3kqcxUBUzkErJJxFHl6HLfJo4sQy21sepuswmXEWYT+sEFE7GMIdhDkjXQGPoBTc9i4I +xB2DYzi7oULxFmkyTPGmJgHD1VlJpkLHzuijFB4MCyraNARCRWkYCLpfTpchnBXr9Xwg92i7czd AiXplzILq6YkTxErBtjTYy+bu35alS2pQly5PWsGT2ZbqoDoOVBWBStTsCpz8+JHvkT3q8FaE3R6 Opc3HCyuQkdBNjpAAqjBXccUaghZWYnSFpODS/ypzFuJ9v3LjEG1Wytz8o67/cGPfY6NNOZy4seb WvLKzOLoe7j03PPQEAe1LmX83MCtXB5cwdFGvFxyqhUKwSAslzEOSb9qi3mVie6s6kzOCwBQHG7B 0NKlDkyZcqSyqcsoXWiba1gtW4EWdW1X78jNa2AJu7ZUD3zeOElB1Y1SF5p3cqfQW6xj9/X41avT +r7WI2N+E3rXfG4jN5yA4pBuAf2s3OfhX26KLzYBVKk8Ax+L9CLY2niLm2K61HdG9SLYLUBcrtgN qNwvshrwplB+FYd4sYi9Z8uLadtewyCb8VVwnbl2Z2mjUFpL8nISsumPYapJu2CITjyU9pl3obWY Nb+6sd1f661ubvU313pgzD9c81vzZrA84GfjgBLR6BP+QJkY7SGGQR6Q/97KsRk6VfVZQZPeJrPP IlZa3UXPHi0d0YxJKxYOUj8q5JUVI+2Lt/igI//rOUZIxpAMVMHvc7Wy7KjyOM7ySpu3bKboQfmM j1oTWFKwNgJLlxn4E/8X5vUpHVc0mQd0YITJQaDnr7Scwq3wnOuqgZwDncybUdqBVOckqzHiuTqG cVEIisCPsl2bBO1UEFalnSrfL4rZA8xqnPH1Hny/gjfBRwlJViZaSoxc7leJQKFt8Razgw5muFt4 bnJjqZRYAd0oyjtI3x6IIeUkpTyppeA+gq5TApRRTe/dGJ5Kqq16WzFd+r21bAMG9ZWoJJOPXpbM 3Xv6+JWIElAfuxpZwN/8ey4dtDz+X1k+/GlW/2lW/2lWzzWrDfyygX3C9wXLa1ja5v6es2vxTQYa zbK8/2Lyp1eY1mxUq9tRtFG9f5blaTDA8IwK23q+MrZXAKSZZLk5Lrzi5VsL6Q/O9X6rrqzCfU7o 82zJnPLJss4Z33RUbhqu33lMVj4q35CUoGioQa3s/SpTf1V+MHUhj75D2OyBzkMkWiq851kBvER2 WTHR0UJ8hkHRc5jsMmzAYj+EfzwGq8KozQvJvOYWIwsAeQOiaMpdVQOyGCGpIPvfjxCtG06AHjk2 fw5FqptQaimS70MpUaTV3GcmzMUoxb2EvJJWKgewMBu4l13OpfvPRh/7sQjk3BkUUopIXMLz7jfu ThbSrVXQhgbFRKKowsyN2U7Xzyq8b84+rIrQqMlraGog7sL3U/rxwhySUOcl6lxcRJdSDpQwT1Fc z5L0IAFQmCWadsPnrNkoQk31vsZ0tiIkgYMugvFJDgg10ZGLW+tGKsn2+c7zZp04SGJZ64U1VjtY EwBzhKYst1AHK+cTP83mrsIHpYiAJUzFjPnsplKr90yzH4ms+ptMrT9l9qSTQcQm6hKArHvIxvt8 m1yzWFFKz+M923HuCU2q4D+u5Zpm8wKbGJEgvlSMWqOQoYIQ1rc5VcjKexytpB2Sc2SvFOWxF+SN hIDnfBnB0lzAHRyGHE7lW50qNcJVigSlzp/tp2lwXRliLcI09ZJyw0HRUDTVv0xOZoPRIcvz2yH2 Iq13+TIutKLnmcclWnc5oJbQbbOxCcHydkddwONiNKUuQOZYBz5kyCWXO95ImIUxyCbdfIPuY7Do mlRfGh4rEkpXYnIf1sWZjEdj2YQoNReYxeHKVXCNh7QpZu5eVSyhs33ImHZRU4tTNGWiwjlO+93b incI/udfGkhrNxzYH+ZpJQ39ud/r/dJ0I8iFTUOJozwKxgfBNBhEeTmWvNRcoULjphnd0pojyxib B7CYt7jUrMRWjucITNuy9C+1kh3B6vMyJRMcPzJxQYCSGQ8zM723RdTGBtui1/accfE0VJhp/ODs OydeiniEBm6AMRXVq8OwvPbSW7QkWW+N/Qe88COx37ILPugv31+dYy5S+Z/fPnjwSzmBdoNxUNe1 Oi12rHsfBxDhWY63c0y7eoVaVnbFXT+vgOLBRTC4xUY1d1H4diVaDGLjvVrC1W1thvn5jUdWZLcG 7AN/O34Wkr2nScw6QfY8yvIWFF+e50L/cJfmfAdPzXTH0SS8SJPZtHsRz/JwPA66szwad9USHC+v fhu8C+7ufvzn7vHBCczNOFywabDazsXKy8UqraysiO4wfNfFRdidvvgeKKH/cKsner0d+r9Y6cHn 7oMHDxYCXAPqm2/gS7snHvTbq1tb4ptv7j4A0X4ZXGB+6klHt9BRLXSwhUdopUcTuq8YG+hESceO w3/kvsUqHctH6nttHFX1bzP/a3XIzfdW2UC+d9ybuw/Y1LjPNweyWWD5RtSdzFBahdQDzPNgAIRv bsoOBIH47zfjKL500lxY3z/ozYCOAAsfhGIeAHmhlwQPP+mA/vsiOEtmuXgcDNIkvp7svd4/PT46 ONp/3FVPBDoK57TWIVD0D18HDX/P9l4m5u6SKCtmBJB3qWbX8QDkbgxiYNjBjPR4D8VkNs4jTLNP oEAuhwFYpQHdBmelIhnoFfj4mu/9DlAvowWHaTxkDn1VnWDxSkeG6BAQoJfZAAQGpldp48UVj6M9 vBwWD1TTdcdWB3WOJ8rxfR9WXlZ1Ya+iOCfUtXV8ghARDKEjNB8cKETdTFXXUnP18yMxCVPM8U23 jakrCvyX1QTycDrCl7OqZl8EYxz8tXZEmitsKzreWRb6YkvG/vVU3jUL+AcOGEfZiCnRYIZukY05 hC2REfLYnTiQiGVQYTwIptlsHOTWBHRwwuMEL/sbqcrhexDZWduapFEyGw9xOgjQV7/OkvzRVYpb p0P+ATa5wpJ7pXrWsWdQ8xYf0+wIw494H32Y4V3pMCnQ+QEegqaZA/HUxnA9vHkHV+7qKmZA3Sx2 6INZStKpub1+h18IxSJpuCef4F5OBvqwpr8t1JWWsG11Oh32WAOoLsIy3PdNMINhpeI4uQhT8QNg GzQm8jwO6BJ/wvBgiCGXLuwBmIcmOYnz7BlI1iQl2geLRyp+lmNWB70bVkbfWhIPXrQFZc9BeV51 ymrhmMzN7e2t7e2HW/2th5tb25sqJrO83MMYU1umEdEiHQTqWpCIOlkVZGrXBc6tbOcAppXYjRPF UawVUqmFNOuWJrZRzBSYM4gBs80wPA9AQlqz5Dsj6c7ZXy7CvAi4vNnDM2oTm2PGIT5aNqkevnh9 +tOb50cnp22rrY63Letc3sdiCJGgq+qj9lrogeAP7O7MRY55rs9fK9zTKWED1zMr1bizChuIzRFq 1TGom09gZFvX4y4LJqHK2CVpSoMy94O5cpRBoJL1E6lLmxrc7dGozopA7VhbjnwTnBpOGsqb4KZj sJxkDDWnRKlIKmVPmQV2UJ6pwUJU/qVMlZOPwmWSG03TJ5iQW2Y8exbbYj4bguyWa1JLorfK/Icf MOEwldpg7kSrdGmIHKsLSsfMMraiyinPymfOCyBKVf0YsWoU8o3ZY5dNAAo6hVKLDDCeTc7wZlsV bKBnucHImtV1x+Z3ilhjcbxyc68KxGO6snH3SsqK5qsiGbBlN3DBq+32cRngXsYYsk2k85phTqoI 74nWFru05OdekJnYsIDtgGD5Aj8P11VllKK+QQ+GMEy7cbmM8Pe9AlfK2wT98MdLWLOGxz2SNr7f 3S1cGFdPf7wygkHyqRi3fzL7zAR3yywBhPPb1tB8d5zp9YdePsFCRR7oUNeYMnDPdPBKmL+rBQas C/CkOC2J6DRIYESOXOnwXXUouHFhTvmByODVsHJcpKg50mMM+H4xmUxILhR1phk+TSXDfzQkLjUK 8K7tLIvOxpTFdSRvyR4mHvVROdpyCqRLfUmrtWDlJq3bWrlLnnxGelIR0yojj2+SVJfl9FqgiiFO IN+eXDsZjSoMYHO8vFBedqRGgOoKsuQiQrQJEQPqJrTs1WRsiAzpuTkdly7k/fRza6W1on84cXY5 vZVo0cV5eIXoWegOx7pwXn2Q9EFOklbEVTon+LFYpy7RlweclTCrwFHMR1ayK+mX0IlNqVQZ5AWq VFRxqbmU8j9hmhDumW45iy5ahDIdmib+Mrg4iVWt34tx7JRfN2Si+qxhtVzV5vJNecuj3qSG1fxQ r9BqdCxzASvlQWgbt4YTUGL7ZNxH98uvaOujEy3EemNyb4hNV7wEjpYsizGDC9KMMmca39kaQVVp vUi3818U3GoS/GCmiJSWS+yo4bRsUX0yteeKPEqZw18r5ptTY7sT3nC+m2Lu0rquu8yiXhRVcGaR UBZRcYU6C2q526WdW50tv5qy1ZMlrmr0EwIti+zFlFKuR1CG5NFKvz+hNVAHTYiusUrwUmFjrWCu hy+vv8zyz1mBNVh1qY0Pafzw9ckOuDbCK0GauwiTgw2HN9IGdecbLIzKYqWjDLUrL/TRqCgxSp2I HQyVd9929BBT6vq6CK5Q9KmE5jkSseGjZg37kTPn2ICFF3VQp2NKNhV2dieRyywnAzmBsjxIc6Ou LBmwoHrUXbt1xSiOYkorwd5CMhRxGO4KUvpMKLOBurdcRczReXm5E8YiC4jyHLoCuPCuEaBBypeG x+mH1sLUQp5LNJUCVIN0zXnqZkFuVqzZQzN/aXGZpnN8ziVZT25g1Z+AU4+fO7Gumsgd4pGNskKj Wzd4Nqwlupto2GPDu7GajSV3mVmaLobtENsFLYXbYJ4vbFr/wKtfHMgfYfH7B2GZRZa+ZR6qsXNq +Ml/t469be/e7KO1qXE83t6VPtWaef6NPtjVj7jRB6p/YTf60OaTc+MQbyMUe+e/q6dR0CLvU7K1 bKn3zxy/WNeLJqGMdfVvK6qxpo1mAY5rvRvHN5ajDE3I4L6O+pDyeWAkCAo77ndmReLdIBaowVZ8 KfDHjzA7ysd6+t8mDoKeudikbmnsvdDAipWRGYpX+hpclH/Ne2kGSM32oroNoP7uA0ca4O1rmOLe uXSBnpCWPpdPd3cL2fy5Kq80g/gaj5iU9JNY9CaF4rkBbzddbLDxghqW3vNQbfFIyVHcbqjrX/SV FnMuZVjpPypBrDrRw7S1rEfaIasv+wcocP1SGaF/FT2xU4BuCcn/D1BLBwjtA19dy1wAAOHgAQBQ SwMECgAAAAAAVH+tMgAAAAAAAAAAAAAAAAkAEABfX01BQ09TWC9VWAwAkLKEQpCyhEL1AfUBUEsD BBQACAAIAE9/rTIAAAAAAAAAAAAAAAATABAAX19NQUNPU1gvLl9jb3JlLnR4dFVYDACQsoRChrKE QvUB9QFjYBVjZ2BiwAQgMU4gNgJiBSg/CEWFABZdQAAAUEsHCPTyjVAcAAAAUgAAAFBLAwQUAAgA CABQe60yAAAAAAAAAAAAAAAACQAQAHRlc3RzLnR4dFVYDACQsoRCB6uEQvUB9QHVVt1z2jgQfy5/ xR4PjSlgwIZMSiYz6aXNTGZaJhdycw/Xe1DsBetqJEeSgVzb//0kmQ8DgeDAPZwebIN2f7u/1X7o hoU47ULAR42YjnAoeJo0hixVGMekcU1j/EIYGaK4R6ncv8mYlC4OX6W7qz4MNHgXGsFYNpQGl40C TtTGJYFKUBxTNgShX5JyBi3X90ohHQygnkJdmJ/wLId6vV6E8xuvBR8SAV6z2YFWu9s56/odqDf1 emNtVqvVQngtH76Qpxme3/VOu00vwytdXkLda9fOoKqfrSZcXpaAjhIulLHgLiy4cwtuqmjsXvHR iLPf9ac830vB+FVA/KZ11rvibIxCnZeq+ygw1Ue1H/itoGPtzhDDD0GAUnKxn15fpwAbzljs79Ts daNQEGVtlSBJH2IaQBATKddzBnCqkIVyJ/SvRKIRvtJv+K4hzUH679u1U6j6709rp217lPN1hzLh TOKff0FElYQLGIwIcx9TFE/Oo6icL0W1RzrqPa56aRw7Rnpz99NjSmLplFOG0wQDhSGwdPSAAvhA 14dM3HINmjVry42RDVWkQaoG4Gf2yp6zMIw5DcFU5W/Gn9tIaFJOBVQk+ETCp2mAiTIF9z3TMsvE zNZ0S3MJBBKFPZz0yAhDExaz7bS0B+XPOoB/UIFwx4Nv0lVTVZ67soLjFcKBxEu2Y/n7YmlOKnrR tfa+cH3FGe4A6rwAdEt0hgeUAJXWr8eUMn0sEpmiJAZBQjoFiUQEEYxQRTx0YaHzPIkJoeqai8+c hE7+/+VXozHPKm2TKOuoBKLpUAYy0h8hhJpdoGvnaamWqdyLFJ1ylgcy4mkcwoNVJBuqOiNtzlNp CN+wvt3/ONumKB0LU8l7uW7EO44Rb6cR/zhG/J1G2scx0t5ppHMcI53K85mT9VUw3YzpXnW+vjPv uEDVpshKAvaznB5oWRLHsxScUBXBoraoLVUqgOm6WSovWmlWFo7tYHeoG6sevlmt2b+cRZWWKzXr y7bA3UeozS0D1867czJHOVl1SAdSwi8ZSXj7FqQr6T+mh15cQHtr3W2nnXWSw0lnOEUpax3rzIxz BmIZm9n1Et/WK/hmTd3QxegAuhbmsAO2EP/x6S7nj8gxP0p2w6tC4G/JccLC4hHx94mIGW+JvWjA quuvIf91jf7XctEAePkA5Hw7WQXeuwa8vGHb/qRLZ+1wZQ5PIjP9qXIjInv64ulUKvlrllmmNX9E GcAgnEdkiMrosEzhfFMeBkY0NIL2erEuk4/FNU/1Mdt6XwYEzQ0TFJ/d8fSJ2cFpBoaL2e0zG9fw 48fqX6vD9WehVNgIt0lAs/8NnyZc6GTU976T46SIuUIWTZNWri2+5LZ19cCeWYTfjsti8XpYnQB5 qjvMvI7t/746OutF0VmrgPwrezbevSv9C1BLBwigiE3EJQQAAIwRAABQSwECFQMUAAgACABPf60y 7QNfXctcAADh4AEACAAMAAAAAAAAAABApIEAAAAAY29yZS50eHRVWAgAkLKEQoayhEJQSwECFQMK AAAAAABUf60yAAAAAAAAAAAAAAAACQAMAAAAAAAAAABA/UERXQAAX19NQUNPU1gvVVgIAJCyhEKQ soRCUEsBAhUDFAAIAAgAT3+tMvTyjVAcAAAAUgAAABMADAAAAAAAAAAAQKSBSF0AAF9fTUFDT1NY Ly5fY29yZS50eHRVWAgAkLKEQoayhEJQSwECFQMUAAgACABQe60yoIhNxCUEAACMEQAACQAMAAAA AAAAAABApIG1XQAAdGVzdHMudHh0VVgIAJCyhEIHq4RCUEsFBgAAAAAEAAQAFQEAACFiAAAAAA== --Apple-Mail-32-250454650 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed On May 12, 2005, at 7:27 PM, Sam Berlin wrote: > I assume you mean all results AND'ed? Your Patricia implementation > looks good, and it's nice that it supports more than just chars. > Might be interesting to look around for places that use unique sets > of IpPorts (HashSets of InetAddress too) and see if using a > Patricia tree with the InetAddress comparator would be better. > > I especially like using the CharSequence. That's just what it's > meant to be used for. :) > > Thanks, > Sam > > On May 12, 2005, at 7:26 AM, Roger Kapsi wrote: > > >> >> LimeWire doesn't strip the quotes, BearShare seems to strip them >> and for GnucDNA spammer it is the signal to return even more junk. :) >> >> GGEP is a good idea. One phrase per query and all results OR'ed? >> Everything else screams for an automaton IMO. >> >> Patricia is indeed cool, to cite a childish guy: "Roger loves >> Patricia". :) Although it is not necessarily required for phrase >> searching. It would even work with the current Trie if you split >> the Strings in a similar fashion as I'm doing it in the Keyword >> class, or rather switch Trie from String type keys to CharSequence >> to narrow the memory requirements down. >> >> cu >> Roger >> >> >> On May 12, 2005, at 4:28 AM, Sam Berlin wrote: >> >> >>> Hmm -- do existing clients strip invalid characters from >>> queries? So if a >>> search goes out like "LimeWire Rocks" and it includes the quotes, >>> would >>> existing LimeWires match this against entries with 'LimeWire' and >>> 'Rocks' >>> (without the quotes)? >>> >>> If so, it shouldn't be a problem to just start sending searches >>> that include >>> quotes and let older servents send bad results (which we can >>> filter on the >>> client side). >>> >>> If not, I don't think adding more entries into QRP is the way to >>> go, because >>> the tables already are too populated. Perhaps a GGEP field in >>> the search >>> that includes the index of the begin & end quotes (so that a >>> search can be: >>> "LimeWire Rocks" p2p, and find all results that have 'p2p AND >>> "LimeWire >>> Rocks"'). The plain-text query would be 'LimeWire Rocks p2p', >>> and the GGEP >>> field would be something like '0, 15', meaning that there's a >>> begin quote at >>> 0th character & an end quote at the 15th character. >>> >>> Aside from this QRP problem (which is a big problem, and is part >>> of the >>> reason that searching for phrases is difficult), your patch is >>> awesome. >>> Super awesome. >>> >>> Thanks, >>> Sam >>> >>> >>> >>>> -----Original Message----- >>>> From: Roger Kapsi [mailto:[email protected]] >>>> Sent: Wednesday, May 11, 2005 6:25 PM >>>> To: Sam Berlin >>>> Cc: [email protected] >>>> Subject: Re: [codepatch] PATRICIA >>>> >>>> ... or I forgot the QRP! :) >>>> >>>> OK, I have two ideas. >>>> >>>> #1 Ultrapeers check if a query starts and ends with quotes >>>> and if so they ignore them. Simple but doesn't conform to the >>>> QRP spec. >>>> >>>> #2 Additionally to the pure keywords we could add all >>>> permutations with quotes to the QRP. Not necessarily all >>>> permutations, for files for example only the file name and >>>> only certain combinations. >>>> >>>> some file.txt >>>> >>>> some >>>> file >>>> txt >>>> "some >>>> some" >>>> "file >>>> file" >>>> "txt >>>> txt" >>>> >>>> The combinations "some", "file" and "txt" make no sense IMO. >>>> >>>> Opinions, comments!? >>>> >>>> cu >>>> Roger >>>> >>>> >>>> On May 11, 2005, at 10:17 PM, Sam Berlin wrote: >>>> >>>> >>>> >>>>> This looks fantastic. Will the searching for quoted >>>>> >>>>> >>>> phrases work with >>>> >>>> >>>>> QRP already (and just be slightly more inefficient because >>>>> >>>>> >>>> there'll be >>>> >>>> >>>>> more false positives) or...? >>>>> >>>>> Thanks, >>>>> Sam >>>>> >>>>> On May 11, 2005, at 3:10 PM, Roger Kapsi wrote: >>>>> >>>>> >>>>> >>>>> >>>>>> Hi, >>>>>> >>>>>> this patch switches FileManager from Trie to PatriciaMap, adds >>>>>> support for queries with quoted phrases and reduces the number of >>>>>> IntSet instances. >>>>>> >>>>>> cu >>>>>> Roger >>>>>> >>>>>> <Archive.zip>_______________________________________________ >>>>>> codepatch mailing list >>>>>> [email protected] >>>>>> http://www.limewire.org/mailman/listinfo/codepatch >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> >>> >>> >>> >> >> > > --Apple-Mail-32-250454650 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ core-dev mailing list [email protected] http://www.limewire.org/mailman/listinfo/core-dev --Apple-Mail-32-250454650--