From mboxrd@z Thu Jan 1 00:00:00 1970 Received: with ECARTIS (v1.0.0; list linux-mips); Thu, 02 Dec 2004 15:46:02 +0000 (GMT) Received: from 67-121-164-6.ded.pacbell.net ([IPv6:::ffff:67.121.164.6]:52205 "EHLO mailserver.sunrisetelecom.com") by linux-mips.org with ESMTP id ; Thu, 2 Dec 2004 15:45:51 +0000 Received: from there ([192.168.50.222]) by mailserver.sunrisetelecom.com with Microsoft SMTPSVC(5.0.2195.6713); Thu, 2 Dec 2004 07:45:41 -0800 X-KMail-Redirect-From: Karl Lessard Subject: Re: au1100fb.c From: Karl Lessard (by way of Karl Lessard ) Date: Thu, 2 Dec 2004 10:43:30 -0500 To: =?iso-8859-1?q?J=F8rg=20Ulrich=20Hansen?= Cc: linux-mips@linux-mips.org MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="------------Boundary-00=_ICQ3JWJBDIHX28K5NGD6" Message-ID: X-OriginalArrivalTime: 02 Dec 2004 15:45:41.0971 (UTC) FILETIME=[FA97AA30:01C4D885] Return-Path: X-Envelope-To: <"|/home/ecartis/ecartis -s linux-mips"> (uid 0) X-Orcpt: rfc822;linux-mips@linux-mips.org Original-Recipient: rfc822;linux-mips@linux-mips.org X-archive-position: 6548 X-ecartis-version: Ecartis v1.0.0 Sender: linux-mips-bounce@linux-mips.org Errors-to: linux-mips-bounce@linux-mips.org X-original-sender: klessard@sunrisetelecom.com Precedence: bulk X-list: linux-mips --------------Boundary-00=_ICQ3JWJBDIHX28K5NGD6 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Hi Jørg, I've modified it a little bit since I've post it on the list, so here's the .c/.h files I use now, and a patch that should also apply. This should work with current linux-mips cvs (actually it do on a 22/11/04 snapshot). I've never tested it on other boards that the pb1100 though. Also, I use the same scheme as in Linux 2.4, i.e. panels supported are declared in au1100fb.h. I hope this will work for you, and don't hesitate to interrupt me if you have any questions/problems. We personnally decided to work with a different graphic chip, so I probably don't need your version of the driver but thanks for offering it! Regards, Karl Jørg Ulrich Hansen wrote: Hi Karl Sorry to disturb you, but I can see that you have a framebuffer for au1100 for Linux 2.6. I have also done the same work but I have some problems with nano-X that I belive is the framebuffers fault. Your patch that I found on the list I am having problems with to apply. Do you mind to send me your version of the framebuffer either directly or to the list. If you are interrested you can have my version of au1100fb.c/h as well. Kind regards Jorg --------------<<<<<<<<>>>>>>>>-------------- Jorg Hansen email: jh@hansen-telecom.dk Hansen Telecom Tel: +45 7342 0220 Ellegaardvej 36 Fax: +45 7342 0221 6400 Sonderborg Mob: +45 2819 1969 Denmark http://www.hansen-telecom.dk Modules for rapid design of mechatronic products http://www.mechatronicbrick.dk --------------<<<<<<<<>>>>>>>>-------------- --------------Boundary-00=_ICQ3JWJBDIHX28K5NGD6 Content-Type: text/x-diff; charset="iso-8859-1"; name="au1100fb.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="au1100fb.patch" LS0tIGRyaXZlcnMvdmlkZW8vTWFrZWZpbGUJV2VkIERlYyAgMSAxNTowMjozMyAyMDA0CisrKyBk cml2ZXJzL3ZpZGVvL01ha2VmaWxlLnBhdGNoZWQJV2VkIERlYyAgMSAxNTowMTo1MyAyMDA0CkBA IC05NCw3ICs5NCw3IEBACiBvYmotJChDT05GSUdfRkJfUE1BR0JfQikJICArPSBwbWFnYi1iLWZi Lm8gIGNmYmZpbGxyZWN0Lm8gY2ZiY29weWFyZWEubyBjZmJpbWdibHQubwogb2JqLSQoQ09ORklH X0ZCX01BWElORSkJCSAgKz0gbWF4aW5lZmIubyAgY2ZiZmlsbHJlY3QubyBjZmJjb3B5YXJlYS5v IGNmYmltZ2JsdC5vCiBvYmotJChDT05GSUdfRkJfVFgzOTEyKQkJICArPSB0eDM5MTJmYi5vICBj ZmJmaWxscmVjdC5vIGNmYmNvcHlhcmVhLm8gY2ZiaW1nYmx0Lm8KLW9iai0kKENPTkZJR19GQl9B VTExMDApCQkgICs9IGF1MTEwMGZiLm8gZmJnZW4ubworb2JqLSQoQ09ORklHX0ZCX0FVMTEwMCkJ CSAgKz0gYXUxMTAwZmIubyBjZmJmaWxscmVjdC5vIGNmYmNvcHlhcmVhLm8gY2ZiaW1nYmx0Lm8K IAogCiAjIFBsYXRmb3JtIG9yIGZhbGxiYWNrIGRyaXZlcnMgZ28gaGVyZQotLS0gZHJpdmVycy92 aWRlby9LY29uZmlnCVdlZCBEZWMgIDEgMTU6MDI6MzMgMjAwNAorKysgZHJpdmVycy92aWRlby9L Y29uZmlnLnBhdGNoZWQJV2VkIERlYyAgMSAxNTowMTo1MyAyMDA0CkBAIC05NzAsNiArOTc4LDEw IEBACiBjb25maWcgUEIxNTAwX1RGVAogCXByb21wdCAiVXNlIFRGVCBQYW5lbCBvbiBQYjExMDAg IgogCWRlcGVuZHMgb24gRkJfRTEzNTYgJiYgTUlQU19QQjExMDA9eQorCitjb25maWcgRkJfQVUx MTAwCisJYm9vbCAiQXUxMTAwIExDRCBEcml2ZXIiCisJZGVwZW5kcyBvbiBGQiAmJiBNSVBTICYm IE1JUFNfUEIxMTAwPXkKIAogY29uZmlnIEZCX1NCVVMKIAlib29sICJTQlVTIGFuZCBVUEEgZnJh bWVidWZmZXJzIgotLS0gYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcGxhdGZvcm0uYwlXZWQgRGVj ICAxIDE0OjM1OjE2IDIwMDQKKysrIGFyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3BsYXRmb3JtLmMu cGF0Y2hlZAlXZWQgRGVjICAxIDE0OjM3OjQ1IDIwMDQKQEAgLTU4LDEwICs1OCwzOSBAQAogCS5y ZXNvdXJjZQk9IGF1MXh4eF91c2Jfb2hjaV9yZXNvdXJjZXMsCiB9OwogCisvKioqIEFVMTEwMCBM Q0QgY29udHJvbGxlciAqKiovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXUxMTAwX2xjZF9y ZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAkJPSBBVTExMDBfTENEX0JBU0UsCisJ CS5lbmQJCT0gQVUxMTAwX0xDRF9CQVNFICsgQVUxMTAwX0xDRF9MRU4gLSAxLAorCQkuZmxhZ3MJ CT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAkJPSBBVTExMDBfTENE X0lOVCwKKwkJLmVuZAkJPSBBVTExMDBfTENEX0lOVCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0Vf SVJRLAorCX0KK307CisKK3N0YXRpYyB1NjQgYXUxMTAwX2xjZF9kbWFtYXNrID0gfih1MzIpMDsK Kworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXUxMTAwX2xjZF9kZXZpY2UgPSB7CisJ Lm5hbWUJCT0gImF1MTEwMC1sY2QiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5kbWFfbWFz awkJPSAmYXUxMTAwX2xjZF9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZm ZmZmLAorCX0sCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShhdTExMDBfbGNkX3Jlc291 cmNlcyksCisJLnJlc291cmNlICAgICAgID0gYXUxMTAwX2xjZF9yZXNvdXJjZXMsCit9OworCiAv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXUx eHh4X3BsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZhdTF4eHhfdXNiX29oY2lf ZGV2aWNlLAorCSZhdTExMDBfbGNkX2RldmljZSwKIH07CiAKIGludCBhdTF4eHhfcGxhdGZvcm1f aW5pdCh2b2lkKQpkaWZmIC11IC1yMS4xMSBhdTEwMDAuaAotLS0gaW5jbHVkZS9hc20tbWlwcy9t YWNoLWF1MXgwMC9hdTEwMDAuaAkyMyBTZXAgMjAwNCAwNjowNjo1MCAtMDAwMAkxLjExCisrKyBp bmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTAwMC5oCTI4IE9jdCAyMDA0IDE1OjExOjM3 IC0wMDAwCkBAIC00OTQsNiArNDk0LDkgQEAKICNkZWZpbmUgQVUxMTAwX0VUSDBfQkFTRQkgIDB4 QjA1MDAwMDAKICNkZWZpbmUgQVUxMTAwX01BQzBfRU5BQkxFICAgICAgIDB4QjA1MjAwMDAKICNk ZWZpbmUgTlVNX0VUSF9JTlRFUkZBQ0VTIDEKKworI2RlZmluZSBBVTExMDBfTENEX0JBU0UgICAg ICAgICAgIDB4MTUwMDAwMDAKKyNkZWZpbmUgQVUxMTAwX0xDRF9MRU4gICAgICAgICAgICAweDAw MDAwODAwCiAjZW5kaWYgLy8gQ09ORklHX1NPQ19BVTExMDAKIAogI2lmZGVmIENPTkZJR19TT0Nf QVUxNTUwCkBAIC0xMjM3LDYgKzEyNDAsMTIgQEAKICAgI2RlZmluZSBTWVNfQ1NfTUkyX01BU0sg ICAgICAgICAgICgweDc8PFNZU19DU19NSTJfQklUKQogICAjZGVmaW5lIFNZU19DU19ESTIgICAg ICAgICAgICAgICAgKDE8PDE2KQogICAjZGVmaW5lIFNZU19DU19DSTIgICAgICAgICAgICAgICAg KDE8PDE1KQorI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCisgICNkZWZpbmUgU1lTX0NTX01MX0JJ VCAgICAgICAgICAgICA3CisgICNkZWZpbmUgU1lTX0NTX01MX01BU0sgICAgICAgICAgICAoMHg3 PDxTWVNfQ1NfTUxfQklUKQorICAjZGVmaW5lIFNZU19DU19ETCAgICAgICAgICAgICAgICAgKDE8 PDYpCisgICNkZWZpbmUgU1lTX0NTX0NMICAgICAgICAgICAgICAgICAoMTw8NSkKKyNlbHNlCiAg ICNkZWZpbmUgU1lTX0NTX01VSF9CSVQgICAgICAgICAgICAxMgogICAjZGVmaW5lIFNZU19DU19N VUhfTUFTSyAgICAgICAgICAgKDB4Nzw8U1lTX0NTX01VSF9CSVQpCiAgICNkZWZpbmUgU1lTX0NT X0RVSCAgICAgICAgICAgICAgICAoMTw8MTEpCkBAIC0xMjQ1LDYgKzEyNTQsNyBAQAogICAjZGVm aW5lIFNZU19DU19NVURfTUFTSyAgICAgICAgICAgKDB4Nzw8U1lTX0NTX01VRF9CSVQpCiAgICNk ZWZpbmUgU1lTX0NTX0RVRCAgICAgICAgICAgICAgICAoMTw8NikKICAgI2RlZmluZSBTWVNfQ1Nf Q1VEICAgICAgICAgICAgICAgICgxPDw1KQorI2VuZGlmCiAgICNkZWZpbmUgU1lTX0NTX01JUl9C SVQgICAgICAgICAgICAyCiAgICNkZWZpbmUgU1lTX0NTX01JUl9NQVNLICAgICAgICAgICAoMHg3 PDxTWVNfQ1NfTUlSX0JJVCkKICAgI2RlZmluZSBTWVNfQ1NfRElSICAgICAgICAgICAgICAgICgx PDwxKQpJbmRleDogaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMTAwLmgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogL2hvbWUvY3ZzL2xpbnV4L2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1wYjF4MDAvcGIx MTAwLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1yMS4xIHBiMTEwMC5oCi0t LSBpbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjExMDAuaAkxMyBKYW4gMjAwNCAwODowOToyMiAt MDAwMAkxLjEKKysrIGluY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTEwMC5oCTIgRGVjIDIwMDQg MTU6MjI6NTEgLTAwMDAKQEAgLTQ1LDYgKzQ1LDIxIEBACiAgICNkZWZpbmUgUEIxMTAwX1JTMjMy X0RTUiAgICAgICAgKDE8PDEpCiAgICNkZWZpbmUgUEIxMTAwX1JTMjMyX1JJICAgICAgICAgKDE8 PDApCiAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19SRUcgICAgIDB4QUUwMDAwMDgKKyAgI2RlZmlu ZSBCQ1NSX1NXSVRDSEVTX0RJUF9CSVQgICAwCisgICNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBf TUFTSyAgKDB4RkY8PEJDU1JfU1dJVENIRVNfRElQX0JJVCkKKyAgI2RlZmluZSBCQ1NSX1NXSVRD SEVTX0RJUF8xCSAgKDE8PDcpCisgICNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMgkgICgxPDw2 KQorICAjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzMJICAoMTw8NSkKKyAgI2RlZmluZSBCQ1NS X1NXSVRDSEVTX0RJUF80CSAgKDE8PDQpCisgICNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNQkg ICgxPDwzKQorICAjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzYJICAoMTw8MikKKyAgI2RlZmlu ZSBCQ1NSX1NXSVRDSEVTX0RJUF83ICAgICAoMTw8MSkKKyAgI2RlZmluZSBCQ1NSX1NXSVRDSEVT X0RJUF84ICAgICAoMTw8MCkKKyAgI2RlZmluZSBCQ1NSX1NXSVRDSEVTX1JPVEFSWV9CSVQgOAor ICAjZGVmaW5lIEJDU1JfU1dJVENIRVNfUk9UQVJZX01BU0sgKDB4Rjw8QkNTUl9TV0lUQ0hFU19S T1RBUllfQklUKQorICAjZGVmaW5lIEJDU1JfU1dJVENIRVNfRE9DX0xPQ0sgICgxPDwxNSkKKwog I2RlZmluZSBQQjExMDBfSVJEQV9SUzIzMiAgICAgMHhBRTAwMDAwQwogICAjZGVmaW5lIFBCMTEw MF9JUkRBX0ZVTEwgICAgICAgKDA8PDE0KSAvKiBmdWxsIHBvd2VyICovCiAgICNkZWZpbmUgUEIx MTAwX0lSREFfU0hVVERPV04gICAoMTw8MTQpCkBAIC02Myw2ICs3OCwxMSBAQAogICAjZGVmaW5l IFBDX0RSVl9FTiAgICAgICAgICAgICAgICgxPDw0KQogCiAjZGVmaW5lIFBCMTEwMF9HX0NPTlRS T0wgICAgICAweEFFMDAwMDE0IC8qIGdyYXBoaWNzIGNvbnRyb2wgKi8KKyAgI2RlZmluZSBQQjEx MDBfR19DT05UUk9MX1JTVAkgICgxPDw3KQorICAjZGVmaW5lIFBCMTEwMF9HX0NPTlRST0xfQkUg CSAgKDE8PDUpCisgICNkZWZpbmUgUEIxMTAwX0dfQ09OVFJPTF9TTV9QQVNTICgxPDw0KQorICAj ZGVmaW5lIFBCMTEwMF9HX0NPTlRST0xfQkwJICAoMTw8MikKKyAgI2RlZmluZSBQQjExMDBfR19D T05UUk9MX1ZERAkgICgxPDwxKQogCiAjZGVmaW5lIFBCMTEwMF9SU1RfVkRESSAgICAgICAweEFF MDAwMDFDCiAgICNkZWZpbmUgUEIxMTAwX1NPRlRfUkVTRVQgICAgICAoMTw8MTUpIC8qIGNsZWFy IHRvIHJlc2V0IHRoZSBib2FyZCAqLwo= --------------Boundary-00=_ICQ3JWJBDIHX28K5NGD6 Content-Type: text/x-c; charset="iso-8859-1"; name="au1100fb.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="au1100fb.c" LyoKICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCiAqCUF1MTEwMCBMQ0QgRHJpdmVyLgogKgog KiBDb3B5cmlnaHQgMjAwMiBNb250YVZpc3RhIFNvZnR3YXJlCiAqIEF1dGhvcjogTW9udGFWaXN0 YSBTb2Z0d2FyZSwgSW5jLgogKgkJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5j b20KICoKICogQ29weXJpZ2h0IDIwMDIgQWxjaGVteSBTZW1pY29uZHVjdG9yCiAqIEF1dGhvcjog QWxjaGVteSBTZW1pY29uZHVjdG9yCiAqCiAqIFJld3JpdHRlbiBkdXJpbmcgTGludXggMi42IHBv cnQKICogIGJ5IEthcmwgTGVzc2FyZCA8a2xlc3NhcmRAc3VucmlzZXRlbGVjb20uY29tPgogKgog KiBCYXNlZCBvbjoKICogbGludXgvZHJpdmVycy92aWRlby9za2VsZXRvbmZiLmMgLS0gU2tlbGV0 b24gZm9yIGEgZnJhbWUgYnVmZmVyIGRldmljZQogKiAgQ3JlYXRlZCAyOCBEZWMgMTk5NyBieSBH ZWVydCBVeXR0ZXJob2V2ZW4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAogKiAgdW5kZXIgIHRoZSB0 ZXJtcyBvZgkgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlCiAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZQlMaWNlbnNlLCBvciAoYXQgeW91cgogKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoK ICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRAkgIGBgQVMJSVMnJyBBTkQgICBBTlkJRVhQ UkVTUyBPUiBJTVBMSUVECiAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElN SVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKICogIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgog KiAgTk8JRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUJIExJQUJMRSBGT1IgQU5ZCSAgRElS RUNULCBJTkRJUkVDVCwKICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAogKiAgTk9UIExJTUlURUQJICBUTywg UFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMJT1IgU0VSVklDRVM7IExPU1MgT0YKICog IFVTRSwgREFUQSwJT1IgUFJPRklUUzsgT1IJQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS IENBVVNFRCBBTkQgT04KICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBD T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKiAgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAq ICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgogKgogKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCiAqICB3aXRoIHRoaXMgcHJvZ3JhbTsg aWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICog IDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KCiNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgojaW5jbHVkZSA8bGludXgv ZXJybm8uaD4KI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgojaW5jbHVkZSA8bGludXgvbW0uaD4K I2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4KI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiNpbmNsdWRlIDxsaW51 eC9kbWEtbWFwcGluZy5oPgoKI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KCiNk ZWZpbmUgREVCVUcgMQojZGVmaW5lIFNJTVVMQVRPUiAwCgojaW5jbHVkZSA8dmlkZW8vYXUxMTAw ZmIuaD4KCi8qIAogKiBTYW5pdHkgY2hlY2suIElmIHRoaXMgaXMgYSBuZXcgQXUxMTAwIGJhc2Vk IGJvYXJkLCBzZWFyY2ggZm9yCiAqIHRoZSBQQjExMDAgaWZkZWZzIHRvIG1ha2Ugc3VyZSB5b3Ug bW9kaWZ5IHRoZSBjb2RlIGFjY29yZGluZ2x5LgogKi8KI2lmIGRlZmluZWQoQ09ORklHX01JUFNf UEIxMTAwKQogICNpbmNsdWRlIDxhc20vbWFjaC1wYjF4MDAvcGIxMTAwLmg+CiNlbGlmIGRlZmlu ZWQoQ09ORklHX01JUFNfREIxMTAwKQogICNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxeDAw Lmg+CiNlbHNlCiAgI2Vycm9yICJVbmtub3duIEF1MTEwMCBib2FyZCwgQXUxMTAwIEZCIGRyaXZl ciBub3Qgc3VwcG9ydGVkIgojZW5kaWYKCiNkZWZpbmUgRFJJVkVSX05BTUUgImF1MTEwMGZiIgoj ZGVmaW5lIERSSVZFUl9ERVNDICJMQ0QgY29udHJvbGxlciBkcml2ZXIgZm9yIEFVMTEwMCBwcm9j ZXNzb3JzIgoKI2RlZmluZSB0b19hdTExMDBmYl9kZXZpY2UoX2luZm8pIFwKCSAgKF9pbmZvID8g Y29udGFpbmVyX29mKF9pbmZvLCBzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlLCBmYl9pbmZvKSA6IE5V TEwpOwoKLyogRHJpdmVyIGdsb2JhbCBkYXRhICovIApzdHJ1Y3QgYXUxMTAwZmJfZHJ2X2luZm8g CnsKICAgICAgICBpbnQJcGFuZWxfaWR4OwoJY2hhcioJb3B0X21vZGU7Cgp9IGRydl9pbmZvID0g eyAtMSwgMCB9OwoKLyogQml0ZmllbGRzIGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIGNvbnRyb2xs ZXIuIE5vdGUgdGhhdCB0aGUgb3JkZXIgb2YgZm9ybWF0cyAKICogU0hPVUxEIGJlIHRoZSBzYW1l IGFzIGluIHRoZSBMQ0RfQ09OVFJPTF9TQlBQRiBmaWVsZCwgc28gd2UgY2FuIHJldHJpZXZlIHRo ZQogKiByaWdodCBwaXhlbCBmb3JtYXQgYnkgZG9pbmcgcmdiX2JpdGZpZWxkc1tMQ0RfQ09OVFJP TF9TQlBQRl9YWFggPj4gTENEX0NPTlRST0xfU0JQUEZdCiAqLwpzdHJ1Y3QgZmJfYml0ZmllbGQg cmdiX2JpdGZpZWxkc1tdWzRdID0gCnsKICAJLyogICAgIFJlZCwgCSAgIEdyZWVuLCAJIEJsdWUs IAkgICAgIFRyYW5zcCAgICovCgl7IHsgMTAsIDYsIDAgfSwgeyA1LCA1LCAwIH0sIHsgMCwgNSwg MCB9LCB7IDAsIDAsIDAgfSB9LAoJeyB7IDExLCA1LCAwIH0sIHsgNSwgNiwgMCB9LCB7IDAsIDUs IDAgfSwgeyAwLCAwLCAwIH0gfSwKCXsgeyAxMSwgNSwgMCB9LCB7IDYsIDUsIDAgfSwgeyAwLCA2 LCAwIH0sIHsgMCwgMCwgMCB9IH0sCgl7IHsgMTAsIDUsIDAgfSwgeyA1LCA1LCAwIH0sIHsgMCwg NSwgMCB9LCB7IDE1LCAxLCAwIH0gfSwKCXsgeyAxMSwgNSwgMCB9LCB7IDYsIDUsIDAgfSwgeyAx LCA1LCAwIH0sIHsgMCwgMSwgMCB9IH0sCgoJLyogVGhlIGxhc3QgaXMgdXNlZCB0byBkZXNjcmli ZSAxMmJwcCBmb3JtYXQgKi8KCXsgeyA4LCA0LCAwIH0sICB7IDQsIDQsIDAgfSwgeyAwLCA0LCAw IH0sIHsgMCwgMCwgMCB9IH0sCn07CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKLyogSGVscGVycyAq LwoKc3RhdGljIHZvaWQgCmF1MTEwMGZiX3VwZGF0ZV9mYmluZm8oc3RydWN0IGZiX2luZm8gKmZi aSkKewoJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSB0b19hdTExMDBmYl9kZXZpY2Uo ZmJpKTsKCQoJLyogVXBkYXRlIHZhci1kZXBlbmRlbnQgRkIgaW5mbyAqLwoJaWYgKHBhbmVsX2lz X2FjdGl2ZShmYmRldi0+cGFuZWwpIHx8IHBhbmVsX2lzX2NvbG9yKGZiZGV2LT5wYW5lbCkpIHsK CQlpZiAoZmJpLT52YXIuYml0c19wZXJfcGl4ZWwgPD0gOCkgewoJCQkvKiBwYWxldHRpemVkICov CgkJCWZiaS0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKCQkJZmJpLT5maXgu bGluZV9sZW5ndGggPSBmYmktPnZhci54cmVzX3ZpcnR1YWwgLyAKCQkJCQkJCSg4L2ZiaS0+dmFy LmJpdHNfcGVyX3BpeGVsKTsKCQl9IGVsc2UgewoJCQkvKiBub24tcGFsZXR0aXplZCAqLwoJCQlm YmktPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwoJCQlmYmktPmZpeC5saW5lX2xl bmd0aCA9IGZiaS0+dmFyLnhyZXNfdmlydHVhbCA8PCAxOyAvKiBkZXB0aD0xNiAqLwoJCX0KCX0g ZWxzZSB7CgkJLyogbW9ubyAqLwoJCWZiaS0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9NT05PMTA7 CgkJZmJpLT5maXgubGluZV9sZW5ndGggPSBmYmktPnZhci54cmVzX3ZpcnR1YWwgLyA4OwoJfQoJ CglmYmktPnNjcmVlbl9zaXplID0gZmJpLT5maXgubGluZV9sZW5ndGggKiBmYmktPnZhci55cmVz X3ZpcnR1YWw7Cn0KCnN0YXRpYyBpbnQKYXUxMTAwZmJfbWF0Y2hfcmdiKHN0cnVjdCBmYl92YXJf c2NyZWVuaW5mbyAqdmFyKQp7CglzaXplX3QgYmZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZmJfYml0 ZmllbGQpOwoJaW50IGk7CgoJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmdiX2JpdGZpZWxk cyk7IGkrKykgewoJCWlmICghbWVtY21wKCZ2YXItPnJlZCwgJnJnYl9iaXRmaWVsZHNbaV1bMF0s IGJmX3NpemUpICYmCgkJICAgICFtZW1jbXAoJnZhci0+Z3JlZW4sICZyZ2JfYml0ZmllbGRzW2ld WzFdLCBiZl9zaXplKSAmJgoJCSAgICAhbWVtY21wKCZ2YXItPmJsdWUsICZyZ2JfYml0ZmllbGRz W2ldWzJdLCBiZl9zaXplKSAmJgoJCSAgICAhbWVtY21wKCZ2YXItPnRyYW5zcCwgJnJnYl9iaXRm aWVsZHNbaV1bM10sIGJmX3NpemUpKQoJCQlyZXR1cm4gaTsKCX0KCglyZXR1cm4gLTE7Cn0KCiNp ZiBERUJVRwpzdGF0aWMgaW5saW5lIHZvaWQKYXUxMTAwZmJfZHVtcF9yZWdpc3RlcnMoc3RydWN0 IGF1MTEwMGZiX3JlZ3MgKnJlZ3MpCnsKCWludCBhY3RpdmUgPSByZWdzLT5sY2RfY29udHJvbCAm IExDRF9DT05UUk9MX1BUOwoJaW50IGNvbG9yID0gcmVncy0+bGNkX2NvbnRyb2wgJiBMQ0RfQ09O VFJPTF9QQzsKCWludCBmb3JtYXQgPSByZWdzLT5sY2RfY29udHJvbCAmIExDRF9DT05UUk9MX1NC UFBGX01BU0s7CglpbnQgcGl4Y2xvY2s7CglpbnQgcmVmcmVzaDsKCWludCBicHAgPSAwOwoKCXN3 aXRjaCAocmVncy0+bGNkX2NvbnRyb2wgJiBMQ0RfQ09OVFJPTF9CUFBfTUFTSykgewoJCWNhc2Ug TENEX0NPTlRST0xfQlBQXzE6IGJwcCA9IDE7IGJyZWFrOwoJCWNhc2UgTENEX0NPTlRST0xfQlBQ XzI6IGJwcCA9IDI7IGJyZWFrOwoJCWNhc2UgTENEX0NPTlRST0xfQlBQXzQ6IGJwcCA9IDQ7IGJy ZWFrOwoJCWNhc2UgTENEX0NPTlRST0xfQlBQXzg6IGJwcCA9IDg7IGJyZWFrOwoJCWNhc2UgTENE X0NPTlRST0xfQlBQXzEyOiBicHAgPSAxMjsgYnJlYWs7CgkJY2FzZSBMQ0RfQ09OVFJPTF9CUFBf MTY6IGJwcCA9IDE2OyBicmVhazsKCX0KCglwaXhjbG9jayA9ICgyICogKChyZWdzLT5sY2RfY2xr Y29udHJvbCAmIExDRF9DTEtDT05UUk9MX1BDRF9NQVNLKSArIDEpKTsKCXBpeGNsb2NrID0gQVUx MTAwX0xDRF9NQVhfQ0xLIC8gcGl4Y2xvY2s7CgoJcmVmcmVzaCA9ICgocmVncy0+bGNkX2hvcnp0 aW1pbmcgJiBMQ0RfSE9SWlRJTUlOR19ITjJfTUFTSykgCgkJCQk+PiBMQ0RfSE9SWlRJTUlOR19I TjJfQklUKQoJCSArKChyZWdzLT5sY2RfaG9yenRpbWluZyAmIExDRF9IT1JaVElNSU5HX0hOMV9N QVNLKSAKCQkJCT4+IExDRF9IT1JaVElNSU5HX0hOMV9CSVQpCgkJICsoKHJlZ3MtPmxjZF9ob3J6 dGltaW5nICYgTENEX0hPUlpUSU1JTkdfSFBXX01BU0spIAoJCQkJPj4gTENEX0hPUlpUSU1JTkdf SFBXX0JJVCkKCQkgKygocmVncy0+bGNkX2hvcnp0aW1pbmcgJiBMQ0RfSE9SWlRJTUlOR19QUExf TUFTSykgCgkJCQk+PiBMQ0RfSE9SWlRJTUlOR19QUExfQklUKQoJCSArIDQgLyogYWRqdXN0ICov OwoKCXJlZnJlc2ggKj0gKChyZWdzLT5sY2RfdmVydHRpbWluZyAmIExDRF9WRVJUVElNSU5HX1ZO Ml9NQVNLKSAKCQkJCT4+IExDRF9WRVJUVElNSU5HX1ZOMl9CSVQpCgkJICsoKHJlZ3MtPmxjZF92 ZXJ0dGltaW5nICYgTENEX1ZFUlRUSU1JTkdfVk4xX01BU0spIAoJCQkJPj4gTENEX1ZFUlRUSU1J TkdfVk4xX0JJVCkKCQkgKygocmVncy0+bGNkX3ZlcnR0aW1pbmcgJiBMQ0RfVkVSVFRJTUlOR19W UFdfTUFTSykgCgkJCQk+PiBMQ0RfVkVSVFRJTUlOR19WUFdfQklUKQoJCSArKChyZWdzLT5sY2Rf dmVydHRpbWluZyAmIExDRF9WRVJUVElNSU5HX0xQUF9NQVNLKSAKCQkJCT4+IExDRF9WRVJUVElN SU5HX0xQUF9CSVQpCgkJICsgNCAvKiBhZGp1c3QgKi87CgoJcmVmcmVzaCA9IHBpeGNsb2NrIC8g cmVmcmVzaDsKCglwcmludF9kYmcoIiIpOwoJcHJpbnRfZGJnKCJMQ0QgY29udHJvbGxlciByZWdp c3RlciBkdW1wOiIpOwoKCXByaW50X2RiZygiIik7CglwcmludF9kYmcoIiAgICAgY29udHJvbDog ICAgMHglMDh4IiwgcmVncy0+bGNkX2NvbnRyb2wpOwoJcHJpbnRfZGJnKCIgICAgIGludHN0YXR1 czogIDB4JTA4eCIsIHJlZ3MtPmxjZF9pbnRzdGF0dXMpOwoJcHJpbnRfZGJnKCIgICAgIGludGVu YWJsZTogIDB4JTA4eCIsIHJlZ3MtPmxjZF9pbnRlbmFibGUpOwoJcHJpbnRfZGJnKCIgICAgIGhv cnp0aW1pbmc6IDB4JTA4eCIsIHJlZ3MtPmxjZF9ob3J6dGltaW5nKTsKCXByaW50X2RiZygiICAg ICB2ZXJ0dGltaW5nOiAweCUwOHgiLCByZWdzLT5sY2RfdmVydHRpbWluZyk7CglwcmludF9kYmco IiAgICAgY2xrY29udHJvbDogMHglMDh4IiwgcmVncy0+bGNkX2Nsa2NvbnRyb2wpOwoJcHJpbnRf ZGJnKCIgICAgIGRtYWFkZHIwOiAgIDB4JTA4eCIsIHJlZ3MtPmxjZF9kbWFhZGRyMCk7Cglwcmlu dF9kYmcoIiAgICAgZG1hYWRkcjE6ICAgMHglMDh4IiwgcmVncy0+bGNkX2RtYWFkZHIxKTsKCXBy aW50X2RiZygiICAgICB3b3JkczogICAgICAweCUwOHgiLCByZWdzLT5sY2Rfd29yZHMpOwoJcHJp bnRfZGJnKCIgICAgIHB3bWRpdjogICAgIDB4JTA4eCIsIHJlZ3MtPmxjZF9wd21kaXYpOwoJcHJp bnRfZGJnKCIgICAgIHB3bWhpOiAgICAgIDB4JTA4eCIsIHJlZ3MtPmxjZF9wd21oaSk7CgoJcHJp bnRfZGJnKCIiKTsKCXByaW50X2RiZygiICAgICAlcyAlcyAlcyBwYW5lbCIsCgkJICBhY3RpdmUg PyAiVEZUIiA6ICJTVE4iLAoJCSAgY29sb3IgPyAiY29sb3IiIDogIm1vbm9jaHJvbWUiLAoJCSAg YWN0aXZlID8gKHJlZ3MtPmxjZF9jb250cm9sICYgTENEX0NPTlRST0xfREIgPyAiMTIgcGlucyIg OiAiMTYgcGlucyIpCgkJICAgICAgICAgOiAoY29sb3IgPyAocmVncy0+bGNkX2NvbnRyb2wgJiBM Q0RfQ09OVFJPTF9EUCA/ICJkdWFsIgoJCQkJIAkJCQkgICAgICAJOiAic2luZ2xlIikKCQkJIAkg IDogKHJlZ3MtPmxjZF9jb250cm9sICYgTENEX0NPTlRST0xfTVBJID8gIjggYml0IgoJCQkJCQkJ ICAgICAgICAgICAgICAgICA6ICI0IGJpdCIpCgkJCSAgICkKCQkgKTsKCXByaW50X2RiZygiICAg ICAlZGJwcCVzICVkeCVkIGRpc3BsYXkgYXQgJWRIeiIsIAoJCSAgYnBwLAoJCSAgKGJwcCA9PSAx NikgPyAoKGZvcm1hdCA9PSBMQ0RfQ09OVFJPTF9TQlBQRl82NTUpID8gIiA2NTUiIDoKCQkJCSAo Zm9ybWF0ID09IExDRF9DT05UUk9MX1NCUFBGXzU2NSkgPyAiIDU2NSIgOgoJCQkJIChmb3JtYXQg PT0gTENEX0NPTlRST0xfU0JQUEZfNTU2KSA/ICIgNTU2IiA6CgkJCQkgKGZvcm1hdCA9PSBMQ0Rf Q09OVFJPTF9TQlBQRl8xNTU1KSA/ICIgMTU1NSIgOiAiIDU1NTEiCgkJCQkpCgkJIAkgICAgICA6 ICIiLAoJCSAgKHJlZ3MtPmxjZF9ob3J6dGltaW5nICYgTENEX0hPUlpUSU1JTkdfUFBMX01BU0sp ICsgMSwKCQkgIChyZWdzLT5sY2RfdmVydHRpbWluZyAmIExDRF9WRVJUVElNSU5HX0xQUF9NQVNL KSArIDEsCgkJICByZWZyZXNoCgkJICk7CglpZiAocmVncy0+bGNkX2NvbnRyb2wgJiBMQ0RfQ09O VFJPTF9TTV9NQVNLKSB7CgkJdTMyIGFuZ2xlID0gcmVncy0+bGNkX2NvbnRyb2wgJiBMQ0RfQ09O VFJPTF9TTV9NQVNLOwoJCXByaW50X2RiZygiICAgICBSb3RhdGVkIGF0ICVkIGRlZ3JlZXMiLCAK CQkJICAoYW5nbGUgPT0gTENEX0NPTlRST0xfU01fOTApID8gOTAgOgoJCQkgIChhbmdsZSA9PSBM Q0RfQ09OVFJPTF9TTV8xODApID8gMTgwIDogMjcwCgkJCSAgKTsKCX0KCXByaW50X2RiZygiICAg ICBQaXhlbCBjbG9jazogJWRrSHoiLCBwaXhjbG9jay8xMDAwKTsKCXByaW50X2RiZygiIik7Cn0K I2VuZGlmCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKLyogQVUxMTAwIGZyYW1lYnVmZmVyIGRyaXZl ciAqLwoKLyogZmJfb3BlbgogKiBPcGVuIGEgbmV3IGNsaWVudCByZWZlcmVuY2UgZm9yIGEgZGV2 aWNlCiAqLwppbnQgYXUxMTAwZmJfZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBpbnQgdXNl cikKewoJcHJpbnRfZGJnKCJmYl9vcGVuICVwICVkIiwgZmJpLCB1c2VyKTsKCXJldHVybiAwOwp9 CgovKiBmYl9yZWxlYXNlCiAqIENsb3NlIGEgY2xpZW50IHJlZmVyZW5jZSB0byBhIGRldmljZQog Ki8KaW50IGF1MTEwMGZiX2ZiX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmZiaSwgaW50IHVzZXIp CnsKCXByaW50X2RiZygiZmJfcmVsZWFzZSAlcCAlZCIsIGZiaSwgdXNlcik7CglyZXR1cm4gMDsK fQoKLyogZmJfY2hlY2tfdmFyCiAqIFZhbGlkYXRlIHZhciBzZXR0aW5ncyB3aXRoIGhhcmR3YXJl IHJlc3RyaWN0aW9ucyBhbmQgbW9kaWZ5IGl0IGlmIG5lY2Vzc2FyeSAKICovCmludCBhdTExMDBm Yl9mYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9p bmZvICpmYmkpCnsKCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gdG9fYXUxMTAwZmJf ZGV2aWNlKGZiaSk7CglzdHJ1Y3QgYXUxMTAwZmJfcGFuZWwgKnBhbmVsOwoJdTMyIHBpeGNsb2Nr OwoJaW50IHNjcmVlbl9zaXplOwoKCXByaW50X2RiZygiZmJfY2hlY2tfdmFyICVwICVwIiwgdmFy LCBmYmkpOwoKCWlmICghZmJkZXYpCgkJcmV0dXJuIC1FSU5WQUw7CgoJcGFuZWwgPSBmYmRldi0+ cGFuZWw7CgoJLyogTWFrZSBzdXJlIHRoYXQgdGhlIG1vZGUgcmVzcGVjdCBhbGwgTENEIGNvbnRy b2xsZXIgYW5kIAoJICogcGFuZWwgcmVzdHJpY3Rpb25zLiAqLwoJdmFyLT54cmVzID0gbWF4KHZh ci0+eHJlcywgcGFuZWwtPm1pbl94cmVzKTsKCXZhci0+eHJlcyA9IG1pbih2YXItPnhyZXMsIG1p bihwYW5lbC0+bWF4X3hyZXMsICh1MzIpQVUxMTAwX0xDRF9NQVhfWFJFUykpOwoJdmFyLT55cmVz ID0gbWF4KHZhci0+eXJlcywgcGFuZWwtPm1pbl95cmVzKTsKCXZhci0+eXJlcyA9IG1pbih2YXIt PnlyZXMsIG1pbihwYW5lbC0+bWF4X3lyZXMsICh1MzIpQVUxMTAwX0xDRF9NQVhfWVJFUykpOwoJ CgkvKiBXZSBvbmx5IHN1cHBvcnQgdmlydHVhbCBtb2RlIGluIFkgKG5vIHBpdGNoKSAqLwoJdmFy LT54cmVzX3ZpcnR1YWwgPSB2YXItPnhyZXM7Cgl2YXItPnlyZXNfdmlydHVhbCA9IG1heCh2YXIt PnlyZXNfdmlydHVhbCwgdmFyLT55cmVzKTsKCgl2YXItPmJpdHNfcGVyX3BpeGVsID0gbWluKHZh ci0+Yml0c19wZXJfcGl4ZWwsIHBhbmVsLT5tYXhfYnBwKTsKCglzY3JlZW5fc2l6ZSA9IHZhci0+ eHJlc192aXJ0dWFsICogdmFyLT55cmVzX3ZpcnR1YWw7CglpZiAodmFyLT5iaXRzX3Blcl9waXhl bCA+IDgpIHNjcmVlbl9zaXplIDw8PSAxOwoJZWxzZSBzY3JlZW5fc2l6ZSAvPSAoOC92YXItPmJp dHNfcGVyX3BpeGVsKTsKCglpZiAoZmJkZXYtPmZiX2xlbiA8IHNjcmVlbl9zaXplKQoJCXJldHVy biAtRUlOVkFMOyAvKiBWaXJ0dWFsIHNjcmVlbiBpcyB0byBiaWcsIGFib3J0ICovCgoJaWYgKHZh ci0+cm90YXRlKSB7CgkJdmFyLT5yb3RhdGUgPSBtaW4odmFyLT5yb3RhdGUsICh1MzIpMjcwKTsK CQlpZiAodmFyLT5yb3RhdGUgJSA5MCkgewoJCQlpbnQgZGlmZiA9IHZhci0+cm90YXRlICUgOTA7 CgkJCXZhci0+cm90YXRlIC09IGRpZmY7CgkJfQoJCWlmICgodmFyLT5yb3RhdGUgIT0gMTgwKSAm JiAKCQkgICAgKCh2YXItPnhyZXMgPiAzMjApIHx8ICh2YXItPnlyZXMgPiAyNDApKSkgewoJCQl2 YXItPnJvdGF0ZSA9IDA7IC8qIFJlc29sdXRpb24gdG9vIGhpZ2ggZm9yIHN1Y2ggYW5nbGUgKi8K CQl9Cgl9CgoJLyogVGhlIG1heCBMQ0QgY2xvY2sgaXMgZml4ZWQgdG8gNDhNSHogKHZhbHVlIG9m IEFVWF9DTEspLiBUaGUgcGl4ZWwKCSAqIGNsb2NrIGNhbiBvbmx5IGJlIG9idGFpbiBieSBkaXZp ZGluZyB0aGlzIHZhbHVlIGJ5IGFuIGV2ZW4gaW50ZWdlci4KCSAqIEZhbGxiYWNrIHRvIGEgc2xv d2VyIHBpeGVsIGNsb2NrIGlmIG5lY2Vzc2FyeS4gKi8KCXBpeGNsb2NrID0gbWF4KCh1MzIpKFBJ Q09TMktIWih2YXItPnBpeGNsb2NrKSAqIDEwMDApLCBmYmktPm1vbnNwZWNzLmRjbGttaW4pOwoJ cGl4Y2xvY2sgPSBtaW4ocGl4Y2xvY2ssIG1pbihmYmktPm1vbnNwZWNzLmRjbGttYXgsICh1MzIp QVUxMTAwX0xDRF9NQVhfQ0xLLzIpKTsKCglpZiAoQVUxMTAwX0xDRF9NQVhfQ0xLICUgcGl4Y2xv Y2spIHsKCQlpbnQgZGlmZiA9IEFVMTEwMF9MQ0RfTUFYX0NMSyAlIHBpeGNsb2NrOwoJCXBpeGNs b2NrIC09IGRpZmY7Cgl9CgoJdmFyLT5waXhjbG9jayA9IEtIWjJQSUNPUyhwaXhjbG9jay8xMDAw KTsKCglpZiAoIXBhbmVsX2lzX2FjdGl2ZShwYW5lbCkpIHsKCQlpbnQgcGNkID0gQVUxMTAwX0xD RF9NQVhfQ0xLIC8gKHBpeGNsb2NrICogMikgLSAxOwoKCQlpZiAoIXBhbmVsX2lzX2NvbG9yKHBh bmVsKSAKCQkJJiYgKHBhbmVsLT5jb250cm9sX2Jhc2UgJiBMQ0RfQ09OVFJPTF9NUEkpICYmIChw Y2QgPCAzKSkgewoJCQkvKiBTVE4gOGJpdCBtb25vIHBhbmVsIHN1cHBvcnQgaXMgdXAgdG8gNk1I eiBwaXhjbG9jayAqLwoJCQl2YXItPnBpeGNsb2NrID0gS0haMlBJQ09TKDYwMDApOwoJCX0gZWxz ZSBpZiAoIXBjZCkgewoJCQkvKiBPdGhlciBTVE4gcGFuZWwgc3VwcG9ydCBpcyB1cCB0byAxMk1I eiAgKi8KCQkJdmFyLT5waXhjbG9jayA9IEtIWjJQSUNPUygxMjAwMCk7CgkJfQoJfQoJCgkvKiBT ZXQgYml0ZmllbGQgYWNjb3JkaW5nbHkgKi8KCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkg ewoKCQljYXNlIDE6CgkJY2FzZSAyOiAKCQljYXNlIDQ6IAoJCWNhc2UgODogCgkJCS8qIFBzZXVk byBjb2xvci4gU0hPVUxEIGJlIHRoZSBmb2xsb3dpbmcuICovCgkJCXZhci0+cmVkLm9mZnNldCAg ICA9IDA7CgkJCXZhci0+cmVkLmxlbmd0aCAgICA9IHZhci0+Yml0c19wZXJfcGl4ZWw7CgkJCXZh ci0+cmVkLm1zYl9yaWdodCA9IDA7CgoJCQl2YXItPmdyZWVuLm9mZnNldCAgPSAwOwoJCQl2YXIt PmdyZWVuLmxlbmd0aCAgPSB2YXItPmJpdHNfcGVyX3BpeGVsOwoJCQl2YXItPmdyZWVuLm1zYl9y aWdodCA9IDA7CgoJCQl2YXItPmJsdWUub2Zmc2V0ICAgPSAwOwoJCQl2YXItPmJsdWUubGVuZ3Ro ICAgPSB2YXItPmJpdHNfcGVyX3BpeGVsOwoJCQl2YXItPmJsdWUubXNiX3JpZ2h0ID0gMDsKCgkJ CXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CgkJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CgkJCXZh ci0+dHJhbnNwLm1zYl9yaWdodCA9IDA7CgoJCQlicmVhazsKCQkJCgkJY2FzZSAxMjoKCQl7CgkJ CS8qIDEyYnBwIFRydWUgY29sb3IuIFVzZSB0aGUgbGFzdCBSR0IgYml0ZmllbGQgKi8KCQkJaW50 IGlkeCA9IEFSUkFZX1NJWkUocmdiX2JpdGZpZWxkcykgLSAxOwoKCQkJdmFyLT5yZWQgICAgPSBy Z2JfYml0ZmllbGRzW2lkeF1bMF07CgkJCXZhci0+Z3JlZW4gID0gcmdiX2JpdGZpZWxkc1tpZHhd WzFdOwoJCQl2YXItPmJsdWUgICA9IHJnYl9iaXRmaWVsZHNbaWR4XVsyXTsKCQkJdmFyLT50cmFu c3AgPSByZ2JfYml0ZmllbGRzW2lkeF1bM107CgoJCQlicmVhazsKCQl9CQoJCWNhc2UgMTY6CgkJ ewoJCQkvKiAxNmJwcCBUcnVlIGNvbG9yLiBDaGVjayBpZiB3ZSBzdXBwb3J0IGl0LCBvciBmb3Jj ZSBkZWZhdWx0LiAqLwoJCQlpZiAoYXUxMTAwZmJfbWF0Y2hfcmdiKHZhcikgPCAwKSB7CgoJCQkJ aW50IGlkeCA9IExDRF9DT05UUk9MX0RFRkFVTFRfU0JQUEYgPj4gTENEX0NPTlRST0xfU0JQUEZf QklUOwoJCQkJdmFyLT5yZWQgICAgPSByZ2JfYml0ZmllbGRzW2lkeF1bMF07CgkJCQl2YXItPmdy ZWVuICA9IHJnYl9iaXRmaWVsZHNbaWR4XVsxXTsKCQkJCXZhci0+Ymx1ZSAgID0gcmdiX2JpdGZp ZWxkc1tpZHhdWzJdOwoJCQkJdmFyLT50cmFuc3AgPSByZ2JfYml0ZmllbGRzW2lkeF1bM107CgkJ CX0KCQkJYnJlYWs7CgkJfQoKCQlkZWZhdWx0OgoJCQlwcmludF9kYmcoIlVuc3VwcG9ydGVkIGRl cHRoICVkYnBwIiwgdmFyLT5iaXRzX3Blcl9waXhlbCk7CgkJCXJldHVybiAtRUlOVkFMOwoJfQoK CXJldHVybiAwOwp9CgovKiBmYl9zZXRfcGFyIAogKiBTZXQgaGFyZHdhcmUgd2l0aCB2YXIgc2V0 dGluZ3MuIFRoaXMgd2lsbCBlbmFibGUgdGhlIGNvbnRyb2xsZXIgd2l0aCBhIHNwZWNpZmljCiAq IG1vZGUsIG5vcm1hbGx5IHZhbGlkYXRlZCB3aXRoIHRoZSBmYl9jaGVja192YXIgbWV0aG9kCiAq LwppbnQgYXUxMTAwZmJfZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqZmJpKQp7CglzdHJ1Y3Qg YXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHRvX2F1MTEwMGZiX2RldmljZShmYmkpOwoJc3RydWN0 IGF1MTEwMGZiX3JlZ3MgKnJlZ3M7CglzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcjsKCXUz MiB3b3JkcywgcGNkOwoKCXByaW50X2RiZygiZmJfc2V0X3BhciAlcCIsIGZiaSk7CgoJaWYgKCFm YmRldikKCQlyZXR1cm4gLUVJTlZBTDsKCiAJdmFyID0gJmZiaS0+dmFyOwojaWYgU0lNVUxBVE9S CglyZWdzID0gKHN0cnVjdCBhdTExMDBmYl9yZWdzKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXUx MTAwZmJfcmVncyksIEdGUF9LRVJORUwpOwojZWxzZQoJcmVncyA9IGZiZGV2LT5yZWdzOwojZW5k aWYKCWF1MTEwMGZiX3VwZGF0ZV9mYmluZm8oZmJpKTsKCgkvKiBTdG9wIGFuZCByZWNvbmZpZ3Vy ZSBjb250cm9sbGVyLi4uICovCglhdTExMDBmYl9zdG9wX2NvbnRyb2xsZXIoZmJkZXYsIDEpOwoK CS8qIERldGVybWluZSBCUFAgbW9kZSBhbmQgZm9ybWF0ICovCglyZWdzLT5sY2RfY29udHJvbCA9 IGZiZGV2LT5wYW5lbC0+Y29udHJvbF9iYXNlIHwKCQkJICAgICgodmFyLT5yb3RhdGUvOTApIDw8 IExDRF9DT05UUk9MX1NNX0JJVCk7CgoJc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7CgkJ Y2FzZSAxOgoJCQlyZWdzLT5sY2RfY29udHJvbCB8PSBMQ0RfQ09OVFJPTF9CUFBfMTsKCQkJYnJl YWs7CgkJY2FzZSAyOgoJCQlyZWdzLT5sY2RfY29udHJvbCB8PSBMQ0RfQ09OVFJPTF9CUFBfMjsK CQkJYnJlYWs7CgkJY2FzZSA0OgoJCQlyZWdzLT5sY2RfY29udHJvbCB8PSBMQ0RfQ09OVFJPTF9C UFBfNDsKCQkJYnJlYWs7CgkJY2FzZSA4OgoJCQlyZWdzLT5sY2RfY29udHJvbCB8PSBMQ0RfQ09O VFJPTF9CUFBfODsKCQkJYnJlYWs7CgkJY2FzZSAxMjoKCQkJcmVncy0+bGNkX2NvbnRyb2wgfD0g TENEX0NPTlRST0xfQlBQXzEyOwoJCQlicmVhazsKCQljYXNlIDE2OgoJCQlyZWdzLT5sY2RfY29u dHJvbCB8PSBMQ0RfQ09OVFJPTF9CUFBfMTY7CgkJCWJyZWFrOwoJfQoKCWlmIChwYW5lbF9pc19h Y3RpdmUoZmJkZXYtPnBhbmVsKSkgewoKCQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAxNikg ewoKCQkJLyogRmluZCB0aGUgcmlnaHQgcGl4ZWwgZm9ybWF0IGZvciB0aGlzIG1vZGUgKi8KCQkJ aW50IGlkeCA9IGF1MTEwMGZiX21hdGNoX3JnYih2YXIpOwoJCQlyZWdzLT5sY2RfY29udHJvbCB8 PSAoaWR4IDw8IExDRF9DT05UUk9MX1NCUFBGX0JJVCk7CgkJCQoJCX0gZWxzZSBpZiAodmFyLT5i aXRzX3Blcl9waXhlbCA8PSA4KSB7CgoJCQkvKiBGb3IgVEZUIHBhbGxldHRpemVkIG1vZGUsIHVz ZSA1NjUgUkdCIHBhbGV0dGUgZW50cmllcyAqLwkKCQkJcmVncy0+bGNkX2NvbnRyb2wgfD0gTENE X0NPTlRST0xfU0JQUEZfNTY1OwoJCX0KCX0KCglyZWdzLT5sY2RfaW50ZW5hYmxlID0gMDsKCXJl Z3MtPmxjZF9pbnRzdGF0dXMgPSAwOwoKCXJlZ3MtPmxjZF9ob3J6dGltaW5nID0gTENEX0hPUlpU SU1JTkdfSE4xX04odmFyLT5sZWZ0X21hcmdpbikgfAoJCQkgICAgICAgTENEX0hPUlpUSU1JTkdf SE4yX04odmFyLT5yaWdodF9tYXJnaW4pIHwKCQkJICAgICAgIExDRF9IT1JaVElNSU5HX0hQV19O KHZhci0+aHN5bmNfbGVuKSB8CgkJCSAgICAgICBMQ0RfSE9SWlRJTUlOR19QUExfTih2YXItPnhy ZXMpOwoKCXJlZ3MtPmxjZF92ZXJ0dGltaW5nID0gTENEX1ZFUlRUSU1JTkdfVk4xX04odmFyLT51 cHBlcl9tYXJnaW4pIHwKCQkJICAgICAgIExDRF9WRVJUVElNSU5HX1ZOMl9OKHZhci0+bG93ZXJf bWFyZ2luKSB8CgkJCSAgICAgICBMQ0RfVkVSVFRJTUlOR19WUFdfTih2YXItPnZzeW5jX2xlbikg fAoJCQkgICAgICAgTENEX1ZFUlRUSU1JTkdfTFBQX04odmFyLT55cmVzKTsKCgkvKiBzZXR1cCBj bG9jayB0byBvYnRhaW4gdmFsdWUgaW4gdmFyLT5waXhjbG9jay4gCgkgKiBOb3RlIHRoYXQgTENE IGNsb2NrIGlzIHNldHVwIHRvIEFVWCBjbG9jaywgd2hpY2ggaXMgYnkgZGVmYXVsdCAKCSAqIChh bmQgYXNzdW1lZCBhdCkgNDhNSHogKi8KCXBjZCA9IEFVMTEwMF9MQ0RfTUFYX0NMSyAvICgoUElD T1MyS0haKHZhci0+cGl4Y2xvY2spICogMTAwMCkgKiAyKSAtIDE7CglyZWdzLT5sY2RfY2xrY29u dHJvbCA9IExDRF9DTEtDT05UUk9MX1BDRF9OKHBjZCkgfCBmYmRldi0+cGFuZWwtPmNsa2NvbnRy b2xfYmFzZTsKCglyZWdzLT5sY2RfZG1hYWRkcjAgPSBMQ0RfRE1BX1NBX04oZmJkZXYtPmZiX3Bo eXMpOwoKCWlmIChwYW5lbF9pc19kdWFsKGZiZGV2LT5wYW5lbCkpIHsKCQkvKiBTZWNvbmQgcGFu ZWwgZGlzcGxheSBzZWNvbmYgaGFsZiBvZiBzY3JlZW4gaWYgcG9zc2libGUsCgkJICogb3RoZXJ3 aXNlIGRpc3BsYXkgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHBhbmVsICovCgkJaWYgKHZhci0+eXJl c192aXJ0dWFsID49ICh2YXItPnlyZXMgPDwgMSkpIHsKCQkJcmVncy0+bGNkX2RtYWFkZHIxID0g TENEX0RNQV9TQV9OKGZiZGV2LT5mYl9waHlzICsKCQkJCQkJCSAgKGZiaS0+Zml4LmxpbmVfbGVu Z3RoICogCgkJCQkJCSAgICAgICAgICAodmFyLT55cmVzX3ZpcnR1YWwgPj4gMSkpKTsKCQl9IGVs c2UgewoJCQlyZWdzLT5sY2RfZG1hYWRkcjEgPSBMQ0RfRE1BX1NBX04oZmJkZXYtPmZiX3BoeXMp OwoJCX0KCX0KCgl3b3JkcyA9IGZiaS0+Zml4LmxpbmVfbGVuZ3RoIC8gc2l6ZW9mKHUzMik7Cglp ZiAoIXZhci0+cm90YXRlIHx8ICh2YXItPnJvdGF0ZSA9PSAxODApKSB7CgkJd29yZHMgKj0gdmFy LT55cmVzX3ZpcnR1YWw7CgkJaWYgKHZhci0+cm90YXRlIC8qIDE4MCAqLykgewoJCQl3b3JkcyAt PSAod29yZHMgJSA4KTsgLyogc2hvdWxkIGJlIGRpdmlzYWJsZSBieSA4ICovCgkJfQoJfQoJcmVn cy0+bGNkX3dvcmRzID0gTENEX1dSRF9XUkRTX04od29yZHMpOwoKCXJlZ3MtPmxjZF9wd21kaXYg PSAwOwoJcmVncy0+bGNkX3B3bWhpID0gMDsKCiNpZiBERUJVRwoJYXUxMTAwZmJfZHVtcF9yZWdp c3RlcnMocmVncyk7CiNlbmRpZgojaWYgU0lNVUxBVE9SCglrZnJlZShyZWdzKTsKI2VuZGlmCgkv KiBSZXN1bWUgY29udHJvbGxlciAqLwoJYXUxMTAwZmJfc3RhcnRfY29udHJvbGxlcihmYmRldik7 CgoJcmV0dXJuIDA7Cn0KCi8qIGZiX3NldGNvbHJlZwogKiBTZXQgY29sb3IgaW4gTENEIHBhbGV0 dGUuCiAqLwppbnQgYXUxMTAwZmJfZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25l ZCByZWQsIHVuc2lnbmVkIGdyZWVuLCB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsIHN0 cnVjdCBmYl9pbmZvICpmYmkpCnsKCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gdG9f YXUxMTAwZmJfZGV2aWNlKGZiaSk7Cgl1MzIgKnBhbGV0dGUgPSBmYmRldi0+cmVncy0+bGNkX3Bh bGxldHRlYmFzZTsKCXUzMiB2YWx1ZTsKCglpZiAocmVnbm8gPiAoQVUxMTAwX0xDRF9OQlJfUEFM RVRURV9FTlRSSUVTIC0gMSkpCgkJcmV0dXJuIC1FSU5WQUw7CgoJaWYgKGZiaS0+dmFyLmdyYXlz Y2FsZSkgewoJCS8qIENvbnZlcnQgY29sb3IgdG8gZ3JheXNjYWxlICovCgkJcmVkID0gZ3JlZW4g PSBibHVlID0gCgkJCSgxOTU5NSAqIHJlZCArIDM4NDcwICogZ3JlZW4gKyA3NDcxICogYmx1ZSkg Pj4gMTY7Cgl9CgoJaWYgKGZiaS0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SKSB7 CgkJLyogUGxhY2UgY29sb3IgaW4gdGhlIHBzZXVkb3BhbGV0dGUgKi8KCQlpZiAocmVnbm8gPiAx NikKCQkJcmV0dXJuIC1FSU5WQUw7CgoJCXBhbGV0dGUgPSAodTMyKilmYmktPnBzZXVkb19wYWxl dHRlOwoKCQlyZWQgICA+Pj0gKDE2IC0gZmJpLT52YXIucmVkLmxlbmd0aCk7CgkJZ3JlZW4gPj49 ICgxNiAtIGZiaS0+dmFyLmdyZWVuLmxlbmd0aCk7CgkJYmx1ZSAgPj49ICgxNiAtIGZiaS0+dmFy LmJsdWUubGVuZ3RoKTsKCQoJCXZhbHVlID0gKHJlZCAgIDw8IGZiaS0+dmFyLnJlZC5vZmZzZXQp IAl8CQoJCQkoZ3JlZW4gPDwgZmJpLT52YXIuZ3JlZW4ub2Zmc2V0KXwKCQkJKGJsdWUgIDw8IGZi aS0+dmFyLmJsdWUub2Zmc2V0KTsKCQl2YWx1ZSAmPSAweEZGRkY7CgoJfSBlbHNlIGlmIChwYW5l bF9pc19hY3RpdmUoZmJkZXYtPnBhbmVsKSkgewoJCS8qIENPTE9SIFRGVCBQQUxMRVRUSVpFRCAo dXNlIFJHQiA1NjUpICovCgkJdmFsdWUgPSAocmVkICYgMHhGODAwKXwoKGdyZWVuID4+IDUpICYg MHgwN0UwKXwoKGJsdWUgPj4gMTEpICYgMHgwMDFGKTsKCQl2YWx1ZSAmPSAweEZGRkY7CgoJfSBl bHNlIGlmIChwYW5lbF9pc19jb2xvcihmYmRldi0+cGFuZWwpKSB7CgkJLyogQ09MT1IgU1ROIE1P REUgKi8KCQl2YWx1ZSA9ICgoKHBhbmVsX3N3YXBfcmdiKGZiZGV2LT5wYW5lbCkgPyBibHVlIDog cmVkKSA+PiAxMikgJiAweDAwMEYpIHwgCgkJCSgoZ3JlZW4gPj4gOCkgJiAweDAwRjApIHwgCgkJ CSgoKHBhbmVsX3N3YXBfcmdiKGZiZGV2LT5wYW5lbCkgPyByZWQgOiBibHVlKSA+PiA0KSAmIDB4 MEYwMCk7CgkJdmFsdWUgJj0gMHhGRkY7Cgl9IGVsc2UgewoJCS8qIE1PTk9DSFJPTUUgTU9ERSAq LwoJCXZhbHVlID0gKGdyZWVuID4+IDEyKSAmIDB4MDAwRjsKCQl2YWx1ZSAmPSAweEY7Cgl9CgoJ cGFsZXR0ZVtyZWdub10gPSB2YWx1ZTsKCQoJcmV0dXJuIDA7Cn0KCi8qIGZiX2JsYW5rCiAqIEJs YW5rIHRoZSBzY3JlZW4uIERlcGVuZGluZyBvbiB0aGUgbW9kZSwgdGhlIHNjcmVlbiB3aWxsIGJl CiAqIGFjdGl2YXRlZCB3aXRoIHRoZSBiYWNrbGlnaHQgY29sb3IsIG9yIGRlc2FjdGl2YXRlZAog Ki8KaW50IGF1MTEwMGZiX2ZiX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mbyAq ZmJpKQp7CglzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IHRvX2F1MTEwMGZiX2Rldmlj ZShmYmkpOwoKCXByaW50X2RiZygiZmJfYmxhbmsgJWQgJXAiLCBibGFua19tb2RlLCBmYmkpOwoK CXN3aXRjaCAoYmxhbmtfbW9kZSkgewoKCQljYXNlIFZFU0FfTk9fQkxBTktJTkc6CgkJCS8qIFR1 cm4gb24gcGFuZWwgKi8KCQkJZmJkZXYtPnJlZ3MtPmxjZF9jb250cm9sIHw9IExDRF9DT05UUk9M X0dPOwojaWZkZWYgQ09ORklHX01JUFNfUEIxMTAwCgkJCWlmIChkcnZfaW5mby5wYW5lbF9pZHgg PT0gMSkgewoJCQkJYXVfd3JpdGV3KGF1X3JlYWR3KFBCMTEwMF9HX0NPTlRST0wpIAoJCQkJCSAg fCAoUEIxMTAwX0dfQ09OVFJPTF9CTCB8IFBCMTEwMF9HX0NPTlRST0xfVkREKSwgCgkJCQkJICBQ QjExMDBfR19DT05UUk9MKTsKCQkJfQojZW5kaWYKCQkJYXVfc3luYygpOwoJCQlicmVhazsKCgkJ Y2FzZSBWRVNBX1ZTWU5DX1NVU1BFTkQ6CgkJY2FzZSBWRVNBX0hTWU5DX1NVU1BFTkQ6CgkJY2Fz ZSBWRVNBX1BPV0VSRE9XTjoKCQkJLyogVHVybiBvZmYgcGFuZWwgKi8KCQkJZmJkZXYtPnJlZ3Mt PmxjZF9jb250cm9sICY9IH5MQ0RfQ09OVFJPTF9HTzsKI2lmZGVmIENPTkZJR19NSVBTX1BCMTEw MAoJCQlpZiAoZHJ2X2luZm8ucGFuZWxfaWR4ID09IDEpIHsKCQkJCWF1X3dyaXRldyhhdV9yZWFk dyhQQjExMDBfR19DT05UUk9MKSAKCQkJCSAgCSAgJiB+KFBCMTEwMF9HX0NPTlRST0xfQkwgfCBQ QjExMDBfR19DT05UUk9MX1ZERCksCgkJCQkgIAkgIFBCMTEwMF9HX0NPTlRST0wpOwoJCQl9CiNl bmRpZgoJCQlhdV9zeW5jKCk7CgkJCWJyZWFrOwoKCQlkZWZhdWx0OiAKCQkJYnJlYWs7CgoJfQoJ cmV0dXJuIDA7Cn0KCi8qIGZiX3Bhbl9kaXNwbGF5CiAqIFBhbiBkaXNwbGF5IGluIHggYW5kL29y IHkgYXMgc3BlY2lmaWVkCiAqLwppbnQgYXUxMTAwZmJfZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZi X3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICpmYmkpCnsKCXN0cnVjdCBhdTEx MDBmYl9kZXZpY2UgKmZiZGV2ID0gdG9fYXUxMTAwZmJfZGV2aWNlKGZiaSk7CglpbnQgZHk7CgoJ cHJpbnRfZGJnKCJmYl9wYW5fZGlzcGxheSAlcCAlcCIsIHZhciwgZmJpKTsKCglpZiAoIXZhciB8 fCAhZmJkZXYpIHsKCQlyZXR1cm4gLUVJTlZBTDsKCX0KCglpZiAodmFyLT54b2Zmc2V0IC0gZmJp LT52YXIueG9mZnNldCkgewoJCS8qIE5vIHN1cHBvcnQgZm9yIFggcGFubmluZyBmb3Igbm93ISAq LwoJCXJldHVybiAtRUlOVkFMOwoJfQoJCQkKCWR5ID0gdmFyLT55b2Zmc2V0IC0gZmJpLT52YXIu eW9mZnNldDsKCWlmIChkeSkgewoKCQl1MzIgZG1hYWRkcjsKCgkJcHJpbnRfZGJnKCJQYW5uaW5n IHNjcmVlbiBvZiAlZCBsaW5lcyIsIGR5KTsKCgkJZG1hYWRkciA9IGZiZGV2LT5yZWdzLT5sY2Rf ZG1hYWRkcjA7CgkJZG1hYWRkciArPSAoZmJpLT5maXgubGluZV9sZW5ndGggKiBkeSk7CgoJCS8q IFRPRE86IFdhaXQgZm9yIGN1cnJlbnQgZnJhbWUgdG8gZmluaXNoZWQgKi8KCQlmYmRldi0+cmVn cy0+bGNkX2RtYWFkZHIwID0gTENEX0RNQV9TQV9OKGRtYWFkZHIpOwoKCQlpZiAocGFuZWxfaXNf ZHVhbChmYmRldi0+cGFuZWwpKSB7CgkJCWRtYWFkZHIgPSBmYmRldi0+cmVncy0+bGNkX2RtYWFk ZHIxOwoJCQlkbWFhZGRyICs9IChmYmktPmZpeC5saW5lX2xlbmd0aCAqIGR5KTsKCQkJZmJkZXYt PnJlZ3MtPmxjZF9kbWFhZGRyMCA9IExDRF9ETUFfU0FfTihkbWFhZGRyKTsKCQl9Cgl9CgoJcmV0 dXJuIDA7Cn0KCi8qIGZiX3JvdGF0ZQogKiBSb3RhdGUgdGhlIGRpc3BsYXkgb2YgdGhpcyBhbmds ZS4gVGhpcyBkb2Vzbid0IHNlZW1zIHRvIGJlIHVzZWQgYnkgdGhlIGNvcmUsCiAqIGJ1dCBhcyBv dXIgaGFyZHdhcmUgc3VwcG9ydHMgaXQsIHNvIHdoeSBub3QgaW1wbGVtZW50aW5nIGl0Li4uCiAq Lwp2b2lkIGF1MTEwMGZiX2ZiX3JvdGF0ZShzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBpbnQgYW5nbGUp CnsKCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gdG9fYXUxMTAwZmJfZGV2aWNlKGZi aSk7CgoJcHJpbnRfZGJnKCJmYl9yb3RhdGUgJXAgJWQiLCBmYmksIGFuZ2xlKTsKCglpZiAoZmJk ZXYgJiYgKGFuZ2xlID4gMCkgJiYgIShhbmdsZSAlIDkwKSkgewoKCQlhdTExMDBmYl9zdG9wX2Nv bnRyb2xsZXIoZmJkZXYsIDEpOwoKCQlmYmRldi0+cmVncy0+bGNkX2NvbnRyb2wgJj0gfihMQ0Rf Q09OVFJPTF9TTV9NQVNLKTsKCQlmYmRldi0+cmVncy0+bGNkX2NvbnRyb2wgfD0gKChhbmdsZS85 MCkgPDwgTENEX0NPTlRST0xfU01fQklUKTsKCgkJYXUxMTAwZmJfc3RhcnRfY29udHJvbGxlcihm YmRldik7Cgl9Cn0KCi8qIGZiX21tYXAKICogTWFwIHZpZGVvIG1lbW9yeSBpbiB1c2VyIHNwYWNl LiBXZSBkb24ndCB1c2UgdGhlIGdlbmVyaWMgZmJfbW1hcCBtZXRob2QgbWFpbmx5CiAqIHRvIGFs bG93IHRoZSB1c2Ugb2YgdGhlIFRMQiBzdHJlYW1pbmcgZmxhZyAoQ0NBPTYpCiAqLwppbnQgYXUx MTAwZmJfZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCnsKCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2 ID0gdG9fYXUxMTAwZmJfZGV2aWNlKGZiaSk7Cgl1bnNpZ25lZCBpbnQgbGVuOwoJdW5zaWduZWQg bG9uZyBzdGFydD0wLCBvZmY7CgoJaWYgKHZtYS0+dm1fcGdvZmYgPiAofjBVTCA+PiBQQUdFX1NI SUZUKSkgewoJCXJldHVybiAtRUlOVkFMOwoJfQogICAgCglzdGFydCA9IGZiZGV2LT5mYl9waHlz ICYgUEFHRV9NQVNLOwoJbGVuID0gUEFHRV9BTElHTigoc3RhcnQgJiB+UEFHRV9NQVNLKSArIGZi ZGV2LT5mYl9sZW4pOwoKCW9mZiA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKCglpZiAo KHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCArIG9mZikgPiBsZW4pIHsKCQlyZXR1cm4gLUVJ TlZBTDsKCX0KCglvZmYgKz0gc3RhcnQ7Cgl2bWEtPnZtX3Bnb2ZmID0gb2ZmID4+IFBBR0VfU0hJ RlQ7CgoJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9w cm90KTsKCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9ICg2IDw8IDkpOyAvL0NDQT02 CgoJdm1hLT52bV9mbGFncyB8PSBWTV9JTzsKCglpZiAoaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEs IHZtYS0+dm1fc3RhcnQsIG9mZiwKCQkJICAgICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3Rh cnQsCgkJCSAgICAgICAgdm1hLT52bV9wYWdlX3Byb3QpKSB7CgkJcmV0dXJuIC1FQUdBSU47Cgl9 CgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBzdHJ1Y3QgZmJfb3BzIGF1MTEwMGZiX2ZiX29wcyA9IAp7 Cgkub3duZXIJCQk9IFRISVNfTU9EVUxFLAoJLmZiX29wZW4JCT0gYXUxMTAwZmJfZmJfb3BlbiwK CS5mYl9yZWxlYXNlCQk9IGF1MTEwMGZiX2ZiX3JlbGVhc2UsCgkuZmJfY2hlY2tfdmFyCQk9IGF1 MTEwMGZiX2ZiX2NoZWNrX3ZhciwKCS5mYl9zZXRfcGFyCQk9IGF1MTEwMGZiX2ZiX3NldF9wYXIs CgkuZmJfc2V0Y29scmVnCQk9IGF1MTEwMGZiX2ZiX3NldGNvbHJlZywKCS5mYl9ibGFuawkJPSBh dTExMDBmYl9mYl9ibGFuaywKCS5mYl9wYW5fZGlzcGxheQkJPSBhdTExMDBmYl9mYl9wYW5fZGlz cGxheSwKCS5mYl9maWxscmVjdAkJPSBjZmJfZmlsbHJlY3QsCgkuZmJfY29weWFyZWEJCT0gY2Zi X2NvcHlhcmVhLAoJLmZiX2ltYWdlYmxpdAkJPSBjZmJfaW1hZ2VibGl0LAoJLmZiX2N1cnNvcgkJ PSBzb2Z0X2N1cnNvciwKCS5mYl9yb3RhdGUJCT0gYXUxMTAwZmJfZmJfcm90YXRlLAoJLmZiX3N5 bmMJCT0gTlVMTCwKCS5mYl9pb2N0bAkJPSBOVUxMLAoJLmZiX21tYXAJCT0gYXUxMTAwZmJfZmJf bW1hcCwKfTsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgpzdGF0aWMgaXJxcmV0dXJuX3QgYXUxMTAw ZmJfaGFuZGxlX2lycShpbnQgaXJxLCB2b2lkKiBkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdz KQp7CglzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiA9IAoJCShzdHJ1Y3QgYXUxMTAwZmJf ZGV2aWNlKikgZGV2X2dldF9kcnZkYXRhKChzdHJ1Y3QgZGV2aWNlKilkZXZfaWQpOwoKCS8qIE5v dGhpbmcgdG8gZG8gZm9yIG5vdywganVzdCBjbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHQgKi8K CWZiZGV2LT5yZWdzLT5sY2RfaW50c3RhdHVzID0gfkxDRF9JTlRfU0Q7CgoJcmV0dXJuIElSUV9I QU5ETEVEOwp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKLyogQVUxMTAwIExDRCBkZXZpY2UgcHJv YmUgaGVscGVycyAqLwoKc3RhdGljIGludCBhdTExMDBmYl9pbml0X21lbShzdHJ1Y3QgZGV2aWNl KiBkZXYpCnsKCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gKHN0cnVjdCBhdTExMDBm Yl9kZXZpY2UqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKCXN0cnVjdCByZXNvdXJjZSAqcmVnc19y ZXM7Cgl1bnNpZ25lZCBsb25nIHBhZ2U7CgoJaWYgKCFkZXYgfHwgIWZiZGV2IHx8ICFmYmRldi0+ cGFuZWwpCgkJcmV0dXJuIC1FSU5WQUw7CgoJLyogQWxsb2NhdGUgcmVnaW9uIGZvciBvdXIgcmVn aXN0ZXJzIGFuZCBtYXAgdGhlbSAqLwoJcmVnc19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uo dG9fcGxhdGZvcm1fZGV2aWNlKGRldiksIElPUkVTT1VSQ0VfTUVNLCAwKTsKCWlmICghcmVnc19y ZXMpIHsKCQlwcmludF9lcnIoImZhaWwgdG8gcmV0cmlldmUgcmVnaXN0ZXJzIHJlc291cmNlIik7 CgkJcmV0dXJuIC1FRkFVTFQ7Cgl9CgoJZmJkZXYtPnJlZ3NfbGVuID0gcmVnc19yZXMtPmVuZCAt IHJlZ3NfcmVzLT5zdGFydCArIDE7CglmYmRldi0+cmVnc19waHlzID0gcmVnc19yZXMtPnN0YXJ0 OwoKCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGZiZGV2LT5yZWdzX3BoeXMsIGZiZGV2LT5yZWdz X2xlbiwgRFJJVkVSX05BTUUpKSB7CgkJcHJpbnRfZXJyKCJmYWlsIHRvIGxvY2sgbWVtb3J5IHJl Z2lvbiBhdCAweCUwOHgiLCBmYmRldi0+cmVnc19waHlzKTsKCQlyZXR1cm4gLUVCVVNZOwoJfQoK CWZiZGV2LT5yZWdzID0gKHN0cnVjdCBhdTExMDBmYl9yZWdzKilLU0VHMUFERFIoZmJkZXYtPnJl Z3NfcGh5cyk7CgoJcHJpbnRfZGJnKCJSZWdpc3RlciBtZW1vcnkgbWFwIGF0ICVwIiwgZmJkZXYt PnJlZ3MpOwoJcHJpbnRfZGJnKCJwaHlzPTB4JTA4eCwgc2l6ZT0lZCIsIGZiZGV2LT5yZWdzX3Bo eXMsIGZiZGV2LT5yZWdzX2xlbik7CgoJLyogQWxsb2NhdGUgdGhlIGZyYW1lYnVmZmVyIHRvIHRo ZSBtYXhpbXVtIHNjcmVlbiBzaXplICogbmJyIG9mIHZpZGVvIGJ1ZmZlcnMgKi8KCWZiZGV2LT5m Yl9sZW4gPSBmYmRldi0+cGFuZWwtPm1heF94cmVzICogZmJkZXYtPnBhbmVsLT5tYXhfeXJlcyAq CgkJICAJKGZiZGV2LT5wYW5lbC0+bWF4X2JwcCA+PiAzKSAqIEFVMTEwMEZCX05CUl9WSURFT19C VUZGRVJTOwoKCWZiZGV2LT5mYl9tZW0gPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBQQUdFX0FM SUdOKGZiZGV2LT5mYl9sZW4pLCAKCQkJCQkmZmJkZXYtPmZiX3BoeXMsIEdGUF9LRVJORUwpOwoJ aWYgKCFmYmRldi0+ZmJfbWVtKSB7CgkJcHJpbnRfZXJyKCJmYWlsIHRvIGFsbG9jYXRlIGZyYW1i dWZmZXIgKHNpemU6ICVkSykpIiwgCgkJCSAgZmJkZXYtPmZiX2xlbiAvIDEwMjQpOwoJCXJldHVy biAtRU5PTUVNOwoJfQoKCS8qCgkgKiBTZXQgcGFnZSByZXNlcnZlZCBzbyB0aGF0IG1tYXAgd2ls bCB3b3JrLiBUaGlzIGlzIG5lY2Vzc2FyeQoJICogc2luY2Ugd2UnbGwgYmUgcmVtYXBwaW5nIG5v cm1hbCBtZW1vcnkuCgkgKi8KCWZvciAocGFnZSA9ICh1bnNpZ25lZCBsb25nKWZiZGV2LT5mYl9t ZW07CgkgICAgIHBhZ2UgPCBQQUdFX0FMSUdOKCh1bnNpZ25lZCBsb25nKWZiZGV2LT5mYl9tZW0g KyBmYmRldi0+ZmJfbGVuKTsgCgkgICAgIHBhZ2UgKz0gUEFHRV9TSVpFKSB7CiNpZiBDT05GSUdf RE1BX05PTkNPSEVSRU5UCgkJU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShDQUNfQUREUihw YWdlKSkpOwojZWxzZQoJCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocGFnZSkpOwojZW5k aWYKCX0KCXByaW50X2RiZygiRnJhbWVidWZmZXIgbWVtb3J5IG1hcCBhdCAlcCIsIGZiZGV2LT5m Yl9tZW0pOwoJcHJpbnRfZGJnKCJwaHlzPTB4JTA4eCwgc2l6ZT0lZEsiLCBmYmRldi0+ZmJfcGh5 cywgZmJkZXYtPmZiX2xlbiAvIDEwMjQpOwoKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IGF1MTEw MGZiX2luaXRfZmJpbmZvKHN0cnVjdCBkZXZpY2UqIGRldikKewoJc3RydWN0IGF1MTEwMGZiX2Rl dmljZSAqZmJkZXYgPSAoc3RydWN0IGF1MTEwMGZiX2RldmljZSopIGRldl9nZXRfZHJ2ZGF0YShk ZXYpOwoJc3RydWN0IGZiX2luZm8gKmZiaTsKCQoJaWYgKCFkZXYgfHwgIWZiZGV2IHx8IChkcnZf aW5mby5wYW5lbF9pZHggPCAwKSkKCQlyZXR1cm4gLUVJTlZBTDsKCglmYmkgPSAmZmJkZXYtPmZi X2luZm87CgltZW1zZXQoZmJpLCAwLCBzaXplb2Yoc3RydWN0IGZiX2luZm8pKTsKCglmYmktPmZi b3BzID0gJmF1MTEwMGZiX2ZiX29wczsKCgkvKiBDb3B5IG1vbml0b3Igc3BlY3MgZnJvbSBwYW5l bCBkYXRhICovCgltZW1jcHkoJmZiaS0+bW9uc3BlY3MsICZmYmRldi0+cGFuZWwtPm1vbnNwZWNz LCBzaXplb2Yoc3RydWN0IGZiX21vbnNwZWNzKSk7CgoJLyogV2UgZmlyc3QgdHJ5IHRoZSB1c2Vy IG1vZGUgcGFzc2VkIGluIGFyZ3VtZW50LiBJZiB0aGF0IGZhaWxlZCwgCgkgKiBvciBpZiBubyBv bmUgaGFzIGJlZW4gc3BlY2lmaWVkLCB3ZSBkZWZhdWx0IHRvIHRoZSBmaXJzdCBtb2RlIG9mIHRo ZSAKCSAqIHBhbmVsIGxpc3QuIE5vdGUgdGhhdCBhZnRlciB0aGlzIGNhbGwsIHZhciBkYXRhIHdp bGwgYmUgc2V0ICovCglpZiAoIWZiX2ZpbmRfbW9kZSgmZmJpLT52YXIsIAoJCQkgIGZiaSwgCgkJ CSAgZHJ2X2luZm8ub3B0X21vZGUsIAoJCQkgIGZiaS0+bW9uc3BlY3MubW9kZWRiLCAKCQkJICBm YmktPm1vbnNwZWNzLm1vZGVkYl9sZW4sCgkJCSAgZmJpLT5tb25zcGVjcy5tb2RlZGIsIAoJCQkg IGZiZGV2LT5wYW5lbC0+bWF4X2JwcCkpIHsKCgkJcHJpbnRfZXJyKCJDYW5ub3QgZmluZCB2YWxp ZCBtb2RlIGZvciBwYW5lbCAlcyIsIGZiZGV2LT5wYW5lbC0+bmFtZSk7CgkJcmV0dXJuIC1FRkFV TFQ7Cgl9CgoJZmJpLT5wc2V1ZG9fcGFsZXR0ZSA9IGttYWxsb2Moc2l6ZW9mKHUzMikgKiAxNiwg R0ZQX0tFUk5FTCk7CglpZiAoIWZiaS0+cHNldWRvX3BhbGV0dGUpIHsKCQlyZXR1cm4gLUVOT01F TTsKCX0KCW1lbXNldChmYmktPnBzZXVkb19wYWxldHRlLCAwLCBzaXplb2YodTMyKSAqIDE2KTsK CglpZiAoZmJfYWxsb2NfY21hcCgmZmJpLT5jbWFwLCBBVTExMDBfTENEX05CUl9QQUxFVFRFX0VO VFJJRVMsIDApIDwgMCkgewoJCXByaW50X2VycigiRmFpbCB0byBhbGxvY2F0ZSBjb2xvcm1hcCAo JWQgZW50cmllcykiLAoJCQkgICBBVTExMDBfTENEX05CUl9QQUxFVFRFX0VOVFJJRVMpOwoJCWtm cmVlKGZiaS0+cHNldWRvX3BhbGV0dGUpOwoJCXJldHVybiAtRUZBVUxUOwoJfQoKCXN0cm5jcHko ZmJpLT5maXguaWQsICJBVTExMDAiLCBzaXplb2YoZmJpLT5maXguaWQpKTsKCWZiaS0+Zml4LnNt ZW1fc3RhcnQgPSBmYmRldi0+ZmJfcGh5czsKCWZiaS0+Zml4LnNtZW1fbGVuID0gZmJkZXYtPmZi X2xlbjsKCWZiaS0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CglmYmktPmZpeC54 cGFuc3RlcCA9IDE7CglmYmktPmZpeC55cGFuc3RlcCA9IDE7CglmYmktPmZpeC5tbWlvX3N0YXJ0 ID0gMDsKCWZiaS0+Zml4Lm1taW9fbGVuID0gMDsKCWZiaS0+Zml4LmFjY2VsID0gRkJfQUNDRUxf Tk9ORTsKCglmYmktPnNjcmVlbl9iYXNlID0gZmJkZXYtPmZiX21lbTsKCglhdTExMDBmYl91cGRh dGVfZmJpbmZvKGZiaSk7CgoJcmV0dXJuIDA7Cn0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKiBB VTExMDAgTENEIGNvbnRyb2xsZXIgZGV2aWNlIGRyaXZlciAqLwoKaW50IGF1MTEwMGZiX2Rydl9w cm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCnsKCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2 ID0gTlVMTDsKCXN0cnVjdCByZXNvdXJjZSAqaXJxX3JlcyA9IE5VTEw7Cgl1MzIgc3lzX2Nsa3Ny YzsKCWludCByZXQ7CgoJaWYgKCFkZXYpCgkJcmV0dXJuIC1FSU5WQUw7CgoJLyogQWxsb2NhdGUg bmV3IGRldmljZSBwcml2YXRlICovCglmYmRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdTEx MDBmYl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKCWlmICghZmJkZXYpIHsKCQlwcmludF9lcnIoImZh aWwgdG8gYWxsb2NhdGUgZGV2aWNlIHByaXZhdGUgcmVjb3JkIik7CgkJcmV0dXJuIC1FTk9NRU07 Cgl9CgoJbWVtc2V0KCh2b2lkKilmYmRldiwgMCwgc2l6ZW9mKHN0cnVjdCBhdTExMDBmYl9kZXZp Y2UpKTsKCWZiZGV2LT5wYW5lbCA9ICZrbm93bl9sY2RfcGFuZWxzW2Rydl9pbmZvLnBhbmVsX2lk eF07CglmYmRldi0+aXJxID0gLTE7CgoJZGV2X3NldF9kcnZkYXRhKGRldiwgKHZvaWQqKWZiZGV2 KTsKCgkvKiBJbml0IElPIGFuZCBmcmFtZWJ1ZmZlciBtZW1vcnkgKi8KCXJldCA9IGF1MTEwMGZi X2luaXRfbWVtKGRldik7CglpZiAocmV0IDwgMCkgewoJCWdvdG8gZmFpbGVkOwoJfQoKCS8qIFJl cXVlc3QgdGhlIElSUSBsaW5lICovCglpcnFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHRv X3BsYXRmb3JtX2RldmljZShkZXYpLCBJT1JFU09VUkNFX0lSUSwgMCk7CglpZiAoIWlycV9yZXMp IHsKCQlwcmludF9lcnIoImZhaWwgdG8gcmV0cmlldmUgSVJRIHJlc291cmNlIik7CgkJcmV0ID0g LUVGQVVMVDsKCQlnb3RvIGZhaWxlZDsKCX0KCglyZXQgPSByZXF1ZXN0X2lycShpcnFfcmVzLT5z dGFydCwgYXUxMTAwZmJfaGFuZGxlX2lycSwgCgkJIAkgIFNBX0lOVEVSUlVQVCwgImxjZCIsICh2 b2lkKilkZXYpOwoJaWYgKHJldCA8IDApIHsKCQlwcmludF9lcnIoImZhaWwgdG8gcmVxdWVzdCBp bnRlcnJ1cHQgbGluZSAlbGQgKGVycjogJWQpIiwKCQkJICBpcnFfcmVzLT5zdGFydCwgcmV0KTsK CQlnb3RvIGZhaWxlZDsKCX0KCglmYmRldi0+aXJxID0gaXJxX3Jlcy0+c3RhcnQ7CgoJLyogU2V0 dXAgTENEIGNsb2NrIHRvIEFVWCAoNDggTUh6KSAqLwoJc3lzX2Nsa3NyYyA9IGF1X3JlYWRsKFNZ U19DTEtTUkMpICYgfihTWVNfQ1NfTUxfTUFTSyB8IFNZU19DU19ETCB8IFNZU19DU19DTCk7Cglh dV93cml0ZWwoKHN5c19jbGtzcmMgfCAoMSA8PCBTWVNfQ1NfTUxfQklUKSksIFNZU19DTEtTUkMp OwoKCS8qIEluaXQgRkIgZGF0YSAqLwoJcmV0ID0gYXUxMTAwZmJfaW5pdF9mYmluZm8oZGV2KTsK CWlmIChyZXQgPCAwKSB7CgkJZ290byBmYWlsZWQ7Cgl9CgoJLyogUmVnaXN0ZXIgbmV3IGZyYW1l YnVmZmVyICovCglyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJkZXYtPmZiX2luZm8pOwoJ aWYgKHJldCA8IDApIHsKCQlwcmludF9lcnIoImNhbm5vdCByZWdpc3RlciBuZXcgZnJhbWVidWZm ZXIiKTsKCQlnb3RvIGZhaWxlZDsKCX0KCiNpZiAhZGVmaW5lZChDT05GSUdfRlJBTUVCVUZGRVJf Q09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTE9HTykKCWlmIChmYl9wcmVwYXJlX2xvZ28oJmZi ZGV2LT5mYl9pbmZvKSkgewoKCQkvKiBTdGFydCBkaXNwbGF5IGFuZCBzaG93IGxvZ28gb24gYm9v dCAqLwoJCWF1MTEwMGZiX2ZiX3NldF9wYXIoJmZiZGV2LT5mYl9pbmZvKTsKCQlmYl9zZXRfY21h cCgmZmJkZXYtPmZiX2luZm8uY21hcCwgJmZiZGV2LT5mYl9pbmZvKTsKCgkJZmJfc2hvd19sb2dv KCZmYmRldi0+ZmJfaW5mbyk7Cgl9CiNlbmRpZgoJcmV0dXJuIDA7CgpmYWlsZWQ6CglpZiAoZmJk ZXYtPmlycSA+PSAwKSB7CgkJZnJlZV9pcnEoZmJkZXYtPmlycSwgKHZvaWQqKWRldik7Cgl9Cglp ZiAoZmJkZXYtPnJlZ3MpIHsKCQlyZWxlYXNlX21lbV9yZWdpb24oZmJkZXYtPnJlZ3NfcGh5cywg ZmJkZXYtPnJlZ3NfbGVuKTsKCX0KCWlmIChmYmRldi0+ZmJfbWVtKSB7CgkJZG1hX2ZyZWVfbm9u Y29oZXJlbnQoZGV2LCBmYmRldi0+ZmJfbGVuLCBmYmRldi0+ZmJfbWVtLCBmYmRldi0+ZmJfcGh5 cyk7Cgl9CglpZiAoZmJkZXYtPmZiX2luZm8uY21hcC5sZW4gIT0gMCkgewoJCWZiX2RlYWxsb2Nf Y21hcCgmZmJkZXYtPmZiX2luZm8uY21hcCk7Cgl9CglrZnJlZShmYmRldik7CglkZXZfc2V0X2Ry dmRhdGEoZGV2LCBOVUxMKTsKCglyZXR1cm4gcmV0Owp9CgppbnQgYXUxMTAwZmJfZHJ2X3JlbW92 ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCnsKCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0g TlVMTDsKCglpZiAoIWRldikKCQlyZXR1cm4gLUVOT0RFVjsKCglmYmRldiA9IChzdHJ1Y3QgYXUx MTAwZmJfZGV2aWNlKikgZGV2X2dldF9kcnZkYXRhKGRldik7CgojaWYgIWRlZmluZWQoQ09ORklH X0ZSQU1FQlVGRkVSX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX0xPR08pCglhdTExMDBmYl9m Yl9ibGFuayhWRVNBX1BPV0VSRE9XTiwgJmZiZGV2LT5mYl9pbmZvKTsKI2VuZGlmCglhdTExMDBm Yl9zdG9wX2NvbnRyb2xsZXIoZmJkZXYsIDApOwoKCS8qIENsZWFuIHVwIGFsbCBwcm9iZSBkYXRh ICovCgl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmRldi0+ZmJfaW5mbyk7CgoJZnJlZV9pcnEo ZmJkZXYtPmlycSwgKHZvaWQqKWRldik7CglyZWxlYXNlX21lbV9yZWdpb24oZmJkZXYtPnJlZ3Nf cGh5cywgZmJkZXYtPnJlZ3NfbGVuKTsKCglkbWFfZnJlZV9jb2hlcmVudChkZXYsIFBBR0VfQUxJ R04oZmJkZXYtPmZiX2xlbiksIGZiZGV2LT5mYl9tZW0sIGZiZGV2LT5mYl9waHlzKTsKCglmYl9k ZWFsbG9jX2NtYXAoJmZiZGV2LT5mYl9pbmZvLmNtYXApOwoJa2ZyZWUoZmJkZXYtPmZiX2luZm8u cHNldWRvX3BhbGV0dGUpOwoJa2ZyZWUoKHZvaWQqKWZiZGV2KTsKCglyZXR1cm4gMDsKfQoKaW50 IGF1MTEwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIg bGV2ZWwpCnsKCS8qIFRPRE8gKi8KCXJldHVybiAwOwp9CgppbnQgYXUxMTAwZmJfZHJ2X3Jlc3Vt ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKewoJLyogVE9ETyAqLwoJcmV0dXJuIDA7 Cn0KCnN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTExMDBmYl9kcml2ZXIgPSB7CgkubmFt ZQkJPSAiYXUxMTAwLWxjZCIsCgkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKCgkucHJvYmUJ CT0gYXUxMTAwZmJfZHJ2X3Byb2JlLAogICAgICAgIC5yZW1vdmUJCT0gYXUxMTAwZmJfZHJ2X3Jl bW92ZSwKCS5zdXNwZW5kCT0gYXUxMTAwZmJfZHJ2X3N1c3BlbmQsCiAgICAgICAgLnJlc3VtZQkJ PSBhdTExMDBmYl9kcnZfcmVzdW1lLAp9OwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi8qIEtlcm5l bCBkcml2ZXIgKi8KCmludCBhdTExMDBmYl9zZXR1cChjaGFyICpvcHRpb25zKQp7CgljaGFyKiB0 aGlzX29wdDsKCWludCBudW1fcGFuZWxzID0gQVJSQVlfU0laRShrbm93bl9sY2RfcGFuZWxzKTsK CWNoYXIqIG1vZGUgPSBOVUxMOwoJaW50IHBhbmVsX2lkeCA9IC0xOwoKCWlmIChudW1fcGFuZWxz IDw9IDApIHsKCQlwcmludF9lcnIoIk5vIExDRCBwYW5lbHMgc3VwcG9ydGVkIGJ5IGRyaXZlciEi KTsKCQlyZXR1cm4gLUVGQVVMVDsKCX0KCglpZiAob3B0aW9ucykgewoJCXdoaWxlICgodGhpc19v cHQgPSBzdHJzZXAoJm9wdGlvbnMsIiwiKSkgIT0gTlVMTCkgewoJCQkvKiBQYW5lbCBvcHRpb24g Ki8KCQkJaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAicGFuZWw6IiwgNikpIHsKCQkJCWludCBpOwoJ CQkJdGhpc19vcHQgKz0gNjsKCQkJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFuZWxzOyBpKyspIHsK CQkJCQlpZiAoIXN0cm5jbXAodGhpc19vcHQsCgkJCQkJICAgICAgCSAgICAga25vd25fbGNkX3Bh bmVsc1tpXS5uYW1lLCAKCQkJCQkJICAgICBzdHJsZW4odGhpc19vcHQpKSkgewoJCQkJCQlwYW5l bF9pZHggPSBpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCQlpZiAoaSA+PSBudW1fcGFu ZWxzKSB7CiAJCQkJCXByaW50X3dhcm4oIlBhbmVsICVzIG5vdCBzdXBwb3J0ZWQhIiwgdGhpc19v cHQpOwoJCQkJfQoJCQl9CgkJCS8qIE1vZGUgb3B0aW9uIChvbmx5IG9wdGlvbiB0aGF0IHN0YXJ0 IHdpdGggZGlnaXQpICovCgkJCWVsc2UgaWYgKGlzZGlnaXQodGhpc19vcHRbMF0pKSB7CgkJCQlt b2RlID0ga21hbGxvYyhzdHJsZW4odGhpc19vcHQpICsgMSwgR0ZQX0tFUk5FTCk7CgkJCQlzdHJu Y3B5KG1vZGUsIHRoaXNfb3B0LCBzdHJsZW4odGhpc19vcHQpICsgMSk7CgkJCX0KCQkJLyogVW5z dXBwb3J0ZWQgb3B0aW9uICovCgkJCWVsc2UgewoJCQkJcHJpbnRfd2FybigiVW5zdXBwb3J0ZWQg b3B0aW9uIFwiJXNcIiIsIHRoaXNfb3B0KTsKCQkJfQoJCX0KCX0KCglpZiAocGFuZWxfaWR4IDwg MCkgewojaWYgZGVmaW5lZChDT05GSUdfTUlQU19QQjExMDApIHx8IGRlZmluZWQoQ09ORklHX01J UFNfREIxMTAwKQoJCS8qIEdldCBwYW5lbCBmcm9tIFMxMCBTd2l0Y2ggKGJvYXJkIHN3aXRjaCkg Ki8KCQlwYW5lbF9pZHggPSAoKCoodm9sYXRpbGUgaW50ICopQkNTUl9TV0lUQ0hFU19SRUcpICYK CQkJCUJDU1JfU1dJVENIRVNfUk9UQVJZX01BU0spID4+IEJDU1JfU1dJVENIRVNfUk9UQVJZX0JJ VDsKCQlpZiAocGFuZWxfaWR4ID49IG51bV9wYW5lbHMpCiNlbmRpZgoJCXBhbmVsX2lkeCA9IDA7 Cgl9CgoJZHJ2X2luZm8ucGFuZWxfaWR4ID0gcGFuZWxfaWR4OwoJZHJ2X2luZm8ub3B0X21vZGUg PSBtb2RlOwoKCXByaW50X2luZm8oIlBhbmVsPSVzIE1vZGU9JXMiLAoJCQlrbm93bl9sY2RfcGFu ZWxzW2Rydl9pbmZvLnBhbmVsX2lkeF0ubmFtZSwKCQkgICAgICAJZHJ2X2luZm8ub3B0X21vZGUg PyBkcnZfaW5mby5vcHRfbW9kZSA6ICJkZWZhdWx0Iik7CgoJcmV0dXJuIDA7Cn0KCmludCBfX2lu aXQgYXUxMTAwZmJfaW5pdCh2b2lkKQp7CgljaGFyKiBvcHRpb25zOwoJaW50IHJldDsKCQoJcHJp bnRfaW5mbygiIiBEUklWRVJfREVTQyAiIik7CgkKCW1lbXNldCgmZHJ2X2luZm8sIDAsIHNpemVv ZihkcnZfaW5mbykpOwoKCWlmIChmYl9nZXRfb3B0aW9ucyhEUklWRVJfTkFNRSwgJm9wdGlvbnMp KQoJCXJldHVybiAtRU5PREVWOwoKCS8qIFNldHVwIGRyaXZlciB3aXRoIG9wdGlvbnMgKi8KCXJl dCA9IGF1MTEwMGZiX3NldHVwKG9wdGlvbnMpOwoJaWYgKHJldCA8IDApIHsKCQlwcmludF9lcnIo IkZhaWwgdG8gc2V0dXAgZHJpdmVyIik7CgkJcmV0dXJuIHJldDsKCX0KCglyZXR1cm4gZHJpdmVy X3JlZ2lzdGVyKCZhdTExMDBmYl9kcml2ZXIpOwp9Cgp2b2lkIF9fZXhpdCBhdTExMDBmYl9jbGVh bnVwKHZvaWQpCnsKCWRyaXZlcl91bnJlZ2lzdGVyKCZhdTExMDBmYl9kcml2ZXIpOwoKCWlmIChk cnZfaW5mby5vcHRfbW9kZSkKCQlrZnJlZShkcnZfaW5mby5vcHRfbW9kZSk7Cn0KCm1vZHVsZV9p bml0KGF1MTEwMGZiX2luaXQpOwptb2R1bGVfZXhpdChhdTExMDBmYl9jbGVhbnVwKTsKCk1PRFVM RV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ck1PRFVMRV9MSUNFTlNFKCJHUEwiKTsK --------------Boundary-00=_ICQ3JWJBDIHX28K5NGD6 Content-Type: text/x-c; charset="iso-8859-1"; name="au1100fb.h" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="au1100fb.h" LyoKICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCiAqCUhhcmR3YXJlIGRlZmluaXRpb25zIGZv ciB0aGUgQXUxMTAwIExDRCBjb250cm9sbGVyCiAqCiAqIENvcHlyaWdodCAyMDAyIE1vbnRhVmlz dGEgU29mdHdhcmUKICogQ29weXJpZ2h0IDIwMDIgQWxjaGVteSBTZW1pY29uZHVjdG9yCiAqIEF1 dGhvcjoJQWxjaGVteSBTZW1pY29uZHVjdG9yLCBNb250YVZpc3RhIFNvZnR3YXJlCiAqCiAqICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUJIGl0IGFu ZC9vciBtb2RpZnkgaXQKICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQogKiAgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUJTGljZW5zZSwgb3IgKGF0IHlvdXIKICog IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJP VklERUQJICBgYEFTCUlTJycgQU5EICAgQU5ZCUVYUFJFU1MgT1IgSU1QTElFRAogKiAgV0FSUkFO VElFUywJICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJS QU5USUVTIE9GCiAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KICogIE5PCUVWRU5UICBTSEFMTCAgIFRIRSBB VVRIT1IgIEJFCSBMSUFCTEUgRk9SIEFOWQkgIERJUkVDVCwgSU5ESVJFQ1QsCiAqICBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRF IEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCiAqICBVU0UsIERBVEEsCU9SIFBST0ZJVFM7IE9S CUJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCiAqICBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgkgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQKICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoKICogIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhbG9uZwogKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwg TUEgMDIxMzksIFVTQS4KICovCgojaWZuZGVmIF9BVTExMDBMQ0RfSAojZGVmaW5lIF9BVTExMDBM Q0RfSAoKI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KCiNkZWZpbmUgcHJpbnRf ZXJyKGYsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6ICIgZiAiXG4iLCAj IyBhcmcpCiNkZWZpbmUgcHJpbnRfd2FybihmLCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcg RFJJVkVSX05BTUUgIjogIiBmICJcbiIsICMjIGFyZykKI2RlZmluZSBwcmludF9pbmZvKGYsIGFy Zy4uLikgcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiAiIGYgIlxuIiwgIyMgYXJnKQoK I2lmIERFQlVHCiNkZWZpbmUgcHJpbnRfZGJnKGYsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcg X19GSUxFX18gIjogIiBmICJcbiIsICMjIGFyZykKI2Vsc2UKI2RlZmluZSBwcmludF9kYmcoZiwg YXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKI2VuZGlmCgojaWYgZGVmaW5lZChfX0JJR19FTkRJQU4p CiNkZWZpbmUgTENEX0NPTlRST0xfREVGQVVMVF9QTyBMQ0RfQ09OVFJPTF9QT18xMQojZWxzZQoj ZGVmaW5lIExDRF9DT05UUk9MX0RFRkFVTFRfUE8gTENEX0NPTlRST0xfUE9fMDAKI2VuZGlmCiNk ZWZpbmUgTENEX0NPTlRST0xfREVGQVVMVF9TQlBQRiBMQ0RfQ09OVFJPTF9TQlBQRl81NjUKCi8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KCi8qIExDRCBjb250cm9sbGVyIHJlc3RyaWN0aW9ucyAqLwojZGVmaW5lIEFV MTEwMF9MQ0RfTUFYX1hSRVMJODAwCiNkZWZpbmUgQVUxMTAwX0xDRF9NQVhfWVJFUwk2MDAKI2Rl ZmluZSBBVTExMDBfTENEX01BWF9CUFAJMTYKI2RlZmluZSBBVTExMDBfTENEX01BWF9DTEsJNDgw MDAwMDAKI2RlZmluZSBBVTExMDBfTENEX05CUl9QQUxFVFRFX0VOVFJJRVMgMjU2CgovKiBEZWZh dWx0IG51bWJlciBvZiB2aXNpYmxlIHNjcmVlbiBidWZmZXIgdG8gYWxsb2NhdGUgKi8KI2RlZmlu ZSBBVTExMDBGQl9OQlJfVklERU9fQlVGRkVSUyA0CgovKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpzdHJ1Y3QgYXUx MTAwZmJfcGFuZWwKewoJY29uc3QgY2hhciBuYW1lWzI1XTsJCS8qIEZ1bGwgbmFtZSA8dmVuZG9y Pl88bW9kZWw+ICovCgkKCXN0cnVjdCAJZmJfbW9uc3BlY3MgbW9uc3BlY3M7IAkvKiBGQiBtb25p dG9yIHNwZWNzICovCgoJdTMyICAgCWNvbnRyb2xfYmFzZTsJCS8qIE1vZGUtaW5kZXBlbmRlbnQg Y29udHJvbCB2YWx1ZXMgKi8KCXUzMgljbGtjb250cm9sX2Jhc2U7CS8qIFBhbmVsIHBpeGNsb2Nr IHByZWZlcmVuY2VzICovCgoJdTMyCW1pbl94cmVzOwkJLyogTWluaW11bSBob3Jpem9udGFsIHJl c29sdXRpb24gKi8KCXUzMgltYXhfeHJlczsJCS8qIE1heGltdW0gaG9yaXpvbnRhbCByZXNvbHV0 aW9uICovCgl1MzIgCW1pbl95cmVzOwkJLyogTWluaW11bSB2ZXJ0aWNhbCByZXNvbHV0aW9uICov Cgl1MzIgCW1heF95cmVzOwkJLyogTWF4aW11bSB2ZXJ0aWNhbCByZXNvbHV0aW9uICovCgl1MzIg CW1heF9icHA7CQkvKiBNYXhpbXVtIGRlcHRoIHN1cHBvcnRlZCAqLwp9OwoKc3RydWN0IGF1MTEw MGZiX3JlZ3MgCnsKCXUzMiAgbGNkX2NvbnRyb2w7Cgl1MzIgIGxjZF9pbnRzdGF0dXM7Cgl1MzIg IGxjZF9pbnRlbmFibGU7Cgl1MzIgIGxjZF9ob3J6dGltaW5nOwoJdTMyICBsY2RfdmVydHRpbWlu ZzsKCXUzMiAgbGNkX2Nsa2NvbnRyb2w7Cgl1MzIgIGxjZF9kbWFhZGRyMDsKCXUzMiAgbGNkX2Rt YWFkZHIxOwoJdTMyICBsY2Rfd29yZHM7Cgl1MzIgIGxjZF9wd21kaXY7Cgl1MzIgIGxjZF9wd21o aTsKCXUzMiAgcmVzZXJ2ZWRbKDB4MDQwMC0weDAwMkMpLzRdOwoJdTMyICBsY2RfcGFsbGV0dGVi YXNlWzI1Nl07Cn07CgpzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlIHsKCglzdHJ1Y3QgZmJfaW5mbyBm Yl9pbmZvOwkJCS8qIEZCIGRyaXZlciBpbmZvIHJlY29yZCAqLwoKCXN0cnVjdCBhdTExMDBmYl9w YW5lbCAJKnBhbmVsOwkJLyogUGFuZWwgY29ubmVjdGVkIHRvIHRoaXMgZGV2aWNlICovCgoJaW50 IGlycTsJCQkJLyogSVJRIHVzZWQgKi8KCglzdHJ1Y3QgYXUxMTAwZmJfcmVncyogCXJlZ3M7CQkv KiBSZWdpc3RlcnMgbWVtb3J5IG1hcCAqLwoJc2l6ZV90ICAgICAgIAkJcmVnc19sZW47Cgl1bnNp Z25lZCBpbnQgCQlyZWdzX3BoeXM7CgoJdW5zaWduZWQgY2hhciogCQlmYl9tZW07CQkvKiBGcmFt ZUJ1ZmZlciBtZW1vcnkgbWFwICovCglzaXplX3QJICAgICAgCQlmYl9sZW47CglkbWFfYWRkcl90 ICAgIAkJZmJfcGh5czsKfTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNkZWZpbmUgTENEX0NPTlRST0wgICAg ICAgICAgICAgICAgKEFVMTEwMF9MQ0RfQkFTRSArIDB4MCkKICAjZGVmaW5lIExDRF9DT05UUk9M X1NCQl9CSVQgICAgICAyMQogICNkZWZpbmUgTENEX0NPTlRST0xfU0JCX01BU0sgICAgICgweDMg PDwgTENEX0NPTlRST0xfU0JCX0JJVCkKICAgICNkZWZpbmUgTENEX0NPTlRST0xfU0JCXzEgICAg ICAgICgwIDw8IExDRF9DT05UUk9MX1NCQl9CSVQpCiAgICAjZGVmaW5lIExDRF9DT05UUk9MX1NC Ql8yICAgICAgICAoMSA8PCBMQ0RfQ09OVFJPTF9TQkJfQklUKQogICAgI2RlZmluZSBMQ0RfQ09O VFJPTF9TQkJfMyAgICAgICAgKDIgPDwgTENEX0NPTlRST0xfU0JCX0JJVCkKICAgICNkZWZpbmUg TENEX0NPTlRST0xfU0JCXzQgICAgICAgICgzIDw8IExDRF9DT05UUk9MX1NCQl9CSVQpCiAgI2Rl ZmluZSBMQ0RfQ09OVFJPTF9TQlBQRl9CSVQgICAgMTgKICAjZGVmaW5lIExDRF9DT05UUk9MX1NC UFBGX01BU0sgICAoMHg3IDw8IExDRF9DT05UUk9MX1NCUFBGX0JJVCkKICAgICNkZWZpbmUgTENE X0NPTlRST0xfU0JQUEZfNjU1ICAgICgwIDw8IExDRF9DT05UUk9MX1NCUFBGX0JJVCkKICAgICNk ZWZpbmUgTENEX0NPTlRST0xfU0JQUEZfNTY1ICAgICgxIDw8IExDRF9DT05UUk9MX1NCUFBGX0JJ VCkKICAgICNkZWZpbmUgTENEX0NPTlRST0xfU0JQUEZfNTU2ICAgICgyIDw8IExDRF9DT05UUk9M X1NCUFBGX0JJVCkKICAgICNkZWZpbmUgTENEX0NPTlRST0xfU0JQUEZfMTU1NSAgICgzIDw8IExD RF9DT05UUk9MX1NCUFBGX0JJVCkKICAgICNkZWZpbmUgTENEX0NPTlRST0xfU0JQUEZfNTU1MSAg ICg0IDw8IExDRF9DT05UUk9MX1NCUFBGX0JJVCkKICAjZGVmaW5lIExDRF9DT05UUk9MX1dQICAg ICAgICAgICAoMTw8MTcpCiAgI2RlZmluZSBMQ0RfQ09OVFJPTF9XRCAgICAgICAgICAgKDE8PDE2 KQogICNkZWZpbmUgTENEX0NPTlRST0xfQyAgICAgICAgICAgICgxPDwxNSkKICAjZGVmaW5lIExD RF9DT05UUk9MX1NNX0JJVCAgICAgICAxMwogICNkZWZpbmUgTENEX0NPTlRST0xfU01fTUFTSyAg ICAgICgweDMgPDwgTENEX0NPTlRST0xfU01fQklUKQogICAgI2RlZmluZSBMQ0RfQ09OVFJPTF9T TV8wICAgICAgICAgKDAgPDwgTENEX0NPTlRST0xfU01fQklUKQogICAgI2RlZmluZSBMQ0RfQ09O VFJPTF9TTV85MCAgICAgICAgKDEgPDwgTENEX0NPTlRST0xfU01fQklUKQogICAgI2RlZmluZSBM Q0RfQ09OVFJPTF9TTV8xODAgICAgICAgKDIgPDwgTENEX0NPTlRST0xfU01fQklUKQogICAgI2Rl ZmluZSBMQ0RfQ09OVFJPTF9TTV8yNzAgICAgICAgKDMgPDwgTENEX0NPTlRST0xfU01fQklUKQog ICNkZWZpbmUgTENEX0NPTlRST0xfREIgICAgICAgICAgICgxPDwxMikKICAjZGVmaW5lIExDRF9D T05UUk9MX0NDTyAgICAgICAgICAoMTw8MTEpCiAgI2RlZmluZSBMQ0RfQ09OVFJPTF9EUCAgICAg ICAgICAgKDE8PDEwKQogICNkZWZpbmUgTENEX0NPTlRST0xfUE9fQklUICAgICAgIDgKICAjZGVm aW5lIExDRF9DT05UUk9MX1BPX01BU0sgICAgICAoMHgzIDw8IExDRF9DT05UUk9MX1BPX0JJVCkK ICAgICNkZWZpbmUgTENEX0NPTlRST0xfUE9fMDAgICAgICAgICgwIDw8IExDRF9DT05UUk9MX1BP X0JJVCkKICAgICNkZWZpbmUgTENEX0NPTlRST0xfUE9fMDEgICAgICAgICgxIDw8IExDRF9DT05U Uk9MX1BPX0JJVCkKICAgICNkZWZpbmUgTENEX0NPTlRST0xfUE9fMTAgICAgICAgICgyIDw8IExD RF9DT05UUk9MX1BPX0JJVCkKICAgICNkZWZpbmUgTENEX0NPTlRST0xfUE9fMTEgICAgICAgICgz IDw8IExDRF9DT05UUk9MX1BPX0JJVCkKICAjZGVmaW5lIExDRF9DT05UUk9MX01QSSAgICAgICAg ICAoMTw8NykKICAjZGVmaW5lIExDRF9DT05UUk9MX1BUICAgICAgICAgICAoMTw8NikKICAjZGVm aW5lIExDRF9DT05UUk9MX1BDICAgICAgICAgICAoMTw8NSkKICAjZGVmaW5lIExDRF9DT05UUk9M X0JQUF9CSVQgICAgICAxCiAgI2RlZmluZSBMQ0RfQ09OVFJPTF9CUFBfTUFTSyAgICAgKDB4NyA8 PCBMQ0RfQ09OVFJPTF9CUFBfQklUKQogICAgI2RlZmluZSBMQ0RfQ09OVFJPTF9CUFBfMSAgICAg ICAgKDAgPDwgTENEX0NPTlRST0xfQlBQX0JJVCkKICAgICNkZWZpbmUgTENEX0NPTlRST0xfQlBQ XzIgICAgICAgICgxIDw8IExDRF9DT05UUk9MX0JQUF9CSVQpCiAgICAjZGVmaW5lIExDRF9DT05U Uk9MX0JQUF80ICAgICAgICAoMiA8PCBMQ0RfQ09OVFJPTF9CUFBfQklUKQogICAgI2RlZmluZSBM Q0RfQ09OVFJPTF9CUFBfOCAgICAgICAgKDMgPDwgTENEX0NPTlRST0xfQlBQX0JJVCkKICAgICNk ZWZpbmUgTENEX0NPTlRST0xfQlBQXzEyICAgICAgICg0IDw8IExDRF9DT05UUk9MX0JQUF9CSVQp CiAgICAjZGVmaW5lIExDRF9DT05UUk9MX0JQUF8xNiAgICAgICAoNSA8PCBMQ0RfQ09OVFJPTF9C UFBfQklUKQogICNkZWZpbmUgTENEX0NPTlRST0xfR08gICAgICAgICAgICgxPDwwKQoKI2RlZmlu ZSBMQ0RfSU5UU1RBVFVTICAgICAgICAgICAgICAoQVUxMTAwX0xDRF9CQVNFICsgMHg0KQojZGVm aW5lIExDRF9JTlRFTkFCTEUgICAgICAgICAgICAgIChBVTExMDBfTENEX0JBU0UgKyAweDgpCiAg I2RlZmluZSBMQ0RfSU5UX1NEICAgICAgICAgICAgICAgKDE8PDcpCiAgI2RlZmluZSBMQ0RfSU5U X09GICAgICAgICAgICAgICAgKDE8PDYpCiAgI2RlZmluZSBMQ0RfSU5UX1VGICAgICAgICAgICAg ICAgKDE8PDUpCiAgI2RlZmluZSBMQ0RfSU5UX1NBICAgICAgICAgICAgICAgKDE8PDMpCiAgI2Rl ZmluZSBMQ0RfSU5UX1NTICAgICAgICAgICAgICAgKDE8PDIpCiAgI2RlZmluZSBMQ0RfSU5UX1Mx ICAgICAgICAgICAgICAgKDE8PDEpCiAgI2RlZmluZSBMQ0RfSU5UX1MwICAgICAgICAgICAgICAg KDE8PDApCgojZGVmaW5lIExDRF9IT1JaVElNSU5HICAgICAgICAgICAgIChBVTExMDBfTENEX0JB U0UgKyAweEMpCiAgI2RlZmluZSBMQ0RfSE9SWlRJTUlOR19ITjJfQklUICAgMjQKICAjZGVmaW5l IExDRF9IT1JaVElNSU5HX0hOMl9NQVNLICAoMHhGRiA8PCBMQ0RfSE9SWlRJTUlOR19ITjJfQklU KQogICNkZWZpbmUgTENEX0hPUlpUSU1JTkdfSE4yX04oTikgICgoKChOKS0xKSA8PCBMQ0RfSE9S WlRJTUlOR19ITjJfQklUKSAmIExDRF9IT1JaVElNSU5HX0hOMl9NQVNLKQogICNkZWZpbmUgTENE X0hPUlpUSU1JTkdfSE4xX0JJVCAgIDE2CiAgI2RlZmluZSBMQ0RfSE9SWlRJTUlOR19ITjFfTUFT SyAgKDB4RkYgPDwgTENEX0hPUlpUSU1JTkdfSE4xX0JJVCkKICAjZGVmaW5lIExDRF9IT1JaVElN SU5HX0hOMV9OKE4pICAoKCgoTiktMSkgPDwgTENEX0hPUlpUSU1JTkdfSE4xX0JJVCkgJiBMQ0Rf SE9SWlRJTUlOR19ITjFfTUFTSykKICAjZGVmaW5lIExDRF9IT1JaVElNSU5HX0hQV19CSVQgICAx MAogICNkZWZpbmUgTENEX0hPUlpUSU1JTkdfSFBXX01BU0sgICgweDNGIDw8IExDRF9IT1JaVElN SU5HX0hQV19CSVQpCiAgI2RlZmluZSBMQ0RfSE9SWlRJTUlOR19IUFdfTihOKSAgKCgoKE4pLTEp IDw8IExDRF9IT1JaVElNSU5HX0hQV19CSVQpICYgTENEX0hPUlpUSU1JTkdfSFBXX01BU0spCiAg I2RlZmluZSBMQ0RfSE9SWlRJTUlOR19QUExfQklUICAgMAogICNkZWZpbmUgTENEX0hPUlpUSU1J TkdfUFBMX01BU0sgICgweDNGRiA8PCBMQ0RfSE9SWlRJTUlOR19QUExfQklUKQogICNkZWZpbmUg TENEX0hPUlpUSU1JTkdfUFBMX04oTikgICgoKChOKS0xKSA8PCBMQ0RfSE9SWlRJTUlOR19QUExf QklUKSAmIExDRF9IT1JaVElNSU5HX1BQTF9NQVNLKQoKI2RlZmluZSBMQ0RfVkVSVFRJTUlORyAg ICAgICAgICAgICAoQVUxMTAwX0xDRF9CQVNFICsgMHgxMCkKICAjZGVmaW5lIExDRF9WRVJUVElN SU5HX1ZOMl9CSVQgICAyNAogICNkZWZpbmUgTENEX1ZFUlRUSU1JTkdfVk4yX01BU0sgICgweEZG IDw8IExDRF9WRVJUVElNSU5HX1ZOMl9CSVQpCiAgI2RlZmluZSBMQ0RfVkVSVFRJTUlOR19WTjJf TihOKSAgKCgoKE4pLTEpIDw8IExDRF9WRVJUVElNSU5HX1ZOMl9CSVQpICYgTENEX1ZFUlRUSU1J TkdfVk4yX01BU0spCiAgI2RlZmluZSBMQ0RfVkVSVFRJTUlOR19WTjFfQklUICAgMTYKICAjZGVm aW5lIExDRF9WRVJUVElNSU5HX1ZOMV9NQVNLICAoMHhGRiA8PCBMQ0RfVkVSVFRJTUlOR19WTjFf QklUKQogICNkZWZpbmUgTENEX1ZFUlRUSU1JTkdfVk4xX04oTikgICgoKChOKS0xKSA8PCBMQ0Rf VkVSVFRJTUlOR19WTjFfQklUKSAmIExDRF9WRVJUVElNSU5HX1ZOMV9NQVNLKQogICNkZWZpbmUg TENEX1ZFUlRUSU1JTkdfVlBXX0JJVCAgIDEwCiAgI2RlZmluZSBMQ0RfVkVSVFRJTUlOR19WUFdf TUFTSyAgKDB4M0YgPDwgTENEX1ZFUlRUSU1JTkdfVlBXX0JJVCkKICAjZGVmaW5lIExDRF9WRVJU VElNSU5HX1ZQV19OKE4pICAoKCgoTiktMSkgPDwgTENEX1ZFUlRUSU1JTkdfVlBXX0JJVCkgJiBM Q0RfVkVSVFRJTUlOR19WUFdfTUFTSykKICAjZGVmaW5lIExDRF9WRVJUVElNSU5HX0xQUF9CSVQg ICAwCiAgI2RlZmluZSBMQ0RfVkVSVFRJTUlOR19MUFBfTUFTSyAgKDB4M0ZGIDw8IExDRF9WRVJU VElNSU5HX0xQUF9CSVQpCiAgI2RlZmluZSBMQ0RfVkVSVFRJTUlOR19MUFBfTihOKSAgKCgoKE4p LTEpIDw8IExDRF9WRVJUVElNSU5HX0xQUF9CSVQpICYgTENEX1ZFUlRUSU1JTkdfTFBQX01BU0sp CgojZGVmaW5lIExDRF9DTEtDT05UUk9MICAgICAgICAgICAgIChBVTExMDBfTENEX0JBU0UgKyAw eDE0KQogICNkZWZpbmUgTENEX0NMS0NPTlRST0xfSUIgICAgICAgICgxPDwxOCkKICAjZGVmaW5l IExDRF9DTEtDT05UUk9MX0lDICAgICAgICAoMTw8MTcpCiAgI2RlZmluZSBMQ0RfQ0xLQ09OVFJP TF9JSCAgICAgICAgKDE8PDE2KQogICNkZWZpbmUgTENEX0NMS0NPTlRST0xfSVYgICAgICAgICgx PDwxNSkKICAjZGVmaW5lIExDRF9DTEtDT05UUk9MX0JGX0JJVCAgICAxMAogICNkZWZpbmUgTENE X0NMS0NPTlRST0xfQkZfTUFTSyAgICgweDFGIDw8IExDRF9DTEtDT05UUk9MX0JGX0JJVCkKICAj ZGVmaW5lIExDRF9DTEtDT05UUk9MX0JGX04oTikgICAoKCgoTiktMSkgPDwgTENEX0NMS0NPTlRS T0xfQkZfQklUKSAmIExDRF9DTEtDT05UUk9MX0JGX01BU0spCiAgI2RlZmluZSBMQ0RfQ0xLQ09O VFJPTF9QQ0RfQklUICAgMAogICNkZWZpbmUgTENEX0NMS0NPTlRST0xfUENEX01BU0sgICgweDNG RiA8PCBMQ0RfQ0xLQ09OVFJPTF9QQ0RfQklUKQogICNkZWZpbmUgTENEX0NMS0NPTlRST0xfUENE X04oTikgICgoKE4pIDw8IExDRF9DTEtDT05UUk9MX1BDRF9CSVQpICYgTENEX0NMS0NPTlRST0xf UENEX01BU0spCgojZGVmaW5lIExDRF9ETUFBRERSMCAgICAgICAgICAgICAgIChBVTExMDBfTENE X0JBU0UgKyAweDE4KQojZGVmaW5lIExDRF9ETUFBRERSMSAgICAgICAgICAgICAgIChBVTExMDBf TENEX0JBU0UgKyAweDFDKQogICNkZWZpbmUgTENEX0RNQV9TQV9CSVQgICAgICAgICAgIDUKICAj ZGVmaW5lIExDRF9ETUFfU0FfTUFTSyAgICAgICAgICAoMHg3RkZGRkZGIDw8IExDRF9ETUFfU0Ff QklUKQogICNkZWZpbmUgTENEX0RNQV9TQV9OKE4pICAgICAgICAgICgoTikgJiBMQ0RfRE1BX1NB X01BU0spCgojZGVmaW5lIExDRF9XT1JEUyAgICAgICAgICAgICAgICAgIChBVTExMDBfTENEX0JB U0UgKyAweDIwKQogICNkZWZpbmUgTENEX1dSRF9XUkRTX0JJVCAgICAgICAgIDAKICAjZGVmaW5l IExDRF9XUkRfV1JEU19NQVNLICAgICAgICAoMHhGRkZGRkZGRiA8PCBMQ0RfV1JEX1dSRFNfQklU KQogICNkZWZpbmUgTENEX1dSRF9XUkRTX04oTikgICAgICAgICgoKChOKS0xKSA8PCBMQ0RfV1JE X1dSRFNfQklUKSAmIExDRF9XUkRfV1JEU19NQVNLKQoKI2RlZmluZSBMQ0RfUFdNRElWICAgICAg ICAgICAgICAgICAoQVUxMTAwX0xDRF9CQVNFICsgMHgyNCkKICAjZGVmaW5lIExDRF9QV01ESVZf RU4gICAgICAgICAgICAoMTw8MTIpCiAgI2RlZmluZSBMQ0RfUFdNRElWX1BXTURJVl9CSVQgICAg MAogICNkZWZpbmUgTENEX1BXTURJVl9QV01ESVZfTUFTSyAgICgweEZGRiA8PCBMQ0RfUFdNRElW X1BXTURJVl9CSVQpCiAgI2RlZmluZSBMQ0RfUFdNRElWX1BXTURJVl9OKE4pICAgKCgoKE4pLTEp IDw8IExDRF9QV01ESVZfUFdNRElWX0JJVCkgJiBMQ0RfUFdNRElWX1BXTURJVl9NQVNLKQoKI2Rl ZmluZSBMQ0RfUFdNSEkgICAgICAgICAgICAgICAgICAoQVUxMTAwX0xDRF9CQVNFICsgMHgyOCkK ICAjZGVmaW5lIExDRF9QV01ISV9QV01ISTFfQklUICAgICAxMgogICNkZWZpbmUgTENEX1BXTUhJ X1BXTUhJMV9NQVNLICAgICgweEZGRiA8PCBMQ0RfUFdNSElfUFdNSEkxX0JJVCkKICAjZGVmaW5l IExDRF9QV01ISV9QV01ISTFfTihOKSAgICAoKChOKSA8PCBMQ0RfUFdNSElfUFdNSEkxX0JJVCkg JiBMQ0RfUFdNSElfUFdNSEkxX01BU0spCiAgI2RlZmluZSBMQ0RfUFdNSElfUFdNSEkwX0JJVCAg ICAgMAogICNkZWZpbmUgTENEX1BXTUhJX1BXTUhJMF9NQVNLICAgICgweEZGRiA8PCBMQ0RfUFdN SElfUFdNSEkwX0JJVCkKICAjZGVmaW5lIExDRF9QV01ISV9QV01ISTBfTihOKSAgICAoKChOKSA8 PCBMQ0RfUFdNSElfUFdNSEkwX0JJVCkgJiBMQ0RfUFdNSElfUFdNSEkwX01BU0spCgojZGVmaW5l IExDRF9QQUxMRVRURUJBU0UgICAgICAgICAgICAgICAgKEFVMTEwMF9MQ0RfQkFTRSArIDB4NDAw KQogICNkZWZpbmUgTENEX1BBTExFVFRFX01PTk9fTUlfQklUICAgICAgMAogICNkZWZpbmUgTENE X1BBTExFVFRFX01PTk9fTUlfTUFTSyAgICAgKDB4RiA8PCBMQ0RfUEFMTEVUVEVfTU9OT19NSV9C SVQpCiAgI2RlZmluZSBMQ0RfUEFMTEVUVEVfTU9OT19NSV9OKE4pICAgICAoKChOKTw8IExDRF9Q QUxMRVRURV9NT05PX01JX0JJVCkgJiBMQ0RfUEFMTEVUVEVfTU9OT19NSV9NQVNLKQoKICAjZGVm aW5lIExDRF9QQUxMRVRURV9DT0xPUl9SSV9CSVQgICAgIDgKICAjZGVmaW5lIExDRF9QQUxMRVRU RV9DT0xPUl9SSV9NQVNLICAgICgweEYgPDwgTENEX1BBTExFVFRFX0NPTE9SX1JJX0JJVCkKICAj ZGVmaW5lIExDRF9QQUxMRVRURV9DT0xPUl9SSV9OKE4pICAgICgoKE4pPDwgTENEX1BBTExFVFRF X0NPTE9SX1JJX0JJVCkgJiBMQ0RfUEFMTEVUVEVfQ09MT1JfUklfTUFTSykKICAjZGVmaW5lIExD RF9QQUxMRVRURV9DT0xPUl9HSV9CSVQgICAgIDQKICAjZGVmaW5lIExDRF9QQUxMRVRURV9DT0xP Ul9HSV9NQVNLICAgICgweEYgPDwgTENEX1BBTExFVFRFX0NPTE9SX0dJX0JJVCkKICAjZGVmaW5l IExDRF9QQUxMRVRURV9DT0xPUl9HSV9OKE4pICAgICgoKE4pPDwgTENEX1BBTExFVFRFX0NPTE9S X0dJX0JJVCkgJiBMQ0RfUEFMTEVUVEVfQ09MT1JfR0lfTUFTSykKICAjZGVmaW5lIExDRF9QQUxM RVRURV9DT0xPUl9CSV9CSVQgICAgIDAKICAjZGVmaW5lIExDRF9QQUxMRVRURV9DT0xPUl9CSV9N QVNLICAgICgweEYgPDwgTENEX1BBTExFVFRFX0NPTE9SX0JJX0JJVCkKICAjZGVmaW5lIExDRF9Q QUxMRVRURV9DT0xPUl9CSV9OKE4pICAgICgoKE4pPDwgTENEX1BBTExFVFRFX0NPTE9SX0JJX0JJ VCkgJiBMQ0RfUEFMTEVUVEVfQ09MT1JfQklfTUFTSykKCiAgI2RlZmluZSBMQ0RfUEFMTEVUVEVf VEZUX0RDX0JJVCAgICAgICAwCiAgI2RlZmluZSBMQ0RfUEFMTEVUVEVfVEZUX0RDX01BU0sgICAg ICAoMHhGRkZGIDw8IExDRF9QQUxMRVRURV9URlRfRENfQklUKQogICNkZWZpbmUgTENEX1BBTExF VFRFX1RGVF9EQ19OKE4pICAgICAgKCgoTik8PCBMQ0RfUEFMTEVUVEVfVEZUX0RDX0JJVCkgJiBM Q0RfUEFMTEVUVEVfVEZUX0RDX01BU0spCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiBMaXN0IG9mIGRlZmF1 bHQgbW9kZXMgZm9yIGEgcmVnaXN0ZXJlZCBwYW5lbC4KICogSWYgeW91IHdhbnQgdG8gdXNlIGdl bmVyaWMgbW9kZXMsIHNldCBwYW5lbCdzIG1vZGVkYiB0byBOVUxMLgogKi8Kc3RhdGljIHN0cnVj dCBmYl92aWRlb21vZGUgc2hhcnBfbHEwMzhxNWRyMDFfbW9kZXNbXSA9CnsKCXsKCQlOVUxMLCAw LCAzMjAsIDI0MCwgS0haMlBJQ09TKDYwMDApLCA2MCwgOCwgMTcsIDUsIDEyLCAxLAoJCTAsIEZC X1ZNT0RFX05PTklOVEVSTEFDRUQsIDAKCX0sCn07CnN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2Rl IHNoYXJwX2xxNjRkMzQzX21vZGVzW10gPQp7Cgl7CgkJIlNSVEIiLCAwLCA2NDAsIDQ4MCwgS0ha MlBJQ09TKDEyMDAwKSwgOCwgMzgsIDI2LCAzNCwgMzYsIDIsCgkJMCwgRkJfVk1PREVfTk9OSU5U RVJMQUNFRCwgMAoJfSwKfTsKCi8qIExpc3Qgb2YgcGFuZWxzIGtub3duIHRvIHdvcmsgd2l0aCB0 aGUgQVUxMTAwIExDRCBjb250cm9sbGVyLgogKiBUbyBhZGQgYSBuZXcgcGFuZWwsIGVudGVyIHRo ZSBzYW1lIHNwZWNpZmljYXRpb25zIGFzIHRoZQogKiBHZW5lcmljX1RGVCBvbmUsIGFuZCBNQUtF IFNVUkUgdGhhdCBpdCBkb2Vzbid0IGNvbmZsaWN0cyAKICogd2l0aCB0aGUgY29udHJvbGxlciBy ZXN0cmljdGlvbnMuIFJlc3RyaWN0aW9ucyBhcmU6CiAqCiAqIFNUTiBjb2xvciBwYW5lbHM6IG1h eF9icHAgPD0gMTIKICogU1ROIG1vbm8gcGFuZWxzOiBtYXhfYnBwIDw9IDQKICogVEZUIHBhbmVs czogbWF4X2JwcCA8PSAxNgogKiBtYXhfeHJlcyA8PSA4MDAKICogbWF4X3lyZXMgPD0gNjAwCiAq LwpzdGF0aWMgc3RydWN0IGF1MTEwMGZiX3BhbmVsIGtub3duX2xjZF9wYW5lbHNbXSA9CnsKCS8q KiogR2VuZXJpYyA2NDB4NDgwIDE2YnBwIFRGVCBMQ0QgKioqLwoJWzBdID0gewoJCS5uYW1lID0g IkdlbmVyaWNfVEZUIiwKCQkubW9uc3BlY3MgPSB7CgkJCS5tb2RlZGIgPSBOVUxMLAoJCQkubW9k ZWRiX2xlbiA9IDAsCgkJCS5oZm1pbiA9IDI5MDAwLAoJCQkuaGZtYXggPSAzMDAwMCwKCQkJLnZm bWluID0gNjAsCgkJCS52Zm1heCA9IDYwLAoJCQkuZGNsa21pbiA9IDEyMDAwMDAwLAoJCQkuZGNs a21heCA9IDEyMDAwMDAwLAoJCQkuaW5wdXQgPSBGQl9ESVNQX1JHQiwKCQl9LAoJCSAKCQkoIExD RF9DT05UUk9MX0MKCQl8IExDRF9DT05UUk9MX0RFRkFVTFRfUE8KCQl8IExDRF9DT05UUk9MX1BU CgkJfCBMQ0RfQ09OVFJPTF9QQyApLAoJCSAKCQkwLAoKCQk2NDAsIDY0MCwgCgkJNDgwLCA0ODAs IAoJCTE2LAoJfSwKCiAgICAgICAgLyoqKiBQYjExMDAgTENEQSBTaGFycCAzMjB4MjQwIFRGVCBw YW5lbCAqKiovCglbMV0gPSB7CgkJLm5hbWUgPSAiU2hhcnBfTFEwMzhRNURSMDEiLAoJCS5tb25z cGVjcyA9IHsKCQkJLm1vZGVkYiAgPSBzaGFycF9scTAzOHE1ZHIwMV9tb2RlcywKCQkJLm1vZGVk Yl9sZW4gPSBBUlJBWV9TSVpFKHNoYXJwX2xxMDM4cTVkcjAxX21vZGVzKSwKCQkJLmhmbWluICAg PSAxMjUwMCwKCQkJLmhmbWF4CSA9IDIwMDAwLAoJCQkudmZtaW4JID0gMzgsCgkJCS52Zm1heCAg ID0gODEsCgkJCS5kY2xrbWluID0gNDUwMDAwMCwKCQkJLmRjbGttYXggPSA2ODAwMDAwLAoJCQku aW5wdXQgPSBGQl9ESVNQX1JHQiwKCQl9LAoKCQkoIExDRF9DT05UUk9MX0MKCQl8IExDRF9DT05U Uk9MX0RFRkFVTFRfUE8KCQl8IExDRF9DT05UUk9MX1BUCgkJfCBMQ0RfQ09OVFJPTF9QQyApLAoK CQkwLAoJCQoJCTMyMCwgMzIwLCAKCQkyNDAsIDI0MCwgCgkJMTYsCgl9LAoKICAgICAgICAvKioq IFNoYXJwIDY0MHg0ODAgVEZUIHBhbmVsICoqKi8KCVsyXSA9IHsKCQkubmFtZSA9ICJTaGFycF9M UTY0RDM0MyIsCgkJLm1vbnNwZWNzID0gewoJCQkubW9kZWRiICA9IHNoYXJwX2xxNjRkMzQzX21v ZGVzLAoJCQkubW9kZWRiX2xlbiA9IEFSUkFZX1NJWkUoc2hhcnBfbHE2NGQzNDNfbW9kZXMpLAoJ CQkuaGZtaW4gICA9IDIyMjIyLAoJCQkuaGZtYXgJID0gMzE0ODEsCgkJCS52Zm1pbgkgPSA0MCwK CQkJLnZmbWF4ICAgPSA2MSwKCQkJLmRjbGttaW4gPSA2MDAwMDAwLAoJCQkuZGNsa21heCA9IDI4 MDAwMDAwLAoJCQkuaW5wdXQgPSBGQl9ESVNQX1JHQiwKCQl9LAoKCQkoIExDRF9DT05UUk9MX0MK CQl8IExDRF9DT05UUk9MX0RFRkFVTFRfUE8KCQl8IExDRF9DT05UUk9MX0NDTwoJCXwgTENEX0NP TlRST0xfUFQKCQl8IExDRF9DT05UUk9MX1BDICksCgoJCTAsCgkJCgkJNjQwLCA2NDAsIAoJCTQ4 MCwgNDgwLCAKCQkxNiwKCX0sCn07CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiBJbmxpbmUgaGVscGVycyAq LwoKI2RlZmluZSBwYW5lbF9pc19kdWFsKHBhbmVsKSAgKHBhbmVsLT5jb250cm9sX2Jhc2UgJiBM Q0RfQ09OVFJPTF9EUCkKI2RlZmluZSBwYW5lbF9pc19hY3RpdmUocGFuZWwpKHBhbmVsLT5jb250 cm9sX2Jhc2UgJiBMQ0RfQ09OVFJPTF9QVCkKI2RlZmluZSBwYW5lbF9pc19jb2xvcihwYW5lbCkg KHBhbmVsLT5jb250cm9sX2Jhc2UgJiBMQ0RfQ09OVFJPTF9QQykKI2RlZmluZSBwYW5lbF9zd2Fw X3JnYihwYW5lbCkgKHBhbmVsLT5jb250cm9sX2Jhc2UgJiBMQ0RfQ09OVFJPTF9DQ08pCgpzdGF0 aWMgaW5saW5lIGludAphdTExMDBmYl9zdGFydF9jb250cm9sbGVyKHN0cnVjdCBhdTExMDBmYl9k ZXZpY2UgKmZiZGV2KQp7CglyZXR1cm4gZmJkZXYtPmZiX2luZm8uZmJvcHMtPmZiX2JsYW5rKFZF U0FfTk9fQkxBTktJTkcsICZmYmRldi0+ZmJfaW5mbyk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50CmF1 MTEwMGZiX3N0b3BfY29udHJvbGxlcihzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICpmYmRldiwgaW50 IHdhaXQpCnsKCWludCByZXQgPSBmYmRldi0+ZmJfaW5mby5mYm9wcy0+ZmJfYmxhbmsoVkVTQV9Q T1dFUkRPV04sICZmYmRldi0+ZmJfaW5mbyk7CglpZiAod2FpdCkgewoJCS8qIFdhaXQgZm9yIHRo ZSBTRCBiaXQgKi8KCQl1MzIgaW50c3RhdHVzOwoJCWRvIHsKCQkJKih2b2xhdGlsZSB1MzIqKSgm ZmJkZXYtPnJlZ3MtPmxjZF9pbnRzdGF0dXMpOwoJCQlpbnRzdGF0dXMgPSAqKHZvbGF0aWxlIHUz MiopKCZmYmRldi0+cmVncy0+bGNkX2ludHN0YXR1cyk7CgoJCX0gd2hpbGUgKCEoaW50c3RhdHVz ICYgTENEX0lOVF9TRCkpOwoJfQoJcmV0dXJuIHJldDsKfQoKI2VuZGlmIC8qIF9BVTExMDBMQ0Rf SCAqLwo= --------------Boundary-00=_ICQ3JWJBDIHX28K5NGD6--