From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-ew0-f208.google.com ([209.85.219.208]:43823 "EHLO mail-ew0-f208.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750947AbZJHG3B (ORCPT ); Thu, 8 Oct 2009 02:29:01 -0400 Received: by ewy4 with SMTP id 4so2591209ewy.37 for ; Wed, 07 Oct 2009 23:28:24 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <1254952886.3713.4.camel@johannes.local> References: <3ace41890910071216y69b8bc9la67b8f0ce5890cd8@mail.gmail.com> <3ace41890910071228i786d4097w69dc7a3dfeb64afe@mail.gmail.com> <1254952886.3713.4.camel@johannes.local> Date: Thu, 8 Oct 2009 07:28:23 +0100 Message-ID: <3ace41890910072328n1460ee34v1fe7ca9b78eb646f@mail.gmail.com> Subject: Re: NULL pointer deref at wext ioctl (Re: [PATCH] compat-2.6: adding ethtool.h to compat-2.6.31.h) From: Hin-Tak Leung To: Johannes Berg Cc: "Luis R. Rodriguez" , "John W. Linville" , linux-wireless@vger.kernel.org Content-Type: multipart/mixed; boundary=0016e6d7e92406deb104756692f7 Sender: linux-wireless-owner@vger.kernel.org List-ID: --0016e6d7e92406deb104756692f7 Content-Type: text/plain; charset=ISO-8859-1 On Wed, Oct 7, 2009 at 11:01 PM, Johannes Berg wrote: > On Wed, 2009-10-07 at 20:28 +0100, Hin-Tak Leung wrote: >> On Wed, Oct 7, 2009 at 8:16 PM, Hin-Tak Leung wrote: >> >> > It is probably just a transient problem with recent activities - I had >> > a NULL pointer deref from loading rtl8187 of compat-wireless >> > v2.6.32-rc3-39563-g98c2609 - >> > >> > BUG: unable to handle kernel NULL pointer dereference at 000000000000003d >> > IP: [] wext_ioctl_dispatch+0xd9/0x180 >> > PGD 61c2b067 PUD 6246f067 PMD 0 >> > Oops: 0000 [#1] SMP >> > ... >> > Call Trace: >> > [] wext_handle_ioctl+0x4d/0x98 >> > [] dev_ioctl+0x625/0x662 >> > [] sock_ioctl+0x225/0x248 >> > [] vfs_ioctl+0x31/0xaa >> > [] ? security_d_instantiate+0x37/0x4d >> > [] do_vfs_ioctl+0x46c/0x4c3 >> > [] sys_ioctl+0x65/0x9c >> > [] system_call_fastpath+0x16/0x1b >> > >> > I'm sure whatever changes made this happen will go away soon, so I'll >> > just re-try in a few days... but if anybody knows what commit causes >> > this (and what fixes it!), I'd like to know. >> > >> >> Hiya, It looks like I last used compat-wireless successfully was on >> 25th (I am not saying it breaks after - I just haven't tried until >> yesterday, possibly), and most of the recent changes are per-driver, >> but there is a big code drop from Johannes dated 27th on 'wext: >> refactor' . Changes from that or dependent changes? > > Probably -- but I don't see this problem on stock kernel and I'm not > sure what could be causing it for compat-wireless. > > This will be the old copy of wext_ioctl_dispatch. It'd certainly help to > get disassembly/the source line of the oops. > > johannes > The crash came from the fedora koji kernel 2.6.30.8-67.fc11.x86_64 (+ bleed-edge compat-wireless), so John can probably correct me if I am doing wrong or he can probably provide a better answer based on the info. I installed the debug packages kernel-debuginfo-2.6.30.8-67.fc11 , kernel-debuginfo-common-x86_64-2.6.30.8-67.fc11 , then dump the whole thing to work out the address, before selecting the adress as: objdump -l -d --start-address=0xffffffff81478153 --stop-address=0xffffffff81478440 -S /usr/lib/debug/lib/modules/2.6.30.8-67.fc11.x86_64/vmlinux It looks like it is the 2nd of thes two lines around /usr/src/debug/kernel-2.6.30/linux-2.6.30.x86_64/net/wireless/wext.c:448 which resulted in the null pointer dereference: if (index < dev->wireless_handlers->num_private) return dev->wireless_handlers->private[index]; Is there a more clever way of working out the addresses? I guess I should have just subtracted and added a few k off the crash message, rather than dumping the whole kernel to work out the addresses... --0016e6d7e92406deb104756692f7 Content-Type: application/octet-stream; name=kernel-objdump-withlines Content-Disposition: attachment; filename=kernel-objdump-withlines Content-Transfer-Encoding: base64 X-Attachment-Id: f_g0j4ev562 Ci91c3IvbGliL2RlYnVnL2xpYi9tb2R1bGVzLzIuNi4zMC44LTY3LmZjMTEueDg2XzY0L3ZtbGlu dXg6ICAgICBmaWxlIGZvcm1hdCBlbGY2NC14ODYtNjQKCgpEaXNhc3NlbWJseSBvZiBzZWN0aW9u IC50ZXh0OgoKZmZmZmZmZmY4MTQ3ODE1MyA8d2V4dF9pb2N0bF9kaXNwYXRjaD46CndleHRfaW9j dGxfZGlzcGF0Y2goKToKL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAu eDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTA4NwovKiBlbnRyeSBwb2ludCBmcm9tIGRldiBp b2N0bCAqLwpzdGF0aWMgaW50IHdleHRfaW9jdGxfZGlzcGF0Y2goc3RydWN0IG5ldCAqbmV0LCBz dHJ1Y3QgaWZyZXEgKmlmciwKCQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBpd19y ZXF1ZXN0X2luZm8gKmluZm8sCgkJCSAgICAgICB3ZXh0X2lvY3RsX2Z1bmMgc3RhbmRhcmQsCgkJ CSAgICAgICB3ZXh0X2lvY3RsX2Z1bmMgcHJpdmF0ZSkKewpmZmZmZmZmZjgxNDc4MTUzOgk1NSAg ICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYnAKZmZmZmZmZmY4MTQ3ODE1NDoJNDggODkgZTUg ICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVyYnAKZmZmZmZmZmY4MTQ3ODE1NzoJNDEgNTYgICAg ICAgICAgICAgICAgCXB1c2ggICAlcjE0CmZmZmZmZmZmODE0NzgxNTk6CTQxIDU1ICAgICAgICAg ICAgICAgIAlwdXNoICAgJXIxMwpmZmZmZmZmZjgxNDc4MTViOgk0MSA1NCAgICAgICAgICAgICAg ICAJcHVzaCAgICVyMTIKZmZmZmZmZmY4MTQ3ODE1ZDoJNTMgICAgICAgICAgICAgICAgICAgCXB1 c2ggICAlcmJ4CmZmZmZmZmZmODE0NzgxNWU6CTQ4IDgzIGVjIDIwICAgICAgICAgIAlzdWIgICAg JDB4MjAsJXJzcApmZmZmZmZmZjgxNDc4MTYyOgllOCA5OSA5YyBiOSBmZiAgICAgICAJY2FsbHEg IGZmZmZmZmZmODEwMTFlMDAgPG1jb3VudD4KZmZmZmZmZmY4MTQ3ODE2NzoJNjUgNDggOGIgMDQg MjUgMjggMDAgCW1vdiAgICAlZ3M6MHgyOCwlcmF4CmZmZmZmZmZmODE0NzgxNmU6CTAwIDAwIApm ZmZmZmZmZjgxNDc4MTcwOgk0OCA4OSA0NSBkOCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4Mjgo JXJicCkKZmZmZmZmZmY4MTQ3ODE3NDoJMzEgYzAgICAgICAgICAgICAgICAgCXhvciAgICAlZWF4 LCVlYXgKd2V4dF9wZXJtaXNzaW9uX2NoZWNrKCk6Ci91c3Ivc3JjL2RlYnVnL2tlcm5lbC0yLjYu MzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5jOjEwNzUKLyogSWYgY29t bWFuZCBpcyBgc2V0IGEgcGFyYW1ldGVyJywgb3IgYGdldCB0aGUgZW5jb2RpbmcgcGFyYW1ldGVy cycsCiAqIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyB0aGUgcmlnaHQgdG8gZG8gaXQuCiAqLwpzdGF0 aWMgaW50IHdleHRfcGVybWlzc2lvbl9jaGVjayh1bnNpZ25lZCBpbnQgY21kKQp7CglpZiAoKElX X0lTX1NFVChjbWQpIHx8IGNtZCA9PSBTSU9DR0lXRU5DT0RFIHx8IGNtZCA9PSBTSU9DR0lXRU5D T0RFRVhUKQpmZmZmZmZmZjgxNDc4MTc2OglmNiBjMiAwMSAgICAgICAgICAgICAJdGVzdCAgICQw eDEsJWRsCndleHRfaW9jdGxfZGlzcGF0Y2goKToKL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4z MC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTA4NwovKiBlbnRyeSBw b2ludCBmcm9tIGRldiBpb2N0bCAqLwpzdGF0aWMgaW50IHdleHRfaW9jdGxfZGlzcGF0Y2goc3Ry dWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwKCQkJICAgICAgIHVuc2lnbmVkIGludCBj bWQsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCgkJCSAgICAgICB3ZXh0X2lvY3RsX2Z1 bmMgc3RhbmRhcmQsCgkJCSAgICAgICB3ZXh0X2lvY3RsX2Z1bmMgcHJpdmF0ZSkKewpmZmZmZmZm ZjgxNDc4MTc5Ogk0OSA4OSBmZCAgICAgICAgICAgICAJbW92ICAgICVyZGksJXIxMwpmZmZmZmZm ZjgxNDc4MTdjOgk0OCA4OSBmMyAgICAgICAgICAgICAJbW92ICAgICVyc2ksJXJieApmZmZmZmZm ZjgxNDc4MTdmOgk0ZCA4OSBjNCAgICAgICAgICAgICAJbW92ICAgICVyOCwlcjEyCmZmZmZmZmZm ODE0NzgxODI6CTRkIDg5IGNlICAgICAgICAgICAgIAltb3YgICAgJXI5LCVyMTQKd2V4dF9wZXJt aXNzaW9uX2NoZWNrKCk6Ci91c3Ivc3JjL2RlYnVnL2tlcm5lbC0yLjYuMzAvbGludXgtMi42LjMw Lng4Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5jOjEwNzUKLyogSWYgY29tbWFuZCBpcyBgc2V0IGEg cGFyYW1ldGVyJywgb3IgYGdldCB0aGUgZW5jb2RpbmcgcGFyYW1ldGVycycsCiAqIGNoZWNrIGlm IHRoZSB1c2VyIGhhcyB0aGUgcmlnaHQgdG8gZG8gaXQuCiAqLwpzdGF0aWMgaW50IHdleHRfcGVy bWlzc2lvbl9jaGVjayh1bnNpZ25lZCBpbnQgY21kKQp7CglpZiAoKElXX0lTX1NFVChjbWQpIHx8 IGNtZCA9PSBTSU9DR0lXRU5DT0RFIHx8IGNtZCA9PSBTSU9DR0lXRU5DT0RFRVhUKQpmZmZmZmZm ZjgxNDc4MTg1Ogk3NCAxNCAgICAgICAgICAgICAgICAJamUgICAgIGZmZmZmZmZmODE0NzgxOWIg PHdleHRfaW9jdGxfZGlzcGF0Y2grMHg0OD4KZmZmZmZmZmY4MTQ3ODE4NzoJODEgZmEgMmIgOGIg MDAgMDAgICAgCWNtcCAgICAkMHg4YjJiLCVlZHgKZmZmZmZmZmY4MTQ3ODE4ZDoJNzQgMGMgICAg ICAgICAgICAgICAgCWplICAgICBmZmZmZmZmZjgxNDc4MTliIDx3ZXh0X2lvY3RsX2Rpc3BhdGNo KzB4NDg+CmZmZmZmZmZmODE0NzgxOGY6CTgxIGZhIDM1IDhiIDAwIDAwICAgIAljbXAgICAgJDB4 OGIzNSwlZWR4CmZmZmZmZmZmODE0NzgxOTU6CTBmIDg1IGVmIDAwIDAwIDAwICAgIAlqbmUgICAg ZmZmZmZmZmY4MTQ3ODI4YSA8d2V4dF9pb2N0bF9kaXNwYXRjaCsweDEzNz4KL3Vzci9zcmMvZGVi dWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6 MTA3NgoJICAgICYmICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQpmZmZmZmZmZjgxNDc4MTliOgli ZiAwYyAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweGMsJWVkaQpmZmZmZmZmZjgxNDc4MWEwOgk4 OSA1NSBjOCAgICAgICAgICAgICAJbW92ICAgICVlZHgsLTB4MzgoJXJicCkKZmZmZmZmZmY4MTQ3 ODFhMzoJNDggODkgNGQgYzAgICAgICAgICAgCW1vdiAgICAlcmN4LC0weDQwKCVyYnApCmZmZmZm ZmZmODE0NzgxYTc6CWU4IDc4IDhjIGJlIGZmICAgICAgIAljYWxscSAgZmZmZmZmZmY4MTA2MGUy NCA8Y2FwYWJsZT4KZmZmZmZmZmY4MTQ3ODFhYzoJODkgYzYgICAgICAgICAgICAgICAgCW1vdiAg ICAlZWF4LCVlc2kKL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2 XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTA3NQovKiBJZiBjb21tYW5kIGlzIGBzZXQgYSBwYXJh bWV0ZXInLCBvciBgZ2V0IHRoZSBlbmNvZGluZyBwYXJhbWV0ZXJzJywKICogY2hlY2sgaWYgdGhl IHVzZXIgaGFzIHRoZSByaWdodCB0byBkbyBpdC4KICovCnN0YXRpYyBpbnQgd2V4dF9wZXJtaXNz aW9uX2NoZWNrKHVuc2lnbmVkIGludCBjbWQpCnsKCWlmICgoSVdfSVNfU0VUKGNtZCkgfHwgY21k ID09IFNJT0NHSVdFTkNPREUgfHwgY21kID09IFNJT0NHSVdFTkNPREVFWFQpCmZmZmZmZmZmODE0 NzgxYWU6CTgzIGM4IGZmICAgICAgICAgICAgIAlvciAgICAgJDB4ZmZmZmZmZmZmZmZmZmZmZiwl ZWF4CmZmZmZmZmZmODE0NzgxYjE6CThiIDU1IGM4ICAgICAgICAgICAgIAltb3YgICAgLTB4Mzgo JXJicCksJWVkeApmZmZmZmZmZjgxNDc4MWI0Ogk4NSBmNiAgICAgICAgICAgICAgICAJdGVzdCAg ICVlc2ksJWVzaQpmZmZmZmZmZjgxNDc4MWI2Ogk0OCA4YiA0ZCBjMCAgICAgICAgICAJbW92ICAg IC0weDQwKCVyYnApLCVyY3gKZmZmZmZmZmY4MTQ3ODFiYToJMGYgODQgYjkgMDAgMDAgMDAgICAg CWplICAgICBmZmZmZmZmZjgxNDc4Mjc5IDx3ZXh0X2lvY3RsX2Rpc3BhdGNoKzB4MTI2PgpmZmZm ZmZmZjgxNDc4MWMwOgllOSBjNSAwMCAwMCAwMCAgICAgICAJam1wcSAgIGZmZmZmZmZmODE0Nzgy OGEgPHdleHRfaW9jdGxfZGlzcGF0Y2grMHgxMzc+CndpcmVsZXNzX3Byb2Nlc3NfaW9jdGwoKToK L3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJl bGVzcy93ZXh0LmM6MTA0MwoJCXJldHVybiAtRU5PREVWOwoKCS8qIEEgYnVuY2ggb2Ygc3BlY2lh bCBjYXNlcywgdGhlbiB0aGUgZ2VuZXJpYyBjYXNlLi4uCgkgKiBOb3RlIHRoYXQgJ2NtZCcgaXMg YWxyZWFkeSBmaWx0ZXJlZCBpbiBkZXZfaW9jdGwoKSB3aXRoCgkgKiAoY21kID49IFNJT0NJV0ZJ UlNUICYmIGNtZCA8PSBTSU9DSVdMQVNUKSAqLwoJaWYgKGNtZCA9PSBTSU9DR0lXU1RBVFMpCmZm ZmZmZmZmODE0NzgxYzU6CTgxIGZhIDBmIDhiIDAwIDAwICAgIAljbXAgICAgJDB4OGIwZiwlZWR4 Ci91c3Ivc3JjL2RlYnVnL2tlcm5lbC0yLjYuMzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQvd2ly ZWxlc3Mvd2V4dC5jOjEwNDQKCQlyZXR1cm4gc3RhbmRhcmQoZGV2LCBpd3IsIGNtZCwgaW5mbywK ZmZmZmZmZmY4MTQ3ODFjYjoJNDkgYzcgYzAgMDYgN2MgNDcgODEgCW1vdiAgICAkMHhmZmZmZmZm ZjgxNDc3YzA2LCVyOAovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwtMi42LjMwL2xpbnV4LTIuNi4zMC54 ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzoxMDQzCgkJcmV0dXJuIC1FTk9ERVY7CgoJLyogQSBi dW5jaCBvZiBzcGVjaWFsIGNhc2VzLCB0aGVuIHRoZSBnZW5lcmljIGNhc2UuLi4KCSAqIE5vdGUg dGhhdCAnY21kJyBpcyBhbHJlYWR5IGZpbHRlcmVkIGluIGRldl9pb2N0bCgpIHdpdGgKCSAqIChj bWQgPj0gU0lPQ0lXRklSU1QgJiYgY21kIDw9IFNJT0NJV0xBU1QpICovCglpZiAoY21kID09IFNJ T0NHSVdTVEFUUykKZmZmZmZmZmY4MTQ3ODFkMjoJNzQgNjkgICAgICAgICAgICAgICAgCWplICAg ICBmZmZmZmZmZjgxNDc4MjNkIDx3ZXh0X2lvY3RsX2Rpc3BhdGNoKzB4ZWE+Ci91c3Ivc3JjL2Rl YnVnL2tlcm5lbC0yLjYuMzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5j OjEwNDcKCQlyZXR1cm4gc3RhbmRhcmQoZGV2LCBpd3IsIGNtZCwgaW5mbywKCQkJCSZpd19oYW5k bGVyX2dldF9pd3N0YXRzKTsKCglpZiAoY21kID09IFNJT0NHSVdQUklWICYmIGRldi0+d2lyZWxl c3NfaGFuZGxlcnMpCmZmZmZmZmZmODE0NzgxZDQ6CTgxIGZhIDBkIDhiIDAwIDAwICAgIAljbXAg ICAgJDB4OGIwZCwlZWR4CmZmZmZmZmZmODE0NzgxZGE6CTc1IDExICAgICAgICAgICAgICAgIAlq bmUgICAgZmZmZmZmZmY4MTQ3ODFlZCA8d2V4dF9pb2N0bF9kaXNwYXRjaCsweDlhPgpmZmZmZmZm ZjgxNDc4MWRjOgk0OCA4MyBiZiAzOCAwMSAwMCAwMCAJY21wcSAgICQweDAsMHgxMzgoJXJkaSkK ZmZmZmZmZmY4MTQ3ODFlMzoJMDAgCi91c3Ivc3JjL2RlYnVnL2tlcm5lbC0yLjYuMzAvbGludXgt Mi42LjMwLng4Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5jOjEwNDgKCQlyZXR1cm4gc3RhbmRhcmQo ZGV2LCBpd3IsIGNtZCwgaW5mbywKZmZmZmZmZmY4MTQ3ODFlNDoJNDkgYzcgYzAgODYgN2IgNDcg ODEgCW1vdiAgICAkMHhmZmZmZmZmZjgxNDc3Yjg2LCVyOAovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwt Mi42LjMwL2xpbnV4LTIuNi4zMC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzoxMDQ3CgkgKiAo Y21kID49IFNJT0NJV0ZJUlNUICYmIGNtZCA8PSBTSU9DSVdMQVNUKSAqLwoJaWYgKGNtZCA9PSBT SU9DR0lXU1RBVFMpCgkJcmV0dXJuIHN0YW5kYXJkKGRldiwgaXdyLCBjbWQsIGluZm8sCgkJCQkm aXdfaGFuZGxlcl9nZXRfaXdzdGF0cyk7CgoJaWYgKGNtZCA9PSBTSU9DR0lXUFJJViAmJiBkZXYt PndpcmVsZXNzX2hhbmRsZXJzKQpmZmZmZmZmZjgxNDc4MWViOgk3NSA1MCAgICAgICAgICAgICAg ICAJam5lICAgIGZmZmZmZmZmODE0NzgyM2QgPHdleHRfaW9jdGxfZGlzcGF0Y2grMHhlYT4KL3Vz ci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVz cy93ZXh0LmM6MTA1MgoJCXJldHVybiBzdGFuZGFyZChkZXYsIGl3ciwgY21kLCBpbmZvLAoJCQkJ Jml3X2hhbmRsZXJfZ2V0X3ByaXZhdGUpOwoKCS8qIEJhc2ljIGNoZWNrICovCglpZiAoIW5ldGlm X2RldmljZV9wcmVzZW50KGRldikpCmZmZmZmZmZmODE0NzgxZWQ6CWY2IDQ3IDQ4IDAyICAgICAg ICAgIAl0ZXN0YiAgJDB4MiwweDQ4KCVyZGkpCmZmZmZmZmZmODE0NzgxZjE6CTc0IDc2ICAgICAg ICAgICAgICAgIAlqZSAgICAgZmZmZmZmZmY4MTQ3ODI2OSA8d2V4dF9pb2N0bF9kaXNwYXRjaCsw eDExNj4KZ2V0X2hhbmRsZXIoKToKL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0y LjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6NDM3CnsKCS8qIERvbid0ICJvcHRpbWlz ZSIgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSwgaXQgd2lsbCBjcmFzaCAqLwoJdW5zaWduZWQgaW50 CWluZGV4OwkJLyogKk1VU1QqIGJlIHVuc2lnbmVkICovCgoJLyogQ2hlY2sgaWYgd2UgaGF2ZSBz b21lIHdpcmVsZXNzIGhhbmRsZXJzIGRlZmluZWQgKi8KCWlmIChkZXYtPndpcmVsZXNzX2hhbmRs ZXJzID09IE5VTEwpCmZmZmZmZmZmODE0NzgxZjM6CTQ4IDhiIDg3IDM4IDAxIDAwIDAwIAltb3Yg ICAgMHgxMzgoJXJkaSksJXJheApmZmZmZmZmZjgxNDc4MWZhOgk0OCA4NSBjMCAgICAgICAgICAg ICAJdGVzdCAgICVyYXgsJXJheApmZmZmZmZmZjgxNDc4MWZkOgk3NCA0ZSAgICAgICAgICAgICAg ICAJamUgICAgIGZmZmZmZmZmODE0NzgyNGQgPHdleHRfaW9jdGxfZGlzcGF0Y2grMHhmYT4KL3Vz ci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVz cy93ZXh0LmM6NDQyCgkJcmV0dXJuIE5VTEw7CgoJLyogVHJ5IGFzIGEgc3RhbmRhcmQgY29tbWFu ZCAqLwoJaW5kZXggPSBjbWQgLSBTSU9DSVdGSVJTVDsKCWlmIChpbmRleCA8IGRldi0+d2lyZWxl c3NfaGFuZGxlcnMtPm51bV9zdGFuZGFyZCkKZmZmZmZmZmY4MTQ3ODFmZjoJNDQgMGYgYjcgMDAg ICAgICAgICAgCW1vdnp3bCAoJXJheCksJXI4ZAovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwtMi42LjMw L2xpbnV4LTIuNi4zMC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzo0NDEKCS8qIENoZWNrIGlm IHdlIGhhdmUgc29tZSB3aXJlbGVzcyBoYW5kbGVycyBkZWZpbmVkICovCglpZiAoZGV2LT53aXJl bGVzc19oYW5kbGVycyA9PSBOVUxMKQoJCXJldHVybiBOVUxMOwoKCS8qIFRyeSBhcyBhIHN0YW5k YXJkIGNvbW1hbmQgKi8KCWluZGV4ID0gY21kIC0gU0lPQ0lXRklSU1Q7CmZmZmZmZmZmODE0Nzgy MDM6CThkIGIyIDAwIDc1IGZmIGZmICAgIAlsZWEgICAgLTB4OGIwMCglcmR4KSwlZXNpCi91c3Iv c3JjL2RlYnVnL2tlcm5lbC0yLjYuMzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQvd2lyZWxlc3Mv d2V4dC5jOjQ0MgoJaWYgKGluZGV4IDwgZGV2LT53aXJlbGVzc19oYW5kbGVycy0+bnVtX3N0YW5k YXJkKQpmZmZmZmZmZjgxNDc4MjA5Ogk0NCAzOSBjNiAgICAgICAgICAgICAJY21wICAgICVyOGQs JWVzaQpmZmZmZmZmZjgxNDc4MjBjOgk3MyAwOCAgICAgICAgICAgICAgICAJamFlICAgIGZmZmZm ZmZmODE0NzgyMTYgPHdleHRfaW9jdGxfZGlzcGF0Y2grMHhjMz4KL3Vzci9zcmMvZGVidWcva2Vy bmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6NDQzCgkJ cmV0dXJuIGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPnN0YW5kYXJkW2luZGV4XTsKZmZmZmZmZmY4 MTQ3ODIwZToJODkgZjYgICAgICAgICAgICAgICAgCW1vdiAgICAlZXNpLCVlc2kKZmZmZmZmZmY4 MTQ3ODIxMDoJNDggOGIgNDAgMDggICAgICAgICAgCW1vdiAgICAweDgoJXJheCksJXJheApmZmZm ZmZmZjgxNDc4MjE0OgllYiAxNiAgICAgICAgICAgICAgICAJam1wICAgIGZmZmZmZmZmODE0Nzgy MmMgPHdleHRfaW9jdGxfZGlzcGF0Y2grMHhkOT4KL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4z MC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6NDQ3CgoJLyogVHJ5IGFz IGEgcHJpdmF0ZSBjb21tYW5kICovCglpbmRleCA9IGNtZCAtIFNJT0NJV0ZJUlNUUFJJVjsKCWlm IChpbmRleCA8IGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPm51bV9wcml2YXRlKQpmZmZmZmZmZjgx NDc4MjE2Ogk0NCAwZiBiNyA0MCAwMiAgICAgICAJbW92endsIDB4MiglcmF4KSwlcjhkCi91c3Iv c3JjL2RlYnVnL2tlcm5lbC0yLjYuMzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQvd2lyZWxlc3Mv d2V4dC5jOjQ0NgoJaW5kZXggPSBjbWQgLSBTSU9DSVdGSVJTVDsKCWlmIChpbmRleCA8IGRldi0+ d2lyZWxlc3NfaGFuZGxlcnMtPm51bV9zdGFuZGFyZCkKCQlyZXR1cm4gZGV2LT53aXJlbGVzc19o YW5kbGVycy0+c3RhbmRhcmRbaW5kZXhdOwoKCS8qIFRyeSBhcyBhIHByaXZhdGUgY29tbWFuZCAq LwoJaW5kZXggPSBjbWQgLSBTSU9DSVdGSVJTVFBSSVY7CmZmZmZmZmZmODE0NzgyMWI6CThkIGIy IDIwIDc0IGZmIGZmICAgIAlsZWEgICAgLTB4OGJlMCglcmR4KSwlZXNpCi91c3Ivc3JjL2RlYnVn L2tlcm5lbC0yLjYuMzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5jOjQ0 NwoJaWYgKGluZGV4IDwgZGV2LT53aXJlbGVzc19oYW5kbGVycy0+bnVtX3ByaXZhdGUpCmZmZmZm ZmZmODE0NzgyMjE6CTQ0IDM5IGM2ICAgICAgICAgICAgIAljbXAgICAgJXI4ZCwlZXNpCmZmZmZm ZmZmODE0NzgyMjQ6CTczIDI3ICAgICAgICAgICAgICAgIAlqYWUgICAgZmZmZmZmZmY4MTQ3ODI0 ZCA8d2V4dF9pb2N0bF9kaXNwYXRjaCsweGZhPgovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwtMi42LjMw L2xpbnV4LTIuNi4zMC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzo0NDgKCQlyZXR1cm4gZGV2 LT53aXJlbGVzc19oYW5kbGVycy0+cHJpdmF0ZVtpbmRleF07CmZmZmZmZmZmODE0NzgyMjY6CTQ4 IDhiIDQwIDEwICAgICAgICAgIAltb3YgICAgMHgxMCglcmF4KSwlcmF4CmZmZmZmZmZmODE0Nzgy MmE6CTg5IGY2ICAgICAgICAgICAgICAgIAltb3YgICAgJWVzaSwlZXNpCmZmZmZmZmZmODE0Nzgy MmM6CTRjIDhiIDA0IGYwICAgICAgICAgIAltb3YgICAgKCVyYXgsJXJzaSw4KSwlcjgKd2lyZWxl c3NfcHJvY2Vzc19pb2N0bCgpOgovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwtMi42LjMwL2xpbnV4LTIu Ni4zMC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzoxMDU3CglpZiAoIW5ldGlmX2RldmljZV9w cmVzZW50KGRldikpCgkJcmV0dXJuIC1FTk9ERVY7CgoJLyogTmV3IGRyaXZlciBBUEkgOiB0cnkg dG8gZmluZCB0aGUgaGFuZGxlciAqLwoJaGFuZGxlciA9IGdldF9oYW5kbGVyKGRldiwgY21kKTsK CWlmIChoYW5kbGVyKSB7CmZmZmZmZmZmODE0NzgyMzA6CTRkIDg1IGMwICAgICAgICAgICAgIAl0 ZXN0ICAgJXI4LCVyOApmZmZmZmZmZjgxNDc4MjMzOgk3NCAxOCAgICAgICAgICAgICAgICAJamUg ICAgIGZmZmZmZmZmODE0NzgyNGQgPHdleHRfaW9jdGxfZGlzcGF0Y2grMHhmYT4KL3Vzci9zcmMv ZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0 LmM6MTA1OQoJCS8qIFN0YW5kYXJkIGFuZCBwcml2YXRlIGFyZSBub3QgdGhlIHNhbWUgKi8KCQlp ZiAoY21kIDwgU0lPQ0lXRklSU1RQUklWKQpmZmZmZmZmZjgxNDc4MjM1Ogk4MSBmYSBkZiA4YiAw MCAwMCAgICAJY21wICAgICQweDhiZGYsJWVkeApmZmZmZmZmZjgxNDc4MjNiOgk3NyAwOCAgICAg ICAgICAgICAgICAJamEgICAgIGZmZmZmZmZmODE0NzgyNDUgPHdleHRfaW9jdGxfZGlzcGF0Y2gr MHhmMj4KL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25l dC93aXJlbGVzcy93ZXh0LmM6MTA2MAoJCQlyZXR1cm4gc3RhbmRhcmQoZGV2LCBpd3IsIGNtZCwg aW5mbywgaGFuZGxlcik7CmZmZmZmZmZmODE0NzgyM2Q6CTQ4IDg5IGRlICAgICAgICAgICAgIAlt b3YgICAgJXJieCwlcnNpCmZmZmZmZmZmODE0NzgyNDA6CTQxIGZmIGQ0ICAgICAgICAgICAgIAlj YWxscSAgKiVyMTIKZmZmZmZmZmY4MTQ3ODI0MzoJZWIgMjkgICAgICAgICAgICAgICAgCWptcCAg ICBmZmZmZmZmZjgxNDc4MjZlIDx3ZXh0X2lvY3RsX2Rpc3BhdGNoKzB4MTFiPgovdXNyL3NyYy9k ZWJ1Zy9rZXJuZWwtMi42LjMwL2xpbnV4LTIuNi4zMC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQu YzoxMDYyCgkJZWxzZQoJCQlyZXR1cm4gcHJpdmF0ZShkZXYsIGl3ciwgY21kLCBpbmZvLCBoYW5k bGVyKTsKZmZmZmZmZmY4MTQ3ODI0NToJNDggODkgZGUgICAgICAgICAgICAgCW1vdiAgICAlcmJ4 LCVyc2kKZmZmZmZmZmY4MTQ3ODI0ODoJNDEgZmYgZDYgICAgICAgICAgICAgCWNhbGxxICAqJXIx NApmZmZmZmZmZjgxNDc4MjRiOgllYiAyMSAgICAgICAgICAgICAgICAJam1wICAgIGZmZmZmZmZm ODE0NzgyNmUgPHdleHRfaW9jdGxfZGlzcGF0Y2grMHgxMWI+Ci91c3Ivc3JjL2RlYnVnL2tlcm5l bC0yLjYuMzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5jOjEwNjUKCX0K CS8qIE9sZCBkcml2ZXIgQVBJIDogY2FsbCBkcml2ZXIgaW9jdGwgaGFuZGxlciAqLwoJaWYgKGRl di0+bmV0ZGV2X29wcy0+bmRvX2RvX2lvY3RsKQpmZmZmZmZmZjgxNDc4MjRkOgk0OCA4YiA4NyA0 OCAwMSAwMCAwMCAJbW92ICAgIDB4MTQ4KCVyZGkpLCVyYXgKZmZmZmZmZmY4MTQ3ODI1NDoJNDgg OGIgNDggNTggICAgICAgICAgCW1vdiAgICAweDU4KCVyYXgpLCVyY3gKZmZmZmZmZmY4MTQ3ODI1 ODoJYjggYTEgZmYgZmYgZmYgICAgICAgCW1vdiAgICAkMHhmZmZmZmZhMSwlZWF4CmZmZmZmZmZm ODE0NzgyNWQ6CTQ4IDg1IGM5ICAgICAgICAgICAgIAl0ZXN0ICAgJXJjeCwlcmN4CmZmZmZmZmZm ODE0NzgyNjA6CTc0IDBjICAgICAgICAgICAgICAgIAlqZSAgICAgZmZmZmZmZmY4MTQ3ODI2ZSA8 d2V4dF9pb2N0bF9kaXNwYXRjaCsweDExYj4KL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9s aW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTA2NgoJCXJldHVybiBkZXYt Pm5ldGRldl9vcHMtPm5kb19kb19pb2N0bChkZXYsIGlmciwgY21kKTsKZmZmZmZmZmY4MTQ3ODI2 MjoJNDggODkgZGUgICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCVyc2kKZmZmZmZmZmY4MTQ3ODI2 NToJZmYgZDEgICAgICAgICAgICAgICAgCWNhbGxxICAqJXJjeApmZmZmZmZmZjgxNDc4MjY3Ogll YiAwNSAgICAgICAgICAgICAgICAJam1wICAgIGZmZmZmZmZmODE0NzgyNmUgPHdleHRfaW9jdGxf ZGlzcGF0Y2grMHgxMWI+CmZmZmZmZmZmODE0NzgyNjk6CWI4IGVkIGZmIGZmIGZmICAgICAgIAlt b3YgICAgJDB4ZmZmZmZmZWQsJWVheAp3ZXh0X2lvY3RsX2Rpc3BhdGNoKCk6Ci91c3Ivc3JjL2Rl YnVnL2tlcm5lbC0yLjYuMzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5j OjEwOTYKCQlyZXR1cm4gcmV0OwoKCWRldl9sb2FkKG5ldCwgaWZyLT5pZnJfbmFtZSk7CglydG5s X2xvY2soKTsKCXJldCA9IHdpcmVsZXNzX3Byb2Nlc3NfaW9jdGwobmV0LCBpZnIsIGNtZCwgaW5m bywgc3RhbmRhcmQsIHByaXZhdGUpOwoJcnRubF91bmxvY2soKTsKZmZmZmZmZmY4MTQ3ODI2ZToJ ODkgNDUgYzggICAgICAgICAgICAgCW1vdiAgICAlZWF4LC0weDM4KCVyYnApCmZmZmZmZmZmODE0 NzgyNzE6CWU4IDkxIDU4IGY3IGZmICAgICAgIAljYWxscSAgZmZmZmZmZmY4MTNlZGIwNyA8cnRu bF91bmxvY2s+CmZmZmZmZmZmODE0NzgyNzY6CThiIDQ1IGM4ICAgICAgICAgICAgIAltb3YgICAg LTB4MzgoJXJicCksJWVheAovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwtMi42LjMwL2xpbnV4LTIuNi4z MC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzoxMDk5CgoJcmV0dXJuIHJldDsKfQpmZmZmZmZm ZjgxNDc4Mjc5Ogk0OCA4YiA1NSBkOCAgICAgICAgICAJbW92ICAgIC0weDI4KCVyYnApLCVyZHgK ZmZmZmZmZmY4MTQ3ODI3ZDoJNjUgNDggMzMgMTQgMjUgMjggMDAgCXhvciAgICAlZ3M6MHgyOCwl cmR4CmZmZmZmZmZmODE0NzgyODQ6CTAwIDAwIApmZmZmZmZmZjgxNDc4Mjg2Ogk3NCAzZSAgICAg ICAgICAgICAgICAJamUgICAgIGZmZmZmZmZmODE0NzgyYzYgPHdleHRfaW9jdGxfZGlzcGF0Y2gr MHgxNzM+CmZmZmZmZmZmODE0NzgyODg6CWViIDM3ICAgICAgICAgICAgICAgIAlqbXAgICAgZmZm ZmZmZmY4MTQ3ODJjMSA8d2V4dF9pb2N0bF9kaXNwYXRjaCsweDE2ZT4KL3Vzci9zcmMvZGVidWcv a2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTA5 MwoJaW50IHJldCA9IHdleHRfcGVybWlzc2lvbl9jaGVjayhjbWQpOwoKCWlmIChyZXQpCgkJcmV0 dXJuIHJldDsKCglkZXZfbG9hZChuZXQsIGlmci0+aWZyX25hbWUpOwpmZmZmZmZmZjgxNDc4Mjhh Ogk0OCA4OSBkZSAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJzaQpmZmZmZmZmZjgxNDc4Mjhk Ogk0YyA4OSBlZiAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJkaQpmZmZmZmZmZjgxNDc4Mjkw Ogk4OSA1NSBjOCAgICAgICAgICAgICAJbW92ICAgICVlZHgsLTB4MzgoJXJicCkKZmZmZmZmZmY4 MTQ3ODI5MzoJNDggODkgNGQgYzAgICAgICAgICAgCW1vdiAgICAlcmN4LC0weDQwKCVyYnApCmZm ZmZmZmZmODE0NzgyOTc6CWU4IGRmIGMwIGY2IGZmICAgICAgIAljYWxscSAgZmZmZmZmZmY4MTNl NDM3YiA8ZGV2X2xvYWQ+Ci91c3Ivc3JjL2RlYnVnL2tlcm5lbC0yLjYuMzAvbGludXgtMi42LjMw Lng4Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5jOjEwOTQKCXJ0bmxfbG9jaygpOwpmZmZmZmZmZjgx NDc4MjljOgllOCBkYiA1OCBmNyBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODEzZWRiN2MgPHJ0 bmxfbG9jaz4Kd2lyZWxlc3NfcHJvY2Vzc19pb2N0bCgpOgovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwt Mi42LjMwL2xpbnV4LTIuNi4zMC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzoxMDM3CgoJLyog UGVybWlzc2lvbnMgYXJlIGFscmVhZHkgY2hlY2tlZCBpbiBkZXZfaW9jdGwoKSBiZWZvcmUgY2Fs bGluZyB1cy4KCSAqIFRoZSBjb3B5X3RvL2Zyb21fdXNlcigpIG9mIGlmciBpcyBhbHNvIGRlYWx0 IHdpdGggaW4gdGhlcmUgKi8KCgkvKiBNYWtlIHN1cmUgdGhlIGRldmljZSBleGlzdCAqLwoJaWYg KChkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIGlmci0+aWZyX25hbWUpKSA9PSBOVUxMKQpm ZmZmZmZmZjgxNDc4MmExOgk0YyA4OSBlZiAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJkaQpm ZmZmZmZmZjgxNDc4MmE0Ogk0OCA4OSBkZSAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJzaQpm ZmZmZmZmZjgxNDc4MmE3OgllOCA0NCA4MyBmNiBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODEz ZTA1ZjAgPF9fZGV2X2dldF9ieV9uYW1lPgpmZmZmZmZmZjgxNDc4MmFjOgk0OCA4NSBjMCAgICAg ICAgICAgICAJdGVzdCAgICVyYXgsJXJheApmZmZmZmZmZjgxNDc4MmFmOgk0OCA4OSBjNyAgICAg ICAgICAgICAJbW92ICAgICVyYXgsJXJkaQpmZmZmZmZmZjgxNDc4MmIyOgk4YiA1NSBjOCAgICAg ICAgICAgICAJbW92ICAgIC0weDM4KCVyYnApLCVlZHgKZmZmZmZmZmY4MTQ3ODJiNToJNDggOGIg NGQgYzAgICAgICAgICAgCW1vdiAgICAtMHg0MCglcmJwKSwlcmN4CmZmZmZmZmZmODE0NzgyYjk6 CTBmIDg1IDA2IGZmIGZmIGZmICAgIAlqbmUgICAgZmZmZmZmZmY4MTQ3ODFjNSA8d2V4dF9pb2N0 bF9kaXNwYXRjaCsweDcyPgpmZmZmZmZmZjgxNDc4MmJmOgllYiBhOCAgICAgICAgICAgICAgICAJ am1wICAgIGZmZmZmZmZmODE0NzgyNjkgPHdleHRfaW9jdGxfZGlzcGF0Y2grMHgxMTY+CndleHRf aW9jdGxfZGlzcGF0Y2goKToKL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYu MzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTA5OQoJcnRubF9sb2NrKCk7CglyZXQgPSB3 aXJlbGVzc19wcm9jZXNzX2lvY3RsKG5ldCwgaWZyLCBjbWQsIGluZm8sIHN0YW5kYXJkLCBwcml2 YXRlKTsKCXJ0bmxfdW5sb2NrKCk7CgoJcmV0dXJuIHJldDsKfQpmZmZmZmZmZjgxNDc4MmMxOgll OCBjMyBlZiBiZCBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODEwNTcyODkgPF9fc3RhY2tfY2hr X2ZhaWw+CmZmZmZmZmZmODE0NzgyYzY6CTQ4IDgzIGM0IDIwICAgICAgICAgIAlhZGQgICAgJDB4 MjAsJXJzcApmZmZmZmZmZjgxNDc4MmNhOgk1YiAgICAgICAgICAgICAgICAgICAJcG9wICAgICVy YngKZmZmZmZmZmY4MTQ3ODJjYjoJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAgICAlcjEyCmZm ZmZmZmZmODE0NzgyY2Q6CTQxIDVkICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxMwpmZmZmZmZm ZjgxNDc4MmNmOgk0MSA1ZSAgICAgICAgICAgICAgICAJcG9wICAgICVyMTQKZmZmZmZmZmY4MTQ3 ODJkMToJYzkgICAgICAgICAgICAgICAgICAgCWxlYXZlcSAKZmZmZmZmZmY4MTQ3ODJkMjoJYzMg ICAgICAgICAgICAgICAgICAgCXJldHEgICAKCmZmZmZmZmZmODE0NzgyZDMgPGNvbXBhdF93ZXh0 X2hhbmRsZV9pb2N0bD46CmNvbXBhdF93ZXh0X2hhbmRsZV9pb2N0bCgpOgovdXNyL3NyYy9kZWJ1 Zy9rZXJuZWwtMi42LjMwL2xpbnV4LTIuNi4zMC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzox MTg4CglyZXR1cm4gcmV0Owp9CgppbnQgY29tcGF0X3dleHRfaGFuZGxlX2lvY3RsKHN0cnVjdCBu ZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwKCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKewpm ZmZmZmZmZjgxNDc4MmQzOgk1NSAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYnAKZmZmZmZm ZmY4MTQ3ODJkNDoJNDggODkgZTUgICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVyYnAKZmZmZmZm ZmY4MTQ3ODJkNzoJNDEgNTYgICAgICAgICAgICAgICAgCXB1c2ggICAlcjE0CmZmZmZmZmZmODE0 NzgyZDk6CTQxIDU1ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMwpmZmZmZmZmZjgxNDc4MmRi Ogk0MSA1NCAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKZmZmZmZmZmY4MTQ3ODJkZDoJNTMg ICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJ4CmZmZmZmZmZmODE0NzgyZGU6CTQ4IDgzIGVj IDQwICAgICAgICAgIAlzdWIgICAgJDB4NDAsJXJzcApmZmZmZmZmZjgxNDc4MmUyOgllOCAxOSA5 YiBiOSBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODEwMTFlMDAgPG1jb3VudD4KL3Vzci9zcmMv ZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0 LmM6MTE5NQoJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyBpbmZvOwoJc3RydWN0IGl3cmVxIGl3cjsK CWNoYXIgKmNvbG9uOwoJaW50IHJldDsKCglpZiAoY29weV9mcm9tX3VzZXIoJml3ciwgYXJncCwg c2l6ZW9mKHN0cnVjdCBpd3JlcSkpKQpmZmZmZmZmZjgxNDc4MmU3Ogk0YyA4ZCA2NSBiMCAgICAg ICAgICAJbGVhICAgIC0weDUwKCVyYnApLCVyMTIKL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4z MC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTE4OAoJcmV0dXJuIHJl dDsKfQoKaW50IGNvbXBhdF93ZXh0X2hhbmRsZV9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2ln bmVkIGludCBjbWQsCgkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCnsKZmZmZmZmZmY4MTQ3ODJl YjoJNDkgODkgZDUgICAgICAgICAgICAgCW1vdiAgICAlcmR4LCVyMTMKZmZmZmZmZmY4MTQ3ODJl ZToJNDkgODkgZmUgICAgICAgICAgICAgCW1vdiAgICAlcmRpLCVyMTQKZmZmZmZmZmY4MTQ3ODJm MToJODkgZjMgICAgICAgICAgICAgICAgCW1vdiAgICAlZXNpLCVlYngKL3Vzci9zcmMvZGVidWcv a2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTE5 NQoJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyBpbmZvOwoJc3RydWN0IGl3cmVxIGl3cjsKCWNoYXIg KmNvbG9uOwoJaW50IHJldDsKCglpZiAoY29weV9mcm9tX3VzZXIoJml3ciwgYXJncCwgc2l6ZW9m KHN0cnVjdCBpd3JlcSkpKQpmZmZmZmZmZjgxNDc4MmYzOgliYSAyMCAwMCAwMCAwMCAgICAgICAJ bW92ICAgICQweDIwLCVlZHgKZmZmZmZmZmY4MTQ3ODJmODoJNGMgODkgZWUgICAgICAgICAgICAg CW1vdiAgICAlcjEzLCVyc2kKZmZmZmZmZmY4MTQ3ODJmYjoJNGMgODkgZTcgICAgICAgICAgICAg CW1vdiAgICAlcjEyLCVyZGkKL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYu MzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTE4OAoJcmV0dXJuIHJldDsKfQoKaW50IGNv bXBhdF93ZXh0X2hhbmRsZV9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCBjbWQs CgkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCnsKZmZmZmZmZmY4MTQ3ODJmZToJNjUgNDggOGIg MDQgMjUgMjggMDAgCW1vdiAgICAlZ3M6MHgyOCwlcmF4CmZmZmZmZmZmODE0NzgzMDU6CTAwIDAw IApmZmZmZmZmZjgxNDc4MzA3Ogk0OCA4OSA0NSBkOCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4 MjgoJXJicCkKZmZmZmZmZmY4MTQ3ODMwYjoJMzEgYzAgICAgICAgICAgICAgICAgCXhvciAgICAl ZWF4LCVlYXgKL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0 L25ldC93aXJlbGVzcy93ZXh0LmM6MTE5NQoJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyBpbmZvOwoJ c3RydWN0IGl3cmVxIGl3cjsKCWNoYXIgKmNvbG9uOwoJaW50IHJldDsKCglpZiAoY29weV9mcm9t X3VzZXIoJml3ciwgYXJncCwgc2l6ZW9mKHN0cnVjdCBpd3JlcSkpKQpmZmZmZmZmZjgxNDc4MzBk OgllOCAzZSA1MSBkYiBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODEyMmQ0NTAgPGNvcHlfZnJv bV91c2VyPgpmZmZmZmZmZjgxNDc4MzEyOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVy YXgsJXJheApmZmZmZmZmZjgxNDc4MzE1Ogk3NSA2NyAgICAgICAgICAgICAgICAJam5lICAgIGZm ZmZmZmZmODE0NzgzN2UgPGNvbXBhdF93ZXh0X2hhbmRsZV9pb2N0bCsweGFiPgovdXNyL3NyYy9k ZWJ1Zy9rZXJuZWwtMi42LjMwL2xpbnV4LTIuNi4zMC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQu YzoxMTk5CgkJcmV0dXJuIC1FRkFVTFQ7CgoJaXdyLmlmcl9uYW1lW0lGTkFNU0laLTFdID0gMDsK CWNvbG9uID0gc3RyY2hyKGl3ci5pZnJfbmFtZSwgJzonKTsKZmZmZmZmZmY4MTQ3ODMxNzoJYmUg M2EgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgzYSwlZXNpCmZmZmZmZmZmODE0NzgzMWM6CTRj IDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCi91c3Ivc3JjL2RlYnVnL2tlcm5l bC0yLjYuMzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5jOjExOTgKCWlu dCByZXQ7CgoJaWYgKGNvcHlfZnJvbV91c2VyKCZpd3IsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgaXdy ZXEpKSkKCQlyZXR1cm4gLUVGQVVMVDsKCglpd3IuaWZyX25hbWVbSUZOQU1TSVotMV0gPSAwOwpm ZmZmZmZmZjgxNDc4MzFmOgljNiA0NSBiZiAwMCAgICAgICAgICAJbW92YiAgICQweDAsLTB4NDEo JXJicCkKL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25l dC93aXJlbGVzcy93ZXh0LmM6MTE5OQoJY29sb24gPSBzdHJjaHIoaXdyLmlmcl9uYW1lLCAnOicp OwpmZmZmZmZmZjgxNDc4MzIzOgllOCBkMSAyNSBkYiBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZm ODEyMmE4ZjkgPHN0cmNocj4KL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYu MzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTIwMAoJaWYgKGNvbG9uKQpmZmZmZmZmZjgx NDc4MzI4Ogk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheApmZmZmZmZmZjgx NDc4MzJiOgk3NCAwMyAgICAgICAgICAgICAgICAJamUgICAgIGZmZmZmZmZmODE0NzgzMzAgPGNv bXBhdF93ZXh0X2hhbmRsZV9pb2N0bCsweDVkPgovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwtMi42LjMw L2xpbnV4LTIuNi4zMC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzoxMjAxCgkJKmNvbG9uID0g MDsKZmZmZmZmZmY4MTQ3ODMyZDoJYzYgMDAgMDAgICAgICAgICAgICAgCW1vdmIgICAkMHgwLCgl cmF4KQovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwtMi42LjMwL2xpbnV4LTIuNi4zMC54ODZfNjQvbmV0 L3dpcmVsZXNzL3dleHQuYzoxMjA2CgoJaW5mby5jbWQgPSBjbWQ7CglpbmZvLmZsYWdzID0gSVdf UkVRVUVTVF9GTEFHX0NPTVBBVDsKCglyZXQgPSB3ZXh0X2lvY3RsX2Rpc3BhdGNoKG5ldCwgKHN0 cnVjdCBpZnJlcSAqKSAmaXdyLCBjbWQsICZpbmZvLApmZmZmZmZmZjgxNDc4MzMwOgk0YyA4ZCA2 NSBiMCAgICAgICAgICAJbGVhICAgIC0weDUwKCVyYnApLCVyMTIKZmZmZmZmZmY4MTQ3ODMzNDoJ NDggOGQgNGQgYTAgICAgICAgICAgCWxlYSAgICAtMHg2MCglcmJwKSwlcmN4CmZmZmZmZmZmODE0 NzgzMzg6CTRjIDg5IGY3ICAgICAgICAgICAgIAltb3YgICAgJXIxNCwlcmRpCmZmZmZmZmZmODE0 NzgzM2I6CTQ5IGM3IGMxIGRjIDdmIDQ3IDgxIAltb3YgICAgJDB4ZmZmZmZmZmY4MTQ3N2ZkYywl cjkKZmZmZmZmZmY4MTQ3ODM0MjoJNDkgYzcgYzAgZGYgOGQgNDcgODEgCW1vdiAgICAkMHhmZmZm ZmZmZjgxNDc4ZGRmLCVyOApmZmZmZmZmZjgxNDc4MzQ5Ogk4OSBkYSAgICAgICAgICAgICAgICAJ bW92ICAgICVlYngsJWVkeApmZmZmZmZmZjgxNDc4MzRiOgk0YyA4OSBlNiAgICAgICAgICAgICAJ bW92ICAgICVyMTIsJXJzaQovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwtMi42LjMwL2xpbnV4LTIuNi4z MC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzoxMjAzCglpd3IuaWZyX25hbWVbSUZOQU1TSVot MV0gPSAwOwoJY29sb24gPSBzdHJjaHIoaXdyLmlmcl9uYW1lLCAnOicpOwoJaWYgKGNvbG9uKQoJ CSpjb2xvbiA9IDA7CgoJaW5mby5jbWQgPSBjbWQ7CmZmZmZmZmZmODE0NzgzNGU6CTY2IDg5IDVk IGEwICAgICAgICAgIAltb3YgICAgJWJ4LC0weDYwKCVyYnApCi91c3Ivc3JjL2RlYnVnL2tlcm5l bC0yLjYuMzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5jOjEyMDQKCWlu Zm8uZmxhZ3MgPSBJV19SRVFVRVNUX0ZMQUdfQ09NUEFUOwpmZmZmZmZmZjgxNDc4MzUyOgk2NiBj NyA0NSBhMiAwMSAwMCAgICAJbW92dyAgICQweDEsLTB4NWUoJXJicCkKL3Vzci9zcmMvZGVidWcv a2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTIw NgoKCXJldCA9IHdleHRfaW9jdGxfZGlzcGF0Y2gobmV0LCAoc3RydWN0IGlmcmVxICopICZpd3Is IGNtZCwgJmluZm8sCmZmZmZmZmZmODE0NzgzNTg6CWU4IGY2IGZkIGZmIGZmICAgICAgIAljYWxs cSAgZmZmZmZmZmY4MTQ3ODE1MyA8d2V4dF9pb2N0bF9kaXNwYXRjaD4KL3Vzci9zcmMvZGVidWcv a2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTIx MAoJCQkJICBjb21wYXRfc3RhbmRhcmRfY2FsbCwKCQkJCSAgY29tcGF0X3ByaXZhdGVfY2FsbCk7 CgoJaWYgKHJldCA+PSAwICYmCmZmZmZmZmZmODE0NzgzNWQ6CTg1IGMwICAgICAgICAgICAgICAg IAl0ZXN0ICAgJWVheCwlZWF4Ci91c3Ivc3JjL2RlYnVnL2tlcm5lbC0yLjYuMzAvbGludXgtMi42 LjMwLng4Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5jOjEyMDYKCQkqY29sb24gPSAwOwoKCWluZm8u Y21kID0gY21kOwoJaW5mby5mbGFncyA9IElXX1JFUVVFU1RfRkxBR19DT01QQVQ7CgoJcmV0ID0g d2V4dF9pb2N0bF9kaXNwYXRjaChuZXQsIChzdHJ1Y3QgaWZyZXEgKikgJml3ciwgY21kLCAmaW5m bywKZmZmZmZmZmY4MTQ3ODM1ZjoJNDEgODkgYzYgICAgICAgICAgICAgCW1vdiAgICAlZWF4LCVy MTRkCi91c3Ivc3JjL2RlYnVnL2tlcm5lbC0yLjYuMzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQv d2lyZWxlc3Mvd2V4dC5jOjEyMTAKCQkJCSAgY29tcGF0X3N0YW5kYXJkX2NhbGwsCgkJCQkgIGNv bXBhdF9wcml2YXRlX2NhbGwpOwoKCWlmIChyZXQgPj0gMCAmJgpmZmZmZmZmZjgxNDc4MzYyOgk3 OCAyMCAgICAgICAgICAgICAgICAJanMgICAgIGZmZmZmZmZmODE0NzgzODQgPGNvbXBhdF93ZXh0 X2hhbmRsZV9pb2N0bCsweGIxPgpmZmZmZmZmZjgxNDc4MzY0Ogk4MCBlMyAwMSAgICAgICAgICAg ICAJYW5kICAgICQweDEsJWJsCmZmZmZmZmZmODE0NzgzNjc6CTc0IDFiICAgICAgICAgICAgICAg IAlqZSAgICAgZmZmZmZmZmY4MTQ3ODM4NCA8Y29tcGF0X3dleHRfaGFuZGxlX2lvY3RsKzB4YjE+ Ci91c3Ivc3JjL2RlYnVnL2tlcm5lbC0yLjYuMzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQvd2ly ZWxlc3Mvd2V4dC5jOjEyMTIKCSAgICBJV19JU19HRVQoY21kKSAmJgoJICAgIGNvcHlfdG9fdXNl cihhcmdwLCAmaXdyLCBzaXplb2Yoc3RydWN0IGl3cmVxKSkpCmZmZmZmZmZmODE0NzgzNjk6CWJh IDIwIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MjAsJWVkeApmZmZmZmZmZjgxNDc4MzZlOgk0 YyA4OSBlNiAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJzaQpmZmZmZmZmZjgxNDc4MzcxOgk0 YyA4OSBlZiAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJkaQpmZmZmZmZmZjgxNDc4Mzc0Ogll OCBhNyA1MCBkYiBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODEyMmQ0MjAgPGNvcHlfdG9fdXNl cj4KL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93 aXJlbGVzcy93ZXh0LmM6MTIxMAoKCXJldCA9IHdleHRfaW9jdGxfZGlzcGF0Y2gobmV0LCAoc3Ry dWN0IGlmcmVxICopICZpd3IsIGNtZCwgJmluZm8sCgkJCQkgIGNvbXBhdF9zdGFuZGFyZF9jYWxs LAoJCQkJICBjb21wYXRfcHJpdmF0ZV9jYWxsKTsKCglpZiAocmV0ID49IDAgJiYKZmZmZmZmZmY4 MTQ3ODM3OToJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKZmZmZmZmZmY4 MTQ3ODM3YzoJNzQgMDYgICAgICAgICAgICAgICAgCWplICAgICBmZmZmZmZmZjgxNDc4Mzg0IDxj b21wYXRfd2V4dF9oYW5kbGVfaW9jdGwrMHhiMT4KZmZmZmZmZmY4MTQ3ODM3ZToJNDEgYmUgZjIg ZmYgZmYgZmYgICAgCW1vdiAgICAkMHhmZmZmZmZmMiwlcjE0ZAovdXNyL3NyYy9kZWJ1Zy9rZXJu ZWwtMi42LjMwL2xpbnV4LTIuNi4zMC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzoxMjE2Cgkg ICAgSVdfSVNfR0VUKGNtZCkgJiYKCSAgICBjb3B5X3RvX3VzZXIoYXJncCwgJml3ciwgc2l6ZW9m KHN0cnVjdCBpd3JlcSkpKQoJCXJldHVybiAtRUZBVUxUOwoKCXJldHVybiByZXQ7Cn0KZmZmZmZm ZmY4MTQ3ODM4NDoJNDggOGIgNTUgZDggICAgICAgICAgCW1vdiAgICAtMHgyOCglcmJwKSwlcmR4 CmZmZmZmZmZmODE0NzgzODg6CTY1IDQ4IDMzIDE0IDI1IDI4IDAwIAl4b3IgICAgJWdzOjB4Mjgs JXJkeApmZmZmZmZmZjgxNDc4MzhmOgkwMCAwMCAKZmZmZmZmZmY4MTQ3ODM5MToJNDQgODkgZjAg ICAgICAgICAgICAgCW1vdiAgICAlcjE0ZCwlZWF4CmZmZmZmZmZmODE0NzgzOTQ6CTc0IDA1ICAg ICAgICAgICAgICAgIAlqZSAgICAgZmZmZmZmZmY4MTQ3ODM5YiA8Y29tcGF0X3dleHRfaGFuZGxl X2lvY3RsKzB4Yzg+CmZmZmZmZmZmODE0NzgzOTY6CWU4IGVlIGVlIGJkIGZmICAgICAgIAljYWxs cSAgZmZmZmZmZmY4MTA1NzI4OSA8X19zdGFja19jaGtfZmFpbD4KZmZmZmZmZmY4MTQ3ODM5YjoJ NDggODMgYzQgNDAgICAgICAgICAgCWFkZCAgICAkMHg0MCwlcnNwCmZmZmZmZmZmODE0NzgzOWY6 CTViICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJieApmZmZmZmZmZjgxNDc4M2EwOgk0MSA1 YyAgICAgICAgICAgICAgICAJcG9wICAgICVyMTIKZmZmZmZmZmY4MTQ3ODNhMjoJNDEgNWQgICAg ICAgICAgICAgICAgCXBvcCAgICAlcjEzCmZmZmZmZmZmODE0NzgzYTQ6CTQxIDVlICAgICAgICAg ICAgICAgIAlwb3AgICAgJXIxNApmZmZmZmZmZjgxNDc4M2E2OgljOSAgICAgICAgICAgICAgICAg ICAJbGVhdmVxIApmZmZmZmZmZjgxNDc4M2E3OgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAg IAoKZmZmZmZmZmY4MTQ3ODNhOCA8d2V4dF9oYW5kbGVfaW9jdGw+Ogp3ZXh0X2hhbmRsZV9pb2N0 bCgpOgovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwtMi42LjMwL2xpbnV4LTIuNi4zMC54ODZfNjQvbmV0 L3dpcmVsZXNzL3dleHQuYzoxMTAzCglyZXR1cm4gcmV0Owp9CgppbnQgd2V4dF9oYW5kbGVfaW9j dGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdW5zaWduZWQgaW50IGNtZCwK CQkgICAgICB2b2lkIF9fdXNlciAqYXJnKQp7CmZmZmZmZmZmODE0NzgzYTg6CTU1ICAgICAgICAg ICAgICAgICAgIAlwdXNoICAgJXJicApmZmZmZmZmZjgxNDc4M2E5Ogk0OCA4OSBlNSAgICAgICAg ICAgICAJbW92ICAgICVyc3AsJXJicApmZmZmZmZmZjgxNDc4M2FjOgk0MSA1NiAgICAgICAgICAg ICAgICAJcHVzaCAgICVyMTQKZmZmZmZmZmY4MTQ3ODNhZToJNDEgNTUgICAgICAgICAgICAgICAg CXB1c2ggICAlcjEzCmZmZmZmZmZmODE0NzgzYjA6CTQxIDU0ICAgICAgICAgICAgICAgIAlwdXNo ICAgJXIxMgpmZmZmZmZmZjgxNDc4M2IyOgk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVy YngKZmZmZmZmZmY4MTQ3ODNiMzoJNDggODMgZWMgMTAgICAgICAgICAgCXN1YiAgICAkMHgxMCwl cnNwCmZmZmZmZmZmODE0NzgzYjc6CWU4IDQ0IDlhIGI5IGZmICAgICAgIAljYWxscSAgZmZmZmZm ZmY4MTAxMWUwMCA8bWNvdW50PgovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwtMi42LjMwL2xpbnV4LTIu Ni4zMC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzoxMTA3CglzdHJ1Y3QgaXdfcmVxdWVzdF9p bmZvIGluZm8gPSB7IC5jbWQgPSBjbWQsIC5mbGFncyA9IDAgfTsKCWludCByZXQ7CgoJcmV0ID0g d2V4dF9pb2N0bF9kaXNwYXRjaChuZXQsIGlmciwgY21kLCAmaW5mbywKZmZmZmZmZmY4MTQ3ODNi YzoJNDkgYzcgYzEgYjQgODAgNDcgODEgCW1vdiAgICAkMHhmZmZmZmZmZjgxNDc4MGI0LCVyOQpm ZmZmZmZmZjgxNDc4M2MzOgk0OSBjNyBjMCAxMCA4ZCA0NyA4MSAJbW92ICAgICQweGZmZmZmZmZm ODE0NzhkMTAsJXI4Ci91c3Ivc3JjL2RlYnVnL2tlcm5lbC0yLjYuMzAvbGludXgtMi42LjMwLng4 Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5jOjExMDMKCXJldHVybiByZXQ7Cn0KCmludCB3ZXh0X2hh bmRsZV9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB1bnNpZ25lZCBp bnQgY21kLAoJCSAgICAgIHZvaWQgX191c2VyICphcmcpCnsKZmZmZmZmZmY4MTQ3ODNjYToJNDkg ODkgY2QgICAgICAgICAgICAgCW1vdiAgICAlcmN4LCVyMTMKL3Vzci9zcmMvZGVidWcva2VybmVs LTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTEwNwoJc3Ry dWN0IGl3X3JlcXVlc3RfaW5mbyBpbmZvID0geyAuY21kID0gY21kLCAuZmxhZ3MgPSAwIH07Cglp bnQgcmV0OwoKCXJldCA9IHdleHRfaW9jdGxfZGlzcGF0Y2gobmV0LCBpZnIsIGNtZCwgJmluZm8s CmZmZmZmZmZmODE0NzgzY2Q6CTQ4IDhkIDRkIGQwICAgICAgICAgIAlsZWEgICAgLTB4MzAoJXJi cCksJXJjeAovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwtMi42LjMwL2xpbnV4LTIuNi4zMC54ODZfNjQv bmV0L3dpcmVsZXNzL3dleHQuYzoxMTAzCglyZXR1cm4gcmV0Owp9CgppbnQgd2V4dF9oYW5kbGVf aW9jdGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdW5zaWduZWQgaW50IGNt ZCwKCQkgICAgICB2b2lkIF9fdXNlciAqYXJnKQp7CmZmZmZmZmZmODE0NzgzZDE6CTQ4IDg5IGYz ICAgICAgICAgICAgIAltb3YgICAgJXJzaSwlcmJ4CmZmZmZmZmZmODE0NzgzZDQ6CTY1IDQ4IDhi IDA0IDI1IDI4IDAwIAltb3YgICAgJWdzOjB4MjgsJXJheApmZmZmZmZmZjgxNDc4M2RiOgkwMCAw MCAKZmZmZmZmZmY4MTQ3ODNkZDoJNDggODkgNDUgZDggICAgICAgICAgCW1vdiAgICAlcmF4LC0w eDI4KCVyYnApCmZmZmZmZmZmODE0NzgzZTE6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAg JWVheCwlZWF4CmZmZmZmZmZmODE0NzgzZTM6CTQxIDg5IGQ0ICAgICAgICAgICAgIAltb3YgICAg JWVkeCwlcjEyZAovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwtMi42LjMwL2xpbnV4LTIuNi4zMC54ODZf NjQvbmV0L3dpcmVsZXNzL3dleHQuYzoxMTA0CglzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvIGluZm8g PSB7IC5jbWQgPSBjbWQsIC5mbGFncyA9IDAgfTsKZmZmZmZmZmY4MTQ3ODNlNjoJNjYgODkgNTUg ZDAgICAgICAgICAgCW1vdiAgICAlZHgsLTB4MzAoJXJicCkKZmZmZmZmZmY4MTQ3ODNlYToJNjYg YzcgNDUgZDIgMDAgMDAgICAgCW1vdncgICAkMHgwLC0weDJlKCVyYnApCi91c3Ivc3JjL2RlYnVn L2tlcm5lbC0yLjYuMzAvbGludXgtMi42LjMwLng4Nl82NC9uZXQvd2lyZWxlc3Mvd2V4dC5jOjEx MDcKCWludCByZXQ7CgoJcmV0ID0gd2V4dF9pb2N0bF9kaXNwYXRjaChuZXQsIGlmciwgY21kLCAm aW5mbywKZmZmZmZmZmY4MTQ3ODNmMDoJZTggNWUgZmQgZmYgZmYgICAgICAgCWNhbGxxICBmZmZm ZmZmZjgxNDc4MTUzIDx3ZXh0X2lvY3RsX2Rpc3BhdGNoPgovdXNyL3NyYy9kZWJ1Zy9rZXJuZWwt Mi42LjMwL2xpbnV4LTIuNi4zMC54ODZfNjQvbmV0L3dpcmVsZXNzL3dleHQuYzoxMTEwCgkJCQkg IGlvY3RsX3N0YW5kYXJkX2NhbGwsCgkJCQkgIGlvY3RsX3ByaXZhdGVfY2FsbCk7CglpZiAocmV0 ID49IDAgJiYKZmZmZmZmZmY4MTQ3ODNmNToJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAl ZWF4LCVlYXgKL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0 L25ldC93aXJlbGVzcy93ZXh0LmM6MTEwNwoJCSAgICAgIHZvaWQgX191c2VyICphcmcpCnsKCXN0 cnVjdCBpd19yZXF1ZXN0X2luZm8gaW5mbyA9IHsgLmNtZCA9IGNtZCwgLmZsYWdzID0gMCB9OwoJ aW50IHJldDsKCglyZXQgPSB3ZXh0X2lvY3RsX2Rpc3BhdGNoKG5ldCwgaWZyLCBjbWQsICZpbmZv LApmZmZmZmZmZjgxNDc4M2Y3Ogk0MSA4OSBjNiAgICAgICAgICAgICAJbW92ICAgICVlYXgsJXIx NGQKL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93 aXJlbGVzcy93ZXh0LmM6MTExMAoJCQkJICBpb2N0bF9zdGFuZGFyZF9jYWxsLAoJCQkJICBpb2N0 bF9wcml2YXRlX2NhbGwpOwoJaWYgKHJldCA+PSAwICYmCmZmZmZmZmZmODE0NzgzZmE6CTc4IDIy ICAgICAgICAgICAgICAgIAlqcyAgICAgZmZmZmZmZmY4MTQ3ODQxZSA8d2V4dF9oYW5kbGVfaW9j dGwrMHg3Nj4KZmZmZmZmZmY4MTQ3ODNmYzoJNDEgODAgZTQgMDEgICAgICAgICAgCWFuZCAgICAk MHgxLCVyMTJiCmZmZmZmZmZmODE0Nzg0MDA6CTc0IDFjICAgICAgICAgICAgICAgIAlqZSAgICAg ZmZmZmZmZmY4MTQ3ODQxZSA8d2V4dF9oYW5kbGVfaW9jdGwrMHg3Nj4KL3Vzci9zcmMvZGVidWcv a2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTEx MgoJICAgIElXX0lTX0dFVChjbWQpICYmCgkgICAgY29weV90b191c2VyKGFyZywgaWZyLCBzaXpl b2Yoc3RydWN0IGl3cmVxKSkpCmZmZmZmZmZmODE0Nzg0MDI6CWJhIDIwIDAwIDAwIDAwICAgICAg IAltb3YgICAgJDB4MjAsJWVkeApmZmZmZmZmZjgxNDc4NDA3Ogk0OCA4OSBkZSAgICAgICAgICAg ICAJbW92ICAgICVyYngsJXJzaQpmZmZmZmZmZjgxNDc4NDBhOgk0YyA4OSBlZiAgICAgICAgICAg ICAJbW92ICAgICVyMTMsJXJkaQpmZmZmZmZmZjgxNDc4NDBkOgllOCAwZSA1MCBkYiBmZiAgICAg ICAJY2FsbHEgIGZmZmZmZmZmODEyMmQ0MjAgPGNvcHlfdG9fdXNlcj4KL3Vzci9zcmMvZGVidWcv a2VybmVsLTIuNi4zMC9saW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTEx MAoJaW50IHJldDsKCglyZXQgPSB3ZXh0X2lvY3RsX2Rpc3BhdGNoKG5ldCwgaWZyLCBjbWQsICZp bmZvLAoJCQkJICBpb2N0bF9zdGFuZGFyZF9jYWxsLAoJCQkJICBpb2N0bF9wcml2YXRlX2NhbGwp OwoJaWYgKHJldCA+PSAwICYmCmZmZmZmZmZmODE0Nzg0MTI6CTQ4IDg1IGMwICAgICAgICAgICAg IAl0ZXN0ICAgJXJheCwlcmF4CmZmZmZmZmZmODE0Nzg0MTU6CWI4IGYyIGZmIGZmIGZmICAgICAg IAltb3YgICAgJDB4ZmZmZmZmZjIsJWVheApmZmZmZmZmZjgxNDc4NDFhOgk0NCAwZiA0NSBmMCAg ICAgICAgICAJY21vdm5lICVlYXgsJXIxNGQKL3Vzci9zcmMvZGVidWcva2VybmVsLTIuNi4zMC9s aW51eC0yLjYuMzAueDg2XzY0L25ldC93aXJlbGVzcy93ZXh0LmM6MTExNgoJICAgIElXX0lTX0dF VChjbWQpICYmCgkgICAgY29weV90b191c2VyKGFyZywgaWZyLCBzaXplb2Yoc3RydWN0IGl3cmVx KSkpCgkJcmV0dXJuIC1FRkFVTFQ7CgoJcmV0dXJuIHJldDsKfQpmZmZmZmZmZjgxNDc4NDFlOgk0 OCA4YiA1NSBkOCAgICAgICAgICAJbW92ICAgIC0weDI4KCVyYnApLCVyZHgKZmZmZmZmZmY4MTQ3 ODQyMjoJNjUgNDggMzMgMTQgMjUgMjggMDAgCXhvciAgICAlZ3M6MHgyOCwlcmR4CmZmZmZmZmZm ODE0Nzg0Mjk6CTAwIDAwIApmZmZmZmZmZjgxNDc4NDJiOgk0NCA4OSBmMCAgICAgICAgICAgICAJ bW92ICAgICVyMTRkLCVlYXgKZmZmZmZmZmY4MTQ3ODQyZToJNzQgMDUgICAgICAgICAgICAgICAg CWplICAgICBmZmZmZmZmZjgxNDc4NDM1IDx3ZXh0X2hhbmRsZV9pb2N0bCsweDhkPgpmZmZmZmZm ZjgxNDc4NDMwOgllOCA1NCBlZSBiZCBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODEwNTcyODkg PF9fc3RhY2tfY2hrX2ZhaWw+CmZmZmZmZmZmODE0Nzg0MzU6CTViICAgICAgICAgICAgICAgICAg IAlwb3AgICAgJXJieApmZmZmZmZmZjgxNDc4NDM2Ogk1ZSAgICAgICAgICAgICAgICAgICAJcG9w ICAgICVyc2kKZmZmZmZmZmY4MTQ3ODQzNzoJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICAl cmJ4CmZmZmZmZmZmODE0Nzg0Mzg6CTQxIDVjICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxMgpm ZmZmZmZmZjgxNDc4NDNhOgk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAgICVyMTMKZmZmZmZm ZmY4MTQ3ODQzYzoJNDEgNWUgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE0CmZmZmZmZmZmODE0 Nzg0M2U6CWM5ICAgICAgICAgICAgICAgICAgIAlsZWF2ZXEgCmZmZmZmZmZmODE0Nzg0M2Y6CWMz ICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCg== --0016e6d7e92406deb104756692f7--