Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S264949AbTFLS5d (ORCPT ); Thu, 12 Jun 2003 14:57:33 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S264951AbTFLS5d (ORCPT ); Thu, 12 Jun 2003 14:57:33 -0400 Received: from fw-az.mvista.com ([65.200.49.158]:20207 "EHLO zipcode.az.mvista.com") by vger.kernel.org with ESMTP id S264949AbTFLS5K (ORCPT ); Thu, 12 Jun 2003 14:57:10 -0400 Message-ID: <3EE8D038.7090600@mvista.com> Date: Thu, 12 Jun 2003 12:10:48 -0700 From: Steven Dake User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030529 X-Accept-Language: en-us, en MIME-Version: 1.0 To: linux-kernel@vger.kernel.org Subject: [PATCH] udev enhancements to use kernel event queue Content-Type: multipart/mixed; boundary="------------010406070206050703040009" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 29907 Lines: 443 This is a multi-part message in MIME format. --------------010406070206050703040009 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Folks, I have been looking at the udev idea that Greg KH has developed. Userland device enumeration definately is the way to go, however, there are some problems with using /sbin/hotplug to transmit device enumeration events: 1) performance of fork/exec with lots of devices is very poor 2) lots of processes can be forked with no policy to control how many are forked at once potentially leading to OOM 3) /sbin/hotplug events can occur out of order, eg: remove event occurs, /sbin/hotplug sleeps waiting for something, insert event occurs and completes immediately. Then the remove event completes, after the insert, resulting in out-of-order completion and a broken /dev. I have seen this several times with udev. 4) early device enumeration (character devices, etc) are missed because /sbin/hotplug is not available during early device init. To solve these problems, I've developed a driver and some minor modifications to the lib/kobject.c to queue these events and allow a user space program to read the events at its leisure. The driver supports poll/select for effecient use of the processor. The feature is called the System Device Enumeration Event Queue. I've attached a tarball which includes udev-0.1 modified to use the SDEQ, a kernel patch against linux 2.5.70 that implements the SDEQ, and a test/library that tests the SDEQ functionality. To jump right in try these steps: 1) apply the SDEQ patch 2) configure CONFIG_SDEQ on in config/general 3) make in the udev-0.1 directory 4) mkdir /newdevs (this is where the devices are enumerated) 5) reboot with new kernel 6) mount sysfs in /sys 7) mknod /dev/sdeq c 10 222 (this creates the device node that is used to communicate with the SDEQ) 7) run ./udev in udev-0.1 directory Look in /newdevs for enumerated devices. you can use fdisk on a disk device to see how dynamic device creation/deletion works. If it works for you or doesn't or you like the idea or don't, I've love to hear about it Thanks -steve --------------010406070206050703040009 Content-Type: application/x-gzip; name="sdeq.tar.gz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="sdeq.tar.gz" H4sIAA3Q5T4AA+w9+3vaxrL9VfwVU6dNwAbMy3Zs1/mCQbZ1y8PlkTTntp+ODMLoWiAqCae+ bf73O7O7klYgwE5oes495vtipH3Mzs5rZ3ZniTc0f9v/5q/9FAqVwtHRAX4XCkeHldi3+HyD BUfFSql4VKZ2h1QNB38xXuwz93zDBfgaQ/0rfjzi/93M8Afjv0wMGP8PDr4JeR3/lvhfPEAZ +KZQLJK4fF3+u47jr2u3qf7f9CPz37am899zpfxB/qiQo4o8K//iMQpF1OgFvY/0v3x0cFgM +F85JDuBD0Xkf2EL89v4+Q/X/6E1GkFu3nJB5v5+3RnMJ+bUN3zLme4PzXtrYHp5/3cfloRk ddtULpd7JFil6UyhaTxA6RCKr08KhZPyayihcKT29vaeMqby3hzCf82nABUoHp5UDk8OShzQ 27eQqxSPs0ewx7/evk2BopSKx3AGBGJ/4gzNibc/+Wjcm0rzPf4FVgQjy8VC14T5zHaMIetW KoTdZv7At5Wm6XnGrQkzw/Os6S345mA8dWzn9gHSzeteBgbO1Hcdm/cuhr3vLZTA/bHnDT2L yOAbrASutVrzEsaOD95HYwbeg+cjKkPXujfdVI5glBZhGAghAYR1Owbj3rBs48ayLf8htRfr jQQdWSNH6fIR6oyYoE6RwC6jL1xoF22OdjnoZE1nc39/zr4Upe+ZKEDmvWkLBMGbz2aO68PI cYE1Yv0rhVzp4EBRlI6JPe6RVVRvOwPDhrlnpiB1bk0N9wEpbpteXHY4YG//xvDM/bw1tfz8 IO99nIExHSZIyMrmJPFIwRWCH+vWNO5MwmQT+KDdssAnNlsW9srhOmFfDYQJ+jEBKRVPirKg Z8so5tmKEHIFQDAm78DARgnF75lt+Ej+CT7+EjQazOb4Gsg7PjLCOTAxZnknBc7N/+S+S9fa rQvtUm/1m9WMsncGU1QSbAMTc3Jj32G7vVi7bl39ibVjS4rzKMpzfm2iBW+1geq80TLNS6VH 01wCEVG8fHhSqkQUR5NyCHv4t1hkRE/BvWMNQdepsyA+e05TeSYFf6Aa7u+CRtX+2AwVnKuf Kanfb3NzbsLufmrvhTVCZQWJsAiE8OWQM6fYxJwigQEhS61YZ+QxlvbGqHpAxowGHTj4MLNM tJ7UBhRhSkN4oNygYkbvj2Ee4/NG5vFWG5jHGzGjXjcHUC5C8YiYVyhA8fjw+DHMEyDizCse n1TKEfMK2QLyLls6LhPv9vZ3U3uwCwJDfGSvzLC+Y4Z1talU73FVgp8Yx7TJzDbDVSqEU537 Y8c9icFzRj4pXBbFYZBnrYJP10ezOoU6qj2kvSF+veXmPj9wJplYU8+ZuwO5Ohyy5sweXFwG fDblpJHDgTnE3tjyEJ6os4KJeGDAYGy4xsBHGy9EVRgW6hS8wMx17q2h6XFoBtACA84I7tAy mAMfBq5p+CauJLbpo7DfM9gfx9ZgzEQzkH5kuzX1HQSAQuhyYN7MwEFxgFvXmIhRqdamdUAU k2xPYWBMxUABqmSpcBzLHwtYnI8zx7YGD8ECbeOoiI/lmvYDDs+A81EXCRSMho8j1zRDgp3C gzNnw7vmEMnsWjdzRAIVHXHcxxUP3QprhMB9Dmw+HeIQpI9I1olHhKKXy1YfLs0pEsKG6/kN 4ggNnMWU9BcHpxJvjMjePFBzDuqC8AiZeuEgaCZ9p2DirHEUUgwS1FIwigCZBcQrbfiEuqC0 M6OeGUT6AXCtiDrLdLjSutBtX/TeVzsq4PN1p/1Oq6t1+Oc/q10sePUKqq06/vsA6s/XHbXb hXYHtOZ1Q1PrHAZ27VRbPU3tovy3ao1+XWtdZuG834NWuwcNran1EGCvncXh1KCv1A3aFxxS U+3UrrCseq41tN4HNvKF1mvRqBc4bBWuq52eVus3qh247neu210VCPG61q01qlpTrQvt01o4 Nqjv1FYPulfVRoMNXe33rhDMuYpIVc8bKgeKU6trHbXWI/TFUwClhrRAfBpZ6F6rNY0e1J9V nEG18yFLlEAr3VV/6mMjrIR6tVm9xAmlIzpwSEnEQFLX+h21STi2L6DbP+/2tF6/p8Jlu11n dO6qnXdaTe2eQqPd7XJQ2LTfVbM4Vq/KUEA4SCRsQ1PrdzVGLq3VUzud/nVPa7cycNV+j7RA bKvYlbgpWNdusekjbdqdDwSZ6MJon4X3VyqWd4iUOMlep0oE6vY6Wq0nN2t3hCS1Oz1p3tBS LxvapdqqqYRXm0C917pqBvmldamBxsd+X8WB+4wC2IbDQiT5uyScWcZN0C6gWn+n0Sx4D0Ah 6GpCYBgZa1eCD5Kcf0CF9sbO3B7CmAIDF5dMixxYNIhoXB+jsrYzveXAyABh88iCnAIu2VPH z8JH10JLgSaPoK1SZr5MCMnAiBkdG8+D6j0qcc2Y3LjW8BYfm1UolIrl4yySo8qmQk4A+hDT gT0fmvCD4U3258YAl3svP34j17Allbs9SRUeRhKJFWjX5raZWBWYjqQ6tGMrBppZU4wO7pIH s7wBt+uJ1aPkSaGtt1lFwmi03vMqtNlzXKaYa4VrAUYk5K6JUkJXH5vGkD2dRhW8OfMA2F+s +nRK4Bpat6dfqdV6mjWh1ZAByJzywZCrA7hD/1kfGIOxqfuwGw3Ny+SWAVl0MSSDRwVyo/nU s26nfAWVMPN0FgpiHFeQW380LF9njiZDLIBM1NKpLjb8Ihl2B3PXFchSgdw4HN2Z4ZKcFn0t Wolhl31lA4As1Nqlv0SXxf64HJvoz30JCMvBQP2xAFC9lBgNB5NhNqIqaTOgOhrSQMskJ/qF A0qwgRHWN26ohOibSaQZQ1i/NX2dKMwlKwlaHKsZOmgT9KtcbyURkJqegDrz3a3BnDj3phCz J8Nchpo8b0nJdtmXhBALuYS0xObHYq5EoYqhbAWaqw/Q2MaZIk2HZJn7+16ggLYplZ0xa5F3 PuJCoChnbB3Sm+16v6FmWQWqApWHesFKhYAH5eKVVTH6hj3YGysnKQqL6SUwOHGcI0vJW0rv HNVSqUTwdqh2h55eJkxrAfaXCHtq749F7ZoY3l1olJTQ7qQ5hJdxa5SFSGcUXDrTCwYo92Zq /u7Dt2fwcsHgsukqbLA/zyB93W400I/4E+ihU2+1O02CqnxikF3Tn7tThhqZ8pUaunWTwulD LVCO5za3voqHfgMGSGnsxecxIHuotWu9Bovy9Uu1p6NH2GFu6wlNlHeHs5XmRNA3MGSKcoMB E812CTi67gL8da+zEnhM754CvNl+p+oM8e4a4JK2rgY+NEcG9o2Dyala6121EW/5KWJymrfM rGX0l5hiztNAUBKgJZSdJkhBnDBxZr5MgJEPjWSgK+iv6r6jU1ybZiZvNxPhibqWAIQkV/Gs /zXRz02vnkMmIxQsIGpOvaj2G73MZxH7C9YoQeyllSCdOZU1O13YiMJnL2kJ/I5DSyhL4LfM tJHrTDjbXiZ0ZjxiK12coStZF+u9iXVLkhdXxgSI+aWV9LHsf5KryOmMq6uOsaOOkZ9ea/db vdiAhVUjPdWpjAarq6sGWyNUj/VoFtZHJloj27hdEBCxXirL0cou+xLLBkYLLDrQLfc3D4PX tLQoUnmWw964nJ6tWk4lI9tqq4wcinLrYBSLJAlUnyN2xsMG9pI8TEj2aDpZ1kngh1HSYPaQ 5mYJXrIGuTfidUHOI8pmRO+FIRGfRCSwMaJ+ElBvPg3oh1P1HXcDCdeL+XondR3rk5gJa1BJ mO0CA09XznAd3BWqtNaV3jSvdSIspFICB2+WQ9pM3HqVzrXLzGcQDdt/HJPGy+PlckLUl6UY FmL6/EYhVhTWe2jaiX15E2k3gPaW04v7AVlgLwJjZYkauVxkuJ/O4URrFrKadvGFwZL47D/M ECs6HoBd1mJm+OOggIcbrE18ZZQ5Hj0LvkV1Zws6zTtkJCoZNs4BEuh0eXGtV3vtplZjlCVJ kgGfQavfaCwtfq12Uw1jAUVraT092sV5GQHIvQnZKhdKrhebNE4gehE2e0p2bLmTRDvpkbnJ zerP+nW1dwU5KK4YMuzy30s9fkUkXv1SeLV+eIlTWYi9PBYFqdNaJGTNXJRFIYRMUYzhEKNH y14me3ZpQYowknRhb+90UQ9WjPfRuDP1+UxHqTZddz7zLQxa0wvR50oFEYe9kQ8ZHfcmBnQz F0vuIL0Tnc+la5mVZ3Qnjzt3/GW6s2z3CJPkKS8qDPJH0ip+fpbekWi6k+RRRlAyWSiwFt1G 9Vy/el+r1q5UvdrQLltZpmr8b0hE4TrQngSuIbc4Y/JvF/YpQs0V7X+AgtDYgIY/qp2W/r7a adHRwE73YTOdTuiE7hVxhA+6dLLJCKnIZiFa0IVlJboymYi2TldIy2OW4kShUn++bnd6evdD 87zdEKYrMsDUjO8soXmqqa2umt65vG6QBGxOpaEJ7+cp/4flxjgbUmmWmq9PpRG76/vy5noC 9KRmy1kBSa2emhaQCGMhjaZwUjpYygt4XVhKCxh/QVoA2ZaRMTCfMwI+PyPgOR/gOR/gOR/g OR/gOR/gy/IBXlijKaUUMj/9Sq+rF8huZOYLSgqemkvlYQ6irpPHpTZ0XQoMmfsbHrZtL2KM 5TVGIwcZDTKuQayhKEqxdLhUzTRY7324VnUNFa3Tw2arm1Svr9VqR1FKq5vwkwtFKa9ugsZE AKqsGYrsQU8nc3WpKgdLSQiMdiKIUOKhJNFLWRl0/XqKpAharYgOfw0zFYSP02FuKF9L+BEX iuCtyTNV2Q5mwEQhR2vONZaC/YQECTFsl2rkIfmmEhuVd2O7MUljxreflo4Xpb2ccNAYK7R2 DclxqdWg8PthWa5edcAG2KcD6XhvCn5gzQFJItjY0RqBXYZaXNVTOjejnu+Xu5YWEIpv+7OZ hroVV3ei8krn3vL3f0QPaWTdJrraUXWSMx/VPjUZfqmv5Lwfn5SPIuf9uEQZ2fi3+JqnwQPc zC17SJczDLgzUb5tcT8B/V7b3sfoboD+OXpodx55P+T5BC4h2mZ0dh4YFNuaWNwRpZR3x33I pyC1J2ghkrJvHMemMPQRAcEONh+b9gy/YE0IYZGrPTFRjaeWN0HX2HQDP9ZbcJEZJO4Finlm ceqBjz2MO7Fwb/H0WuDixY7puQfM4IRDennh5o4QypwNSG1x8KlQTp6ojksfG4iQJh+cufQs ARqhkcfPKc/9fo+0/Ib8d9NDEIiccO4FcsQffKXZGPEUeQZOTpMf0YnXR8e9A29OUYMHGOzd EyOJDmtutwT98iwCRx4gwgOfL8jBXFE9yIdnl4DY9R4GGyOqmUXxAVvBWaZ9cPGFXZ2jcIcm 7YpOj0SE3AAiDiEEQq4a7Uv9vH+hd6+0ix6KIRm1nR85KW3nFvlLsTg7ANkhbOvqef9SrJQs r5+diWOcTJVVdIv1bvm4wK8uFF7TrahiqYAKwy+MsOixWIazNwCv4cfzqKzEyiqsLJVLoXhM 5wJFtXmu1tHVp0sDTPw73HoHqsZJ6UGamGpObszhEEnHmepldrAbU4MVFse2bvZFsJh4uSBW v2xzYtXLRufgaJ3RWe4s3QMpnRReS/dAiuweSFFcMFvKMcTgb3pLWYZLVVHyZEIvY0WCpEhZ hBSwux0osbS1x2LNG1Msn1L4+pHiYHHbZBTc6kARQ4jYdWCbBi2Y81kKcDVGTUQfFGiXnC3F KF/mdEBxq2faI4Q/olME2vD02D0hy7BR+oZ5WjaIFIcVEqvDA0GKT4RlKhe/w3LV7l03+pfM rRQGaJiO12Xgzz8Xq9idohRIZ1C0zIbejW6b01t/HGxO3nnouezS33ApDLYdmN/JbuNwleId 4QyKp3wROaQ5HB9lj8WtHmXm6kPzZn6b3vneOyE1p9avvvde/TLdyer6Rb9VoxhJ17NUR1do PgUrLC0TydOHYG1HFb9QO3pX+4eqFAulCl3ZEXHGDVlcZ347FqsOs43MM5res8s7AYxWv6mr rXfXSrlE3dHC3KBlQMtLDWcO29vm133kE0kijz52/JmNc0ON9nzhiBsDHmMsE1NcfKrwm09H 2XIhYDSfrxLdQhITZaPGT0LZuCTHaZynKzy1xNH26I5aMv/C7fVFEQj8YynAAH7icyoFM/EL VYswsEOSdEGaSxTD4FTux7bQxXnUYi9+HsXtcrir/W3YKhMenZu/s6xbOu8mGqSlAKnwe6GQ XZoqgzaybDvCVEYxdpqU1Dc4C5BjNcEMuScCzL2hgvwUlyvekXClw/I7dlQZTSYWty3dRwt2 u8VON7bZJbujCN7yaDInmRbhM+RZq7fU7EQRcmCxa3Kez3ajSCxLR6Xsa9grHR9ni4XgGuQn EEe73/rOjE0Up0LUffkSopKZ4fKddeyCsqzQbVvi0ro+nCxCfXRn5jFGPr0XM0SKElPGHWM4 3MkudJPkTjRnOpQc5K7rTDOkf+LkwXRdx2VGi6hYLr4mKpYrRxEVn0xEMvy5z6Pg5xIwTj++ DK4l4WoK8hBrTV+2ril8QRWx1dBy06IeMA7FtfoueP+7L/wvfJh7Q398VJ6/6BdAHv/7H/T7 L0ffFIql8uHh8+9/fI1PnP/BQ36wzTHY739UKqv4XykdhL//cVAo0++/VMoHla/8+x//ofzf xyWXH2lyvuNb6rGHmj3sAdXZzLYG/IYz77v5NPPxh5lrzzL5cI/LnQgGTm3zsG57Z3VbPKrb cFIXkODLzum2dky3tVO6rRzSbe2MbntHdFs8odveAd0Wz+e2ejwnhHtbh3PbPJt7ytEchUep aKvH84eWQ7s8UtGDt09HPd5ycbBXFC9lW//x4tFgulgU31QKy1n2F23K5sc7qRS/rYUBFz/o Q4d79fFOLOWNvYyG+DAa6uTKu3TTdDT0TlMpRTo/fDmi48OE2xtA1zcU2vZIn56ygZWLuv4P tdPGTgEwakLFXRXFczTMglyTEgljGFbs0MLv066sx/Z7edqcfPGIbwMjDNiDogRHTmMLk9kk wENnanK5iUOW8tfOziBX5DNQZizkIoRY6xPgrRUKqiFdZC+f8B8u1YqCYnTtOnRlG2XUFnky vByFRlGGDge65pYQ0ipIHVMWkSoInKLJ8IMKlsL6/TDIm+GvHouB+BbY9x5tf8Fi2mtQEssj XUhU5XjQDMPIUkYIaz+lPv2rxU3/Xz7L/j/T86/q/x9Qnfj9v6PDAvP/D4+e/f+v8Yn8f873 p/j/clJjP8i4W/jRo785JHgOB57Dgedw4DkceA4HthgO/BAdYq8IERbvBpLTn1rIEmQXz0ci fuCN0F3lV393gh8m/Q19yrbeqb/vMOd9l7UJQcZuS3ySRnj0Pds/FiKUp17PT0WOdvBLEBy5 7Mq0seQL9uTm8put4aHb6sv8G+65ppbvq8jESbx1ukCIx80rlrcWRkIbh19/T3QtSx5xgx67 r7+LHl7FE9mAj52rlGkXMieeS7di7n+3j7fus8L///If/ZY+G/z/8mFp2f8/Kj37/1/js+D/ j7/c/w9vN/3buP7buNW0vUtNW7zT9FlXmp6Doueg6Dkoeg6K/g2CIvnyEtKnI11Uku92LFSt CkROPyOAON3gV58+3vHFpiJL9Guu/3H/L/jPBbY7Bvl/Qf5P0v//VD6K/v+fQrFM+T+lyuHz ///yNT4v5PyJwer8CeGrvUi9CD26Dc7ai1SqdtGoXnbpd6EGkLtNNerh+20qZdj2SSB4qVTw dBL5ok6UluKklO/StVoGvksLIBnIRfUr+qRYPvsJxmQTyI1gV6r9v/a+tLuN42j3fmWf+yMm kGMCCgBuWmzR8glFQhJeU6QCkFb0RjnMABiAYwIYZAYgxSz3t996qqp7erCIsqUoG+YkFjFL r9W1L//SMtmXvPj8I5altl3f+Uf6/31s/bdHj4Avdncfr+u/fYmruP+9pJt9fiDw/T8/sP8P Hu5t7z5+APl/Z+fBuv7fF7mW7D8xKel1HN18tj5A/x882F61/48ZNrD/uw8ePNqF/yeBwZr+ f5HLvIk2ifsfJFNm/GeTIX6Ew0wiLwkwnhizUwl6t+NwRMx/Gk2GYZeVJPwGFPVmt+KUD/QS CQV7JNG8boLtl/ICQTzu09+dBEGoGj1eCObMjGlPhvF0qlGSmR0F60WyCOlMSY7IZh0NF5RR cRBm7c7BIVBF35wf5jDusOc+PQsRDkUSSYocSJ001AgrmQHGpR9jLulIVGDJWFQThUuGWDfm HP3X+JIfJCkNhxKYl02ScYbsYtyJ/ObQZJrvVtaJx1savoA+NOJVddkkf0+lJRXaWLjS0XF1 r8IYWU4ThZC8s5lJ+F/Qi6mBKQKYSb50w+vCsQgtYtkutNn+bNzVKNtkZPSptyhuZ6wwGE6L gxj33GjDYDaO/zyLTL4bWNVAVOeFsbCOi16lvZAhTy9TDoHDCOzeGaxgNom6cZ+AYMkupcQd 0lSl2pzEJmswLiCENWbU2FVkRuFP2HEaK82N/pLQORrRqcQ9kqic8XfxCEG+4bgwySrDo5FF FJ1cKD1IqkEbrycjrAZhr+fvnArJLqrcSMZ0hFPrkdGzUuURZiQsQsbGpBUYRWTPZgyx/Zm6 hxm7ZmFwVHt23qbmuVIhT4tuao4FbLvMwMKWS73A50iTWHq3LWgQRBRHHvDI82Eaf5h1/ygg zpBEBgwd6Gc0wid6qiUwHMPCzqGTwrmom/wU8PbOjcEiBSQI50JgspzYhKsomjAEpGH3yngL XMRJMoHQYQN6kRaSYCfK5jADwN0UOyqAMcJou9B5CAosXSY3pULsPmOoqrRjcYTFeqoc9lZc j547c4wRNjMviD40WEyHOewXQMqaF2BFUxp+j/mZwgnPaN+MUUyqSE0Q23NsDbpjvcYkSkBD WKc0CpFFebE3mhdvOW80jlQnisZmMmNtL082ppaSm3FQcgMrqRqczlUm2RCmKEt4FYniiRrp D6P3QKiGleQEIQPecKiSk4xRrdXdL586q4h1glXeN6ML6pOG2No3HIHEQBhn9uV7yS+BOcbd 2TBMFc0BIFQPzrhRm6laoAt79CV06SFh5IyV64z+YyYxcWqwHqOIZO+egF9hGrQ7b6LghvV5 apSgQdiofzvV7iURxzovQj9O6dzRq9MEngMmLvhtgRWgljLcxXG+ivKo8ZxscK1TySehWL+I 0y3RqBZQuEWDy5GtnDrDiH+YJFfBbIL2Qxur7Lc/Cid8jjlBt6VYigbdqmOyC9+6r2Se3NFP xAoyGXAQjxq2svzBMVwhNJMBnbRC/dkCHT3tXMfJLBveVgUw4ww5JkMzAEEI5la5E3VDnDbG 0zOCodvgJtrsySjs+hSXxwhaVOxG2y4QvWSfFXJoFziDxU2u66XFjPgAslUojnCWzCBxxJU+ TFIG1YSahs0GqtS5BQ4cWOdnyiygE+nVZg6ahx9tSabER882BLCQb7E+PI1kOExu0LpP2v2h Ejh4A9vMGFsJo3gcdqKhcKE1Wd32YbtJG3l+3jwCi/hsllkT5wkvNJjDs2QiBXypI3rBPKgE mnHjBOtQC44kRz4xr8vPcGEC85sknyAVBnDBJI2zCFh7MmPuJBpfx2kyFqQqDRXQASETzsoZ DvHXn5FXsgeTXj+msZcxrYrbXt0jwglhEXHO40IPi/IpXI5FLcwtJyCya5Ym5zQyP/y6xd42 fpClXWRXLWQD6xrmDBgPM++QMZ+m2apGnKDCA5cCQCvm5MWxlK3AyA4BMuLf5FEAj5b6JIB6 rn/gMM63JgfQYshMWQ1BVGYRUVXVbKxrlAG/0ypsRdMuQGjrOkyZQDueOKfPZ5wpiNMHjSNl goXZogUpimlLeGfqhBusf3DTMXrsyKy4hNwfeBcFN7NIQIhs4GMhEIv9AzLG1FbYY0Y4mdxC cOOEJVkSRCEtiURb0LIwbuNMJcRZx2k1oMWpE331BEvOjzIgUpD0dSyAocxWGXWCpmX5mFZz 4xmM29NkorCIA5QxfJkM1rA6p27S9jrEVjJfB9Tv4CbspolbYyJzWWIpBGG7hK3XytwUxBS3 VcxNz0uoBXbE8CouF1XrgVmm9C7qf66o2e5nVwD+Av3fHt1a6/++wLVs/z+3FVD0fw9W7//e nur/dncesv/X7uPdLx3/8V96ORvZb6PuZRKUIMfwrdLaRPbfcBXP/+Hp67fNkxefuY8P2/8f 7O3s7cyd/x2khFif/y9wSVo/9vJpnDRaB8fB6/Nnx83DQKsJGM37FwQ/Ws+6KpLfRcHOt9/u GDOXfmHn22++rfKjO5x95lTm7nr4bXAWQUgOXg9ZO9KewYFob2+7GjxLsim+f3UQwBVoZ6dG fMJjuEYdGDijprdgBeGFBAZ/qskk2ZuJ81Dmjor0bocGA7XVJIb3JguiYA7Vt6mn8r3mzbwM xwOWPDnXHbR5yO51E/XqiCjmFXpN/NoI2icjwpa2JBLPKIGTgl2LkBN3anJayx2HN+GtOCfC 07KXsCYuu+T3afA8BIg2xGg+Uz/OEAVQljtpGeukxan5ptG4J10NZsTf0u9Ikpt+qCs8M3bM tZoVGrOZalpzr1l1DmW5AkIOCaxwxrD5Qs0q/zFkDolEHE1EB7zgJGZyuNn0HHVZ3EjYdVMY Z+uoenOZoGX2UMmYcWZh0Ej6TV69cjuBDoM/WwWjhcl1YRBlN1RjF/tYue8VM4tFYqlXxM0O qjxM9lYkU8NLryPOkFgqqQNq3kDldRPBkhFesXDou9xW8Qgj4jyMqVqKdAOrgEkzSUUfc0rN Lx9ZtgB7/p6Kd6wRMeoy8qHDOztyZBbGF5QVdtKByCJ8njKYkrsufepNnF1Wqq4rJ+yLN7fk oYTsQwsG8T2eGvshm1qm3qfs+CyQWoBGzRdLY+zKKGPW4Y2jGxmvXfd9lVm1uatxcuPa7SVq g6Q5jAcZ785ZwspSeHXz/jHOy3hXrJTLa4niWrQPItRz87QYnbhHMh6jJ9ZAjPmoayfSEuep JZDOruRRgl1JI+c5LW+xFJ7N90JHOoMLM6O7KJ2GbExTC2NM0m+seAgty4qapTvqrySrw3X5 nTs3L8Vz6Kzeh8DSVfvG0uYkD69dcqgwIhw7M0AAAc9YdBH9iBrifqCCHVj1D0FHTE2xO76a JHWt2E6CDwCrdTll/O0cONMnt3zAqg7UPPBihUQOedTOAYGEG0d2SSBB74wsMLDvOkvt0a0A jCjm7dbgDEfLoES14ze0p9Nokj1BVgemS0I4i6sOvVt5t0Lrh3y+AiYeZRI1ENYo44fDaEDH nClelqmKC01X/R0ueuX7/fGoD4YZrRBn5YVCRdAn25N4KtZ+SxMSgOfTaAFeAc7wgkeWCrPL P2srMrcVgk7HCX2fggpZi6gSEEdsoPPpL9AYHnws4QAZoXD0Eg0zIQZqiAB3cBMZxRaZD0E0 XN0yaHQscIjOSGk6ekxoS+JxOIR6RqYEIkMLQaR9xLQ0TXqzrgyDiUiWm/gINXPKEPEKcG0Z pUebcFCYiepfwOU5HsNUgE589MRq2ku2IQNRczpWmhSREJ69EscJHrNDAGw/hFsZg3BWVVaf AjuqvcmL0wBlZHsrL7qjnKKf7MXXcU8sEUmHEYl04viZKjSCEcFml0+bGtJdM/QvkaGIeGoY QxhpisM0tpmBx1kGQQ0hauoIaQl0QnL8Oo6HEpWlBa1NZTeA5WEWSab5eyEzZnXLg02w/+7k Mn2Ck4VgTVayiT6xmqMvhXUj0KaGdTE91M3/NXeyy/T0rNF61eYAjcPTk6MmQg0kRkOlqypi Ms5azWfneMQvvjo9aj5vHh7gBga/XZf4myWskoIjLzbNQPgYThoumAGcIW1bZkJ2DkAYERhp G0XjoZ3LZAjikoW3ytqOiAPtRB4q75mlkTs0sOXshdoZSq9lfCXiniNauKphnsUNn8mCNweM 3traSzwVmNF79hjZ1swoIjpnA328JwGbyaA9TuNr2rHrSBZEBp9PeBjePJEzLUYQmjl1K+/q slm/EL/lAK4e6l9BLIjJI41EhsAMgN99kMksynW0WQ3bquk1QzqbM3HCKL8kzEiIoE9LXHUf aMp/tRhIhnn4DnDxAauaN3ZngpLfewmcZwOoXE+GqP97PWIK+JhkQYloR4kOygGh92thEBJd VzBWq85FYZLiuUCMZ84hC3QoOOwLimWubDYVkwVh4oxat6ASAlv2TTobLyy9ImXL6cA9wloZ qDXCo7njiX5iPGY9GYPd7nOH2Fs1oxEajadMEYMFQDO25zKhwWgC1mvMUglhLAwOTgqCuGie S0ZcqZs3wuAEDshS1JPgtjL0YumOm2QviYQS7NSFiQlvP0ZgtbyaNrOZ+XwMttdnrsE2w4JO J2REVGBGjJh6COT8r8HSTOLujE3XchYngssJdumORuNhEswj6CD9t0x+0hTz6CS6wzAeSQZy S/n32QcHRwIQoNydkc8yS7H6YtadFjChSH6YfNjJOB09aBnNzTXNtmNmInP50GMEiktXCHfK +zG505z/Nm2V2yWRdJh5dS4Nk8vbjA7HUOFaDrMV16QnYfButRUNSNRgROX5HHvk8V8guu+t ZG6ZZoac3RxylL/jFmVW6XKAsRhTMZsRzEZvzJguqgvLSlRcVVoqcOozmozai4hQEfyyINC2 Tm7HhJ0E4V4LcEmgQQz3KIoESGQWWeTR8SeGVUlhJRcCxKeCXUwszyhFMNlRJ015YWEBHltI zbgNNr6qN5fIgrzegnOkBYuBepC2FPDkrbqMo7MwDoZNLIBr1lsvWhw9WVXrF8TN3BBx5qfM gKVTR9b5XiakzrrFLW4st8HfMdud9KvqY5FzSjAHSy8hVsHCM0gUn8Y47blWAECrOAFL+mX6 3Ypl3d3SW0I/hiUSfCXMs5l19hP1FAKtaT7DW508IVpCsJ5MKEsJGOWHnLqP2rZYmB1ACfT4 c69BcQcY64CgY0p7UhX1JmTBMOA8d1g12hRilADQAk/jcTIbqy+xEGE+FAWMFyzFeCE3oDdW yz5l8LRDRCYrB+bgQ0+BjMN9UMkVFqxd4xNfCL9mDKSrzdvFLcwfGCWj0XBo6RdHf7OwmwRw /J/DidxKzuGVG++7EaOrJyCwBZIthUHiwqZCg8pNgNYxSXeQIIsvWoJxYcmrgsQKGMjOZpFD UO9et51zjdUrxLlbvQm/qzH+rJNTauLglfvMjwcLoyZW3xr2hckiVbzwAkGc5E+EGVp5NKtM l1xhFhj6qbVbcYHtMdPi8x3iO6vuCOggU35vRGt8DTlsKrVc8jMoOwuOh49oFXos1lXn80wy +Cvo8PkozSEk1neE2VzXUDrPpu4DMwd0GbyhXLNwFVIHT4tiRDRhF5R8S808UWHE6jOcSrSk DSsU6lcWC5niCogCOFeHiJwnTIBlhkmGeA+VuG69kUwI0o1lMmdMLUQdQjdY+JRppdEgTHtD uMuAobmkIw0yLcqxM/qw6pkJpuySPFVGUlWiXeuKxIyRp/9jRjWbGl91RK+JdJfCojHO0zZ0 mNDvB7RLlyw45F2xeGOi91Eq4q9VnIluiDNALF1sT4BKUmLnhtBmWHEqW8oK0JybY4gWsdh2 RsB04WCAVbLNWu8WngdWZVlDZp7XYgTJNz/AiVTwOwyuk+GMHRMNXKiSlAQrxen5/IT3zbFQ J7X4zxudoE2GaUgpS6nc3odZ9fkpzI8eIqQQU8v+7FbYjVFThqgOnHavO3Mu66Ml9Ne07Ynb 4THsBsxFrWKiCBlAZaZnynlT5vzTQRfeh2BX4mnO+eIeZy/pJqkXpTKik0EcVA3EHIM0eVIW noL1V7On1lMqfIATFFpTnA5vsG5el1pLRmEaE/zPrGIoVxKC6Ag3tk9LWHUc2eLMQneemOWu BtfhMFbXOBSBCrMp699kXrdRmLKhJhcrmEFihHBbtR51wkGNE3E7ZEFaso2AMVILl5UQQP2i 1PLaunA+vFbF8YvXnluYX/FCmobi5hT2gRk/IcAftwer119m8gv2oLsKunxPQ09mZf5UCTNv kND+OTvUiimDR2HtWTiksYwFnykbo2ZbUQ+wv34y5tAFwpQkti2oO6waAUQP37vx+bzW3YdX kkFbBjV0UAexnNYltQUEZx1LHTqy+sS6sN+lL973c6QiGjEZC5sFZTtGjnLiJRjjVFNblMw4 zqIu9hzUcMwHLRo5d/Sld/G6lC6tPWZhXHRf6thlrN5VqaUK3+WMJZMwy5JubBVi6rvIyTpi 0bVCztL3BQ+n8UQsyiDYxtIvKb2YB5dpEc9CJFQ+I5rlS9r4ayw6eDvD4WK045FlZqsL8/GP C5v4QDVUHwdrHhsHnarHMbX+Z2WI7aIu1JZpjTosgSBojciXOwni7Y9ZJWNJEKLFJWnEtoYn 84RA4xUb5EA0KhWh1bqTjxXxFucPSYlWdTZmvoXH7LoyyraHekJZ0VxcPSLy/QVuwWsdLJZ3 AmCtUT0ZAzpcdtXD2DpkMHccqimaoWEi/h7M1dqvArDrhJoxyrkGFqDPstvMjHJjUiwYDKlZ xlYWsCSnsoCGlWMLLW6PbXgWKzlHk4hj0ZYMYU5d5C0GrAZB8CDnGTgWjBVBoq6pwl966GWp Ws5LGIFUQG/0HnFJGQtQSuotOvdYFVgzoWAiqJhMDfM4N8wNJiu7X9078CfsSgKDbCsKZyAD UyVm4lMPgcFnXpcMy7hzaBcYLHQxBZHorHgxrJmdtxcUwnJonk7Q2d+s50Kc5u43bmB8dHib IN4AF9sBkDwIQxf9rz8bCmYZxuG4K+zeQ9k6K9750iZAcjKdk8GyGEpJa5xm0LF1qKc+GgJT zCAOG+YAIr6obYumXFXpEQpfsTHQB02zeduHhnxkrGEXqSxlI91l3OHaxR0kPbtx1nsVFBfn I+2kXOqzChcYGRAGXmCw55T3ZVUwrlSyV0S5A4Nj10GN9B+qUrewx1NmYGGmhsbRuhn9HMOe jNgN38wt4pyIo64Oj+piR5nGo0gZlA+x+nfMeOo7NcwdIAX+jONNZc4WpRlrSNYn4ikih7io S/QM/HZcdLoZF01hzo5WGEOtC4WiJ0Q3q+ayP0vZXlVwOFEZLFeqbwZO2FTkqgiA4ZqW4pJN XHVTPEnFGPgIvGAX+5SfQDUpeeiY5zEnkT2uB82+EHZWp9ARdZYBEAGS2n+a9QasyxMmxZNO xeaMaCRQnMi+1Nf9LARmlMXaLOW/oW4KVd7OZlFWqRoPCjWfZKKAANgpq/8LJiWj4tA1GjiJ y7bjHFNXLJ2Gqx8dk6ly+q6LuTNSFXObnGWQCyg/0a8jjau/FZcL9X/C575OP1FuPIPXDoFX Fo9mQzqmkRiLxIBBNGSgfGWO9Y1vtvG89SIUXuH55p8p6V/YRLDeFjBXnD01+y96JoV2d533 DAenoSnxEQ3S5JbEhNsauxR4h9vjE2wvhPyE7U3YDSdxBjY1sUhU0/BW1Pbulw2qpHnIFBnz sGChLp822FaXt0OLpKk0izjwxpYBpjNAGDkF0XLqIN7kDwxfeDjP6LOgkKI/L6MhOGkRhuFJ N5ZDKUXhhfRyEy64OejGaXc2yhhrC4brhMMchUd+854nqhGlpLWn2Jc8s8Sc56o6UI4FhIzf LSyozYLKbTJLGYMt0bnRzsyUPvMvOfWe90mWu1VA0U+geqvaM1bXWUc91dWJ4iCe3qo1yLA2 W97cL3Zuc0dkmJ03QmvlU08aTHqQaotTdcPMBezCFtvAdatfzaO4hcRPxD3DQv+EVfJdDgh9 xfs4F6xvBvDroGMtWEe7caL4DUz4Kdsg4d23MKSoZ/L8HKFLp8DeiIrPObSccz4wCcyLB1pl upGP9lWJOps4cy87UW31knGigcld9ijoB+xqFWSXDDNgBpm8F5QFbqwuF4ZDRl4EY5j7Syga VEooiPgyibsS/Vo8NT6YamBtwr1Au88OTjcqJHZoGaJrOQCdaJFaCVXNpgvomYWIb+rWuDav p9hSr9c5jBVnnvsEzAfWOZQFoxRIS6XTzm3gQX/nNrds+XK64OicHVnwJQJWZNErK4xjUQxg jI78J6x3ABDEKOGO1yeXbEEvTNFzeiG6JrY4I4jYTUUDKsNp8dNCOICoc8bMBIwSDiS1CyGo Y5ZpByhjHzTHYpzqhkJdPVxMTH5CJxgmkowRujdEOucElVbBqObHTtJb8DJg5uVbSVGw0hUd K2W9L9LoOmbrrWw5nJo1aXFmbMLW5S7pwgOAi8VxikccsIq5+W1I0gukHqHJALkj+HcSpxJQ rWomToihX0h4BEZIfCdcF2JkHCEQGzKKF4cj7sJ5UIqZgwCRXSCZubY5m2lhoF+FvhFbSHs8 o0kDL9o3XD6eZgHQjSb/Ye65+O6CIKHZt3OHOqW0JSDvQh7oUjWX4phkWx8NLxVBrkAtMtTW ScxaCO2gktR6DRS6Wkh2zeBgloDDwtxzg4Yswu2yJZgzkt06H5bE8vn2k4izmi8bzbKYDHFd 2q5b5tH6oHqng3mFBf8T9oUT/Ot7oWZqvyuc4DmmWiCNbcSF5MJCH4z60IN9zyVpZQ0dFXD2 SB/N3bHyH5nLeJ9DOJJRhEOWGaYHTsmYOY9nDdMAEeN1t0l/COR7+VjgMs550AzzCRGHUyjY CVtAKGcm7rz0fa4E4Fs2wqcQNyMtJaPEyeyI/BHfBqRtUDLiPhkIPhne5qFOJ6c2Qflb3v+d evCswTm0Jfl06/RF6+AVEqarV+xR8LzV4PTVhy8PWi8anOxcUqr7bcFH1muA3jrl343fnyEX +OtG61XzDFnCn70NDl6/psY5VfnxwRtazcbvDxuvz5Cf+8S4xNpB++wAHzRPgjet5hkybKNB OOK2mi9engUvT4+PGi321t2yGbklk3qjbTTde2FSJU78XgreNM9eIkO3HTwmh8zdPzRPjqpB o8kNaVL4xpHJ08J/Qh74X5IDHvobLCE1QgvearZ/CA7aRhf2d+cHriFaXWrj1QHnJn8+v5GY bvD29BxUg+Z9fMR5ye0LWKgGkqE0Ds+aP9L20pvUTfv8VUPXu825zJFt/qRxSOM9aL3VJO6c Cr7VeH3QbEna+BbSzDdPTwS37NYLGevPT44x21bjd+c0nyWQgDYOXhC0YTG9fTdvmtQ5dmh+ 8zlZPB7km/+WwOg0eHXwVhyz3yp40DCd53YRKggocug8eHaKNchz6dNAsCDYIs2DXzV5Tnh0 rc7kXjL9PMP+6mT6mjTe5JniJUs8stNbGKG+58+ll49+Dv4AF0ioj9aQRz/gEdO/zxp4u9U4 ofXi43RweHjeoqOFN/AFjaZ9TocNCdZpUwzmy6e52Tqy54nXOXh+0Dw+by3AGPV8SkuIJhnW 3IZYIGtX8mz3nM9edi8onNq3wUvaimcNeq2YEd+szojfZsTGwac0P35/iQM/fP/xyktxkzpg aVQ0rGdM/+nmWyDcE2J2lMplgGCljD0irMNkwjlYbvKIqFADjjRiRb30lFhyyij4g9jMO5JK SDkx5u9U4obIAGUC66QvIWIEmlrEySTx1BRpgdBAF7CzUMzDCwV1xmKrPrQRcVYlO52GanLK WSPnzGs5R1vMRET1LOxjahix+3pkX2b/PrYx4YnaWCTLlwaLSgSK+AwSg3Ad3arNipj3TNm0 3NmYXXjQFLfhlz2w1n7m4UuOHSgRPz9WtVUwSVgCYlcc9uTjic7E6MDRjaDrtEjqBPkd1pO/ tx4D3gJsZpJES5rukOzRl8RM7EwUMhSwV/j33FYxvPo7eCJ8Tz3YPFzC9Hwv/X6Oki3iQTn9 9JItzlvvk0q2cCvlopf00pItSxfAN8WqGHYJr56prrNluuhY0XZWxV2EBBpL3KUUhxD4fReB oaZCKRfEHoPWpZMYbTQxT6dpcT+CTLcjSZHkAoxWCHK8VRzFCzkr06l/cjkPdY/wzJg/r5wH f79Q0uMXx/Mbg6BEVhHM5dtVR1V2LZAwS3DLXDo7TcY0IYkHJOYfVcqHovcsuGsU3FOrFj3a qJIQ65g6j15OFse6bPZ+jKeCnDIJqSg4utIJitSd6sWYOOxrYe0tfD/6tjp3nHGag+JRXvi6 S6KEBpAePGufHhPrcfzWZ5v3NacaQ4NU5v4Th67ebNbzUzGPDnLSw7QgGqIfSZ5VwA7cggZS OeWRlcf2/e66m/5ANEnc5e0EUh4buXKXbzs+HoP7WsHXht0WQksKQuTK4LPTPttV1BSS98d2 4wwqzluTp5RlIY3VC17k09KhaSCTqOn5+HciM0qoyVqXRnDFWo1RNJ7RgkWjrFYDImdJOpvF YtZ1Af8aQqKTZc88xCLzKzgoyS19VrZh784XWb8eRWklkEDu1GSQ34di6BiLOzsszYiiyzVz efxNKQ9TsexH3DdjxMlnEq750iWKy9iGsi8uVPwNwFSCLd4mt0nvdhzZIw6S2Ll1HYlzUD4A PiFgUBQDa+fU0J88ON+EdYwdBjmxGsfzZoG6qcALJqs4jRp19j8YTfAy7F5FKWPA78SPBJHf BCVnt3TSkvH31WCHWLU0HnJiEvAs8qCKdB1ZbAO8fkQ6QlHrrsC6TsmiZqNcwQH48feXVRvG C4N1GQecjS31UVEIC62mFbZZ3ZyGxljncA7PBNYXUsW2RxkJ8Rns2uX36KnVM+eUYrRxq0ES pHBjfURtTHeP+DkbPrMk1YVZnupiUbP5z05ss74+6prL/8T8/nEy+Kx93FX/iah+nv9vB/Vf dh4/2lvnf/oSF+16UAsOej1mFTsx48NeIbuxcnutxsHRqwbTxbPTo1Nx1Kyb7fo2WmD3zRCp SSFORevj/29yFc//P6P+G2r9PLL13x7tbnP+t0cP1/Vfvsh1L7B7Ltx7jATzXF+Ba70V5RXa nO0q/WcneJFGg+CHNAkvay+JNSc2O/gOMT+/vcI9FID7nr//LCqJe59HIXHvDnXEKj1EfelM fq5u4d6nahbu/TK9gqoVsFDUxEcrFTDlT9cp3PskjcK9X65P8NQJ0CbcM9RYW5PQe9bbJPgT UjRsOi0pPNI7Nud5ZxYPe7QUwXEUWo0q8nbjsz5JbpFIvBPOCMSkknOAHzWenb8InnLyh5X9 brp+LbO9us728+bzU4NCpq7R1unpWfB0Y4PrzfzYaLWRSObpBqFw0zxpnx0cH18cNVt0Z2uW pVvDhCTerU48Nq3GceOg3bg4OSBK/nTjqzIaqtS+KmsbFWP40I/EGXGmvsBWl8kLosEsc8Iz n65QoJf7y03e/YDTCpt7Pxw3nx16C6OqcU5qp4HcBFmcJDuPfbC2aiuf8AZAHXOPf7lhaKp3 kTXZ9Zc1N6UwHdWGKN5QQwWRppN15HvtJ7jOgtkhRqlh+Bqm24Mml1W+hExuIqQWOmzBQPI0 uMdLG+9980ibn3U5eTLuokoNP5F7NXOIaX9V5m8rg27X0AnNb4SpgVXptXcLuGXCm8HBDcgQ KaWXdJiLlRlsCZsw7V5S84cvgyfU3F8J+REekuKZtd5sNNEwsuBvARxJaoSNN7dq9ftbW5v4 sZltxfVvHvHo3Z1sQo3SK/wv3X1nNuQBrS3dpv9uDey7o0ffXNE9/OO+n0y6W5PkJkrp38Hm 33/OrGitXNL8XpyaF4eHzZNDwPbi7Dj2u5ZFWIEavZzZOVJbJZqXBAg9Cd6V6/ffVbbe7WjD W4NJ6WcNiu7SuOohs8DQi2BYFwTcPKjykkHJFzW8X2N9XwX94eRv1k6zTVZsj+K/aFqffhBe ExaWGkocHoA3a6e75vT1WfNV8385T5S/AvSJ9neaBbU2aqOiZtPWGEaK2vuu9+v7/M/d77/e 2cdubrDnrSSAphZK+9KrvbFbCvZprrRGRLJOmicv2ui79gZ6ntqb7DLsJTf4gx3Naq6kTBYw 9oNeccy5EWhfYng6QknjynX5U89M3I/+HJS/KjP805zO4C5wdgF4rlSqBGkVs+Evwm+e1vra bziMQ2T5NFJE+cMtAb4XmxphiE/xrPgo+M2ypR65mLsaQVb3qtZhapXePt1dugdY6A/sg78H H2i6JFvxMeOjFRmMa67ExNNtd+8nQgT8+xOHeWcPdrRSCZiWeBJPIgPoWrjHuwZerx8IBSXC EyFFghTGktyoGqgim5qkFnqihe3mJmijQWsqtq+AF6psoZjWaBDUjqS32tEFMTIX7dPz1mHD bNhaxb8BoA+rNWJIxjUpxGA2GFsfvjoihM24ntM81doI/Lm4iS6IoF0IG8Hg6E12YQBflf19 pAH1k1E8rfWJRYpq1u74gaFlHx7dV2X+UeEXa1K6raaeq0/rY6QtWLytpbxWnCPwIQvriqEc 4Um+jUTcNWGt5N6F2nOeJcj31aZQFQ4DOgboNTkK515waiMiRDM5YKzs3pGSKeKhND9Y5jjy 0fJPcEYbT5Un2RBfiAbfZOzt3qls2VjPjXuMuzycxSE1mdkANgHivzh99j/EFGzg7GwU2iDw IPaKsc4WG47qyR1v8cDqoaGNzhv+qqwkpiL3D/leoXsujm3/LuzMmPjiHk0mqDW/KnsTrvAN R1IrOWjRRzWtmVWTz2lQ0hBNgTU/CtfK0hX6m2/UTSOoDbtLO7Fgw/SZp8G1vpk7NWZhok9Q DvzVwQ8NmsGh7qTRlQJLTGuMRR4mfALrCXBaXiKc2arLKIQ8qVmdCpFY4vEGZ/YXjZOLl40D 9hCTli+swfkSjbQ4ztmzSUrRR2ZcbCOFnkyxDVd24d09joCOAtqZHy8sQ/+ulDPm70rB98FX vzVYDV4WrJM3PkYlsvPLKqXrR/YlH1SC+eVFCxaHeLtgC0UQF0NHr05sFABiGtTYBtgL3lFH OJR8HzzO5v3/t4m+7a/6H5Iw++Mmv8jf9JU9wvYQr/Y+TAdZILXaqRv5owu2Ph+9P+NFIJDK FcbAS+t587jRDnJ+bH7UMqi6DEeG8Td43EyC2nVw+GPb+1V6Vyewf1cf/KVUuLv1ru7fUNVn 5t16Fk9/iCKYovN77cPDNvF/GKPlY8u+XFYxWdol9pXGXjfaJjbbTaqi07ynwOM/IoDihUv7 eluO4G9HV2ixcKvWvRwlveDx48fF+xBpWR8UjwtN7xPx3eBztYG0T7Do1XrBV1/hXWEL9GkQ bMx3t6Wv8XMgjo0NfXmjS4sy0WZWfdGP9+0HkMhokNDZ1bre+1jgvxDOr32Lc1JcUOwebR59 tmxphJd5RoRnuuLD/+RSKEX9r+j4P3cfd9h/dvd2bP2fRw8fiP1nZ3tt//kil9Fiu6EklZsg bcJckUpODHXdz4x5btWEiyWwNZOD5qggfqtrbfFW7QeWqRpk6uUkhFcVp1x23quiacwZ68We GFMLGr1Y9GdM2dWFT3zVJctDUbd2HaacpU0N39fhcMbpHVmtI+nhncqTbfES/0WEzdLg9tv2 8/YFq9j4Km3RK6X8OdPo/DE9vyQZdwvq7y1WBfF52vK+wAdAooH7gl7wnr/64eT0KMivEksV o6tx0itpKmuOXOLJiP+jRu4V6t7ZGiESfOWGSS3YReEY6Sat96xjCzBI0dHQVZfmatiZLb7M DA0ruEfw6MNEvep9TyrYoNZsrGFvln9XNw/seB1vvHJZ+aV4HmdznyFIkR+/hpwTbNEXXSz1 lqQ7cfXPNWUutIp+XCsDruRSkcDBgAM6ZMSStkAr6EJJGHTo+ytXczkeV/MwT1FWsPOefS5K QGHn0I8DV6mFiNwaARHmW+t125M0tXAhtMp8OClehmnP5q/3VL1ZN4tFQtRkOR7zeB2nqARL DeEtr/hyLXgTThG6JNsr2wTXIbtJciYgy2FZzVuehnh5hHajJfhRav92Z3Qem5wV3xaQBmgh Khe7hwCSvuFYLc4JEaoymKuZdG212iS9yn0Xc8OwJikaSm1vI3U0gmHUty7OoONIP438qSJv bv15Bs1tMs62bIAYbR+4H/qOjm4kIzWopDsIrmqXpmhw+g8m0v/Aq0j/rcTU/ax93En/Hz+Y r/+3vfNgTf+/xLV13wT3A7fv9AO/28wC2NtelVrfOKK2k56UruKIPs1pU9dmFqzHOzX6z95H WY+5hY3PYT9mL9b7G59sQBbv7PsbqwubrbYg02Ism87PNCJLKt37G5/in35/45Pc09mOTI18 tCFZZ/7JtmSxJKOpX2RMXjQlo6lHjx8Sc5JlwQEcwQ/DUSeNe4PImpD3vq3CfKzgvGXMPWuL +i6b9sJ0UL/83r93m9GJKdwrCdNawqd94vZEtW2M6r3A9+ghu4AHFcn82/vuKRdywe0LexDL uFUxfzUbBCVjuhuUuYdSNdiuBsenLy6ODhqvTk8q+077Zdvd2Td/N2brvj3vFyO4/Q5QxTzj 8gRI8ih3dP3c6Q+7qCF1y0ugI3Zfl/kGgpuqUl6B02AG90U+qAb1ep3Hex1egBnYgI6HZggV QvlX/hAr0Ct4cy1jDvSVhAKV8R0n2qRW+YksdlDWvm1/eE+/RIbfsv2dRiSPjHUV7om68Z+N e/8VriL9Z2j9vMT//9zp/7X3cO+B9f96vI06wTs7e3tr+v9FLqH/su9Ktc+dIkDE/hW0/GPJ OIl3qTAPS5p4hSieHwkxhDmm/i7rkbz429E1bv+7MgNrXuC/ihcYxp05XmCKnArz93pxUrzV 746nw+Kt2ZgAoVe8F6XpeO5L0TQBfeP+Eo6jeCc3OvlPnFEMHApYlDF4FDbkKg8i1HwQTS8k kWTOgcgTuQuKLn8Rp0EvR+PrcumAw/hLHvW1LxMJXmxfNB15+/4L8uwPuw8f/nHf9oy8pugX /3q9HjV+fH1w9pK7BZMhj58GJ+fHx+AxdCj4uY9O0u7ktiztVz3VX0UfhlP3EC1V0KM2Ifcx G+UniLsCfActrQgiYWyc2HdrFI8194vVs8GZcJpI2YdAfIk0Mg1tlMDV5Qon3IIaUDO65N+G 2RM823j1ajTiP+gvqwHknuXmaORuYiByEw2KSpFDIoPL6D139FYSPWkyLU7dI5UqRL94ozb7 QcLx5kEnHgw42NLNE41wmjAvXaxVUkJw1LI6oVUrIR0RHyqPLQZIcJMXsnRl2XValio/v88P 7d94JYdK65dVABg4Mf5hd9v9xnb+YQ8/0US/p3/Q5tKaKCO+QTuKEFRRcF+7EHTJwWXVoFKq I5JyY1w2U5Ik0YQAQ2NAmB1SNeAZZPFfoqTv7lYU3MaAt/xVqzde/n6/R6OEHOB9cXrROjo9 OX5roZ/e+S7YrgS0Mhu9zqBcOgzHm1P+Kvh1RmKDa3E/Pxu1xskpdU13/i5LoMVSC6CMybm1 Qk566qvKi+xGix8VOxJ9tzgafBcQcsPR0AHR8vBYBgnqb7yPpzoM3q7tP1JnvJG8j3xvx93b cfd2cW/7/Tbt4YYACv2GqALHymkyLH+tzVUZEVSDnUeV/cVOdpd0sreiE16Uj+qEZ875AgI7 tF/T0tkWft2jVbDQrZCtWMcBJtblCcHxMMkiWncPxcpbKuvhHHJMp2SOHOC0djmHZWJjOiHg 9SIkQ5P6BrrTbB33Kr3i9KI1V7BVkJjWhZFE+jdVKGoJ/n9CzQciJOFsOJWkCRoNi5ZFuc/5 +O/zYGwaIkWLoSqZGGlwkTjOzJAM4Qp3O4xKdtSThDiCWx9t5LQEw59HGB6+yNGF/yVjDBJV VpIY2ta0e5mWucnNrc2PJjGMAeSAfq3g5A6JPc4KF7zwtL58FvRgus39moeIAbrtPRiE8djH 1kOudjBe3N+lCDbp2XWS4X3MmhFCKOywSyGC6PEbF2R8k6TD3q8snsDwtx/hrLihozJsnEjF uSsNrs5NLrkpCnwsjBEpV7Qi3j1jOxIDsoafzs9NmrkYz0+Py01dxP0LmHyWT1H/pC9X0xPw U2wvczQjo4XARi2ie2eG+1ikL/9d8q7ZwKiCvz3NpyBjAdopCyr57rvgm0rwm8CijQ0ZGr3B 1sTA62fEee8F3botKsv7FW+b3kQSpW5RATufIC8nl3K9HcEJz55Z4BrPZuhvQ2V+j3oRakvM 79HKRf9Hry2fvtnYhlMvEEddIHmj7D35e0GbR9yC5WTdWWLusQB6HgONVhSMeAvt39hA+zct 0Tx3Ums0T348OC4QhjmWyTGuXyuMf+2gIifIjhgH5dI8y9UPod4vLSXHjKekS0a2ti/tqtCT vKv4ca4/fuZ35M3QciELnfM5eJpjMMdYrRwCf+HzHna6XDpiefe6wIvdKyj40K2AlaMWfxBy 1gBlSrcXabUHQWLCXQZEy6GmyLCu2pdt+t8/bD+cQJSfaEu6Vs4YQ4fFP8qyC6kQXha3kQBC qd66z//wvAvnx1LoSTi9dPgBU4PINpqU+bPa9zJ53ZESewCUKpj5Nsi0a40m175oPn92/AO1 K26tCw8PX7aoD8Ip7CpIPaFravTXGWOKXHCUUiLU+VXS+ekCb9ll1/v8jzb9lGXtC85td3H2 9nXjonnSbrTOZFes1JyjFOk0RyNYf4nV+BldtBqvTn9sFLoowpwdtLe1227PuFSGL6XP7xn/ d44w5iJWv3eBCC4w/hf9HkwBVusglpGN7CaGl0OZmYJyhYeJ/LtBbecJnAcJnoLyDoNmh1q5 2tfH23hKFGtjA3zlJQeq2SyfSE2SjMeRVJFOZ2OnMgL48SdbXnvK2OTdbRe6y+V9dioWA0v5 a2HD+Q7kv+kFIrImU5JcWViDCLu/L6v+/OjifxutU/rIrgN3QLfbjbOABSn/iaFNSG9p3ZDj 6AnvmhJ1ucVi3m+CHe8rK3Lk/+UeLPCWOLBNAvm4iXdjOe1CGKR1OvI7wddfB6x8wk/CiGct mYGgAH9c+FpgcUkz+tFERL1ySacSSKeFTQXQuX18LTvEGWUYrmSzZLt6ibSarwbWfqArrzjl a8Eg3E1xVEoLsCgFLOR/YbeTT4cMgMe5gYd/5xkTkA2jYrsMIzSPf7Zu/2OuJfafy8/dx13+ H493Hov9Z+/B4wePOf6f/lrbf77E5dl/Lv8x9p+15WZtuflXs9wIx8Hi40tT8Ot9aeZcNZa6 d+gXkBk9xwP4OmzoxaEKwV83NrwbGwXHCfbW4NBDZiOJGKoTA/2+uHh+fsLmk4sL+nkPAWiD CgdDOIpDPOw9IbcfGA4cU/8aFL8R3gXGiuNEkuqx4wYXIJOyHZe20AxbJuhpPx5o6lRNbM7r yC3kTrni28uOvXi86E69oZ7U+PANR9WzD692p6ofKWaWq3+qwTQlGIRMvsVhggRtXutOBUCN j6Mb+jLbkh60ERvKIqNzFZVQlbKgzxbLClSYYW9VZ1Yfv6EO3OjmGTyQY+syzBOCZiqzFcum s37fb4N9vTc2Ci7eBnISapVah6Cf5V4DucTu6s/G/0X6j6iez09j7sz/9XhX/T8f7Ow+eMjx H7vba/r/Ja57v2JAzC4JhN6jMlQgZtunJHWa4h1hg+1NtbM+3VIP9a1JN97e2t5+sv1tfXtr lnV2tnZq/H/A1fT2vP3ssTF1hrWAfv9bcMf/+Vfx/MN///P3cdf5f7D7yOX/e/RoF+8/3tlZ n/8vcdUkMS7oUHm3wqZshMdKbV/7YKdiamwHv7IJUTjrPMf6qPTM9S9tJuUozGLJl95LKmpW REALCiRHrgByTd63jDTnuuWcPRJKFmThLReRVv6gzPXYpZwMV08N3LAuk+RKKgNDUXBUe3be Fi8F5Nofa0Via5dAUVmJkqGvh8oBaSkwEGsiqf9FuKl4/p0/0Gf1AcX5f/TAnff5fx88fOD8 P3d3kQtwZ49+feHznybJB1mfu57/m14i/+f7rtK+75e5Mi9ZgxVmv5tFs4iVBkNgj2YheFSb O+Dc5k+WuXuKHIeX7NWesux7BORQnvcFrfhvSmEI7+mCrmKlk6l2yq19Pu1E8OlpClU9EXxa 3QRXM4Gb+kDdBLsEL5vtoH36/OzNgdRl0tpHR8Gf/sQVjzY3uSAKdBVa1SjIaxpxE3mtok8o cYSGfkmZowDDPmq2D48Pmq8aRwJPfuGg9ksUH0LHB+dnL6mVvDzPc63/c9RE5SEMXv/SRmwh Hq86T+P3DRr+QettdXV1nrzMjjS0bCFolQ/PW41XGCFXpXnWPmueobrQi9PTI15iqZLUaO9z nR1uid48bzeqXJqHB0DN0ALRK5jXebvJS9U8OWu0WuevJbHQy9M3tBA0VpTpwj7Kpp2e8NRp XU5bXBgHa8LLXkUpLS6sQ8tIMzxrHWBxkBjk8Mx/7bQlEHTaOvNLC500Xhw3XzS4nJSW6EFF roqtWoRmRfNF/boCRtwUFzF6XoTJvPhPsbBPsLqwjwPuz6e1Cn5ZJsulaqsg+Hi91by78bwb MaKmOYp58TYsy4t346Q773e8xBW56GP8QefmoiuxZ85mCwpMf8b9EoMZO272e2yF0ZfUnzEo s36FOy6JT+ObFjtp3Od3XJPOa2W74uyTy4xAdxqWnZ1S3+TlmWtlyT3xvlDrEz8HweLB0T6f Hp4dX7DxFYnn6Jy3GBVVg6+XNAWj0SgadQkcxYq7/LW6PhMXliUzq6z05nGLM2eddKbcoifT x8yLyIDO7PVZy5kZ7+y+YE2Lrcn4gmux3rElxY+X3GNHgMXbda8LmpP36+PnCqu52NHbbnMK naya+z+bx/vQtYL//6w2wDv4/71Hux7//3iP+f/Hu2v+/0tcc/z/5afz/7ZY9L8P6+9K4rnE N4iGhaI97IJZVktCLyWmIZXMIvoDTMB13IvYmZmDOPoJZzeUDIGqc9gSxyj1YLAViKm/SBdT amxzfhBh2MX8mpfMQ48zu8JWUuHciRBMljnNgk+RpmT7xFtayronXP6IxhKnkdTDRtvS6Voo WgtFa6FoLRT9WwhFfsAirU/r4uXFUeM5atDm1ufFR6sEkf1fIEDs38FX738847u/zkuwvtbX +lpf62t9ra/1tb7W1/paX+trfa2v9bW+1tf6Wl/ra32tr/W1vtbX+lpf62t9ra/1tb7W1/pa X+trfa2v9bW+7rz+P81D18MAaAEA --------------010406070206050703040009-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/