From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liam Girdwood Subject: Re: [PATCH] WM97xx AC97 codec controls Date: Wed, 20 Jul 2005 11:27:09 +0100 Message-ID: <1121855229.14604.44.camel@cearnarfon> References: <1121769565.6237.32.camel@cearnarfon> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-UWjC2QgEFErkBNKKHqGP" Return-path: In-Reply-To: Sender: alsa-devel-admin@lists.sourceforge.net Errors-To: alsa-devel-admin@lists.sourceforge.net List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , List-Archive: To: Thierry Vignaud Cc: alsa-devel@lists.sourceforge.net List-Id: alsa-devel@alsa-project.org --=-UWjC2QgEFErkBNKKHqGP Content-Type: text/plain Content-Transfer-Encoding: 7bit On Tue, 2005-07-19 at 22:53 +0200, Thierry Vignaud wrote: > you stripped out some comments in your patch :-( Thanks, I had removed them due to their // style and forgot to reapply them in C style. New patch attached. Changes:- o Enhanced current WM97xx support to provide additional controls. o Added AC97_HAS_NO_MIC and AC97_HAS_NO_TONE o Cleaned up WM97xx related comments Signed-off-by: Liam Girdwood Liam --=-UWjC2QgEFErkBNKKHqGP Content-Disposition: attachment; filename=alsa-wm97.diff Content-Type: text/x-patch; name=alsa-wm97.diff; charset=utf-8 Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oIGIvaW5jbHVkZS9zb3VuZC9h Yzk3X2NvZGVjLmgNCi0tLSBhL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oDQorKysgYi9pbmNs dWRlL3NvdW5kL2FjOTdfY29kZWMuaA0KQEAgLTM3NCw2ICszNzQsOCBAQA0KICNkZWZpbmUgQUM5 N19IQVNfTk9fUENfQkVFUAkoMTw8MTIpIC8qIG5vIFBDIEJlZXAgdm9sdW1lICovDQogI2RlZmlu ZSBBQzk3X0hBU19OT19WSURFTwkoMTw8MTMpIC8qIG5vIFZpZGVvIHZvbHVtZSAqLw0KICNkZWZp bmUgQUM5N19IQVNfTk9fQ0QJCSgxPDwxNCkgLyogbm8gQ0Qgdm9sdW1lICovDQorI2RlZmluZSBB Qzk3X0hBU19OT19NSUMJCSgxPDwxNSkgLyogbm8gTUlDIHZvbHVtZSAqLw0KKyNkZWZpbmUgQUM5 N19IQVNfTk9fVE9ORQkoMTw8MTYpIC8qIG5vIFRvbmUgY29udHJvbCAqLw0KIA0KIC8qIHJhdGVz IGluZGV4ZXMgKi8NCiAjZGVmaW5lIEFDOTdfUkFURVNfRlJPTlRfREFDCTANCmRpZmYgLS1naXQg YS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVj LmMNCi0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYw0KKysrIGIvc291bmQvcGNpL2Fj OTcvYWM5N19jb2RlYy5jDQpAQCAtMTMwMCwxNCArMTMwMCwxNyBAQCBzdGF0aWMgaW50IHNuZF9h Yzk3X21peGVyX2J1aWxkKGFjOTdfdCAqDQogCX0NCiAJDQogCS8qIGJ1aWxkIG1hc3RlciB0b25l IGNvbnRyb2xzICovDQotCWlmIChzbmRfYWM5N190cnlfdm9sdW1lX21peChhYzk3LCBBQzk3X01B U1RFUl9UT05FKSkgew0KLQkJZm9yIChpZHggPSAwOyBpZHggPCAyOyBpZHgrKykgew0KLQkJCWlm ICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwga2N0bCA9IHNuZF9hYzk3X2NuZXcoJnNuZF9hYzk3 X2NvbnRyb2xzX3RvbmVbaWR4XSwgYWM5NykpKSA8IDApDQotCQkJCXJldHVybiBlcnI7DQotCQkJ aWYgKGFjOTctPmlkID09IEFDOTdfSURfWU1GNzUzKSB7DQotCQkJCWtjdGwtPnByaXZhdGVfdmFs dWUgJj0gfigweGZmIDw8IDE2KTsNCi0JCQkJa2N0bC0+cHJpdmF0ZV92YWx1ZSB8PSA3IDw8IDE2 Ow0KKwlpZiAoIShhYzk3LT5mbGFncyAmIEFDOTdfSEFTX05PX1RPTkUpKSB7DQorCQlpZiAoc25k X2FjOTdfdHJ5X3ZvbHVtZV9taXgoYWM5NywgQUM5N19NQVNURVJfVE9ORSkpIHsNCisJCQlmb3Ig KGlkeCA9IDA7IGlkeCA8IDI7IGlkeCsrKSB7DQorCQkJCWlmICgoZXJyID0gc25kX2N0bF9hZGQo Y2FyZCwga2N0bCA9IHNuZF9hYzk3X2NuZXcoJnNuZF9hYzk3X2NvbnRyb2xzX3RvbmVbaWR4XSwg YWM5NykpKSA8IDApDQorCQkJCQlyZXR1cm4gZXJyOw0KKwkJCQlpZiAoYWM5Ny0+aWQgPT0gQUM5 N19JRF9ZTUY3NTMpIHsNCisJCQkJCWtjdGwtPnByaXZhdGVfdmFsdWUgJj0gfigweGZmIDw8IDE2 KTsNCisJCQkJCWtjdGwtPnByaXZhdGVfdmFsdWUgfD0gNyA8PCAxNjsNCisJCQkJfQ0KIAkJCX0N CisJCQlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCBBQzk3X01BU1RFUl9UT05FLCAweDBmMGYp Ow0KIAkJfQ0KIAkJc25kX2FjOTdfd3JpdGVfY2FjaGUoYWM5NywgQUM5N19NQVNURVJfVE9ORSwg MHgwZjBmKTsNCiAJfQ0KQEAgLTEzMzIsMTEgKzEzMzUsMTMgQEAgc3RhdGljIGludCBzbmRfYWM5 N19taXhlcl9idWlsZChhYzk3X3QgKg0KIAl9DQogCQ0KIAkvKiBidWlsZCBNSUMgY29udHJvbHMg Ki8NCi0JaWYgKHNuZF9hYzk3X3RyeV92b2x1bWVfbWl4KGFjOTcsIEFDOTdfTUlDKSkgew0KLQkJ aWYgKChlcnIgPSBzbmRfYWM5N19jbWl4X25ldyhjYXJkLCAiTWljIFBsYXliYWNrIiwgQUM5N19N SUMsIGFjOTcpKSA8IDApDQotCQkJcmV0dXJuIGVycjsNCi0JCWlmICgoZXJyID0gc25kX2N0bF9h ZGQoY2FyZCwgc25kX2FjOTdfY25ldygmc25kX2FjOTdfY29udHJvbHNfbWljX2Jvb3N0LCBhYzk3 KSkpIDwgMCkNCi0JCQlyZXR1cm4gZXJyOw0KKwlpZiAoIShhYzk3LT5mbGFncyAmIEFDOTdfSEFT X05PX01JQykpIHsNCisJCWlmIChzbmRfYWM5N190cnlfdm9sdW1lX21peChhYzk3LCBBQzk3X01J QykpIHsNCisJCQlpZiAoKGVyciA9IHNuZF9hYzk3X2NtaXhfbmV3KGNhcmQsICJNaWMgUGxheWJh Y2siLCBBQzk3X01JQywgYWM5NykpIDwgMCkNCisJCQkJcmV0dXJuIGVycjsNCisJCQlpZiAoKGVy ciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9hYzk3X2NuZXcoJnNuZF9hYzk3X2NvbnRyb2xzX21p Y19ib29zdCwgYWM5NykpKSA8IDApDQorCQkJCXJldHVybiBlcnI7DQorCQl9DQogCX0NCiANCiAJ LyogYnVpbGQgTGluZSBjb250cm9scyAqLw0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2Fj OTdfcGF0Y2guYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYw0KLS0tIGEvc291bmQvcGNp L2FjOTcvYWM5N19wYXRjaC5jDQorKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMNCkBA IC0zNzAsNDggKzM3MCwyMjYgQEAgaW50IHBhdGNoX3lhbWFoYV95bWY3NTMoYWM5N190ICogYWM5 NykNCiAgKiAgYWRkZWQgc3VwcG9ydCBmb3IgV005NzA1LFdNOTcwOCxXTTk3MDksV005NzEwLFdN OTcxMSxXTTk3MTIgYW5kIFdNOTcxNy4NCiAgKi8NCiANCi1pbnQgcGF0Y2hfd29sZnNvbjAzKGFj OTdfdCAqIGFjOTcpDQorc3RhdGljIGNvbnN0IHNuZF9rY29udHJvbF9uZXdfdCB3bTk3eHhfc25k X2FjOTdfY29udHJvbHNbXSA9IHsNCitBQzk3X0RPVUJMRSgiRnJvbnQgTWl4IFZvbCIsIEFDOTdf V005N1hYX0ZNSVhFUl9WT0wsIDgsIDAsIDMxLCAxKSwNCitBQzk3X1NJTkdMRSgiRnJvbnQgTWl4 IE11dGUiLCBBQzk3X1dNOTdYWF9GTUlYRVJfVk9MLCAxNSwgMSwgMSksDQorfTsNCisNCitpbnQg cGF0Y2hfd29sZnNvbl93bTk3MDNfc3BlY2lmaWMoYWM5N190ICogYWM5NykNCiB7DQogCS8qIFRo aXMgaXMga25vd24gdG8gd29yayBmb3IgdGhlIFZpZXdTb25pYyBWaWV3UGFkIDEwMDANCi0JICAg UmFuZG9scGggQmVudHNvbiA8YmVudHNvbkBob2xtc2pvZW4uY29tPiAqLw0KKwkgKiBSYW5kb2xw aCBCZW50c29uIDxiZW50c29uQGhvbG1zam9lbi5jb20+DQorCSAqIFdNOTcwMy85NzA3Lzk3MDgv OTcxNyANCisJICovDQorCWludCBlcnIsIGk7DQorCQ0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRSh3bTk3eHhfc25kX2FjOTdfY29udHJvbHMpOyBpKyspIHsNCisJCWlmICgoZXJyID0gc25k X2N0bF9hZGQoYWM5Ny0+YnVzLT5jYXJkLCBzbmRfYWM5N19jbmV3KCZ3bTk3eHhfc25kX2FjOTdf Y29udHJvbHNbaV0sIGFjOTcpKSkgPCAwKQ0KKwkJCXJldHVybiBlcnI7DQorCX0NCisJc25kX2Fj OTdfd3JpdGVfY2FjaGUoYWM5NywgIEFDOTdfV005N1hYX0ZNSVhFUl9WT0wsIDB4MDgwOCk7DQor CXJldHVybiAwOw0KK30NCiANCi0JLy8gV005NzAzLzk3MDcvOTcwOC85NzE3DQotCXNuZF9hYzk3 X3dyaXRlX2NhY2hlKGFjOTcsIEFDOTdfV005N1hYX0ZNSVhFUl9WT0wsIDB4MDgwOCk7DQotCXNu ZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcsIEFDOTdfR0VORVJBTF9QVVJQT1NFLCAweDgwMDApOw0K K3N0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVpbGRfb3BzIHBhdGNoX3dvbGZzb25fd205NzAzX29w cyA9IHsNCisJLmJ1aWxkX3NwZWNpZmljID0gcGF0Y2hfd29sZnNvbl93bTk3MDNfc3BlY2lmaWMs DQorfTsNCisNCitpbnQgcGF0Y2hfd29sZnNvbjAzKGFjOTdfdCAqIGFjOTcpDQorew0KKwlhYzk3 LT5idWlsZF9vcHMgPSAmcGF0Y2hfd29sZnNvbl93bTk3MDNfb3BzOw0KIAlyZXR1cm4gMDsNCiB9 DQotICANCi1pbnQgcGF0Y2hfd29sZnNvbjA0KGFjOTdfdCAqIGFjOTcpDQorDQorc3RhdGljIGNv bnN0IHNuZF9rY29udHJvbF9uZXdfdCB3bTk3MDRfc25kX2FjOTdfY29udHJvbHNbXSA9IHsNCitB Qzk3X0RPVUJMRSgiRnJvbnQgTWl4IFZvbCIsIEFDOTdfV005N1hYX0ZNSVhFUl9WT0wsIDgsIDAs IDMxLCAxKSwNCitBQzk3X1NJTkdMRSgiRnJvbnQgTWl4IE11dGUiLCBBQzk3X1dNOTdYWF9GTUlY RVJfVk9MLCAxNSwgMSwgMSksDQorQUM5N19ET1VCTEUoIlJlYXIgTWl4IFZvbCIsIEFDOTdfV005 NzA0X1JNSVhFUl9WT0wsIDgsIDAsIDMxLCAxKSwNCitBQzk3X1NJTkdMRSgiUmVhciBNaXggTXV0 ZSIsIEFDOTdfV005NzA0X1JNSVhFUl9WT0wsIDE1LCAxLCAxKSwNCitBQzk3X0RPVUJMRSgiUmVh ciBQQ00gVm9sIiwgQUM5N19XTTk3MDRfUlBDTV9WT0wsIDgsIDAsIDMxLCAxKSwNCitBQzk3X0RP VUJMRSgiU3Vycm91bmQgVm9sIiwgQUM5N19TVVJST1VORF9NQVNURVIsIDgsIDAsIDMxLCAxKSwN Cit9Ow0KKw0KK2ludCBwYXRjaF93b2xmc29uX3dtOTcwNF9zcGVjaWZpYyhhYzk3X3QgKiBhYzk3 KQ0KIHsNCi0JLy8gV005NzA0TS85NzA0UQ0KLQkvLyBzZXQgZnJvbnQgYW5kIHJlYXIgbWl4ZXIg dm9sdW1lDQotCXNuZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcsIEFDOTdfV005N1hYX0ZNSVhFUl9W T0wsIDB4MDgwOCk7DQotCXNuZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcsIEFDOTdfV005NzA0X1JN SVhFUl9WT0wsIDB4MDgwOCk7DQotCQ0KLQkvLyBwYXRjaCBmb3IgRFZEIG5vaXNlDQorCWludCBl cnIsIGk7DQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtOTcwNF9zbmRfYWM5N19jb250 cm9scyk7IGkrKykgew0KKwkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChhYzk3LT5idXMtPmNhcmQs IHNuZF9hYzk3X2NuZXcoJndtOTcwNF9zbmRfYWM5N19jb250cm9sc1tpXSwgYWM5NykpKSA8IDAp DQorCQkJcmV0dXJuIGVycjsNCisJfQ0KKwkvKiBwYXRjaCBmb3IgRFZEIG5vaXNlICovDQogCXNu ZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcsIEFDOTdfV005NzA0X1RFU1QsIDB4MDIwMCk7DQotIA0K LQkvLyBpbml0IHZvbA0KLQlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCBBQzk3X1dNOTcwNF9S UENNX1ZPTCwgMHgwODA4KTsNCi0gDQotCS8vIHNldCByZWFyIHN1cnJvdW5kIHZvbHVtZQ0KLQlz bmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCBBQzk3X1NVUlJPVU5EX01BU1RFUiwgMHgwMDAwKTsN CiAJcmV0dXJuIDA7DQogfQ0KLSAgDQorDQorc3RhdGljIHN0cnVjdCBzbmRfYWM5N19idWlsZF9v cHMgcGF0Y2hfd29sZnNvbl93bTk3MDRfb3BzID0gew0KKwkuYnVpbGRfc3BlY2lmaWMgPSBwYXRj aF93b2xmc29uX3dtOTcwNF9zcGVjaWZpYywNCit9Ow0KKw0KK2ludCBwYXRjaF93b2xmc29uMDQo YWM5N190ICogYWM5NykNCit7DQorCS8qIFdNOTcwNE0vOTcwNFEgKi8NCisJYWM5Ny0+YnVpbGRf b3BzID0gJnBhdGNoX3dvbGZzb25fd205NzA0X29wczsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2lu dCBwYXRjaF93b2xmc29uX3dtOTcwNV9zcGVjaWZpYyhhYzk3X3QgKiBhYzk3KQ0KK3sNCisJaW50 IGVyciwgaTsNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod205N3h4X3NuZF9hYzk3X2Nv bnRyb2xzKTsgaSsrKSB7DQorCQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGFjOTctPmJ1cy0+Y2Fy ZCwgc25kX2FjOTdfY25ldygmd205N3h4X3NuZF9hYzk3X2NvbnRyb2xzW2ldLCBhYzk3KSkpIDwg MCkNCisJCQlyZXR1cm4gZXJyOw0KKwl9DQorCXNuZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcsICAw eDcyLCAweDA4MDgpOw0KKwlyZXR1cm4gMDsNCit9DQorc3RhdGljIHN0cnVjdCBzbmRfYWM5N19i dWlsZF9vcHMgcGF0Y2hfd29sZnNvbl93bTk3MDVfb3BzID0gew0KKwkuYnVpbGRfc3BlY2lmaWMg PSBwYXRjaF93b2xmc29uX3dtOTcwNV9zcGVjaWZpYywNCit9Ow0KKw0KIGludCBwYXRjaF93b2xm c29uMDUoYWM5N190ICogYWM5NykNCiB7DQotCS8vIFdNOTcwNSwgV005NzEwDQotCS8vIHNldCBm cm9udCBtaXhlciB2b2x1bWUNCi0Jc25kX2FjOTdfd3JpdGVfY2FjaGUoYWM5NywgQUM5N19XTTk3 WFhfRk1JWEVSX1ZPTCwgMHgwODA4KTsNCisJLyogV005NzA1LCBXTTk3MTAgKi8NCisJYWM5Ny0+ YnVpbGRfb3BzID0gJnBhdGNoX3dvbGZzb25fd205NzA1X29wczsNCisJcmV0dXJuIDA7DQorfQ0K Kw0KK3N0YXRpYyBjb25zdCBjaGFyKiB3bTk3MTFfYWxjX3NlbGVjdFtdID0geyJOb25lIiwgIkxl ZnQiLCAiUmlnaHQiLCAiU3RlcmVvIn07DQorc3RhdGljIGNvbnN0IGNoYXIqIHdtOTcxMV9hbGNf bWl4W10gPSB7IlN0ZXJlbyIsICJSaWdodCIsICJMZWZ0IiwgIk5vbmUifTsNCitzdGF0aWMgY29u c3QgY2hhciogd205NzExX291dDNfc3JjW10gPSB7IkxlZnQiLCAiVlJFRiIsICJMZWZ0ICsgUmln aHQiLCAiTW9ubyJ9Ow0KK3N0YXRpYyBjb25zdCBjaGFyKiB3bTk3MTFfb3V0M19scnNyY1tdID0g eyJTcGsgTWl4IiwgIkhQIE1peCJ9Ow0KK3N0YXRpYyBjb25zdCBjaGFyKiB3bTk3MTFfcmVjX2Fk Y1tdID0geyJTdGVyZW8iLCAiTGVmdCIsICJSaWdodCIsICJNdXRlIn07DQorc3RhdGljIGNvbnN0 IGNoYXIqIHdtOTcxMV9iYXNlW10gPSB7IkxpbmVhciBDb250cm9sIiwgIkFkYXB0aXZlIEJvb3N0 In07DQorc3RhdGljIGNvbnN0IGNoYXIqIHdtOTcxMV9yZWNfZ2FpbltdID0geyIrMS41ZEIgU3Rl cHMiLCAiKzAuNzVkQiBTdGVwcyJ9Ow0KK3N0YXRpYyBjb25zdCBjaGFyKiB3bTk3MTFfbWljW10g PSB7Ik1pYzEiLCAiRGlmZmVyZW50aWFsIiwgIk1pYzIiLCAiU3RlcmVvIn07DQorc3RhdGljIGNv bnN0IGNoYXIqIHdtOTcxMV9yZWNfc2VsbFtdID0geyJNaWMgMSIsICJOQyIsICJOQyIsICJTcGsg TWl4IiwgIkxpbmUgTCIsICJIUCBNaXggTCIsICJQaG9uZSBNaXgiLCAiUGhvbmUifTsNCitzdGF0 aWMgY29uc3QgY2hhciogd205NzExX3JlY19zZWxyW10gPSB7Ik1pYyAyIiwgIk5DIiwgIk5DIiwg IlNwayBNaXgiLCAiTGluZSBSIiwgIkhQIE1peCBSIiwgIlBob25lIE1peCIsICJQaG9uZSJ9Ow0K Kw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWM5N19lbnVtIHdtOTcxMV9lbnVtW10gPSB7DQorQUM5 N19FTlVNX1NJTkdMRShBQzk3X1BDSV9TVklELCAxNCwgNCwgd205NzExX2FsY19zZWxlY3QpLA0K K0FDOTdfRU5VTV9TSU5HTEUoQUM5N19WSURFTywgMTAsIDQsIHdtOTcxMV9hbGNfbWl4KSwNCitB Qzk3X0VOVU1fU0lOR0xFKEFDOTdfQVVYLCA5LCA0LCB3bTk3MTFfb3V0M19zcmMpLA0KK0FDOTdf RU5VTV9TSU5HTEUoQUM5N19BVVgsIDgsIDIsIHdtOTcxMV9vdXQzX2xyc3JjKSwNCitBQzk3X0VO VU1fU0lOR0xFKEFDOTdfUkVDX1NFTCwgMTIsIDQsIHdtOTcxMV9yZWNfYWRjKSwNCitBQzk3X0VO VU1fU0lOR0xFKEFDOTdfTUFTVEVSX1RPTkUsIDE1LCAyLCB3bTk3MTFfYmFzZSksDQorQUM5N19F TlVNX1NJTkdMRShBQzk3X1JFQ19HQUlOLCAxNCwgMiwgd205NzExX3JlY19nYWluKSwNCitBQzk3 X0VOVU1fU0lOR0xFKEFDOTdfUkVDX0dBSU4sIDYsIDIsIHdtOTcxMV9yZWNfZ2FpbiksDQorQUM5 N19FTlVNX1NJTkdMRShBQzk3X01JQywgNSwgNCwgd205NzExX21pYyksDQorQUM5N19FTlVNX1NJ TkdMRShBQzk3X1JFQ19TRUwsIDgsIDgsIHdtOTcxMV9yZWNfc2VsbCksDQorQUM5N19FTlVNX1NJ TkdMRShBQzk3X1JFQ19TRUwsIDAsIDgsIHdtOTcxMV9yZWNfc2VsciksDQorfTsNCisNCitzdGF0 aWMgY29uc3Qgc25kX2tjb250cm9sX25ld190IHdtOTcxMV9zbmRfYWM5N19jb250cm9sc1tdID0g ew0KK0FDOTdfU0lOR0xFKCJBTEMgVGFyZ2V0IiwgQUM5N19DT0RFQ19DTEFTU19SRVYsIDEyLCAx NSwgMCksDQorQUM5N19TSU5HTEUoIkFMQyBIb2xkIiwgQUM5N19DT0RFQ19DTEFTU19SRVYsIDgs IDE1LCAwKSwNCitBQzk3X1NJTkdMRSgiQUxDIERlY2F5IiwgQUM5N19DT0RFQ19DTEFTU19SRVYs IDQsIDE1LCAwKSwNCitBQzk3X1NJTkdMRSgiQUxDIEF0dGFjayIsIEFDOTdfQ09ERUNfQ0xBU1Nf UkVWLCAwLCAxNSwgMCksDQorDQorQUM5N19FTlVNKCJBTEMgU2VsZWN0Iiwgd205NzExX2VudW1b MF0pLA0KK0FDOTdfU0lOR0xFKCJBTEMgTWF4IEdhaW4iLCBBQzk3X1BDSV9TVklELCAxMSwgNywg MSksDQorQUM5N19TSU5HTEUoIkFMQyBaQyBUaW1lb3V0IiwgQUM5N19QQ0lfU1ZJRCwgOSwgMywg MSksDQorQUM5N19TSU5HTEUoIkFMQyBaQyIsIEFDOTdfUENJX1NWSUQsIDgsIDEsIDEpLA0KK0FD OTdfU0lOR0xFKCJBTEMgTkciLCBBQzk3X1BDSV9TVklELCA3LCAxLCAxKSwNCitBQzk3X1NJTkdM RSgiQUxDIE5HIE11dGUiLCBBQzk3X1BDSV9TVklELCA1LCAxLCAxKSwNCitBQzk3X1NJTkdMRSgi QUxDIE5HIFRocmVzaG9sZCIsIEFDOTdfUENJX1NWSUQsIDAsIDMxLCAxKSwNCisNCitBQzk3X1NJ TkdMRSgiU2lkZSBUb25lIE11dGUiLCBBQzk3X1ZJREVPLCAxNSwgMSwgMSksDQorQUM5N19TSU5H TEUoIlNpZGUgVG9uZSBWb2wiLCBBQzk3X1ZJREVPLCAxMiwgNywgMSksDQorQUM5N19FTlVNKCJB TEMgSFAgTWl4Iiwgd205NzExX2VudW1bMV0pLA0KK0FDOTdfU0lOR0xFKCJBTEMgSFAgVm9sdW1l IiwgQUM5N19WSURFTywgNywgNywgMSksDQorDQorQUM5N19TSU5HTEUoIk91dDMgTXV0ZSIsIEFD OTdfQVVYLCAxNSwgMSwgMSksDQorQUM5N19TSU5HTEUoIk91dDMgWkMiLCBBQzk3X0FVWCwgNywg MSwgMSksDQorQUM5N19FTlVNKCJPdXQzIFNvdXJjZSIsIHdtOTcxMV9lbnVtWzJdKSwNCitBQzk3 X0VOVU0oIk91dDMgTFIgU291cmNlIiwgd205NzExX2VudW1bM10pLA0KK0FDOTdfU0lOR0xFKCJP dXQzIFZvbHVtZSIsIEFDOTdfQVVYLCAwLCAzMSwgMSksDQorDQorQUM5N19TSU5HTEUoIkJlZXAg dG8gSFAgTXV0ZSIsIEFDOTdfUENfQkVFUCwgMTUsIDEsIDEpLA0KK0FDOTdfU0lOR0xFKCJCZWVw IHRvIEhQIFZvbCIsIEFDOTdfUENfQkVFUCwgMTIsIDcsIDEpLA0KK0FDOTdfU0lOR0xFKCJCZWVw IHRvIFNUIE11dGUiLCBBQzk3X1BDX0JFRVAsIDExLCAxLCAxKSwNCitBQzk3X1NJTkdMRSgiQmVl cCB0byBTVCBWb2wiLCBBQzk3X1BDX0JFRVAsIDgsIDcsIDEpLA0KK0FDOTdfU0lOR0xFKCJCZWVw IHRvIFBob25lIE11dGUiLCBBQzk3X1BDX0JFRVAsIDcsIDEsIDEpLA0KK0FDOTdfU0lOR0xFKCJC ZWVwIHRvIFBob25lIFZvbCIsIEFDOTdfUENfQkVFUCwgNCwgNywgMSksDQorDQorQUM5N19TSU5H TEUoIkFVWCBEQUMgdG8gSFAgTXV0ZSIsIEFDOTdfQ0QsIDE1LCAxLCAxKSwNCitBQzk3X1NJTkdM RSgiQVVYIERBQyB0byBIUCBWb2wiLCBBQzk3X0NELCAxMiwgNywgMSksDQorQUM5N19TSU5HTEUo IkFVWCBEQUMgdG8gU1QgTXV0ZSIsIEFDOTdfQ0QsIDExLCAxLCAxKSwNCitBQzk3X1NJTkdMRSgi QVVYIERBQyB0byBTVCBWb2wiLCBBQzk3X0NELCA4LCA3LCAxKSwNCitBQzk3X1NJTkdMRSgiQVVY IERBQyB0byBQaG9uZSBNdXRlIiwgQUM5N19DRCwgNywgMSwgMSksDQorQUM5N19TSU5HTEUoIkFV WCBEQUMgdG8gUGhvbmUgVm9sIiwgQUM5N19DRCwgNCwgNywgMSksDQorDQorQUM5N19TSU5HTEUo IlBob25lIHRvIEhQIE11dGUiLCBBQzk3X1BIT05FLCAxNSwgMSwgMSksDQorQUM5N19TSU5HTEUo IlBob25lIHRvIFNwayBNdXRlIiwgQUM5N19QSE9ORSwgMTQsIDEsIDEpLA0KKw0KK0FDOTdfU0lO R0xFKCJMaW5lIHRvIEhQIE11dGUiLCBBQzk3X0xJTkUsIDE1LCAxLCAxKSwNCitBQzk3X1NJTkdM RSgiTGluZSB0byBTcGsgTXV0ZSIsIEFDOTdfTElORSwgMTQsIDEsIDEpLA0KK0FDOTdfU0lOR0xF KCJMaW5lIHRvIFBob25lIE11dGUiLCBBQzk3X0xJTkUsIDEzLCAxLCAxKSwNCisNCitBQzk3X1NJ TkdMRSgiREFDIHRvIEhQIE11dGUiLCBBQzk3X1BDTSwgMTUsIDEsIDEpLA0KK0FDOTdfU0lOR0xF KCJEQUMgdG8gU3BrIE11dGUiLCBBQzk3X1BDTSwgMTQsIDEsIDEpLA0KK0FDOTdfU0lOR0xFKCJE QUMgdG8gUGhvbmUgTXV0ZSIsIEFDOTdfUENNLCAxMywgMSwgMSksDQorDQorQUM5N19TSU5HTEUo IlJlYyAyMGRCIEJvb3N0IiwgQUM5N19SRUNfU0VMLCAxNCwgMSwgMSksDQorQUM5N19FTlVNKCJB REMgdG8gUGhvbmUgTWl4Iiwgd205NzExX2VudW1bNF0pLA0KK0FDOTdfU0lOR0xFKCJBREMgdG8g UGhvbmUgMjBkQiBCb29zdCIsIEFDOTdfUkVDX1NFTCwgMTEsIDEsIDEpLA0KK0FDOTdfRU5VTSgi UmVjb3JkIFNlbGVjdCBMIiwgd205NzExX2VudW1bOV0pLA0KK0FDOTdfRU5VTSgiUmVjb3JkIFNl bGVjdCBSIiwgd205NzExX2VudW1bMTBdKSwNCisNCitBQzk3X1NJTkdMRSgiM0QgdXBwZXIgY3V0 LW9mZiIsIEFDOTdfM0RfQ09OVFJPTCwgNSwgMSwgMSksDQorQUM5N19TSU5HTEUoIjNEIGxvd2Vy IGN1dC1vZmYiLCBBQzk3XzNEX0NPTlRST0wsIDQsIDEsIDEpLA0KKw0KK0FDOTdfRU5VTSgiQmFz cyBDb250cm9sIiwgd205NzExX2VudW1bNV0pLA0KK0FDOTdfU0lOR0xFKCJCYXNzIGN1dC1vZmYi LCBBQzk3X01BU1RFUl9UT05FLCAxMiwgMSwgMSksDQorQUM5N19TSU5HTEUoIlRvbmUgY3V0LW9m ZiIsIEFDOTdfTUFTVEVSX1RPTkUsIDQsIDEsIDEpLA0KK0FDOTdfU0lOR0xFKCJEQUMgQXR0ZW51 YXRlICgtNmRCKSIsIEFDOTdfTUFTVEVSX1RPTkUsIDYsIDEsIDApLA0KKw0KK0FDOTdfU0lOR0xF KCJSZWMgTXV0ZSIsIEFDOTdfUkVDX0dBSU4sIDE1LCAxLCAxKSwNCitBQzk3X0VOVU0oIlJlYyBH YWluIEwgU3RlcHMiLCB3bTk3MTFfZW51bVs2XSksDQorQUM5N19FTlVNKCJSZWMgR2FpbiBSIFN0 ZXBzIiwgd205NzExX2VudW1bN10pLA0KK0FDOTdfU0lOR0xFKCJSZWMgR2FpbiBMIiwgQUM5N19S RUNfR0FJTiwgOCwgMTUsIDEpLA0KK0FDOTdfU0lOR0xFKCJSZWMgR2FpbiBSIiwgQUM5N19SRUNf R0FJTiwgMCwgMTUsIDEpLA0KK0FDOTdfU0lOR0xFKCJSZWMgWkMiLCBBQzk3X1JFQ19HQUlOLCA3 LCAxLCAxKSwNCisNCitBQzk3X1NJTkdMRSgiTWljMSB0byBQaG9uZSBNdXRlIiwgQUM5N19NSUMs IDE0LCAxLCAxKSwNCitBQzk3X1NJTkdMRSgiTWljMiB0byBQaG9uZSBNdXRlIiwgQUM5N19NSUMs IDEzLCAxLCAxKSwNCitBQzk3X0VOVU0oIk1pYyBTZWxlY3QgKEV4dCkiLCB3bTk3MTFfZW51bVs4 XSksDQorQUM5N19TSU5HTEUoIk1pYzEgVm9sIiwgQUM5N19NSUMsIDgsIDMyLCAxKSwNCitBQzk3 X1NJTkdMRSgiTWljIDIwZEIgQm9vc3QiLCBBQzk3X01JQywgNywgMSwgMSksDQorDQorQUM5N19T SU5HTEUoIk1hc3RlciBWb2wgWkMiLCBBQzk3X01BU1RFUiwgNywgMSwgMSksDQorQUM5N19TSU5H TEUoIkhQIFZvbCBaQyIsIEFDOTdfSEVBRFBIT05FLCA3LCAxLCAxKSwNCitBQzk3X1NJTkdMRSgi TW9ubyBWb2wgWkMiLCBBQzk3X01BU1RFUl9NT05PLCA3LCAxLCAxKSwNCit9Ow0KKw0KK2ludCBw YXRjaF93b2xmc29uX3dtOTcxMV9zcGVjaWZpYyhhYzk3X3QgKiBhYzk3KQ0KK3sNCisJaW50IGVy ciwgaTsNCisJDQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtOTcxMV9zbmRfYWM5N19j b250cm9scyk7IGkrKykgew0KKwkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChhYzk3LT5idXMtPmNh cmQsIHNuZF9hYzk3X2NuZXcoJndtOTcxMV9zbmRfYWM5N19jb250cm9sc1tpXSwgYWM5NykpKSA8 IDApDQorCQkJcmV0dXJuIGVycjsNCisJfQ0KKwlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCAg QUM5N19DT0RFQ19DTEFTU19SRVYsIDB4MDgwOCk7DQorCXNuZF9hYzk3X3dyaXRlX2NhY2hlKGFj OTcsICBBQzk3X1BDSV9TVklELCAweDA4MDgpOw0KKwlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3 LCAgQUM5N19WSURFTywgMHgwODA4KTsNCisJc25kX2FjOTdfd3JpdGVfY2FjaGUoYWM5NywgIEFD OTdfQVVYLCAweDA4MDgpOw0KKwlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCAgQUM5N19QQ19C RUVQLCAweDA4MDgpOw0KKwlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCAgQUM5N19DRCwgMHgw MDAwKTsNCiAJcmV0dXJuIDA7DQogfQ0KIA0KK3N0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVpbGRf b3BzIHBhdGNoX3dvbGZzb25fd205NzExX29wcyA9IHsNCisJLmJ1aWxkX3NwZWNpZmljID0gcGF0 Y2hfd29sZnNvbl93bTk3MTFfc3BlY2lmaWMsDQorfTsNCisNCiBpbnQgcGF0Y2hfd29sZnNvbjEx KGFjOTdfdCAqIGFjOTcpDQogew0KLQkvLyBXTTk3MTEsIFdNOTcxMg0KLQkvLyBzZXQgb3V0MyB2 b2x1bWUNCi0Jc25kX2FjOTdfd3JpdGVfY2FjaGUoYWM5NywgQUM5N19XTTk3MTFfT1VUM1ZPTCwg MHgwODA4KTsNCisJLyogV005NzExLCBXTTk3MTIgKi8NCisJYWM5Ny0+YnVpbGRfb3BzID0gJnBh dGNoX3dvbGZzb25fd205NzExX29wczsNCisNCisJYWM5Ny0+ZmxhZ3MgfD0gQUM5N19IQVNfTk9f UkVDX0dBSU4gfCBBQzk3X1NURVJFT19NVVRFUyB8IEFDOTdfSEFTX05PX01JQyB8DQorCQlBQzk3 X0hBU19OT19QQ19CRUVQIHwgQUM5N19IQVNfTk9fVklERU8gfCBBQzk3X0hBU19OT19DRDsNCisJ DQogCXJldHVybiAwOw0KIH0NCiANCkBAIC00MTksNiArNTk3LDE3IEBAIHN0YXRpYyBjb25zdCBj aGFyKiB3bTk3MTNfbWljX21peGVyW10gPSANCiBzdGF0aWMgY29uc3QgY2hhciogd205NzEzX3Jl Y19tdXhbXSA9IHsiU3RlcmVvIiwgIkxlZnQiLCAiUmlnaHQiLCAiTXV0ZSJ9Ow0KIHN0YXRpYyBj b25zdCBjaGFyKiB3bTk3MTNfcmVjX3NyY19sW10gPSB7Ik1pYzEiLCAiTWljMiIsICJMaW5lIEwi LCAiTW9ubyBJbiIsICJIUCBNaXggTCIsICJTcGsgTWl4IiwgIk1vbm8gTWl4IiwgIlpoIn07DQog c3RhdGljIGNvbnN0IGNoYXIqIHdtOTcxM19yZWNfc3JjX3JbXSA9IHsiTWljMSIsICJNaWMyIiwg IkxpbmUgUiIsICJNb25vIEluIiwgIkhQIE1peCBSIiwgIlNwayBNaXgiLCAiTW9ubyBNaXgiLCAi WmgifTsNCitzdGF0aWMgY29uc3QgY2hhciogd205NzEzX3JlY19nYWluW10gPSB7IisxLjVkQiBT dGVwcyIsICIrMC43NWRCIFN0ZXBzIn07DQorc3RhdGljIGNvbnN0IGNoYXIqIHdtOTcxM19hbGNf c2VsZWN0W10gPSB7Ik5vbmUiLCAiTGVmdCIsICJSaWdodCIsICJTdGVyZW8ifTsNCitzdGF0aWMg Y29uc3QgY2hhciogd205NzEzX21vbm9fcGdhW10gPSB7IlZtaWQiLCAiWmgiLCAiTW9ubyBNaXgi LCAiSW52IDEifTsNCitzdGF0aWMgY29uc3QgY2hhciogd205NzEzX3Nwa2xfcGdhW10gPSB7IlZt aWQiLCAiWmgiLCAiSFAgTWl4IEwiLCAiU3BrIE1peCIsICJJbnYgMSIsICJOQyIsICJOQyIsICJO QyJ9Ow0KK3N0YXRpYyBjb25zdCBjaGFyKiB3bTk3MTNfc3Brcl9wZ2FbXSA9IHsiVm1pZCIsICJa aCIsICJIUCBNaXggUiIsICJTcGsgTWl4IiwgIkludiAyIiwgIk5DIiwgIk5DIiwgIk5DIn07DQor c3RhdGljIGNvbnN0IGNoYXIqIHdtOTcxM19ocGxfcGdhW10gPSB7IlZtaWQiLCAiWmgiLCAiSFAg TWl4IEwiLCAiTkMifTsNCitzdGF0aWMgY29uc3QgY2hhciogd205NzEzX2hwcl9wZ2FbXSA9IHsi Vm1pZCIsICJaaCIsICJIUCBNaXggUiIsICJOQyJ9Ow0KK3N0YXRpYyBjb25zdCBjaGFyKiB3bTk3 MTNfb3V0M19wZ2FbXSA9IHsiVm1pZCIsICJaaCIsICJJbnYgMSIsICJOQyJ9Ow0KK3N0YXRpYyBj b25zdCBjaGFyKiB3bTk3MTNfb3V0NF9wZ2FbXSA9IHsiVm1pZCIsICJaaCIsICJJbnYgMiIsICJO QyJ9Ow0KK3N0YXRpYyBjb25zdCBjaGFyKiB3bTk3MTNfZGFjX2ludltdID0geyJPZmYiLCAiTW9u byBNaXgiLCAiU3BrIE1peCIsICJIUCBNaXggTCIsICJIUCBNaXggUiIsICJIUCBNaXggTW9ubyIs ICJOQyIsICJWbWlkIn07DQorc3RhdGljIGNvbnN0IGNoYXIqIHdtOTcxM19iYXNlW10gPSB7Ikxp bmVhciBDb250cm9sIiwgIkFkYXB0aXZlIEJvb3N0In07DQogDQogc3RhdGljIGNvbnN0IHN0cnVj dCBhYzk3X2VudW0gd205NzEzX2VudW1bXSA9IHsNCiBBQzk3X0VOVU1fU0lOR0xFKEFDOTdfTElO RSwgMywgNCwgd205NzEzX21pY19taXhlciksDQpAQCAtNDI2LDg1ICs2MTUsMTU2IEBAIEFDOTdf RU5VTV9TSU5HTEUoQUM5N19WSURFTywgMTQsIDQsIHdtOTcNCiBBQzk3X0VOVU1fU0lOR0xFKEFD OTdfVklERU8sIDksIDQsIHdtOTcxM19yZWNfbXV4KSwNCiBBQzk3X0VOVU1fU0lOR0xFKEFDOTdf VklERU8sIDMsIDgsIHdtOTcxM19yZWNfc3JjX2wpLA0KIEFDOTdfRU5VTV9TSU5HTEUoQUM5N19W SURFTywgMCwgOCwgd205NzEzX3JlY19zcmNfciksDQotfTsNCi0NCi1zdGF0aWMgY29uc3Qgc25k X2tjb250cm9sX25ld190IHdtMTNfc25kX2FjOTdfY29udHJvbHNfbGluZV9pbltdID0gew0KLUFD OTdfRE9VQkxFKCJMaW5lIEluIFZvbHVtZSIsIEFDOTdfUENfQkVFUCwgOCwgMCwgMzEsIDEpLA0K LUFDOTdfU0lOR0xFKCJMaW5lIEluIHRvIEhlYWRwaG9uZSBNdXRlIiwgQUM5N19QQ19CRUVQLCAx NSwgMSwgMSksDQotQUM5N19TSU5HTEUoIkxpbmUgSW4gdG8gU3BlYWtlciBNdXRlIiwgQUM5N19Q Q19CRUVQLCAxNCwgMSwgMSksDQorQUM5N19FTlVNX1NJTkdMRShBQzk3X0NELCAxNCwgMiwgd205 NzEzX3JlY19nYWluKSwNCitBQzk3X0VOVU1fU0lOR0xFKEFDOTdfUENJX1NWSUQsIDE0LCA0LCB3 bTk3MTNfYWxjX3NlbGVjdCksDQorQUM5N19FTlVNX1NJTkdMRShBQzk3X1JFQ19HQUlOLCAxNCwg NCwgd205NzEzX21vbm9fcGdhKSwNCitBQzk3X0VOVU1fU0lOR0xFKEFDOTdfUkVDX0dBSU4sIDEx LCA4LCB3bTk3MTNfc3BrbF9wZ2EpLA0KK0FDOTdfRU5VTV9TSU5HTEUoQUM5N19SRUNfR0FJTiwg OCwgOCwgd205NzEzX3Nwa3JfcGdhKSwNCitBQzk3X0VOVU1fU0lOR0xFKEFDOTdfUkVDX0dBSU4s IDYsIDQsIHdtOTcxM19ocGxfcGdhKSwNCitBQzk3X0VOVU1fU0lOR0xFKEFDOTdfUkVDX0dBSU4s IDQsIDQsIHdtOTcxM19ocHJfcGdhKSwNCitBQzk3X0VOVU1fU0lOR0xFKEFDOTdfUkVDX0dBSU4s IDIsIDQsIHdtOTcxM19vdXQzX3BnYSksDQorQUM5N19FTlVNX1NJTkdMRShBQzk3X1JFQ19HQUlO LCAwLCA0LCB3bTk3MTNfb3V0NF9wZ2EpLA0KK0FDOTdfRU5VTV9ET1VCTEUoQUM5N19SRUNfR0FJ Tl9NSUMsIDEzLCAxMCwgOCwgd205NzEzX2RhY19pbnYpLA0KK0FDOTdfRU5VTV9TSU5HTEUoQUM5 N19HRU5FUkFMX1BVUlBPU0UsIDE1LCAyLCB3bTk3MTNfYmFzZSksDQorQUM5N19FTlVNX1NJTkdM RShBQzk3X0NELCA2LCAyLCB3bTk3MTNfcmVjX2dhaW4pLA0KK307DQorDQorc3RhdGljIGNvbnN0 IHNuZF9rY29udHJvbF9uZXdfdCB3bTEzX3NuZF9hYzk3X2NvbnRyb2xzW10gPSB7DQorQUM5N19T SU5HTEUoIkxpbmUgSW4gVm9sIEwiLCBBQzk3X1BDX0JFRVAsIDgsIDMxLCAwKSwNCitBQzk3X1NJ TkdMRSgiTGluZSBJbiBWb2wgUiIsIEFDOTdfUENfQkVFUCwgMCwgMzEsIDApLA0KK0FDOTdfU0lO R0xFKCJMaW5lIEluIHRvIEhQIE11dGUiLCBBQzk3X1BDX0JFRVAsIDE1LCAxLCAxKSwNCitBQzk3 X1NJTkdMRSgiTGluZSBJbiB0byBTcGsgTXV0ZSIsIEFDOTdfUENfQkVFUCwgMTQsIDEsIDEpLA0K IEFDOTdfU0lOR0xFKCJMaW5lIEluIHRvIE1vbm8gTXV0ZSIsIEFDOTdfUENfQkVFUCwgMTMsIDEs IDEpLA0KLX07DQogDQotc3RhdGljIGNvbnN0IHNuZF9rY29udHJvbF9uZXdfdCB3bTEzX3NuZF9h Yzk3X2NvbnRyb2xzX2RhY1tdID0gew0KLUFDOTdfRE9VQkxFKCJEQUMgVm9sdW1lIiwgQUM5N19Q SE9ORSwgOCwgMCwgMzEsIDEpLA0KK0FDOTdfU0lOR0xFKCJEQUMgVm9sIEwiLCBBQzk3X1BIT05F LCA4LCAzMSwgMSksDQorQUM5N19TSU5HTEUoIkRBQyBWb2wgUiIsIEFDOTdfUEhPTkUsIDAsIDMx LCAxKSwNCiBBQzk3X1NJTkdMRSgiREFDIHRvIEhlYWRwaG9uZSBNdXRlIiwgQUM5N19QSE9ORSwg MTUsIDEsIDEpLA0KIEFDOTdfU0lOR0xFKCJEQUMgdG8gU3BlYWtlciBNdXRlIiwgQUM5N19QSE9O RSwgMTQsIDEsIDEpLA0KIEFDOTdfU0lOR0xFKCJEQUMgdG8gTW9ubyBNdXRlIiwgQUM5N19QSE9O RSwgMTMsIDEsIDEpLA0KLX07DQogDQotc3RhdGljIGNvbnN0IHNuZF9rY29udHJvbF9uZXdfdCB3 bTEzX3NuZF9hYzk3X2NvbnRyb2xzX21pY1tdID0gew0KIEFDOTdfU0lOR0xFKCJNSUNBIFZvbHVt ZSIsIEFDOTdfTUlDLCA4LCAzMSwgMSksDQogQUM5N19TSU5HTEUoIk1JQ0IgVm9sdW1lIiwgQUM5 N19NSUMsIDAsIDMxLCAxKSwNCiBBQzk3X1NJTkdMRSgiTUlDQSB0byBNb25vIE11dGUiLCBBQzk3 X0xJTkUsIDcsIDEsIDEpLA0KIEFDOTdfU0lOR0xFKCJNSUNCIHRvIE1vbm8gTXV0ZSIsIEFDOTdf TElORSwgNiwgMSwgMSksDQogQUM5N19TSU5HTEUoIk1JQyBCb29zdCAoKzIwZEIpIiwgQUM5N19M SU5FLCA1LCAxLCAxKSwNCi1BQzk3X0VOVU0oIk1JQyBIZWFkcGhvbmUgUm91dGluZyIsIHdtOTcx M19lbnVtWzBdKSwNCi1BQzk3X1NJTkdMRSgiTUlDIEhlYWRwaG9uZSBNaXhlciBWb2x1bWUiLCBB Qzk3X0xJTkUsIDAsIDcsIDEpDQotfTsNCitBQzk3X0VOVU0oIk1JQyBIUCBSb3V0aW5nIiwgd205 NzEzX2VudW1bMF0pLA0KK0FDOTdfU0lOR0xFKCJNSUMgSFAgTWl4IFZvbCIsIEFDOTdfTElORSwg MCwgNywgMSksDQogDQotc3RhdGljIGNvbnN0IHNuZF9rY29udHJvbF9uZXdfdCB3bTEzX3NuZF9h Yzk3X2NvbnRyb2xzX2FkY1tdID0gew0KIEFDOTdfU0lOR0xFKCJBREMgTXV0ZSIsIEFDOTdfQ0Qs IDE1LCAxLCAxKSwNCi1BQzk3X0RPVUJMRSgiR2FpbiBTdGVwIFNpemUgKDEuNWRCLzAuNzVkQiki LCBBQzk3X0NELCAxNCwgNiwgMSwgMSksDQotQUM5N19ET1VCTEUoIkFEQyBWb2x1bWUiLEFDOTdf Q0QsIDgsIDAsIDE1LCAwKSwNCitBQzk3X0VOVU0oIkdhaW4gU3RlcCBMIiwgd205NzEzX2VudW1b NV0pLA0KK0FDOTdfRU5VTSgiR2FpbiBTdGVwIFIiLCB3bTk3MTNfZW51bVsxNl0pLA0KK0FDOTdf U0lOR0xFKCJBREMgVm9sIEwiLCBBQzk3X0NELCA4LCAxNSwgMCksDQorQUM5N19TSU5HTEUoIkFE QyBWb2wgUiIsIEFDOTdfQ0QsIDAsIDE1LCAwKSwNCiBBQzk3X1NJTkdMRSgiQURDIFplcm8gQ3Jv c3MiLCBBQzk3X0NELCA3LCAxLCAxKSwNCi19Ow0KIA0KLXN0YXRpYyBjb25zdCBzbmRfa2NvbnRy b2xfbmV3X3Qgd20xM19zbmRfYWM5N19jb250cm9sc19yZWNzZWxbXSA9IHsNCi1BQzk3X0VOVU0o IlJlY29yZCB0byBIZWFkcGhvbmUgUGF0aCIsIHdtOTcxM19lbnVtWzFdKSwNCi1BQzk3X1NJTkdM RSgiUmVjb3JkIHRvIEhlYWRwaG9uZSBWb2x1bWUiLCBBQzk3X1ZJREVPLCAxMSwgNywgMCksDQor QUM5N19FTlVNKCJSZWNvcmQgdG8gSFAgTWl4Iiwgd205NzEzX2VudW1bMV0pLA0KK0FDOTdfU0lO R0xFKCJSZWNvcmQgdG8gSFAgVm9sIiwgQUM5N19WSURFTywgMTEsIDcsIDEpLA0KIEFDOTdfRU5V TSgiUmVjb3JkIHRvIE1vbm8gUGF0aCIsIHdtOTcxM19lbnVtWzJdKSwNCiBBQzk3X1NJTkdMRSgi UmVjb3JkIHRvIE1vbm8gQm9vc3QgKCsyMGRCKSIsIEFDOTdfVklERU8sIDgsIDEsIDApLA0KIEFD OTdfU0lOR0xFKCJSZWNvcmQgQURDIEJvb3N0ICgrMjBkQikiLCBBQzk3X1ZJREVPLCA2LCAxLCAw KSwNCiBBQzk3X0VOVU0oIlJlY29yZCBTZWxlY3QgTGVmdCIsIHdtOTcxM19lbnVtWzNdKSwNCiBB Qzk3X0VOVU0oIlJlY29yZCBTZWxlY3QgUmlnaHQiLCB3bTk3MTNfZW51bVs0XSksDQorDQorQUM5 N19TSU5HTEUoIkFMQyBUYXJnZXQiLCBBQzk3X0NPREVDX0NMQVNTX1JFViwgMTIsIDE1LCAwKSwN CitBQzk3X1NJTkdMRSgiQUxDIEhvbGQiLCBBQzk3X0NPREVDX0NMQVNTX1JFViwgOCwgMTUsIDAp LA0KK0FDOTdfU0lOR0xFKCJBTEMgRGVjYXkiLCBBQzk3X0NPREVDX0NMQVNTX1JFViwgNCwgMTUs IDApLA0KK0FDOTdfU0lOR0xFKCJBTEMgQXR0YWNrIiwgQUM5N19DT0RFQ19DTEFTU19SRVYsIDAs IDE1LCAwKSwNCisNCitBQzk3X0VOVU0oIkFMQyBTZWxlY3QiLCB3bTk3MTNfZW51bVs2XSksDQor QUM5N19TSU5HTEUoIkFMQyBNYXggR2FpbiIsIEFDOTdfUENJX1NWSUQsIDExLCA3LCAwKSwNCitB Qzk3X1NJTkdMRSgiQUxDIFpDIFRpbWVvdXQiLCBBQzk3X1BDSV9TVklELCA5LCAzLCAwKSwNCitB Qzk3X1NJTkdMRSgiQUxDIFpDIiwgQUM5N19QQ0lfU1ZJRCwgOCwgMSwgMCksDQorQUM5N19TSU5H TEUoIkFMQyBORyIsIEFDOTdfUENJX1NWSUQsIDcsIDEsIDApLA0KK0FDOTdfU0lOR0xFKCJBTEMg TkcgTXV0ZSIsIEFDOTdfUENJX1NWSUQsIDUsIDEsIDEpLA0KK0FDOTdfU0lOR0xFKCJBTEMgTkcg VGhyZXNob2xkIiwgQUM5N19QQ0lfU1ZJRCwgMCwgMzEsIDApLA0KKw0KK0FDOTdfU0lOR0xFKCJN YXN0ZXIgVm9sIFpDIExlZnQiLCBBQzk3X01BU1RFUiwgMTQsIDEsIDApLA0KK0FDOTdfU0lOR0xF KCJNYXN0ZXIgVm9sIFpDIFJpZ2h0IiwgQUM5N19NQVNURVIsIDYsIDEsIDApLA0KK0FDOTdfU0lO R0xFKCJIUCBWb2wgWkMgTGVmdCIsIEFDOTdfSEVBRFBIT05FLCAxNCwgMSwgMCksDQorQUM5N19T SU5HTEUoIkhQIFZvbCBaQyBSaWdodCIsIEFDOTdfSEVBRFBIT05FLCA2LCAxLCAwKSwNCitBQzk3 X1NJTkdMRSgiT3V0My80IFZvbCBaQyBMZWZ0IiwgQUM5N19NQVNURVJfTU9OTywgMTQsIDEsIDAp LA0KK0FDOTdfU0lOR0xFKCJPdXQzLzQgVm9sIFpDIFJpZ2h0IiwgQUM5N19NQVNURVJfTU9OTywg NiwgMSwgMCksDQorQUM5N19TSU5HTEUoIk1hc3RlciBWb2wgTXV0ZSBMZWZ0IiwgQUM5N19NQVNU RVIsIDcsIDEsIDEpLA0KK0FDOTdfU0lOR0xFKCJIUCBWb2wgTXV0ZSBMZWZ0IiwgQUM5N19IRUFE UEhPTkUsIDcsIDEsIDEpLA0KK0FDOTdfU0lOR0xFKCJPdXQzLzQgVm9sIE11dGUgTGVmdCIsIEFD OTdfTUFTVEVSX01PTk8sIDcsIDEsIDEpLA0KKw0KK0FDOTdfU0lOR0xFKCJNb25vIEluIHRvIEhQ IE11dGUiLCBBQzk3X01BU1RFUl9UT05FLCAxNSwgMSwgMSksDQorQUM5N19TSU5HTEUoIk1vbm8g SW4gdG8gU3BrIE11dGUiLCBBQzk3X01BU1RFUl9UT05FLCAxNCwgMSwgMSksDQorQUM5N19TSU5H TEUoIk1vbm8gSW4gVm9sIiwgQUM5N19NQVNURVJfVE9ORSwgOCwgMzEsIDEpLA0KK0FDOTdfU0lO R0xFKCJNb25vIE11dGUiLCBBQzk3X01BU1RFUl9UT05FLCA3LCAxLCAxKSwNCitBQzk3X1NJTkdM RSgiTW9ubyBaQyIsIEFDOTdfTUFTVEVSX1RPTkUsIDYsIDEsIDEpLA0KK0FDOTdfU0lOR0xFKCJN b25vIFZvbCIsIEFDOTdfTUFTVEVSX1RPTkUsIDAsIDMxLCAxKSwNCisNCitBQzk3X1NJTkdMRSgi UENCRUVQIHRvIEhQIE11dGUiLCBBQzk3X0FVWCwgMTUsIDEsIDEpLA0KK0FDOTdfU0lOR0xFKCJQ Q0JFRVAgdG8gSFAgVm9sIiwgQUM5N19BVVgsIDEyLCA3LCAxKSwNCitBQzk3X1NJTkdMRSgiUENC RUVQIHRvIFNwayBNdXRlIiwgQUM5N19BVVgsIDExLCAxLCAxKSwNCitBQzk3X1NJTkdMRSgiUENC RUVQIHRvIFNwayBWb2wiLCBBQzk3X0FVWCwgOCwgNywgMSksDQorQUM5N19TSU5HTEUoIlBDQkVF UCB0byBNb25vIE11dGUiLCBBQzk3X0FVWCwgNywgMSwgMSksDQorQUM5N19TSU5HTEUoIlBDQkVF UCB0byBNb25vIFZvbCIsIEFDOTdfQVVYLCA0LCA3LCAxKSwNCisNCitBQzk3X1NJTkdMRSgiVm9p Y2UgdG8gSFAgTXV0ZSIsIEFDOTdfUENNLCAxNSwgMSwgMSksDQorQUM5N19TSU5HTEUoIlZvaWNl IHRvIEhQIFZvbCIsIEFDOTdfUENNLCAxMiwgNywgMSksDQorQUM5N19TSU5HTEUoIlZvaWNlIHRv IFNwayBNdXRlIiwgQUM5N19QQ00sIDExLCAxLCAxKSwNCitBQzk3X1NJTkdMRSgiVm9pY2UgdG8g U3BrIFZvbCIsIEFDOTdfUENNLCA4LCA3LCAxKSwNCitBQzk3X1NJTkdMRSgiVm9pY2UgdG8gTW9u byBNdXRlIiwgQUM5N19QQ00sIDcsIDEsIDEpLA0KK0FDOTdfU0lOR0xFKCJWb2ljZSB0byBNb25v IFZvbCIsIEFDOTdfUENNLCA0LCA3LCAxKSwNCisNCitBQzk3X1NJTkdMRSgiQXV4IHRvIEhQIE11 dGUiLCBBQzk3X1JFQ19TRUwsIDE1LCAxLCAxKSwNCitBQzk3X1NJTkdMRSgiQXV4IHRvIEhQIFZv bCIsIEFDOTdfUkVDX1NFTCwgMTIsIDcsIDEpLA0KK0FDOTdfU0lOR0xFKCJBdXggdG8gU3BrIE11 dGUiLCBBQzk3X1JFQ19TRUwsIDExLCAxLCAxKSwNCitBQzk3X1NJTkdMRSgiQXV4IHRvIFNwayBW b2wiLCBBQzk3X1JFQ19TRUwsIDgsIDcsIDEpLA0KK0FDOTdfU0lOR0xFKCJBdXggdG8gTW9ubyBN dXRlIiwgQUM5N19SRUNfU0VMLCA3LCAxLCAxKSwNCitBQzk3X1NJTkdMRSgiQXV4IHRvIE1vbm8g Vm9sIiwgQUM5N19SRUNfU0VMLCA0LCA3LCAxKSwNCisNCitBQzk3X0VOVU0oIk1vbm8gSW5wdXQi LCB3bTk3MTNfZW51bVs3XSksDQorQUM5N19FTlVNKCJTcGsgTCBJbnB1dCIsIHdtOTcxM19lbnVt WzhdKSwNCitBQzk3X0VOVU0oIlNwayBSIElucHV0Iiwgd205NzEzX2VudW1bOV0pLA0KK0FDOTdf RU5VTSgiSFAgTCBJbnB1dCIsIHdtOTcxM19lbnVtWzEwXSksDQorQUM5N19FTlVNKCJIUCBSIElu cHV0Iiwgd205NzEzX2VudW1bMTFdKSwNCitBQzk3X0VOVU0oIk91dCAzIElucHV0Iiwgd205NzEz X2VudW1bMTJdKSwNCitBQzk3X0VOVU0oIk91dCA0IElucHV0Iiwgd205NzEzX2VudW1bMTNdKSwN CisNCitBQzk3X0VOVU0oIkJhc3MgQ29udHJvbCIsIHdtOTcxM19lbnVtWzE1XSksDQorQUM5N19T SU5HTEUoIkJhc3MgY3V0LW9mZiIsIEFDOTdfR0VORVJBTF9QVVJQT1NFLCAxMiwgMSwgMSksDQor QUM5N19TSU5HTEUoIlRvbmUgY3V0LW9mZiIsIEFDOTdfR0VORVJBTF9QVVJQT1NFLCA0LCAxLCAx KSwNCitBQzk3X1NJTkdMRSgiREFDIEF0dGVudWF0ZSAoLTZkQikiLCBBQzk3X0dFTkVSQUxfUFVS UE9TRSwgNiwgMSwgMCksDQorQUM5N19TSU5HTEUoIkJhc3MgSW50ZW5zaXR5IiwgQUM5N19HRU5F UkFMX1BVUlBPU0UsIDgsIDE1LCAxKSwNCitBQzk3X1NJTkdMRSgiVG9uZSBJbnRlbnNpdHkiLCBB Qzk3X0dFTkVSQUxfUFVSUE9TRSwgMCwgMTUsIDEpLA0KK307DQorDQorc3RhdGljIGNvbnN0IHNu ZF9rY29udHJvbF9uZXdfdCB3bTEzX3NuZF9hYzk3X2NvbnRyb2xzXzNkW10gPSB7DQorQUM5N19F TlVNKCJJbnYgSW5wdXQiLCB3bTk3MTNfZW51bVsxNF0pLA0KK0FDOTdfU0lOR0xFKCIzRCB1cHBl ciBjdXQtb2ZmIiwgQUM5N19SRUNfR0FJTl9NSUMsIDUsIDEsIDApLA0KK0FDOTdfU0lOR0xFKCIz RCBsb3dlciBjdXQtb2ZmIiwgQUM5N19SRUNfR0FJTl9NSUMsIDQsIDEsIDApLA0KK0FDOTdfU0lO R0xFKCIzRCBEZXB0aCIsIEFDOTdfUkVDX0dBSU5fTUlDLCAwLCAxNSwgMSksDQogfTsNCiANCi1z dGF0aWMgaW50IHBhdGNoX3dvbGZzb25fd205NzEzX3NwZWNpZmljKGFjOTdfdCAqIGFjOTcpDQor c3RhdGljIGludCBwYXRjaF93b2xmc29uX3dtOTcxM18zZCAoYWM5N190ICogYWM5NykNCiB7DQog CWludCBlcnIsIGk7DQotCQ0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTEzX3NuZF9h Yzk3X2NvbnRyb2xzX2xpbmVfaW4pOyBpKyspIHsNCi0JCWlmICgoZXJyID0gc25kX2N0bF9hZGQo YWM5Ny0+YnVzLT5jYXJkLCBzbmRfYWM5N19jbmV3KCZ3bTEzX3NuZF9hYzk3X2NvbnRyb2xzX2xp bmVfaW5baV0sIGFjOTcpKSkgPCAwKQ0KKyAgICANCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUod20xM19zbmRfYWM5N19jb250cm9sc18zZCk7IGkrKykgew0KKwkJaWYgKChlcnIgPSBzbmRf Y3RsX2FkZChhYzk3LT5idXMtPmNhcmQsIHNuZF9hYzk3X2NuZXcoJndtMTNfc25kX2FjOTdfY29u dHJvbHNfM2RbaV0sIGFjOTcpKSkgPCAwKQ0KIAkJCXJldHVybiBlcnI7DQogCX0NCi0Jc25kX2Fj OTdfd3JpdGVfY2FjaGUoYWM5NywgQUM5N19QQ19CRUVQLCAweDA4MDgpOw0KKwlyZXR1cm4gMDsN Cit9DQorDQorc3RhdGljIGludCBwYXRjaF93b2xmc29uX3dtOTcxM19zcGVjaWZpYyhhYzk3X3Qg KiBhYzk3KQ0KK3sNCisJaW50IGVyciwgaTsNCiAJDQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKHdtMTNfc25kX2FjOTdfY29udHJvbHNfZGFjKTsgaSsrKSB7DQotCQlpZiAoKGVyciA9IHNu ZF9jdGxfYWRkKGFjOTctPmJ1cy0+Y2FyZCwgc25kX2FjOTdfY25ldygmd20xM19zbmRfYWM5N19j b250cm9sc19kYWNbaV0sIGFjOTcpKSkgPCAwKQ0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RSh3bTEzX3NuZF9hYzk3X2NvbnRyb2xzKTsgaSsrKSB7DQorCQlpZiAoKGVyciA9IHNuZF9jdGxf YWRkKGFjOTctPmJ1cy0+Y2FyZCwgc25kX2FjOTdfY25ldygmd20xM19zbmRfYWM5N19jb250cm9s c1tpXSwgYWM5NykpKSA8IDApDQogCQkJcmV0dXJuIGVycjsNCiAJfQ0KKwlzbmRfYWM5N193cml0 ZV9jYWNoZShhYzk3LCBBQzk3X1BDX0JFRVAsIDB4MDgwOCk7DQogCXNuZF9hYzk3X3dyaXRlX2Nh Y2hlKGFjOTcsIEFDOTdfUEhPTkUsIDB4MDgwOCk7DQotCQ0KLQlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRSh3bTEzX3NuZF9hYzk3X2NvbnRyb2xzX21pYyk7IGkrKykgew0KLQkJaWYgKChlcnIg PSBzbmRfY3RsX2FkZChhYzk3LT5idXMtPmNhcmQsIHNuZF9hYzk3X2NuZXcoJndtMTNfc25kX2Fj OTdfY29udHJvbHNfbWljW2ldLCBhYzk3KSkpIDwgMCkNCi0JCQlyZXR1cm4gZXJyOw0KLQl9DQog CXNuZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcsIEFDOTdfTUlDLCAweDA4MDgpOw0KIAlzbmRfYWM5 N193cml0ZV9jYWNoZShhYzk3LCBBQzk3X0xJTkUsIDB4MDBkYSk7DQotCQ0KLQlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRSh3bTEzX3NuZF9hYzk3X2NvbnRyb2xzX2FkYyk7IGkrKykgew0KLQkJ aWYgKChlcnIgPSBzbmRfY3RsX2FkZChhYzk3LT5idXMtPmNhcmQsIHNuZF9hYzk3X2NuZXcoJndt MTNfc25kX2FjOTdfY29udHJvbHNfYWRjW2ldLCBhYzk3KSkpIDwgMCkNCi0JCQlyZXR1cm4gZXJy Ow0KLQl9DQogCXNuZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcsIEFDOTdfQ0QsIDB4MDgwOCk7DQot CQ0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTEzX3NuZF9hYzk3X2NvbnRyb2xzX3Jl Y3NlbCk7IGkrKykgew0KLQkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChhYzk3LT5idXMtPmNhcmQs IHNuZF9hYzk3X2NuZXcoJndtMTNfc25kX2FjOTdfY29udHJvbHNfcmVjc2VsW2ldLCBhYzk3KSkp IDwgMCkNCi0JCQlyZXR1cm4gZXJyOw0KLQl9DQogCXNuZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcs IEFDOTdfVklERU8sIDB4ZDYxMik7DQogCXNuZF9hYzk3X3dyaXRlX2NhY2hlKGFjOTcsIEFDOTdf UkVDX0dBSU4sIDB4MWJhMCk7DQotCQ0KIAlyZXR1cm4gMDsNCiB9DQogDQpAQCAtNTI1LDYgKzc4 NSw3IEBAIHN0YXRpYyB2b2lkIHBhdGNoX3dvbGZzb25fd205NzEzX3Jlc3VtZSANCiANCiBzdGF0 aWMgc3RydWN0IHNuZF9hYzk3X2J1aWxkX29wcyBwYXRjaF93b2xmc29uX3dtOTcxM19vcHMgPSB7 DQogCS5idWlsZF9zcGVjaWZpYyA9IHBhdGNoX3dvbGZzb25fd205NzEzX3NwZWNpZmljLA0KKwku YnVpbGRfM2QgPSBwYXRjaF93b2xmc29uX3dtOTcxM18zZCwNCiAjaWZkZWYgQ09ORklHX1BNCQ0K IAkuc3VzcGVuZCA9IHBhdGNoX3dvbGZzb25fd205NzEzX3N1c3BlbmQsDQogCS5yZXN1bWUgPSBw YXRjaF93b2xmc29uX3dtOTcxM19yZXN1bWUNCkBAIC01MzMsMTAgKzc5NCwxMSBAQCBzdGF0aWMg c3RydWN0IHNuZF9hYzk3X2J1aWxkX29wcyBwYXRjaF93DQogDQogaW50IHBhdGNoX3dvbGZzb24x MyhhYzk3X3QgKiBhYzk3KQ0KIHsNCisJLyogV005NzEzLCBXTTk3MTQgKi8NCiAJYWM5Ny0+YnVp bGRfb3BzID0gJnBhdGNoX3dvbGZzb25fd205NzEzX29wczsNCiANCiAJYWM5Ny0+ZmxhZ3MgfD0g QUM5N19IQVNfTk9fUkVDX0dBSU4gfCBBQzk3X1NURVJFT19NVVRFUyB8IEFDOTdfSEFTX05PX1BI T05FIHwNCi0JCUFDOTdfSEFTX05PX1BDX0JFRVAgfCBBQzk3X0hBU19OT19WSURFTyB8IEFDOTdf SEFTX05PX0NEOw0KKwkJQUM5N19IQVNfTk9fUENfQkVFUCB8IEFDOTdfSEFTX05PX1ZJREVPIHwg QUM5N19IQVNfTk9fQ0QgfCBBQzk3X0hBU19OT19UT05FOw0KIA0KIAlzbmRfYWM5N193cml0ZV9j YWNoZShhYzk3LCBBQzk3X0VYVEVOREVEX01JRCwgMHhkYTAwKTsNCiAJc25kX2FjOTdfd3JpdGVf Y2FjaGUoYWM5NywgQUM5N19FWFRFTkRFRF9NU1RBVFVTLCAweDM4MTApOw0K --=-UWjC2QgEFErkBNKKHqGP-- ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click