<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>148423</bug_id>
          
          <creation_ts>2006-09-20 15:23 0000</creation_ts>
          <short_desc>app-laptop/hdapsd kernel patch doesn&apos;t apply to 2.6.18</short_desc>
          <delta_ts>2006-12-05 03:41:02 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Linux</product>
          <component>Applications</component>
          <version>2006.1</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>148429</blocked>
          
          <everconfirmed>1</everconfirmed>
          <reporter>ed@catmur.co.uk</reporter>
          <assigned_to>uberlord@gentoo.org</assigned_to>
          <cc>anton.bugs@gmail.com</cc>
    
    <cc>linuxuser330250@gmx.net</cc>
    
    <cc>mobile@gentoo.org</cc>
    
    <cc>rl03@gentoo.org</cc>

      

      
          <long_desc isprivate="0">
            <who>ed@catmur.co.uk</who>
            <bug_when>2006-09-20 15:23:40 0000</bug_when>
            <thetext>Kernel patch for 2.6.17 in app-laptop/hdaps doesn&apos;t apply to 2.6.18; ebuild --config doesn&apos;t try to apply it.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>ed@catmur.co.uk</who>
            <bug_when>2006-09-20 15:24:50 0000</bug_when>
            <thetext>Created an attachment (id=97581)
hdaps_protect-2.6.18.patch

Current patch massaged to apply to 2.6.18. No idea if it&apos;s correct or not; haven&apos;t even compiled it yet.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>uberlord@gentoo.org</who>
            <bug_when>2006-09-21 09:03:43 0000</bug_when>
            <thetext>Fails to compile.
RQ_SCSI_DONE and RQ_SCSI_BUSY are no longer defined. We can easily redefine them, but there are other issues with struct changes.

I&apos;ll monitor the hdaps lists for new patches, as I don&apos;t have the time for this right now.

BTW, thanks for your effort :)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>uberlord@gentoo.org</who>
            <bug_when>2006-09-21 09:10:50 0000</bug_when>
            <thetext>http://sourceforge.net/mailarchive/forum.php?thread_id=30578933&amp;forum_id=45521

Heh, way beyond my scope. We probably won&apos;t see a 2.6.18 patch for some time :(</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>ed@catmur.co.uk</who>
            <bug_when>2006-09-24 14:55:20 0000</bug_when>
            <thetext>Created an attachment (id=97981)
hdaps_protect-2.6.18.patch

Ugh. Here&apos;s a patch with the scsi stuff disabled, so it will only work on ide disks.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>uberlord@gentoo.org</who>
            <bug_when>2006-09-24 23:57:30 0000</bug_when>
            <thetext>Ed, you so are going to hate me ..... I cannot test this as my laptop disks have to go through the SCSI interface to work correctly with DVD&apos;s and burning CD&apos;s :(

Hopefully some other thinkpad user with IDE disks can test and comment here.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>dsd@gentoo.org</who>
            <bug_when>2006-10-15 13:49:43 0000</bug_when>
            <thetext>removing block on 148429: hdapsd is not in stable tree</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>linuxuser330250@gmx.net</who>
            <bug_when>2006-11-16 02:44:12 0000</bug_when>
            <thetext>Hi!
It really is a pain in the ass that the hard park patch is not in the official kernel. Why? Isn&apos;t it to be considered as &quot;generally a good idea&quot;?

Anyway, there is also a newer hdapsd out there (look at http://www.thinkwiki.org/wiki/HDAPS).
You can find it at: ftp://rohrmoser-engineering.de/pub/hdapsd-20061007.c

So, I applied your patch to the stable gentoo kernel: 2.6.18-gentoo-r2 and compiled it. No errors so far, I will boot it and find out if the HDD is actually parking on axis movement.

My system is a IBM ThinkPad R51 1830-DG4 (http://www.thinkwiki.org/wiki/1830-DG4) which is an IDE-only system.

Will reboot into 2.6.18-gentoo-r2-hdaps_patch soon...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>linuxuser330250@gmx.net</who>
            <bug_when>2006-11-16 03:00:36 0000</bug_when>
            <thetext>I&apos;m now running 2.6.18-gentoo-r2-hdaps_patch and it works fine so far. tp_smapi compiled with USE=&quot;hdaps&quot;, hdaps modules loaded, hdapsd started, everything looks good.

When I flip the entire notebook backwards (in direction to the display) I can hear the HDD parking. It does that IMHO a little less often than it used to with the 2.6.17 kernel.

Is there any other way to check this?

I hope that helped. BTW, keep up the great work! And thanks, Andreas.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>ed@catmur.co.uk</who>
            <bug_when>2006-11-16 04:49:24 0000</bug_when>
            <thetext>(In reply to comment #8)
&gt; When I flip the entire notebook backwards (in direction to the display) I can
&gt; hear the HDD parking. It does that IMHO a little less often than it used to
&gt; with the 2.6.17 kernel.
&gt; 
&gt; Is there any other way to check this?

If you&apos;re in KDE or GNOME, use khdapsmonitor, khdapsmon or gnome-hdaps-applet. (An ebuild for the latter is in my overlay; see http://sources.catmur.co.uk/viewcvs/svn/gentoo/tree/app-laptop/gnome-hdaps-applet/ .) Alternatively, just watch cat /sys/block/hda/queue/protect.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>linuxuser330250@gmx.net</who>
            <bug_when>2006-11-16 06:17:25 0000</bug_when>
            <thetext>Oh, I almost forgot about that... I used khdapsmon. I just didn&apos;t think about it anymore because I normally don&apos;t want the taskbar area filled up with icons. 

The HDD heads get parked when they should, so it is working.

Any idea if or when this patch will be available through &quot;ebuild hdapsd --config&quot;?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>uberlord@gentoo.org</who>
            <bug_when>2006-11-16 06:21:36 0000</bug_when>
            <thetext>(In reply to comment #10)
&gt; Any idea if or when this patch will be available through &quot;ebuild hdapsd
&gt; --config&quot;?

I won&apos;t put it in as I can only test with SCSI, which doesn&apos;t work anymore in 2.6.18. Only IDE works.

I don&apos;t have the time or the knowledge to make SCSI work as they seem to be changing the SCSI subsystem a fair bit atm.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>linuxuser330250@gmx.net</who>
            <bug_when>2006-11-23 21:49:50 0000</bug_when>
            <thetext>Ok, so now there is an _experimental_ patch for 2.6.18.3 that supports SCSI/SATA as well as IDE.
My source of information: http://www.thinkwiki.org/wiki/HDAPS

The patch: http://article.gmane.org/gmane.linux.drivers.hdaps.devel/943

Hopefully that works for you all! (I&apos;m very happy with the IDE-only version right now...)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jakub@gentoo.org</who>
            <bug_when>2006-11-25 00:29:34 0000</bug_when>
            <thetext>*** Bug 156171 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>uberlord@gentoo.org</who>
            <bug_when>2006-12-05 03:41:02 0000</bug_when>
            <thetext>-r1 added with patches for 2.6.18 (untested by me) and 2.6.19 (confirmed working)</thetext>
          </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97581</attachid>
            <date>2006-09-20 15:24 0000</date>
            <desc>hdaps_protect-2.6.18.patch</desc>
            <filename>hdaps_protect-2.6.18.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTnVyIGxpbnV4LTIuNi4xNy4xL2Jsb2NrL2xsX3J3X2Jsay5jIGxpbnV4LTIuNi4xNy4x
LmhkYXBzL2Jsb2NrL2xsX3J3X2Jsay5jCi0tLSBsaW51eC0yLjYuMTcuMS9ibG9jay9sbF9yd19i
bGsuYwkyMDA2LTA2LTI0IDIzOjQ5OjAyLjE2OTY1NDAwMCArMDIwMAorKysgbGludXgtMi42LjE3
LjEuaGRhcHMvYmxvY2svbGxfcndfYmxrLmMJMjAwNi0wNi0yNSAwMDoyNzoyNy4yODE3MTUyNTAg
KzAyMDAKQEAgLTM5LDYgKzM5LDggQEAKIHN0YXRpYyB2b2lkIGRyaXZlX3N0YXRfYWNjdChzdHJ1
Y3QgcmVxdWVzdCAqcnEsIGludCBucl9zZWN0b3JzLCBpbnQgbmV3X2lvKTsKIHN0YXRpYyB2b2lk
IGluaXRfcmVxdWVzdF9mcm9tX2JpbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgYmlvICpi
aW8pOwogc3RhdGljIGludCBfX21ha2VfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVj
dCBiaW8gKmJpbyk7CitzdGF0aWMgaW50IGJsa19wcm90ZWN0X3JlZ2lzdGVyKHJlcXVlc3RfcXVl
dWVfdCAqcSk7CitzdGF0aWMgdm9pZCBibGtfcHJvdGVjdF91bnJlZ2lzdGVyKHJlcXVlc3RfcXVl
dWVfdCAqcSk7CiAKIC8qCiAgKiBGb3IgdGhlIGFsbG9jYXRlZCByZXF1ZXN0IHRhYmxlcwpAQCAt
MzU5LDYgKzM2MSwxOCBAQAogCiBFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9pc3N1ZV9mbHVzaF9m
bik7CiAKK3ZvaWQgYmxrX3F1ZXVlX2lzc3VlX3Byb3RlY3RfZm4ocmVxdWVzdF9xdWV1ZV90ICpx
LCBpc3N1ZV9wcm90ZWN0X2ZuICppcGYpCit7CisgICAgICAgcS0+aXNzdWVfcHJvdGVjdF9mbiA9
IGlwZjsKK30KK0VYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX2lzc3VlX3Byb3RlY3RfZm4pOworCit2
b2lkIGJsa19xdWV1ZV9pc3N1ZV91bnByb3RlY3RfZm4ocmVxdWVzdF9xdWV1ZV90ICpxLCBpc3N1
ZV91bnByb3RlY3RfZm4gKml1ZikKK3sKKyAgICAgICBxLT5pc3N1ZV91bnByb3RlY3RfZm4gPSBp
dWY7Cit9CitFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9pc3N1ZV91bnByb3RlY3RfZm4pOworCiAv
KgogICogQ2FjaGUgZmx1c2hpbmcgZm9yIG9yZGVyZWQgd3JpdGVzIGhhbmRsaW5nCiAgKi8KQEAg
LTM5MjgsNiArMzk0Miw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJYmxrX3Byb3RlY3RfcmVn
aXN0ZXIocSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5MzYsNiArMzk1MSw3IEBACiAJcmVxdWVz
dF9xdWV1ZV90ICpxID0gZGlzay0+cXVldWU7CiAKIAlpZiAocSAmJiBxLT5yZXF1ZXN0X2ZuKSB7
CisJCWJsa19wcm90ZWN0X3VucmVnaXN0ZXIocSk7CiAJCWVsdl91bnJlZ2lzdGVyX3F1ZXVlKHEp
OwogCiAJCWtvYmplY3RfdWV2ZW50KCZxLT5rb2JqLCBLT0JKX1JFTU9WRSk7CkBAIC0zOTQzLDMg
KzM5NTksMTEyIEBACiAJCWtvYmplY3RfcHV0KCZkaXNrLT5rb2JqKTsKIAl9CiB9CisKKy8qCisg
KiBSZXN0b3JlIHRoZSB1bnBsdWdnaW5nIHRpbWVyIHRoYXQgd2UgcmUtdXNlZAorICogdG8gaW1w
bGVtZW50IHRoZSBxdWV1ZSBmcmVlemUgdGltZW91dC4uLgorICovCitzdGF0aWMgdm9pZCBibGtf
dW5mcmVlemVfd29yayh2b2lkICpkYXRhKQoreworICAgICAgIHJlcXVlc3RfcXVldWVfdCAqcSA9
IChyZXF1ZXN0X3F1ZXVlX3QgKikgZGF0YTsKKworICAgICAgIElOSVRfV09SSygmcS0+dW5wbHVn
X3dvcmssIGJsa191bnBsdWdfd29yaywgcSk7CisgICAgICAgcS0+dW5wbHVnX3RpbWVyLmZ1bmN0
aW9uID0gYmxrX3VucGx1Z190aW1lb3V0OworCisgICAgICAgcS0+aXNzdWVfdW5wcm90ZWN0X2Zu
KHEpOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIHF1ZXVlIGZyZWV6ZSB0aW1lb3V0IGV4
cGlyZXMuLi4KKyAqLworc3RhdGljIHZvaWQgYmxrX3VuZnJlZXplX3RpbWVvdXQodW5zaWduZWQg
bG9uZyBkYXRhKQoreworICAgICAgIHJlcXVlc3RfcXVldWVfdCAqcSA9IChyZXF1ZXN0X3F1ZXVl
X3QgKikgZGF0YTsKKyAgICAgICBrYmxvY2tkX3NjaGVkdWxlX3dvcmsoJnEtPnVucGx1Z193b3Jr
KTsKK30KKworLyoKKyAqIFRoZSBsb3dlciBsZXZlbCBkcml2ZXIgcGFya3MgYW5kIGZyZWV6ZXMg
dGhlIHF1ZXVlLCBhbmQgdGhpcyBibG9jayBsYXllcgorICogIGZ1bmN0aW9uIHNldHMgdXAgdGhl
IGZyZWV6ZSB0aW1lb3V0IHRpbWVyIG9uIHJldHVybi4gSWYgdGhlIHF1ZXVlIGlzCisgKiAgYWxy
ZWFkeSBmcm96ZW4gdGhlbiB0aGlzIGlzIGNhbGxlZCB0byBleHRlbmQgdGhlIHRpbWVyLi4uCisg
Ki8KK3ZvaWQgYmxrX2ZyZWV6ZV9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIGludCBzZWNvbmRz
KQoreworICAgICAgIC8qIHNldC9yZXNldCB0aGUgdGltZXIgKi8KKyAgICAgICBtb2RfdGltZXIo
JnEtPnVucGx1Z190aW1lciwgbXNlY3NfdG9famlmZmllcyhzZWNvbmRzKjEwMDApICsgamlmZmll
cyk7CisKKyAgICAgICAvKiB3ZSBkbyB0aGlzIGV2ZXJ5IGl0ZXJhdGlvbiAtIGlzIHRoaXMgc2Fu
ZT8gKi8KKyAgICAgICBJTklUX1dPUksoJnEtPnVucGx1Z193b3JrLCBibGtfdW5mcmVlemVfd29y
aywgcSk7CisgICAgICAgcS0+dW5wbHVnX3RpbWVyLmZ1bmN0aW9uID0gYmxrX3VuZnJlZXplX3Rp
bWVvdXQ7Cit9CisKKy8qCisgKiBXaGVuIHJlYWRpbmcgdGhlICdwcm90ZWN0JyBhdHRyaWJ1dGUs
IHdlIHJldHVybiBib29sZWFuIGZyb3plbiBvciBhY3RpdmUKKyAqIHRvZG86CisgKiAtIG1heWJl
IHdlIHNob3VsZCByZXR1cm4gc2Vjb25kcyByZW1haW5pbmcgaW5zdGVhZD8KKyAqLworc3RhdGlj
IHNzaXplX3QgcXVldWVfcHJvdGVjdF9zaG93KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFy
ICpwYWdlKQoreworICAgICAgIHJldHVybiBxdWV1ZV92YXJfc2hvdyhibGtfcXVldWVfc3RvcHBl
ZChxKSwgKHBhZ2UpKTsKK30KKworLyoKKyAqIFdoZW4gd3JpdGluZyB0aGUgJ3Byb3RlY3QnIGF0
dHJpYnV0ZSwgaW5wdXQgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzCisgKiB0byBmcmVlemUgdGhl
IHF1ZXVlIGZvci4gV2UgY2FsbCBhIGxvd2VyIGxldmVsIGhlbHBlciBmdW5jdGlvbiB0bworICog
cGFyayB0aGUgaGVhZHMgYW5kIGZyZWV6ZS9ibG9jayB0aGUgcXVldWUsIHRoZW4gd2UgbWFrZSBh
IGJsb2NrIGxheWVyCisgKiBjYWxsIHRvIHNldHVwIHRoZSB0aGF3IHRpbWVvdXQuIElmIGlucHV0
IGlzIDAsIHRoZW4gd2UgdGhhdyB0aGUgcXVldWUuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHF1ZXVl
X3Byb3RlY3Rfc3RvcmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNvbnN0IGNoYXIgKnBhZ2Us
IHNpemVfdCBjb3VudCkKK3sKKyAgICAgICB1bnNpZ25lZCBsb25nIGZyZWV6ZSA9IDA7CisgICAg
ICAgcXVldWVfdmFyX3N0b3JlKCZmcmVlemUsIHBhZ2UsIGNvdW50KTsKKworICAgICAgIGlmKGZy
ZWV6ZT4wKSB7CisvKiBQYXJrIGFuZCBmcmVlemUgKi8KKwkgICAgICAgaWYgKCFibGtfcXVldWVf
c3RvcHBlZChxKSkKKwkJICAgICAgIHEtPmlzc3VlX3Byb3RlY3RfZm4ocSk7CisvKiBzZXQgLyBy
ZXNldCB0aGUgdGhhdyB0aW1lciAqLworCSAgICAgICBibGtfZnJlZXplX3F1ZXVlKHEsIGZyZWV6
ZSk7CisgICAgICAgfQorICAgICAgIGVsc2UKKwkgICAgICAgYmxrX3VuZnJlZXplX3RpbWVvdXQo
KHVuc2lnbmVkIGxvbmcpIHEpOworCisgICAgICAgcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMg
c3RydWN0IHF1ZXVlX3N5c2ZzX2VudHJ5IHF1ZXVlX3Byb3RlY3RfZW50cnkgPSB7CisgICAgICAg
LmF0dHIgPSB7Lm5hbWUgPSAicHJvdGVjdCIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwK
KyAgICAgICAuc2hvdyA9IHF1ZXVlX3Byb3RlY3Rfc2hvdywKKyAgICAgICAuc3RvcmUgPSBxdWV1
ZV9wcm90ZWN0X3N0b3JlLAorfTsKKworc3RhdGljIGludCBibGtfcHJvdGVjdF9yZWdpc3Rlcihy
ZXF1ZXN0X3F1ZXVlX3QgKnEpCit7CisJaW50IGVycm9yID0gMDsKKworLyogY2hlY2sgdGhhdCB0
aGUgbG93ZXIgbGV2ZWwgZHJpdmVyIGhhcyBhIHByb3RlY3QgaGFuZGxlciAqLworCWlmICghcS0+
aXNzdWVfcHJvdGVjdF9mbikKKwkJcmV0dXJuIDE7CisKKy8qIGNyZWF0ZSB0aGUgYXR0cmlidXRl
ICovCisJZXJyb3IgPSBzeXNmc19jcmVhdGVfZmlsZSgmcS0+a29iaiwgJnF1ZXVlX3Byb3RlY3Rf
ZW50cnkuYXR0cik7CisJaWYoZXJyb3IpeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJi
bGtfcHJvdGVjdF9yZWdpc3RlcigpOiBmYWlsZWQgdG8gY3JlYXRlIHByb3RlY3QgcXVldWUgYXR0
cmlidXRlIVxuIik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlrb2JqZWN0X2dldCgmcS0+a29i
aik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19wcm90ZWN0X3VucmVnaXN0ZXIo
cmVxdWVzdF9xdWV1ZV90ICpxKQoreworLyogY2hlY2sgdGhhdCB0aGUgbG93ZXIgbGV2ZWwgZHJp
dmVyIGhhcyBhIHByb3RlY3QgaGFuZGxlciAqLworCWlmICghcS0+aXNzdWVfcHJvdGVjdF9mbikK
KwkJcmV0dXJuOworCisvKiByZW1vdmUgdGhlIGF0dHJpYnV0ZSAqLworCXN5c2ZzX3JlbW92ZV9m
aWxlKCZxLT5rb2JqLCZxdWV1ZV9wcm90ZWN0X2VudHJ5LmF0dHIpOworCWtvYmplY3RfcHV0KCZx
LT5rb2JqKTsKK30KZGlmZiAtTnVyIGxpbnV4LTIuNi4xNy4xL2RyaXZlcnMvaWRlL2lkZS1kaXNr
LmMgbGludXgtMi42LjE3LjEuaGRhcHMvZHJpdmVycy9pZGUvaWRlLWRpc2suYwotLS0gbGludXgt
Mi42LjE3LjEvZHJpdmVycy9pZGUvaWRlLWRpc2suYwkyMDA2LTA2LTI0IDIzOjQ5OjAyLjE4MTY1
NTAwMCArMDIwMAorKysgbGludXgtMi42LjE3LjEuaGRhcHMvZHJpdmVycy9pZGUvaWRlLWRpc2su
YwkyMDA2LTA2LTI1IDAwOjQ2OjA5LjY0Nzg1ODc1MCArMDIwMApAQCAtNzIsNiArNzIsMTAgQEAK
ICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAoraW50IGlkZWRp
c2tfcHJvdGVjdF9tZXRob2QgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKHByb3RlY3RfbWV0aG9k
LCBpZGVkaXNrX3Byb3RlY3RfbWV0aG9kLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhw
cm90ZWN0X21ldGhvZCwgImhkYXBzIGRpc2sgcHJvdGVjdGlvbiBtZXRob2QgKDA9YXV0b2RldGVj
dCwgMT11bmxvYWQsIDI9c3RhbmRieSkiKTsKKwogc3RydWN0IGlkZV9kaXNrX29iaiB7CiAJaWRl
X2RyaXZlX3QJKmRyaXZlOwogCWlkZV9kcml2ZXJfdAkqZHJpdmVyOwpAQCAtNzMwLDYgKzczNCwx
NTQgQEAKIH0KIAogLyoKKyAqIHRvZG86CisgKiAgLSB3ZSBmcmVlemUgdGhlIHF1ZXVlIHJlZ2Fy
ZGxlc3Mgb2Ygc3VjY2VzcyBhbmQgcmVseSBvbiB0aGUgCisgKiAgICBpZGVfcHJvdGVjdF9xdWV1
ZSBmdW5jdGlvbiB0byB0aGF3IGltbWVkaWF0ZWx5IGlmIHRoZSBjb21tYW5kCisgKiAgICBmYWls
ZWQgKHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgbGliYXRhIGhhbmRsZXIpLi4uIHNob3VsZCAK
KyAqICAgIHdlIGFsc28gaW5zcGVjdCBoZXJlPworICovCit2b2lkIGlkZV9lbmRfcHJvdGVjdF9y
cShzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcikKK3sKKwlzdHJ1Y3QgY29tcGxldGlvbiAq
d2FpdGluZyA9IHJxLT53YWl0aW5nOworCisJLyogc3BpbiBsb2NrIGFscmVhZHkgYWNjcXVpcmVk
ICovCisJaWYgKCFibGtfcXVldWVfc3RvcHBlZChycS0+cSkpCisJCWJsa19zdG9wX3F1ZXVlKHJx
LT5xKTsKKworCWNvbXBsZXRlKHdhaXRpbmcpOworfQorCitpbnQgaWRlX3VucHJvdGVjdF9xdWV1
ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpCit7CisJc3RydWN0IHJlcXVlc3QJcnE7DQorCXVuc2lnbmVk
IGxvbmcgZmxhZ3M7CisJaW50CQlwZW5kaW5nID0gMCwgcmMgPSAwOw0KKwlpZGVfZHJpdmVfdCAJ
KmRyaXZlID0gcS0+cXVldWVkYXRhOw0KKwl1OCAJCWFyZ3NbN10sICphcmdidWYgPSBhcmdzOw0K
KworCWlmICghYmxrX3F1ZXVlX3N0b3BwZWQocSkpCisJCXJldHVybiAtRUlPOworCisJLyogQXJl
IHRoZXJlIGFueSBwZW5kaW5nIGpvYnMgb24gdGhlIHF1ZXVlPyAqLw0KKwlwZW5kaW5nID0gKChx
LT5ycS5jb3VudFtSRUFEXSA+IDApIHx8IChxLT5ycS5jb3VudFtXUklURV0gPiAwKSkgPyAxIDog
MDsNCisJCisJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOworCWJsa19z
dGFydF9xdWV1ZShxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZs
YWdzKTsKKworCS8qIFRoZSB1bmxvYWQgZmVhdHVyZSBvZiB0aGUgSURMRV9JTU1FRElBVEUgY29t
bWFuZA0KKwkgICB0ZW1wb3JhcmlseSBkaXNhYmxlcyBIRCBwb3dlciBtYW5hZ2VtZW50IGZyb20g
c3Bpbm5pbmcgZG93bg0KKwkgICB0aGUgZGlzay4gQW55IG90aGVyIGNvbW1hbmQgd2lsbCByZWVu
YWJsZSBIRCBwbSwgc28sIGlmDQorCSAgIHRoZXJlIGFyZSBubyBwZW5kaW5nIGpvYnMgb24gdGhl
IHF1ZXVlLCBhbm90aGVyDQorCSAgIENIRUNLX1BPV0VSX01PREUxIGNvbW1hbmQgd2l0aG91dCB0
aGUgdW5sb2FkIGZlYXR1cmUgc2hvdWxkIGRvDQorCSAgIGp1c3QgZmluZS4gKi8NCisJaWYgKCFw
ZW5kaW5nKSB7DQorCQlwcmludGsoS0VSTl9ERUJVRyAiaWRlX3VucHJvdGVjdF9xdWV1ZSgpOiBO
byBwZW5kaW5nIEkvTywgcmUtZW5hYmxpbmcgcG93ZXIgbWFuYWdlbWVudC4uXG4iKTsKKwkJbWVt
c2V0KGFyZ3MsIDAsIHNpemVvZihhcmdzKSk7DQorCQlhcmdidWZbMF0gPSAweGU1OyAvKiBDSEVD
S19QT1dFUl9NT0RFMSAqLw0KKwkJaWRlX2luaXRfZHJpdmVfY21kKCZycSk7DQorCQlycS5mbGFn
cyA9IFJFUV9EUklWRV9UQVNLOw0KKwkJcnEuYnVmZmVyID0gYXJnYnVmOw0KKwkJcmMgPSBpZGVf
ZG9fZHJpdmVfY21kKGRyaXZlLCAmcnEsIGlkZV9oZWFkX3dhaXQpOw0KKwl9CisNCisJcmV0dXJu
IHJjOw0KK30KKworaW50IGlkZV9wcm90ZWN0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSwgaW50
IHVubG9hZCkKK3sKKwlpZGVfZHJpdmVfdCAJKmRyaXZlID0gcS0+cXVldWVkYXRhOworCXN0cnVj
dCByZXF1ZXN0CXJxOworCXU4IAkJYXJnc1s3XSwgKmFyZ2J1ZiA9IGFyZ3M7CisJaW50CQlyZXQg
PSAwOworCURFQ0xBUkVfQ09NUExFVElPTih3YWl0KTsKKworCW1lbXNldCgmcnEsIDAsIHNpemVv
ZihycSkpOworCW1lbXNldChhcmdzLCAwLCBzaXplb2YoYXJncykpOworCisJaWYgKGJsa19xdWV1
ZV9zdG9wcGVkKHEpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICh1bmxvYWQpIHsKKwkJYXJnYnVm
WzBdID0gMHhlMTsKKwkJYXJnYnVmWzFdID0gMHg0NDsKKwkJYXJnYnVmWzNdID0gMHg0YzsKKwkJ
YXJnYnVmWzRdID0gMHg0ZTsKKwkJYXJnYnVmWzVdID0gMHg1NTsKKwl9IGVsc2UKKwkJYXJnYnVm
WzBdID0gMHhlMDsKKworCS8qIElzc3VlIHRoZSBwYXJrIGNvbW1hbmQgJiBmcmVlemUgKi8KKwlp
ZGVfaW5pdF9kcml2ZV9jbWQoJnJxKTsKKworCXJxLmZsYWdzID0gUkVRX0RSSVZFX1RBU0s7CisJ
cnEuYnVmZmVyID0gYXJnYnVmOworCXJxLndhaXRpbmcgPSAmd2FpdDsKKwlycS5lbmRfaW8gPSBp
ZGVfZW5kX3Byb3RlY3RfcnE7CisKKwlyZXQgPSBpZGVfZG9fZHJpdmVfY21kKGRyaXZlLCAmcnEs
IGlkZV9uZXh0KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKKwlycS53YWl0aW5nID0g
TlVMTDsKKworCWlmIChyZXQpCisJeworCQlwcmludGsoS0VSTl9ERUJVRyAiaWRlX3Byb3RlY3Rf
cXVldWUoKTogV2FybmluZzogaGVhZCBOT1QgcGFya2VkIS4uXG4iKTsKKwkJaWRlX3VucHJvdGVj
dF9xdWV1ZShxKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAodW5sb2FkKSB7CisJCWlmIChh
cmdzWzNdID09IDB4YzQpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiaWRlX3Byb3RlY3RfcXVldWUo
KTogaGVhZCBwYXJrZWQuLlxuIik7CisJCWVsc2UgeworCQkJLyogZXJyb3IgcGFya2luZyB0aGUg
aGVhZCAqLworCQkJcHJpbnRrKEtFUk5fREVCVUcgImlkZV9wcm90ZWN0X3F1ZXVlKCk6IGhlYWQg
Tk9UIHBhcmtlZCEuLlxuIik7CisJCQlyZXQgPSAtRUlPOworCQkJaWRlX3VucHJvdGVjdF9xdWV1
ZShxKTsKKwkJfQorCX0gZWxzZQorCQlwcmludGsoS0VSTl9ERUJVRyAiaWRlX3Byb3RlY3RfcXVl
dWUoKTogaGVhZCBwYXJrIG5vdCByZXF1ZXN0ZWQsIHVzZWQgc3RhbmRieSEuLlxuIik7CisKKwly
ZXR1cm4gcmV0OworfQkKKworaW50IGlkZWRpc2tfaXNzdWVfcHJvdGVjdF9mbihyZXF1ZXN0X3F1
ZXVlX3QgKnEpCit7CisJaWRlX2RyaXZlX3QJCSpkcml2ZSA9IHEtPnF1ZXVlZGF0YTsKKwlpbnQg
dW5sb2FkOworCisJLyoKKwkgKiBDaGVjayBjYXBhYmlsaXR5IG9mIHRoZSBkZXZpY2UgLQorCSAq
ICAtIGlmICJpZGxlIGltbWVkaWF0ZSB3aXRoIHVubG9hZCIgaXMgc3VwcG9ydGVkIHdlIHVzZSB0
aGF0LCBlbHNlCisJICogICAgd2UgdXNlICJzdGFuZGJ5IGltbWVkaWF0ZSIgYW5kIGxpdmUgd2l0
aCBzcGlubmluZyBkb3duIHRoZSBkcml2ZS4uCisJICogICAgKFdvcmQgODQsIGJpdCAxMyBvZiBJ
REVOVElGWSBERVZJQ0UgZGF0YSkKKwkgKi8KKwlpZiAoaWRlZGlza19wcm90ZWN0X21ldGhvZCA9
PSAxKSB7CisJCXVubG9hZCA9IDE7CQorCQlwcmludGsoS0VSTl9ERUJVRyAiaWRlZGlza19pc3N1
ZV9wcm90ZWN0X2ZuKCk6IHVubG9hZCBtZXRob2QgcmVxdWVzdGVkLCBvdmVycmlkaW5nIGRyaXZl
IGNhcGFiaWxpdHkgY2hlY2suLlxuIik7CisJfQorCWVsc2UgaWYgKGlkZWRpc2tfcHJvdGVjdF9t
ZXRob2QgPT0gMikgeworCQl1bmxvYWQgPSAwOwkKKwkJcHJpbnRrKEtFUk5fREVCVUcgImlkZWRp
c2tfaXNzdWVfcHJvdGVjdF9mbigpOiBzdGFuZGJ5IG1ldGhvZCByZXF1ZXN0ZWQsIG92ZXJyaWRp
bmcgZHJpdmUgY2FwYWJpbGl0eSBjaGVjay4uXG4iKTsKKwl9CisJZWxzZSBpZiAoZHJpdmUtPmlk
LT5jZnNzZSAmICgxIDw8IDEzKSkgeworCQl1bmxvYWQgPSAxOworCQlwcmludGsoS0VSTl9ERUJV
RyAiaWRlZGlza19pc3N1ZV9wcm90ZWN0X2ZuKCk6IHVubG9hZCBzdXBwb3J0IHJlcG9ydGVkIGJ5
IGRyaXZlLi5cbiIpOworCX0KKwllbHNlIHsKKwkJdW5sb2FkID0gMDsKKwkJcHJpbnRrKEtFUk5f
REVCVUcgImlkZWRpc2tfaXNzdWVfcHJvdGVjdF9mbigpOiB1bmxvYWQgc3VwcG9ydCBOT1QgcmVw
b3J0ZWQgYnkgZHJpdmUhLi5cbiIpOworCX0KKworCXJldHVybiBpZGVfcHJvdGVjdF9xdWV1ZShx
LCB1bmxvYWQpOworfQorCitpbnQgaWRlZGlza19pc3N1ZV91bnByb3RlY3RfZm4ocmVxdWVzdF9x
dWV1ZV90ICpxKQoreworCXJldHVybiBpZGVfdW5wcm90ZWN0X3F1ZXVlKHEpOworfQorCisvKgog
ICogVGhpcyBpcyB0aWdodGx5IHdvdmVuIGludG8gdGhlIGRyaXZlci0+ZG9fc3BlY2lhbCBjYW4g
bm90IHRvdWNoLgogICogRE9OJ1QgZG8gaXQgYWdhaW4gdW50aWwgYSB0b3RhbCBwZXJzb25hbGl0
eSByZXdyaXRlIGlzIGNvbW1pdHRlZC4KICAqLwpAQCAtOTg1LDYgKzExMzcsOSBAQAogCQlkcml2
ZS0+d2NhY2hlID0gMTsKIAogCXdyaXRlX2NhY2hlKGRyaXZlLCAxKTsKKworCWJsa19xdWV1ZV9p
c3N1ZV9wcm90ZWN0X2ZuKGRyaXZlLT5xdWV1ZSwgaWRlZGlza19pc3N1ZV9wcm90ZWN0X2ZuKTsJ
CisJYmxrX3F1ZXVlX2lzc3VlX3VucHJvdGVjdF9mbihkcml2ZS0+cXVldWUsIGlkZWRpc2tfaXNz
dWVfdW5wcm90ZWN0X2ZuKTsJCiB9CiAKIHN0YXRpYyB2b2lkIGlkZV9jYWNoZWZsdXNoX3AoaWRl
X2RyaXZlX3QgKmRyaXZlKQpkaWZmIC1OdXIgbGludXgtMi42LjE3LjEvZHJpdmVycy9pZGUvaWRl
LWlvLmMgbGludXgtMi42LjE3LjEuaGRhcHMvZHJpdmVycy9pZGUvaWRlLWlvLmMKLS0tIGxpbnV4
LTIuNi4xNy4xL2RyaXZlcnMvaWRlL2lkZS1pby5jCTIwMDYtMDYtMjQgMjM6NDk6MDIuMTg1NjU1
MDAwICswMjAwCisrKyBsaW51eC0yLjYuMTcuMS5oZGFwcy9kcml2ZXJzL2lkZS9pZGUtaW8uYwky
MDA2LTA2LTI1IDAwOjQ2OjA5LjY1MTg1OTAwMCArMDIwMApAQCAtMTI0OSw2ICsxMjQ5LDE3IEBA
CiAJCX0KIAogCQkvKgorCQkgKiBEb24ndCBhY2NlcHQgYSByZXF1ZXN0IHdoZW4gdGhlIHF1ZXVl
IGlzIHN0b3BwZWQgKHVubGVzcyB3ZQorCQkgKiBhcmUgcmVzdW1pbmcgZnJvbSBzdXNwZW5kKS4g
UHJldmVudHMgZXhpc3RpbmcgcXVldWUgZW50cmllcyAKKwkJICogYmVpbmcgcHJvY2Vzc2VkIGFm
dGVyIHF1ZXVlIGlzIHN0b3BwZWQgYnkgdGhlIGhhcmQgZGlzayAKKwkJICogcHJvdGVjdGlvbiBt
ZWNoYW5pc20uLi4KKwkJICovCisJCWlmICh0ZXN0X2JpdChRVUVVRV9GTEFHX1NUT1BQRUQsICZk
cml2ZS0+cXVldWUtPnF1ZXVlX2ZsYWdzKSAmJiAhYmxrX3BtX3Jlc3VtZV9yZXF1ZXN0KHJxKSkg
eworCQkJaHdncm91cC0+YnVzeSA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCS8qCiAJCSAqIFNh
bml0eTogZG9uJ3QgYWNjZXB0IGEgcmVxdWVzdCB0aGF0IGlzbid0IGEgUE0gcmVxdWVzdAogCQkg
KiBpZiB3ZSBhcmUgY3VycmVudGx5IHBvd2VyIG1hbmFnZWQuIFRoaXMgaXMgdmVyeSBpbXBvcnRh
bnQgYXMKIAkJICogYmxrX3N0b3BfcXVldWUoKSBkb2Vzbid0IHByZXZlbnQgdGhlIGVsdl9uZXh0
X3JlcXVlc3QoKQpAQCAtMTcyOSw2ICsxNzQwLDkgQEAKIAkJd2hlcmUgPSBFTEVWQVRPUl9JTlNF
UlRfRlJPTlQ7CiAJCXJxLT5mbGFncyB8PSBSRVFfUFJFRU1QVDsKIAl9CisJaWYgKGFjdGlvbiA9
PSBpZGVfbmV4dCkKKwkJd2hlcmUgPSBFTEVWQVRPUl9JTlNFUlRfRlJPTlQ7CisKIAlfX2Vsdl9h
ZGRfcmVxdWVzdChkcml2ZS0+cXVldWUsIHJxLCB3aGVyZSwgMCk7CiAJaWRlX2RvX3JlcXVlc3Qo
aHdncm91cCwgSURFX05PX0lSUSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ss
IGZsYWdzKTsKZGlmZiAtTnVyIGxpbnV4LTIuNi4xNy4xL2RyaXZlcnMvc2NzaS9saWJhdGEtY29y
ZS5jIGxpbnV4LTIuNi4xNy4xLmhkYXBzL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCi0tLSBs
aW51eC0yLjYuMTcuMS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYwkyMDA2LTA2LTI0IDIzOjQ5
OjAyLjE5NzY1NjAwMCArMDIwMAorKysgbGludXgtMi42LjE3LjEuaGRhcHMvZHJpdmVycy9zY3Np
L2xpYmF0YS1jb3JlLmMJMjAwNi0wNi0yNSAwMDozMTo0Mi44ODk2ODk3NTAgKzAyMDAKQEAgLTc1
LDYgKzc1LDEwIEBACiAKIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphdGFfYXV4X3dxOwogCitp
bnQgbGliYXRhX3Byb3RlY3RfbWV0aG9kID0gMDsKK21vZHVsZV9wYXJhbV9uYW1lZChwcm90ZWN0
X21ldGhvZCwgbGliYXRhX3Byb3RlY3RfbWV0aG9kLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1f
REVTQyhwcm90ZWN0X21ldGhvZCwgImhkYXBzIGRpc2sgcHJvdGVjdGlvbiBtZXRob2QgKDA9YXV0
b2RldGVjdCwgMT11bmxvYWQsIDI9c3RhbmRieSkiKTsKKwogaW50IGF0YXBpX2VuYWJsZWQgPSAx
OwogbW9kdWxlX3BhcmFtKGF0YXBpX2VuYWJsZWQsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9E
RVNDKGF0YXBpX2VuYWJsZWQsICJFbmFibGUgZGlzY292ZXJ5IG9mIEFUQVBJIGRldmljZXMgKDA9
b2ZmLCAxPW9uKSIpOwpkaWZmIC1OdXIgbGludXgtMi42LjE3LjEvZHJpdmVycy9zY3NpL2xpYmF0
YS5oIGxpbnV4LTIuNi4xNy4xLmhkYXBzL2RyaXZlcnMvc2NzaS9saWJhdGEuaAotLS0gbGludXgt
Mi42LjE3LjEvZHJpdmVycy9zY3NpL2xpYmF0YS5oCTIwMDYtMDYtMjQgMjM6NDk6MDIuMTk3NjU2
MDAwICswMjAwCisrKyBsaW51eC0yLjYuMTcuMS5oZGFwcy9kcml2ZXJzL3Njc2kvbGliYXRhLmgJ
MjAwNi0wNi0yNSAwMDo0NjowOS42NTE4NTkwMDAgKzAyMDAKQEAgLTQwLDYgKzQwLDcgQEAKIAog
LyogbGliYXRhLWNvcmUuYyAqLwogZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphdGFf
YXV4X3dxOworZXh0ZXJuIGludCBsaWJhdGFfcHJvdGVjdF9tZXRob2Q7CiBleHRlcm4gaW50IGF0
YXBpX2VuYWJsZWQ7CiBleHRlcm4gaW50IGF0YXBpX2RtYWRpcjsKIGV4dGVybiBpbnQgbGliYXRh
X2Z1YTsKZGlmZiAtTnVyIGxpbnV4LTIuNi4xNy4xL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5j
IGxpbnV4LTIuNi4xNy4xLmhkYXBzL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCi0tLSBsaW51
eC0yLjYuMTcuMS9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwkyMDA2LTA2LTI0IDIzOjQ5OjAy
LjIwNTY1NzAwMCArMDIwMAorKysgbGludXgtMi42LjE3LjEuaGRhcHMvZHJpdmVycy9zY3NpL2xp
YmF0YS1zY3NpLmMJMjAwNi0wNi0yNSAwMDo0NjowOS42NjM4NTk3NTAgKzAyMDAKQEAgLTgwOSw2
ICs4MDksNDIgQEAKIAl9CiB9CiAKK2V4dGVybiBpbnQgc2NzaV9wcm90ZWN0X3F1ZXVlKHJlcXVl
c3RfcXVldWVfdCAqcSwgaW50IHVubG9hZCk7CitleHRlcm4gaW50IHNjc2lfdW5wcm90ZWN0X3F1
ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSk7CisKK3N0YXRpYyBpbnQgYXRhX3Njc2lfaXNzdWVfcHJv
dGVjdF9mbihyZXF1ZXN0X3F1ZXVlX3QgKnEpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2
ID0gcS0+cXVldWVkYXRhOworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSAoc3RydWN0IGF0YV9wb3J0
ICopICZzZGV2LT5ob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0g
JmFwLT5kZXZpY2Vbc2Rldi0+aWRdOworCWludCB1bmxvYWQ7CisKKwlpZiAobGliYXRhX3Byb3Rl
Y3RfbWV0aG9kID09IDEpIHsKKwkJdW5sb2FkID0gMTsJCisJCXByaW50ayhLRVJOX0RFQlVHICJh
dGFfc2NzaV9pc3N1ZV9wcm90ZWN0X2ZuKCk6IHVubG9hZCBtZXRob2QgcmVxdWVzdGVkLCBvdmVy
cmlkaW5nIGRyaXZlIGNhcGFiaWxpdHkgY2hlY2suLlxuIik7CisJfQorCWVsc2UgaWYgKGxpYmF0
YV9wcm90ZWN0X21ldGhvZCA9PSAyKSB7CisJCXVubG9hZCA9IDA7CQorCQlwcmludGsoS0VSTl9E
RUJVRyAiYXRhX3Njc2lfaXNzdWVfcHJvdGVjdF9mbigpOiBzdGFuZGJ5IG1ldGhvZCByZXF1ZXN0
ZWQsIG92ZXJyaWRpbmcgZHJpdmUgY2FwYWJpbGl0eSBjaGVjay4uXG4iKTsKKwl9CisJZWxzZSBp
ZiAoYXRhX2lkX2hhc191bmxvYWQoZGV2LT5pZCkpIHsKKwkJdW5sb2FkID0gMTsKKwkJcHJpbnRr
KEtFUk5fREVCVUcgImF0YV9zY3NpX2lzc3VlX3Byb3RlY3RfZm4oKTogdW5sb2FkIHN1cHBvcnQg
cmVwb3J0ZWQgYnkgZHJpdmUuLlxuIik7CisJfQorCWVsc2UgeworCQl1bmxvYWQgPSAwOworCQlw
cmludGsoS0VSTl9ERUJVRyAiYXRhX3Njc2lfaXNzdWVfcHJvdGVjdF9mbigpOiB1bmxvYWQgc3Vw
cG9ydCBOT1QgcmVwb3J0ZWQgYnkgZHJpdmUhLi5cbiIpOworCX0KKworCS8qIGNhbGwgc2NzaV9w
cm90ZWN0X3F1ZXVlLCByZXF1ZXN0aW5nIGVpdGhlciB1bmxvYWQgb3Igc3RhbmRieSAqLworCXJl
dHVybiBzY3NpX3Byb3RlY3RfcXVldWUocSwgdW5sb2FkKTsKK30KKworc3RhdGljIGludCBhdGFf
c2NzaV9pc3N1ZV91bnByb3RlY3RfZm4ocmVxdWVzdF9xdWV1ZV90ICpxKQoreworCXJldHVybiBz
Y3NpX3VucHJvdGVjdF9xdWV1ZShxKTsKK30KKwogLyoqCiAgKglhdGFfc2NzaV9zbGF2ZV9jb25m
aWcgLSBTZXQgU0NTSSBkZXZpY2UgYXR0cmlidXRlcwogICoJQHNkZXY6IFNDU0kgZGV2aWNlIHRv
IGV4YW1pbmUKQEAgLTgzMiw2ICs4NjgsOCBAQAogCiAJaWYgKGRldikKIAkJYXRhX3Njc2lfZGV2
X2NvbmZpZyhzZGV2LCBkZXYpOworCWJsa19xdWV1ZV9pc3N1ZV9wcm90ZWN0X2ZuKHNkZXYtPnJl
cXVlc3RfcXVldWUsIGF0YV9zY3NpX2lzc3VlX3Byb3RlY3RfZm4pOwkKKwlibGtfcXVldWVfaXNz
dWVfdW5wcm90ZWN0X2ZuKHNkZXYtPnJlcXVlc3RfcXVldWUsIGF0YV9zY3NpX2lzc3VlX3VucHJv
dGVjdF9mbik7CQogCiAJcmV0dXJuIDA7CS8qIHNjc2kgbGF5ZXIgZG9lc24ndCBjaGVjayByZXR1
cm4gdmFsdWUsIHNpZ2ggKi8KIH0KZGlmZiAtTnVyIGxpbnV4LTIuNi4xNy4xL2RyaXZlcnMvc2Nz
aS9zY3NpX2xpYi5jIGxpbnV4LTIuNi4xNy4xLmhkYXBzL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5j
Ci0tLSBsaW51eC0yLjYuMTcuMS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwkyMDA2LTA2LTI0IDIz
OjQ5OjAyLjIwOTY1NzAwMCArMDIwMAorKysgbGludXgtMi42LjE3LjEuaGRhcHMvZHJpdmVycy9z
Y3NpL3Njc2lfbGliLmMJMjAwNi0wNi0yNSAwMDo0MDo0MC43NDMzMDM1MDAgKzAyMDAKQEAgLTIx
OTEsNiArMjE5MSwxOTIgQEAKIAkJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGRldiwgTlVMTCwgdGFy
Z2V0X3VuYmxvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2NzaV90YXJnZXRfdW5ibG9jayk7
CisKKy8qCisgKiBBcyBwZXIgc2NzaV93YWl0X3JlcV9lbmRfaW8oKSwgd2hpY2ggd2FzIHJlbW92
ZWQgaW4gMi42LjE1CisgKi8KK3N0YXRpYyB2b2lkIHNjc2lfcHJvdGVjdF93YWl0X3JlcV9lbmRf
aW8oc3RydWN0IHJlcXVlc3QgKnJlcSwgaW50IGVycm9yKQoreworCUJVR19PTighcmVxLT53YWl0
aW5nKTsKKworCWNvbXBsZXRlKHJlcS0+d2FpdGluZyk7Cit9CisKKy8qCisgKiBBcyBwZXIgc2Nz
aV93YWl0X2RvbmUoKSwgZXhjZXB0IGNhbGxzIHNjc2lfZGV2aWNlX2Jsb2NrCisgKiB0byBibG9j
ayB0aGUgcXVldWUgYXQgY29tbWFuZCBjb21wbGV0aW9uLiBPbmx5IGNhbGxlZCBieQorICogc2Nz
aV9wcm90ZWN0X3dhaXQoKS4KKyAqIHRvZG86CisgKiAgLSB3ZSBibG9jayB0aGUgcXVldWUgcmVn
YXJkbGVzcyBvZiBzdWNjZXNzIGFuZCByZWx5IG9uIHRoZQorICogICAgc2NzaV9wcm90ZWN0X3F1
ZXVlIGZ1bmN0aW9uIHRvIHVuYmxvY2sgaWYgdGhlIGNvbW1hbmQKKyAqICAgIGZhaWxlZC4uLiBz
aG91bGQgd2UgYWxzbyBpbnNwZWN0IGhlcmU/CisgKi8KK3N0YXRpYyB2b2lkIHNjc2lfcHJvdGVj
dF93YWl0X2RvbmUoc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCXN0cnVjdCByZXF1ZXN0ICpy
ZXEgPSBjbWQtPnJlcXVlc3Q7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBjbWQtPmRldmlj
ZS0+cmVxdWVzdF9xdWV1ZTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBjbWQtPmRldmlj
ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmVxLT5ycV9zdGF0dXMgPSBSUV9TQ1NJX0RP
TkU7CS8qIEJ1c3ksIGJ1dCBpbmRpY2F0ZSByZXF1ZXN0IGRvbmUgKi8KKworCXNwaW5fbG9ja19p
cnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwlpZiAoYmxrX3JxX3RhZ2dlZChyZXEpKQor
CQlibGtfcXVldWVfZW5kX3RhZyhxLCByZXEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+
cXVldWVfbG9jaywgZmxhZ3MpOworCisJc2NzaV9pbnRlcm5hbF9kZXZpY2VfYmxvY2soc2Rldik7
CisKKwlpZiAocmVxLT53YWl0aW5nKQorCQljb21wbGV0ZShyZXEtPndhaXRpbmcpOworfQorCisv
KgorICogQXMgcGVyIHNjc2lfd2FpdF9yZXEoKSwgZXhjZXB0IHNldHMgdGhlIGNvbXBsZXRpb24g
ZnVuY3Rpb24KKyAqIGFzIHNjc2lfcHJvdGVjdF93YWl0X2RvbmUoKS4KKyAqLwordm9pZCBzY3Np
X3Byb3RlY3Rfd2FpdF9yZXEoc3RydWN0IHNjc2lfcmVxdWVzdCAqc3JlcSwgY29uc3Qgdm9pZCAq
Y21uZCwgdm9pZCAqYnVmZmVyLAorCQkJICAgdW5zaWduZWQgYnVmZmxlbiwgaW50IHRpbWVvdXQs
IGludCByZXRyaWVzKQoreworCURFQ0xBUkVfQ09NUExFVElPTih3YWl0KTsKKworCXNyZXEtPnNy
X3JlcXVlc3QtPndhaXRpbmcgPSAmd2FpdDsKKwlzcmVxLT5zcl9yZXF1ZXN0LT5ycV9zdGF0dXMg
PSBSUV9TQ1NJX0JVU1k7CisJc3JlcS0+c3JfcmVxdWVzdC0+ZW5kX2lvID0gc2NzaV9wcm90ZWN0
X3dhaXRfcmVxX2VuZF9pbzsKKwlzY3NpX2RvX3JlcShzcmVxLCBjbW5kLCBidWZmZXIsIGJ1ZmZs
ZW4sIHNjc2lfcHJvdGVjdF93YWl0X2RvbmUsCisJCSAgICB0aW1lb3V0LCByZXRyaWVzKTsKKwl3
YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKKwlzcmVxLT5zcl9yZXF1ZXN0LT53YWl0aW5nID0g
TlVMTDsKKwlpZiAoc3JlcS0+c3JfcmVxdWVzdC0+cnFfc3RhdHVzICE9IFJRX1NDU0lfRE9ORSkK
KwkJc3JlcS0+c3JfcmVzdWx0IHw9IChEUklWRVJfRVJST1IgPDwgMjQpOworCisJX19zY3NpX3Jl
bGVhc2VfcmVxdWVzdChzcmVxKTsKK30KKworLyoKKyAqIHNjc2lfdW5wcm90ZWN0X3F1ZXVlKCkK
KyAqICAtIHJlbGVhc2UgdGhlIHF1ZXVlIHRoYXQgd2FzIHByZXZpb3VzbHkgYmxvY2tlZAorICov
CitpbnQgc2NzaV91bnByb3RlY3RfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxKXsKKworCXN0cnVj
dCBzY3NpX2RldmljZSAqc2RldiA9IHEtPnF1ZXVlZGF0YTsKKwlpbnQgcmMgPSAwLCBwZW5kaW5n
ID0gMDsKKwl1OCBzY3NpX2NtZFtNQVhfQ09NTUFORF9TSVpFXTsKKwlzdHJ1Y3Qgc2NzaV9zZW5z
ZV9oZHIgc3NoZHI7CisKKwlpZiAoc2Rldi0+c2Rldl9zdGF0ZSAhPSBTREVWX0JMT0NLKQorCQly
ZXR1cm4gLUVOWElPOworCisJLyogQXJlIHRoZXJlIGFueSBwZW5kaW5nIGpvYnMgb24gdGhlIHF1
ZXVlPyAqLworCQkJcGVuZGluZyA9ICgocS0+cnEuY291bnRbUkVBRF0gPiAwKSB8fCAocS0+cnEu
Y291bnRbV1JJVEVdID4gMCkpID8gMSA6IDA7CisKKwkJCQlyYyA9IHNjc2lfaW50ZXJuYWxfZGV2
aWNlX3VuYmxvY2soc2Rldik7CisJCQkJaWYgKHJjKQorCQkJCQlyZXR1cm4gcmM7CisKKwkJCQlp
ZiAoIXBlbmRpbmcpIHsKK3ByaW50ayhLRVJOX0RFQlVHICJzY3NpX3VucHJvdGVjdF9xdWV1ZSgp
OiBObyBwZW5kaW5nIEkvTywgcmUtZW5hYmxpbmcgcG93ZXIgbWFuYWdlbWVudC4uXG4iKTsKKwor
bWVtc2V0KHNjc2lfY21kLCAwLCBzaXplb2Yoc2NzaV9jbWQpKTsKK3Njc2lfY21kWzBdICA9IEFU
QV8xNjsKK3Njc2lfY21kWzFdICA9ICgzIDw8IDEpOyAvKiBOb24tZGF0YSAqLworLyogc2NzaV9j
bWRbMl0gaXMgYWxyZWFkeSAwIC0tIG5vIG9mZi5saW5lLCBjYywgb3IgZGF0YSB4ZmVyICovCitz
Y3NpX2NtZFsxNF0gPSAweGU1OyAvKiBDSEVDS19QT1dFUl9NT0RFMSAqLworCisvKiBHb29kIHZh
bHVlcyBmb3IgdGltZW91dCBhbmQgcmV0cmllcz8gIFZhbHVlcyBiZWxvdworICAgZnJvbSBzY3Np
X2lvY3RsX3NlbmRfY29tbWFuZCgpIGZvciBkZWZhdWx0IGNhc2UuLi4gKi8KK2lmIChzY3NpX2V4
ZWN1dGVfcmVxKHNkZXYsIHNjc2lfY21kLCBETUFfTk9ORSwgTlVMTCwgMCwgJnNzaGRyLAorCQkg
ICAgICgxMCpIWiksIDUpKQorCXJjID0gLUVJTzsKKwkJCQl9CisJCQkJcmV0dXJuIHJjOworfQor
RVhQT1JUX1NZTUJPTF9HUEwoc2NzaV91bnByb3RlY3RfcXVldWUpOworCisvKgorICogc2NzaV9w
cm90ZWN0X3F1ZXVlKCkKKyAqICAtIGJ1aWxkIGFuZCBpc3N1ZSB0aGUgcGFyay9zdGFuZGJ5IGNv
bW1hbmQuLgorICogIC0gcXVldWUgaXMgYmxvY2tlZCBkdXJpbmcgY29tbWFuZCBjb21wbGV0aW9u
IGhhbmRsZXIKKyAqLworaW50IHNjc2lfcHJvdGVjdF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEs
IGludCB1bmxvYWQpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gcS0+cXVldWVkYXRh
OworCWludCByYyA9IDA7CisJdTggc2NzaV9jbWRbTUFYX0NPTU1BTkRfU0laRV07CisJdTggYXJn
c1s3XTsKKwlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpzcmVxOworCXVuc2lnbmVkIGNoYXIgKnNiLCAq
ZGVzYzsKKworCWlmIChzZGV2LT5zZGV2X3N0YXRlICE9IFNERVZfUlVOTklORykKKwkJcmV0dXJu
IC1FTlhJTzsKKworCW1lbXNldChhcmdzLCAwLCBzaXplb2YoYXJncykpOworCisJaWYgKHVubG9h
ZCkgeworCQlhcmdzWzBdID0gMHhlMTsKKwkJYXJnc1sxXSA9IDB4NDQ7CisJCWFyZ3NbM10gPSAw
eDRjOworCQlhcmdzWzRdID0gMHg0ZTsKKwkJYXJnc1s1XSA9IDB4NTU7CisJfSBlbHNlCisJCWFy
Z3NbMF0gPSAweGUwOworCisJbWVtc2V0KHNjc2lfY21kLCAwLCBzaXplb2Yoc2NzaV9jbWQpKTsK
KwlzY3NpX2NtZFswXSAgPSBBVEFfMTY7CisJc2NzaV9jbWRbMV0gID0gKDMgPDwgMSk7IC8qIE5v
bi1kYXRhICovCisJc2NzaV9jbWRbMl0gID0gMHgyMDsgICAgIC8qIG5vIG9mZi5saW5lLCBvciBk
YXRhIHhmZXIsIHJlcXVlc3QgY2MgKi8KKwlzY3NpX2NtZFs0XSAgPSBhcmdzWzFdOworCXNjc2lf
Y21kWzZdICA9IGFyZ3NbMl07CisJc2NzaV9jbWRbOF0gID0gYXJnc1szXTsKKwlzY3NpX2NtZFsx
MF0gPSBhcmdzWzRdOworCXNjc2lfY21kWzEyXSA9IGFyZ3NbNV07CisJc2NzaV9jbWRbMTRdID0g
YXJnc1swXTsKKworCXNyZXEgPSBzY3NpX2FsbG9jYXRlX3JlcXVlc3Qoc2RldiwgR0ZQX0tFUk5F
TCk7CisJaWYgKCFzcmVxKSB7CisJCXJjID0gLUVJTlRSOworCQlnb3RvIGVycm9yOworCX0KKwor
CXNyZXEtPnNyX2RhdGFfZGlyZWN0aW9uID0gRE1BX05PTkU7CisKKwlzY3NpX3Byb3RlY3Rfd2Fp
dF9yZXEoc3JlcSwgc2NzaV9jbWQsIE5VTEwsIDAsICgxMCpIWiksIDUpOworCisJaWYgKCFzcmVx
LT5zcl9yZXN1bHQgPT0gKChEUklWRVJfU0VOU0UgPDwgMjQpICsgU0FNX1NUQVRfQ0hFQ0tfQ09O
RElUSU9OKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAic2NzaV9wcm90ZWN0X3F1ZXVlKCk6IGhl
YWQgTk9UIHBhcmtlZCEuLlxuIik7CisJCXNjc2lfdW5wcm90ZWN0X3F1ZXVlKHEpOwkJLyoganVz
dCBpbiBjYXNlIHdlIHN0aWxsIG1hbmFnZWQgdG8gYmxvY2sgKi8KKwkJcmMgPSAtRUlPOworCQln
b3RvIGVycm9yOworCX0KKworCXNiID0gc3JlcS0+c3Jfc2Vuc2VfYnVmZmVyOworCWRlc2MgPSBz
YiArIDg7CisKKy8qIFJldHJpZXZlIGRhdGEgZnJvbSBjaGVjayBjb25kaXRpb24gKi8KKwlhcmdz
WzFdID0gZGVzY1szXTsKKwlhcmdzWzJdID0gZGVzY1s1XTsKKwlhcmdzWzNdID0gZGVzY1s3XTsK
KwlhcmdzWzRdID0gZGVzY1s5XTsKKwlhcmdzWzVdID0gZGVzY1sxMV07CisJYXJnc1swXSA9IGRl
c2NbMTNdOworCisJaWYgKHVubG9hZCkgeworCQlpZiAoYXJnc1szXSA9PSAweGM0KQorCQkJcHJp
bnRrKEtFUk5fREVCVUcgInNjc2lfcHJvdGVjdF9xdWV1ZSgpOiBoZWFkIHBhcmtlZC4uXG4iKTsK
KwkJZWxzZSB7CisvKiBlcnJvciBwYXJraW5nIHRoZSBoZWFkICovCisJCQlwcmludGsoS0VSTl9E
RUJVRyAic2NzaV9wcm90ZWN0X3F1ZXVlKCk6IGhlYWQgTk9UIHBhcmtlZCEuLlxuIik7CisJCQly
YyA9IC1FSU87CisJCQlzY3NpX3VucHJvdGVjdF9xdWV1ZShxKTsKKwkJfQorCX0gZWxzZQorCQlw
cmludGsoS0VSTl9ERUJVRyAic2NzaV9wcm90ZWN0X3F1ZXVlKCk6IGhlYWQgcGFyayBub3QgcmVx
dWVzdGVkLCB1c2VkIHN0YW5kYnkhLi5cbiIpOworCitlcnJvcjoKKwlzY3NpX3JlbGVhc2VfcmVx
dWVzdChzcmVxKTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzY3NpX3Byb3Rl
Y3RfcXVldWUpOwogCiAvKioKICAqIHNjc2lfa21hcF9hdG9taWNfc2cgLSBmaW5kIGFuZCBhdG9t
aWNhbGx5IG1hcCBhbiBzZy1lbGVtbnQKZGlmZiAtTnVyIGxpbnV4LTIuNi4xNy4xL2luY2x1ZGUv
bGludXgvYXRhLmggbGludXgtMi42LjE3LjEuaGRhcHMvaW5jbHVkZS9saW51eC9hdGEuaAotLS0g
bGludXgtMi42LjE3LjEvaW5jbHVkZS9saW51eC9hdGEuaAkyMDA2LTA2LTI0IDIzOjQ5OjAyLjIy
MTY1ODAwMCArMDIwMAorKysgbGludXgtMi42LjE3LjEuaGRhcHMvaW5jbHVkZS9saW51eC9hdGEu
aAkyMDA2LTA2LTI1IDAwOjQyOjQyLjI1ODg5Nzc1MCArMDIwMApAQCAtMjc3LDYgKzI3Nyw3IEBA
CiAjZGVmaW5lIGF0YV9pZF9yYWhlYWRfZW5hYmxlZChpZCkgKChpZClbODVdICYgKDEgPDwgNikp
CiAjZGVmaW5lIGF0YV9pZF93Y2FjaGVfZW5hYmxlZChpZCkgKChpZClbODVdICYgKDEgPDwgNSkp
CiAjZGVmaW5lIGF0YV9pZF9ocGFfZW5hYmxlZChpZCkJKChpZClbODVdICYgKDEgPDwgMTApKQor
I2RlZmluZSBhdGFfaWRfaGFzX3VubG9hZChpZCkgICAoKGlkKVs4NF0gJiAoMSA8PCAxMykpCiAj
ZGVmaW5lIGF0YV9pZF9oYXNfZnVhKGlkKQkoKGlkKVs4NF0gJiAoMSA8PCA2KSkKICNkZWZpbmUg
YXRhX2lkX2hhc19mbHVzaChpZCkJKChpZClbODNdICYgKDEgPDwgMTIpKQogI2RlZmluZSBhdGFf
aWRfaGFzX2ZsdXNoX2V4dChpZCkgKChpZClbODNdICYgKDEgPDwgMTMpKQpkaWZmIC1OdXIgbGlu
dXgtMi42LjE3LjEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBsaW51eC0yLjYuMTcuMS5oZGFwcy9p
bmNsdWRlL2xpbnV4L2Jsa2Rldi5oCi0tLSBsaW51eC0yLjYuMTcuMS9pbmNsdWRlL2xpbnV4L2Js
a2Rldi5oCTIwMDYtMDYtMjQgMjM6NDk6MDIuMjMzNjU4MDAwICswMjAwCisrKyBsaW51eC0yLjYu
MTcuMS5oZGFwcy9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCTIwMDYtMDYtMjUgMDA6NDY6MDkuNjc1
ODYwNTAwICswMjAwCkBAIC0yOTcsNiArMjk3LDggQEAKIHR5cGVkZWYgaW50IChpc3N1ZV9mbHVz
aF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgZ2VuZGlzayAqLCBzZWN0b3JfdCAqKTsK
IHR5cGVkZWYgdm9pZCAocHJlcGFyZV9mbHVzaF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1
Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgdm9pZCAoc29mdGlycV9kb25lX2ZuKShzdHJ1Y3QgcmVx
dWVzdCAqKTsKK3R5cGVkZWYgaW50IChpc3N1ZV9wcm90ZWN0X2ZuKSAocmVxdWVzdF9xdWV1ZV90
ICopOwordHlwZWRlZiBpbnQgKGlzc3VlX3VucHJvdGVjdF9mbikgKHJlcXVlc3RfcXVldWVfdCAq
KTsKIAogZW51bSBibGtfcXVldWVfc3RhdGUgewogCVF1ZXVlX2Rvd24sCkBAIC0zMzksNiArMzQx
LDggQEAKIAlpc3N1ZV9mbHVzaF9mbgkJKmlzc3VlX2ZsdXNoX2ZuOwogCXByZXBhcmVfZmx1c2hf
Zm4JKnByZXBhcmVfZmx1c2hfZm47CiAJc29mdGlycV9kb25lX2ZuCQkqc29mdGlycV9kb25lX2Zu
OworCWlzc3VlX3Byb3RlY3RfZm4JKmlzc3VlX3Byb3RlY3RfZm47CisJaXNzdWVfdW5wcm90ZWN0
X2ZuCSppc3N1ZV91bnByb3RlY3RfZm47CiAKIAkvKgogCSAqIERpc3BhdGNoIHF1ZXVlIHNvcnRp
bmcKQEAgLTcyMCw2ICs3MjQsOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGJsa19vcmRlcmVkX2N1cl9z
ZXEocmVxdWVzdF9xdWV1ZV90ICopOwogZXh0ZXJuIHVuc2lnbmVkIGJsa19vcmRlcmVkX3JlcV9z
ZXEoc3RydWN0IHJlcXVlc3QgKik7CiBleHRlcm4gdm9pZCBibGtfb3JkZXJlZF9jb21wbGV0ZV9z
ZXEocmVxdWVzdF9xdWV1ZV90ICosIHVuc2lnbmVkLCBpbnQpOworZXh0ZXJuIHZvaWQgYmxrX3F1
ZXVlX2lzc3VlX3Byb3RlY3RfZm4ocmVxdWVzdF9xdWV1ZV90ICosIGlzc3VlX3Byb3RlY3RfZm4g
Kik7CitleHRlcm4gdm9pZCBibGtfcXVldWVfaXNzdWVfdW5wcm90ZWN0X2ZuKHJlcXVlc3RfcXVl
dWVfdCAqLCBpc3N1ZV91bnByb3RlY3RfZm4gKik7CiAKIGV4dGVybiBpbnQgYmxrX3JxX21hcF9z
ZyhyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgc3RydWN0IHNjYXR0ZXJsaXN0
ICopOwogZXh0ZXJuIHZvaWQgYmxrX2R1bXBfcnFfZmxhZ3Moc3RydWN0IHJlcXVlc3QgKiwgY2hh
ciAqKTsKZGlmZiAtTnVyIGxpbnV4LTIuNi4xNy4xL2luY2x1ZGUvbGludXgvaWRlLmggbGludXgt
Mi42LjE3LjEuaGRhcHMvaW5jbHVkZS9saW51eC9pZGUuaAotLS0gbGludXgtMi42LjE3LjEvaW5j
bHVkZS9saW51eC9pZGUuaAkyMDA2LTA2LTI0IDIzOjQ5OjAyLjIzNzY1OTAwMCArMDIwMAorKysg
bGludXgtMi42LjE3LjEuaGRhcHMvaW5jbHVkZS9saW51eC9pZGUuaAkyMDA2LTA2LTI1IDAwOjQ2
OjA5LjY3OTg2MDc1MCArMDIwMApAQCAtMTA4NSw2ICsxMDg1LDcgQEAKICAqLwogdHlwZWRlZiBl
bnVtIHsKIAlpZGVfd2FpdCwJLyogaW5zZXJ0IHJxIGF0IGVuZCBvZiBsaXN0LCBhbmQgd2FpdCBm
b3IgaXQgKi8KKwlpZGVfbmV4dCwJLyogaW5zZXJ0IHJxIGltbWVkaWF0ZWx5IGFmdGVyIGN1cnJl
bnQgcmVxdWVzdCAqLwogCWlkZV9wcmVlbXB0LAkvKiBpbnNlcnQgcnEgaW4gZnJvbnQgb2YgY3Vy
cmVudCByZXF1ZXN0ICovCiAJaWRlX2hlYWRfd2FpdCwJLyogaW5zZXJ0IHJxIGluIGZyb250IG9m
IGN1cnJlbnQgcmVxdWVzdCBhbmQgd2FpdCBmb3IgaXQgKi8KIAlpZGVfZW5kCQkvKiBpbnNlcnQg
cnEgYXQgZW5kIG9mIGxpc3QsIGJ1dCBkb24ndCB3YWl0IGZvciBpdCAqLwo=
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97981</attachid>
            <date>2006-09-24 14:55 0000</date>
            <desc>hdaps_protect-2.6.18.patch</desc>
            <filename>hdaps_protect-2.6.18.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTnVyIGxpbnV4LTIuNi4xNy4xL2Jsb2NrL2xsX3J3X2Jsay5jIGxpbnV4LTIuNi4xNy4x
LmhkYXBzL2Jsb2NrL2xsX3J3X2Jsay5jCi0tLSBsaW51eC0yLjYuMTcuMS9ibG9jay9sbF9yd19i
bGsuYwkyMDA2LTA2LTI0IDIzOjQ5OjAyLjE2OTY1NDAwMCArMDIwMAorKysgbGludXgtMi42LjE3
LjEuaGRhcHMvYmxvY2svbGxfcndfYmxrLmMJMjAwNi0wNi0yNSAwMDoyNzoyNy4yODE3MTUyNTAg
KzAyMDAKQEAgLTM5LDYgKzM5LDggQEAKIHN0YXRpYyB2b2lkIGRyaXZlX3N0YXRfYWNjdChzdHJ1
Y3QgcmVxdWVzdCAqcnEsIGludCBucl9zZWN0b3JzLCBpbnQgbmV3X2lvKTsKIHN0YXRpYyB2b2lk
IGluaXRfcmVxdWVzdF9mcm9tX2JpbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgYmlvICpi
aW8pOwogc3RhdGljIGludCBfX21ha2VfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVj
dCBiaW8gKmJpbyk7CitzdGF0aWMgaW50IGJsa19wcm90ZWN0X3JlZ2lzdGVyKHJlcXVlc3RfcXVl
dWVfdCAqcSk7CitzdGF0aWMgdm9pZCBibGtfcHJvdGVjdF91bnJlZ2lzdGVyKHJlcXVlc3RfcXVl
dWVfdCAqcSk7CiAKIC8qCiAgKiBGb3IgdGhlIGFsbG9jYXRlZCByZXF1ZXN0IHRhYmxlcwpAQCAt
MzU5LDYgKzM2MSwxOCBAQAogCiBFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9pc3N1ZV9mbHVzaF9m
bik7CiAKK3ZvaWQgYmxrX3F1ZXVlX2lzc3VlX3Byb3RlY3RfZm4ocmVxdWVzdF9xdWV1ZV90ICpx
LCBpc3N1ZV9wcm90ZWN0X2ZuICppcGYpCit7CisgICAgICAgcS0+aXNzdWVfcHJvdGVjdF9mbiA9
IGlwZjsKK30KK0VYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX2lzc3VlX3Byb3RlY3RfZm4pOworCit2
b2lkIGJsa19xdWV1ZV9pc3N1ZV91bnByb3RlY3RfZm4ocmVxdWVzdF9xdWV1ZV90ICpxLCBpc3N1
ZV91bnByb3RlY3RfZm4gKml1ZikKK3sKKyAgICAgICBxLT5pc3N1ZV91bnByb3RlY3RfZm4gPSBp
dWY7Cit9CitFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9pc3N1ZV91bnByb3RlY3RfZm4pOworCiAv
KgogICogQ2FjaGUgZmx1c2hpbmcgZm9yIG9yZGVyZWQgd3JpdGVzIGhhbmRsaW5nCiAgKi8KQEAg
LTM5MjgsNiArMzk0Miw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJYmxrX3Byb3RlY3RfcmVn
aXN0ZXIocSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5MzYsNiArMzk1MSw3IEBACiAJcmVxdWVz
dF9xdWV1ZV90ICpxID0gZGlzay0+cXVldWU7CiAKIAlpZiAocSAmJiBxLT5yZXF1ZXN0X2ZuKSB7
CisJCWJsa19wcm90ZWN0X3VucmVnaXN0ZXIocSk7CiAJCWVsdl91bnJlZ2lzdGVyX3F1ZXVlKHEp
OwogCiAJCWtvYmplY3RfdWV2ZW50KCZxLT5rb2JqLCBLT0JKX1JFTU9WRSk7CkBAIC0zOTQzLDMg
KzM5NTksMTEyIEBACiAJCWtvYmplY3RfcHV0KCZkaXNrLT5rb2JqKTsKIAl9CiB9CisKKy8qCisg
KiBSZXN0b3JlIHRoZSB1bnBsdWdnaW5nIHRpbWVyIHRoYXQgd2UgcmUtdXNlZAorICogdG8gaW1w
bGVtZW50IHRoZSBxdWV1ZSBmcmVlemUgdGltZW91dC4uLgorICovCitzdGF0aWMgdm9pZCBibGtf
dW5mcmVlemVfd29yayh2b2lkICpkYXRhKQoreworICAgICAgIHJlcXVlc3RfcXVldWVfdCAqcSA9
IChyZXF1ZXN0X3F1ZXVlX3QgKikgZGF0YTsKKworICAgICAgIElOSVRfV09SSygmcS0+dW5wbHVn
X3dvcmssIGJsa191bnBsdWdfd29yaywgcSk7CisgICAgICAgcS0+dW5wbHVnX3RpbWVyLmZ1bmN0
aW9uID0gYmxrX3VucGx1Z190aW1lb3V0OworCisgICAgICAgcS0+aXNzdWVfdW5wcm90ZWN0X2Zu
KHEpOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIHF1ZXVlIGZyZWV6ZSB0aW1lb3V0IGV4
cGlyZXMuLi4KKyAqLworc3RhdGljIHZvaWQgYmxrX3VuZnJlZXplX3RpbWVvdXQodW5zaWduZWQg
bG9uZyBkYXRhKQoreworICAgICAgIHJlcXVlc3RfcXVldWVfdCAqcSA9IChyZXF1ZXN0X3F1ZXVl
X3QgKikgZGF0YTsKKyAgICAgICBrYmxvY2tkX3NjaGVkdWxlX3dvcmsoJnEtPnVucGx1Z193b3Jr
KTsKK30KKworLyoKKyAqIFRoZSBsb3dlciBsZXZlbCBkcml2ZXIgcGFya3MgYW5kIGZyZWV6ZXMg
dGhlIHF1ZXVlLCBhbmQgdGhpcyBibG9jayBsYXllcgorICogIGZ1bmN0aW9uIHNldHMgdXAgdGhl
IGZyZWV6ZSB0aW1lb3V0IHRpbWVyIG9uIHJldHVybi4gSWYgdGhlIHF1ZXVlIGlzCisgKiAgYWxy
ZWFkeSBmcm96ZW4gdGhlbiB0aGlzIGlzIGNhbGxlZCB0byBleHRlbmQgdGhlIHRpbWVyLi4uCisg
Ki8KK3ZvaWQgYmxrX2ZyZWV6ZV9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIGludCBzZWNvbmRz
KQoreworICAgICAgIC8qIHNldC9yZXNldCB0aGUgdGltZXIgKi8KKyAgICAgICBtb2RfdGltZXIo
JnEtPnVucGx1Z190aW1lciwgbXNlY3NfdG9famlmZmllcyhzZWNvbmRzKjEwMDApICsgamlmZmll
cyk7CisKKyAgICAgICAvKiB3ZSBkbyB0aGlzIGV2ZXJ5IGl0ZXJhdGlvbiAtIGlzIHRoaXMgc2Fu
ZT8gKi8KKyAgICAgICBJTklUX1dPUksoJnEtPnVucGx1Z193b3JrLCBibGtfdW5mcmVlemVfd29y
aywgcSk7CisgICAgICAgcS0+dW5wbHVnX3RpbWVyLmZ1bmN0aW9uID0gYmxrX3VuZnJlZXplX3Rp
bWVvdXQ7Cit9CisKKy8qCisgKiBXaGVuIHJlYWRpbmcgdGhlICdwcm90ZWN0JyBhdHRyaWJ1dGUs
IHdlIHJldHVybiBib29sZWFuIGZyb3plbiBvciBhY3RpdmUKKyAqIHRvZG86CisgKiAtIG1heWJl
IHdlIHNob3VsZCByZXR1cm4gc2Vjb25kcyByZW1haW5pbmcgaW5zdGVhZD8KKyAqLworc3RhdGlj
IHNzaXplX3QgcXVldWVfcHJvdGVjdF9zaG93KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFy
ICpwYWdlKQoreworICAgICAgIHJldHVybiBxdWV1ZV92YXJfc2hvdyhibGtfcXVldWVfc3RvcHBl
ZChxKSwgKHBhZ2UpKTsKK30KKworLyoKKyAqIFdoZW4gd3JpdGluZyB0aGUgJ3Byb3RlY3QnIGF0
dHJpYnV0ZSwgaW5wdXQgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzCisgKiB0byBmcmVlemUgdGhl
IHF1ZXVlIGZvci4gV2UgY2FsbCBhIGxvd2VyIGxldmVsIGhlbHBlciBmdW5jdGlvbiB0bworICog
cGFyayB0aGUgaGVhZHMgYW5kIGZyZWV6ZS9ibG9jayB0aGUgcXVldWUsIHRoZW4gd2UgbWFrZSBh
IGJsb2NrIGxheWVyCisgKiBjYWxsIHRvIHNldHVwIHRoZSB0aGF3IHRpbWVvdXQuIElmIGlucHV0
IGlzIDAsIHRoZW4gd2UgdGhhdyB0aGUgcXVldWUuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHF1ZXVl
X3Byb3RlY3Rfc3RvcmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNvbnN0IGNoYXIgKnBhZ2Us
IHNpemVfdCBjb3VudCkKK3sKKyAgICAgICB1bnNpZ25lZCBsb25nIGZyZWV6ZSA9IDA7CisgICAg
ICAgcXVldWVfdmFyX3N0b3JlKCZmcmVlemUsIHBhZ2UsIGNvdW50KTsKKworICAgICAgIGlmKGZy
ZWV6ZT4wKSB7CisvKiBQYXJrIGFuZCBmcmVlemUgKi8KKwkgICAgICAgaWYgKCFibGtfcXVldWVf
c3RvcHBlZChxKSkKKwkJICAgICAgIHEtPmlzc3VlX3Byb3RlY3RfZm4ocSk7CisvKiBzZXQgLyBy
ZXNldCB0aGUgdGhhdyB0aW1lciAqLworCSAgICAgICBibGtfZnJlZXplX3F1ZXVlKHEsIGZyZWV6
ZSk7CisgICAgICAgfQorICAgICAgIGVsc2UKKwkgICAgICAgYmxrX3VuZnJlZXplX3RpbWVvdXQo
KHVuc2lnbmVkIGxvbmcpIHEpOworCisgICAgICAgcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMg
c3RydWN0IHF1ZXVlX3N5c2ZzX2VudHJ5IHF1ZXVlX3Byb3RlY3RfZW50cnkgPSB7CisgICAgICAg
LmF0dHIgPSB7Lm5hbWUgPSAicHJvdGVjdCIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwK
KyAgICAgICAuc2hvdyA9IHF1ZXVlX3Byb3RlY3Rfc2hvdywKKyAgICAgICAuc3RvcmUgPSBxdWV1
ZV9wcm90ZWN0X3N0b3JlLAorfTsKKworc3RhdGljIGludCBibGtfcHJvdGVjdF9yZWdpc3Rlcihy
ZXF1ZXN0X3F1ZXVlX3QgKnEpCit7CisJaW50IGVycm9yID0gMDsKKworLyogY2hlY2sgdGhhdCB0
aGUgbG93ZXIgbGV2ZWwgZHJpdmVyIGhhcyBhIHByb3RlY3QgaGFuZGxlciAqLworCWlmICghcS0+
aXNzdWVfcHJvdGVjdF9mbikKKwkJcmV0dXJuIDE7CisKKy8qIGNyZWF0ZSB0aGUgYXR0cmlidXRl
ICovCisJZXJyb3IgPSBzeXNmc19jcmVhdGVfZmlsZSgmcS0+a29iaiwgJnF1ZXVlX3Byb3RlY3Rf
ZW50cnkuYXR0cik7CisJaWYoZXJyb3IpeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJi
bGtfcHJvdGVjdF9yZWdpc3RlcigpOiBmYWlsZWQgdG8gY3JlYXRlIHByb3RlY3QgcXVldWUgYXR0
cmlidXRlIVxuIik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlrb2JqZWN0X2dldCgmcS0+a29i
aik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19wcm90ZWN0X3VucmVnaXN0ZXIo
cmVxdWVzdF9xdWV1ZV90ICpxKQoreworLyogY2hlY2sgdGhhdCB0aGUgbG93ZXIgbGV2ZWwgZHJp
dmVyIGhhcyBhIHByb3RlY3QgaGFuZGxlciAqLworCWlmICghcS0+aXNzdWVfcHJvdGVjdF9mbikK
KwkJcmV0dXJuOworCisvKiByZW1vdmUgdGhlIGF0dHJpYnV0ZSAqLworCXN5c2ZzX3JlbW92ZV9m
aWxlKCZxLT5rb2JqLCZxdWV1ZV9wcm90ZWN0X2VudHJ5LmF0dHIpOworCWtvYmplY3RfcHV0KCZx
LT5rb2JqKTsKK30KZGlmZiAtTnVyIGxpbnV4LTIuNi4xNy4xL2RyaXZlcnMvaWRlL2lkZS1kaXNr
LmMgbGludXgtMi42LjE3LjEuaGRhcHMvZHJpdmVycy9pZGUvaWRlLWRpc2suYwotLS0gbGludXgt
Mi42LjE3LjEvZHJpdmVycy9pZGUvaWRlLWRpc2suYwkyMDA2LTA2LTI0IDIzOjQ5OjAyLjE4MTY1
NTAwMCArMDIwMAorKysgbGludXgtMi42LjE3LjEuaGRhcHMvZHJpdmVycy9pZGUvaWRlLWRpc2su
YwkyMDA2LTA2LTI1IDAwOjQ2OjA5LjY0Nzg1ODc1MCArMDIwMApAQCAtNzIsNiArNzIsMTAgQEAK
ICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAoraW50IGlkZWRp
c2tfcHJvdGVjdF9tZXRob2QgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKHByb3RlY3RfbWV0aG9k
LCBpZGVkaXNrX3Byb3RlY3RfbWV0aG9kLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhw
cm90ZWN0X21ldGhvZCwgImhkYXBzIGRpc2sgcHJvdGVjdGlvbiBtZXRob2QgKDA9YXV0b2RldGVj
dCwgMT11bmxvYWQsIDI9c3RhbmRieSkiKTsKKwogc3RydWN0IGlkZV9kaXNrX29iaiB7CiAJaWRl
X2RyaXZlX3QJKmRyaXZlOwogCWlkZV9kcml2ZXJfdAkqZHJpdmVyOwpAQCAtNzMwLDYgKzczNCwx
NTQgQEAKIH0KIAogLyoKKyAqIHRvZG86CisgKiAgLSB3ZSBmcmVlemUgdGhlIHF1ZXVlIHJlZ2Fy
ZGxlc3Mgb2Ygc3VjY2VzcyBhbmQgcmVseSBvbiB0aGUgCisgKiAgICBpZGVfcHJvdGVjdF9xdWV1
ZSBmdW5jdGlvbiB0byB0aGF3IGltbWVkaWF0ZWx5IGlmIHRoZSBjb21tYW5kCisgKiAgICBmYWls
ZWQgKHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgbGliYXRhIGhhbmRsZXIpLi4uIHNob3VsZCAK
KyAqICAgIHdlIGFsc28gaW5zcGVjdCBoZXJlPworICovCit2b2lkIGlkZV9lbmRfcHJvdGVjdF9y
cShzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcikKK3sKKwlzdHJ1Y3QgY29tcGxldGlvbiAq
d2FpdGluZyA9IHJxLT53YWl0aW5nOworCisJLyogc3BpbiBsb2NrIGFscmVhZHkgYWNjcXVpcmVk
ICovCisJaWYgKCFibGtfcXVldWVfc3RvcHBlZChycS0+cSkpCisJCWJsa19zdG9wX3F1ZXVlKHJx
LT5xKTsKKworCWNvbXBsZXRlKHdhaXRpbmcpOworfQorCitpbnQgaWRlX3VucHJvdGVjdF9xdWV1
ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpCit7CisJc3RydWN0IHJlcXVlc3QJcnE7DQorCXVuc2lnbmVk
IGxvbmcgZmxhZ3M7CisJaW50CQlwZW5kaW5nID0gMCwgcmMgPSAwOw0KKwlpZGVfZHJpdmVfdCAJ
KmRyaXZlID0gcS0+cXVldWVkYXRhOw0KKwl1OCAJCWFyZ3NbN10sICphcmdidWYgPSBhcmdzOw0K
KworCWlmICghYmxrX3F1ZXVlX3N0b3BwZWQocSkpCisJCXJldHVybiAtRUlPOworCisJLyogQXJl
IHRoZXJlIGFueSBwZW5kaW5nIGpvYnMgb24gdGhlIHF1ZXVlPyAqLw0KKwlwZW5kaW5nID0gKChx
LT5ycS5jb3VudFtSRUFEXSA+IDApIHx8IChxLT5ycS5jb3VudFtXUklURV0gPiAwKSkgPyAxIDog
MDsNCisJCisJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOworCWJsa19z
dGFydF9xdWV1ZShxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZs
YWdzKTsKKworCS8qIFRoZSB1bmxvYWQgZmVhdHVyZSBvZiB0aGUgSURMRV9JTU1FRElBVEUgY29t
bWFuZA0KKwkgICB0ZW1wb3JhcmlseSBkaXNhYmxlcyBIRCBwb3dlciBtYW5hZ2VtZW50IGZyb20g
c3Bpbm5pbmcgZG93bg0KKwkgICB0aGUgZGlzay4gQW55IG90aGVyIGNvbW1hbmQgd2lsbCByZWVu
YWJsZSBIRCBwbSwgc28sIGlmDQorCSAgIHRoZXJlIGFyZSBubyBwZW5kaW5nIGpvYnMgb24gdGhl
IHF1ZXVlLCBhbm90aGVyDQorCSAgIENIRUNLX1BPV0VSX01PREUxIGNvbW1hbmQgd2l0aG91dCB0
aGUgdW5sb2FkIGZlYXR1cmUgc2hvdWxkIGRvDQorCSAgIGp1c3QgZmluZS4gKi8NCisJaWYgKCFw
ZW5kaW5nKSB7DQorCQlwcmludGsoS0VSTl9ERUJVRyAiaWRlX3VucHJvdGVjdF9xdWV1ZSgpOiBO
byBwZW5kaW5nIEkvTywgcmUtZW5hYmxpbmcgcG93ZXIgbWFuYWdlbWVudC4uXG4iKTsKKwkJbWVt
c2V0KGFyZ3MsIDAsIHNpemVvZihhcmdzKSk7DQorCQlhcmdidWZbMF0gPSAweGU1OyAvKiBDSEVD
S19QT1dFUl9NT0RFMSAqLw0KKwkJaWRlX2luaXRfZHJpdmVfY21kKCZycSk7DQorCQlycS5mbGFn
cyA9IFJFUV9EUklWRV9UQVNLOw0KKwkJcnEuYnVmZmVyID0gYXJnYnVmOw0KKwkJcmMgPSBpZGVf
ZG9fZHJpdmVfY21kKGRyaXZlLCAmcnEsIGlkZV9oZWFkX3dhaXQpOw0KKwl9CisNCisJcmV0dXJu
IHJjOw0KK30KKworaW50IGlkZV9wcm90ZWN0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSwgaW50
IHVubG9hZCkKK3sKKwlpZGVfZHJpdmVfdCAJKmRyaXZlID0gcS0+cXVldWVkYXRhOworCXN0cnVj
dCByZXF1ZXN0CXJxOworCXU4IAkJYXJnc1s3XSwgKmFyZ2J1ZiA9IGFyZ3M7CisJaW50CQlyZXQg
PSAwOworCURFQ0xBUkVfQ09NUExFVElPTih3YWl0KTsKKworCW1lbXNldCgmcnEsIDAsIHNpemVv
ZihycSkpOworCW1lbXNldChhcmdzLCAwLCBzaXplb2YoYXJncykpOworCisJaWYgKGJsa19xdWV1
ZV9zdG9wcGVkKHEpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICh1bmxvYWQpIHsKKwkJYXJnYnVm
WzBdID0gMHhlMTsKKwkJYXJnYnVmWzFdID0gMHg0NDsKKwkJYXJnYnVmWzNdID0gMHg0YzsKKwkJ
YXJnYnVmWzRdID0gMHg0ZTsKKwkJYXJnYnVmWzVdID0gMHg1NTsKKwl9IGVsc2UKKwkJYXJnYnVm
WzBdID0gMHhlMDsKKworCS8qIElzc3VlIHRoZSBwYXJrIGNvbW1hbmQgJiBmcmVlemUgKi8KKwlp
ZGVfaW5pdF9kcml2ZV9jbWQoJnJxKTsKKworCXJxLmZsYWdzID0gUkVRX0RSSVZFX1RBU0s7CisJ
cnEuYnVmZmVyID0gYXJnYnVmOworCXJxLndhaXRpbmcgPSAmd2FpdDsKKwlycS5lbmRfaW8gPSBp
ZGVfZW5kX3Byb3RlY3RfcnE7CisKKwlyZXQgPSBpZGVfZG9fZHJpdmVfY21kKGRyaXZlLCAmcnEs
IGlkZV9uZXh0KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKKwlycS53YWl0aW5nID0g
TlVMTDsKKworCWlmIChyZXQpCisJeworCQlwcmludGsoS0VSTl9ERUJVRyAiaWRlX3Byb3RlY3Rf
cXVldWUoKTogV2FybmluZzogaGVhZCBOT1QgcGFya2VkIS4uXG4iKTsKKwkJaWRlX3VucHJvdGVj
dF9xdWV1ZShxKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAodW5sb2FkKSB7CisJCWlmIChh
cmdzWzNdID09IDB4YzQpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiaWRlX3Byb3RlY3RfcXVldWUo
KTogaGVhZCBwYXJrZWQuLlxuIik7CisJCWVsc2UgeworCQkJLyogZXJyb3IgcGFya2luZyB0aGUg
aGVhZCAqLworCQkJcHJpbnRrKEtFUk5fREVCVUcgImlkZV9wcm90ZWN0X3F1ZXVlKCk6IGhlYWQg
Tk9UIHBhcmtlZCEuLlxuIik7CisJCQlyZXQgPSAtRUlPOworCQkJaWRlX3VucHJvdGVjdF9xdWV1
ZShxKTsKKwkJfQorCX0gZWxzZQorCQlwcmludGsoS0VSTl9ERUJVRyAiaWRlX3Byb3RlY3RfcXVl
dWUoKTogaGVhZCBwYXJrIG5vdCByZXF1ZXN0ZWQsIHVzZWQgc3RhbmRieSEuLlxuIik7CisKKwly
ZXR1cm4gcmV0OworfQkKKworaW50IGlkZWRpc2tfaXNzdWVfcHJvdGVjdF9mbihyZXF1ZXN0X3F1
ZXVlX3QgKnEpCit7CisJaWRlX2RyaXZlX3QJCSpkcml2ZSA9IHEtPnF1ZXVlZGF0YTsKKwlpbnQg
dW5sb2FkOworCisJLyoKKwkgKiBDaGVjayBjYXBhYmlsaXR5IG9mIHRoZSBkZXZpY2UgLQorCSAq
ICAtIGlmICJpZGxlIGltbWVkaWF0ZSB3aXRoIHVubG9hZCIgaXMgc3VwcG9ydGVkIHdlIHVzZSB0
aGF0LCBlbHNlCisJICogICAgd2UgdXNlICJzdGFuZGJ5IGltbWVkaWF0ZSIgYW5kIGxpdmUgd2l0
aCBzcGlubmluZyBkb3duIHRoZSBkcml2ZS4uCisJICogICAgKFdvcmQgODQsIGJpdCAxMyBvZiBJ
REVOVElGWSBERVZJQ0UgZGF0YSkKKwkgKi8KKwlpZiAoaWRlZGlza19wcm90ZWN0X21ldGhvZCA9
PSAxKSB7CisJCXVubG9hZCA9IDE7CQorCQlwcmludGsoS0VSTl9ERUJVRyAiaWRlZGlza19pc3N1
ZV9wcm90ZWN0X2ZuKCk6IHVubG9hZCBtZXRob2QgcmVxdWVzdGVkLCBvdmVycmlkaW5nIGRyaXZl
IGNhcGFiaWxpdHkgY2hlY2suLlxuIik7CisJfQorCWVsc2UgaWYgKGlkZWRpc2tfcHJvdGVjdF9t
ZXRob2QgPT0gMikgeworCQl1bmxvYWQgPSAwOwkKKwkJcHJpbnRrKEtFUk5fREVCVUcgImlkZWRp
c2tfaXNzdWVfcHJvdGVjdF9mbigpOiBzdGFuZGJ5IG1ldGhvZCByZXF1ZXN0ZWQsIG92ZXJyaWRp
bmcgZHJpdmUgY2FwYWJpbGl0eSBjaGVjay4uXG4iKTsKKwl9CisJZWxzZSBpZiAoZHJpdmUtPmlk
LT5jZnNzZSAmICgxIDw8IDEzKSkgeworCQl1bmxvYWQgPSAxOworCQlwcmludGsoS0VSTl9ERUJV
RyAiaWRlZGlza19pc3N1ZV9wcm90ZWN0X2ZuKCk6IHVubG9hZCBzdXBwb3J0IHJlcG9ydGVkIGJ5
IGRyaXZlLi5cbiIpOworCX0KKwllbHNlIHsKKwkJdW5sb2FkID0gMDsKKwkJcHJpbnRrKEtFUk5f
REVCVUcgImlkZWRpc2tfaXNzdWVfcHJvdGVjdF9mbigpOiB1bmxvYWQgc3VwcG9ydCBOT1QgcmVw
b3J0ZWQgYnkgZHJpdmUhLi5cbiIpOworCX0KKworCXJldHVybiBpZGVfcHJvdGVjdF9xdWV1ZShx
LCB1bmxvYWQpOworfQorCitpbnQgaWRlZGlza19pc3N1ZV91bnByb3RlY3RfZm4ocmVxdWVzdF9x
dWV1ZV90ICpxKQoreworCXJldHVybiBpZGVfdW5wcm90ZWN0X3F1ZXVlKHEpOworfQorCisvKgog
ICogVGhpcyBpcyB0aWdodGx5IHdvdmVuIGludG8gdGhlIGRyaXZlci0+ZG9fc3BlY2lhbCBjYW4g
bm90IHRvdWNoLgogICogRE9OJ1QgZG8gaXQgYWdhaW4gdW50aWwgYSB0b3RhbCBwZXJzb25hbGl0
eSByZXdyaXRlIGlzIGNvbW1pdHRlZC4KICAqLwpAQCAtOTg1LDYgKzExMzcsOSBAQAogCQlkcml2
ZS0+d2NhY2hlID0gMTsKIAogCXdyaXRlX2NhY2hlKGRyaXZlLCAxKTsKKworCWJsa19xdWV1ZV9p
c3N1ZV9wcm90ZWN0X2ZuKGRyaXZlLT5xdWV1ZSwgaWRlZGlza19pc3N1ZV9wcm90ZWN0X2ZuKTsJ
CisJYmxrX3F1ZXVlX2lzc3VlX3VucHJvdGVjdF9mbihkcml2ZS0+cXVldWUsIGlkZWRpc2tfaXNz
dWVfdW5wcm90ZWN0X2ZuKTsJCiB9CiAKIHN0YXRpYyB2b2lkIGlkZV9jYWNoZWZsdXNoX3AoaWRl
X2RyaXZlX3QgKmRyaXZlKQpkaWZmIC1OdXIgbGludXgtMi42LjE3LjEvZHJpdmVycy9pZGUvaWRl
LWlvLmMgbGludXgtMi42LjE3LjEuaGRhcHMvZHJpdmVycy9pZGUvaWRlLWlvLmMKLS0tIGxpbnV4
LTIuNi4xNy4xL2RyaXZlcnMvaWRlL2lkZS1pby5jCTIwMDYtMDYtMjQgMjM6NDk6MDIuMTg1NjU1
MDAwICswMjAwCisrKyBsaW51eC0yLjYuMTcuMS5oZGFwcy9kcml2ZXJzL2lkZS9pZGUtaW8uYwky
MDA2LTA2LTI1IDAwOjQ2OjA5LjY1MTg1OTAwMCArMDIwMApAQCAtMTI0OSw2ICsxMjQ5LDE3IEBA
CiAJCX0KIAogCQkvKgorCQkgKiBEb24ndCBhY2NlcHQgYSByZXF1ZXN0IHdoZW4gdGhlIHF1ZXVl
IGlzIHN0b3BwZWQgKHVubGVzcyB3ZQorCQkgKiBhcmUgcmVzdW1pbmcgZnJvbSBzdXNwZW5kKS4g
UHJldmVudHMgZXhpc3RpbmcgcXVldWUgZW50cmllcyAKKwkJICogYmVpbmcgcHJvY2Vzc2VkIGFm
dGVyIHF1ZXVlIGlzIHN0b3BwZWQgYnkgdGhlIGhhcmQgZGlzayAKKwkJICogcHJvdGVjdGlvbiBt
ZWNoYW5pc20uLi4KKwkJICovCisJCWlmICh0ZXN0X2JpdChRVUVVRV9GTEFHX1NUT1BQRUQsICZk
cml2ZS0+cXVldWUtPnF1ZXVlX2ZsYWdzKSAmJiAhYmxrX3BtX3Jlc3VtZV9yZXF1ZXN0KHJxKSkg
eworCQkJaHdncm91cC0+YnVzeSA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCS8qCiAJCSAqIFNh
bml0eTogZG9uJ3QgYWNjZXB0IGEgcmVxdWVzdCB0aGF0IGlzbid0IGEgUE0gcmVxdWVzdAogCQkg
KiBpZiB3ZSBhcmUgY3VycmVudGx5IHBvd2VyIG1hbmFnZWQuIFRoaXMgaXMgdmVyeSBpbXBvcnRh
bnQgYXMKIAkJICogYmxrX3N0b3BfcXVldWUoKSBkb2Vzbid0IHByZXZlbnQgdGhlIGVsdl9uZXh0
X3JlcXVlc3QoKQpAQCAtMTcyOSw2ICsxNzQwLDkgQEAKIAkJd2hlcmUgPSBFTEVWQVRPUl9JTlNF
UlRfRlJPTlQ7CiAJCXJxLT5mbGFncyB8PSBSRVFfUFJFRU1QVDsKIAl9CisJaWYgKGFjdGlvbiA9
PSBpZGVfbmV4dCkKKwkJd2hlcmUgPSBFTEVWQVRPUl9JTlNFUlRfRlJPTlQ7CisKIAlfX2Vsdl9h
ZGRfcmVxdWVzdChkcml2ZS0+cXVldWUsIHJxLCB3aGVyZSwgMCk7CiAJaWRlX2RvX3JlcXVlc3Qo
aHdncm91cCwgSURFX05PX0lSUSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ss
IGZsYWdzKTsKZGlmZiAtTnVyIGxpbnV4LTIuNi4xNy4xL2RyaXZlcnMvc2NzaS9saWJhdGEtY29y
ZS5jIGxpbnV4LTIuNi4xNy4xLmhkYXBzL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCi0tLSBs
aW51eC0yLjYuMTcuMS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYwkyMDA2LTA2LTI0IDIzOjQ5
OjAyLjE5NzY1NjAwMCArMDIwMAorKysgbGludXgtMi42LjE3LjEuaGRhcHMvZHJpdmVycy9zY3Np
L2xpYmF0YS1jb3JlLmMJMjAwNi0wNi0yNSAwMDozMTo0Mi44ODk2ODk3NTAgKzAyMDAKQEAgLTc1
LDYgKzc1LDEwIEBACiAKIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphdGFfYXV4X3dxOwogCitp
bnQgbGliYXRhX3Byb3RlY3RfbWV0aG9kID0gMDsKK21vZHVsZV9wYXJhbV9uYW1lZChwcm90ZWN0
X21ldGhvZCwgbGliYXRhX3Byb3RlY3RfbWV0aG9kLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1f
REVTQyhwcm90ZWN0X21ldGhvZCwgImhkYXBzIGRpc2sgcHJvdGVjdGlvbiBtZXRob2QgKDA9YXV0
b2RldGVjdCwgMT11bmxvYWQsIDI9c3RhbmRieSkiKTsKKwogaW50IGF0YXBpX2VuYWJsZWQgPSAx
OwogbW9kdWxlX3BhcmFtKGF0YXBpX2VuYWJsZWQsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9E
RVNDKGF0YXBpX2VuYWJsZWQsICJFbmFibGUgZGlzY292ZXJ5IG9mIEFUQVBJIGRldmljZXMgKDA9
b2ZmLCAxPW9uKSIpOwpkaWZmIC1OdXIgbGludXgtMi42LjE3LjEvZHJpdmVycy9zY3NpL2xpYmF0
YS5oIGxpbnV4LTIuNi4xNy4xLmhkYXBzL2RyaXZlcnMvc2NzaS9saWJhdGEuaAotLS0gbGludXgt
Mi42LjE3LjEvZHJpdmVycy9zY3NpL2xpYmF0YS5oCTIwMDYtMDYtMjQgMjM6NDk6MDIuMTk3NjU2
MDAwICswMjAwCisrKyBsaW51eC0yLjYuMTcuMS5oZGFwcy9kcml2ZXJzL3Njc2kvbGliYXRhLmgJ
MjAwNi0wNi0yNSAwMDo0NjowOS42NTE4NTkwMDAgKzAyMDAKQEAgLTQwLDYgKzQwLDcgQEAKIAog
LyogbGliYXRhLWNvcmUuYyAqLwogZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphdGFf
YXV4X3dxOworZXh0ZXJuIGludCBsaWJhdGFfcHJvdGVjdF9tZXRob2Q7CiBleHRlcm4gaW50IGF0
YXBpX2VuYWJsZWQ7CiBleHRlcm4gaW50IGF0YXBpX2RtYWRpcjsKIGV4dGVybiBpbnQgbGliYXRh
X2Z1YTsKZGlmZiAtTnVyIGxpbnV4LTIuNi4xNy4xL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5j
IGxpbnV4LTIuNi4xNy4xLmhkYXBzL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCi0tLSBsaW51
eC0yLjYuMTcuMS9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwkyMDA2LTA2LTI0IDIzOjQ5OjAy
LjIwNTY1NzAwMCArMDIwMAorKysgbGludXgtMi42LjE3LjEuaGRhcHMvZHJpdmVycy9zY3NpL2xp
YmF0YS1zY3NpLmMJMjAwNi0wNi0yNSAwMDo0NjowOS42NjM4NTk3NTAgKzAyMDAKQEAgLTgwOSw2
ICs4MDksNDQgQEAKIAl9CiB9CiAKKyNpZiAwCitleHRlcm4gaW50IHNjc2lfcHJvdGVjdF9xdWV1
ZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIGludCB1bmxvYWQpOworZXh0ZXJuIGludCBzY3NpX3VucHJv
dGVjdF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpOworCitzdGF0aWMgaW50IGF0YV9zY3NpX2lz
c3VlX3Byb3RlY3RfZm4ocmVxdWVzdF9xdWV1ZV90ICpxKQoreworCXN0cnVjdCBzY3NpX2Rldmlj
ZSAqc2RldiA9IHEtPnF1ZXVlZGF0YTsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gKHN0cnVjdCBh
dGFfcG9ydCAqKSAmc2Rldi0+aG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGF0YV9kZXZpY2Ug
KmRldiA9ICZhcC0+ZGV2aWNlW3NkZXYtPmlkXTsKKwlpbnQgdW5sb2FkOworCisJaWYgKGxpYmF0
YV9wcm90ZWN0X21ldGhvZCA9PSAxKSB7CisJCXVubG9hZCA9IDE7CQorCQlwcmludGsoS0VSTl9E
RUJVRyAiYXRhX3Njc2lfaXNzdWVfcHJvdGVjdF9mbigpOiB1bmxvYWQgbWV0aG9kIHJlcXVlc3Rl
ZCwgb3ZlcnJpZGluZyBkcml2ZSBjYXBhYmlsaXR5IGNoZWNrLi5cbiIpOworCX0KKwllbHNlIGlm
IChsaWJhdGFfcHJvdGVjdF9tZXRob2QgPT0gMikgeworCQl1bmxvYWQgPSAwOwkKKwkJcHJpbnRr
KEtFUk5fREVCVUcgImF0YV9zY3NpX2lzc3VlX3Byb3RlY3RfZm4oKTogc3RhbmRieSBtZXRob2Qg
cmVxdWVzdGVkLCBvdmVycmlkaW5nIGRyaXZlIGNhcGFiaWxpdHkgY2hlY2suLlxuIik7CisJfQor
CWVsc2UgaWYgKGF0YV9pZF9oYXNfdW5sb2FkKGRldi0+aWQpKSB7CisJCXVubG9hZCA9IDE7CisJ
CXByaW50ayhLRVJOX0RFQlVHICJhdGFfc2NzaV9pc3N1ZV9wcm90ZWN0X2ZuKCk6IHVubG9hZCBz
dXBwb3J0IHJlcG9ydGVkIGJ5IGRyaXZlLi5cbiIpOworCX0KKwllbHNlIHsKKwkJdW5sb2FkID0g
MDsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0YV9zY3NpX2lzc3VlX3Byb3RlY3RfZm4oKTogdW5s
b2FkIHN1cHBvcnQgTk9UIHJlcG9ydGVkIGJ5IGRyaXZlIS4uXG4iKTsKKwl9CisKKwkvKiBjYWxs
IHNjc2lfcHJvdGVjdF9xdWV1ZSwgcmVxdWVzdGluZyBlaXRoZXIgdW5sb2FkIG9yIHN0YW5kYnkg
Ki8KKwlyZXR1cm4gc2NzaV9wcm90ZWN0X3F1ZXVlKHEsIHVubG9hZCk7Cit9CisKK3N0YXRpYyBp
bnQgYXRhX3Njc2lfaXNzdWVfdW5wcm90ZWN0X2ZuKHJlcXVlc3RfcXVldWVfdCAqcSkKK3sKKwly
ZXR1cm4gc2NzaV91bnByb3RlY3RfcXVldWUocSk7Cit9CisjZW5kaWYKKwogLyoqCiAgKglhdGFf
c2NzaV9zbGF2ZV9jb25maWcgLSBTZXQgU0NTSSBkZXZpY2UgYXR0cmlidXRlcwogICoJQHNkZXY6
IFNDU0kgZGV2aWNlIHRvIGV4YW1pbmUKQEAgLTgzMiw2ICs4NjgsMTAgQEAKIAogCWlmIChkZXYp
CiAJCWF0YV9zY3NpX2Rldl9jb25maWcoc2RldiwgZGV2KTsKKyNpZiAwCisJYmxrX3F1ZXVlX2lz
c3VlX3Byb3RlY3RfZm4oc2Rldi0+cmVxdWVzdF9xdWV1ZSwgYXRhX3Njc2lfaXNzdWVfcHJvdGVj
dF9mbik7CQorCWJsa19xdWV1ZV9pc3N1ZV91bnByb3RlY3RfZm4oc2Rldi0+cmVxdWVzdF9xdWV1
ZSwgYXRhX3Njc2lfaXNzdWVfdW5wcm90ZWN0X2ZuKTsJCisjZW5kaWYKIAogCXJldHVybiAwOwkv
KiBzY3NpIGxheWVyIGRvZXNuJ3QgY2hlY2sgcmV0dXJuIHZhbHVlLCBzaWdoICovCiB9CmRpZmYg
LU51ciBsaW51eC0yLjYuMTcuMS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBsaW51eC0yLjYuMTcu
MS5oZGFwcy9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwotLS0gbGludXgtMi42LjE3LjEvZHJpdmVy
cy9zY3NpL3Njc2lfbGliLmMJMjAwNi0wNi0yNCAyMzo0OTowMi4yMDk2NTcwMDAgKzAyMDAKKysr
IGxpbnV4LTIuNi4xNy4xLmhkYXBzL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCTIwMDYtMDYtMjUg
MDA6NDA6NDAuNzQzMzAzNTAwICswMjAwCkBAIC0yMTkxLDYgKzIxOTEsMTk0IEBACiAJCWRldmlj
ZV9mb3JfZWFjaF9jaGlsZChkZXYsIE5VTEwsIHRhcmdldF91bmJsb2NrKTsKIH0KIEVYUE9SVF9T
WU1CT0xfR1BMKHNjc2lfdGFyZ2V0X3VuYmxvY2spOworCisjaWYgMAorLyoKKyAqIEFzIHBlciBz
Y3NpX3dhaXRfcmVxX2VuZF9pbygpLCB3aGljaCB3YXMgcmVtb3ZlZCBpbiAyLjYuMTUKKyAqLwor
c3RhdGljIHZvaWQgc2NzaV9wcm90ZWN0X3dhaXRfcmVxX2VuZF9pbyhzdHJ1Y3QgcmVxdWVzdCAq
cmVxLCBpbnQgZXJyb3IpCit7CisJQlVHX09OKCFyZXEtPndhaXRpbmcpOworCisJY29tcGxldGUo
cmVxLT53YWl0aW5nKTsKK30KKworLyoKKyAqIEFzIHBlciBzY3NpX3dhaXRfZG9uZSgpLCBleGNl
cHQgY2FsbHMgc2NzaV9kZXZpY2VfYmxvY2sKKyAqIHRvIGJsb2NrIHRoZSBxdWV1ZSBhdCBjb21t
YW5kIGNvbXBsZXRpb24uIE9ubHkgY2FsbGVkIGJ5CisgKiBzY3NpX3Byb3RlY3Rfd2FpdCgpLgor
ICogdG9kbzoKKyAqICAtIHdlIGJsb2NrIHRoZSBxdWV1ZSByZWdhcmRsZXNzIG9mIHN1Y2Nlc3Mg
YW5kIHJlbHkgb24gdGhlCisgKiAgICBzY3NpX3Byb3RlY3RfcXVldWUgZnVuY3Rpb24gdG8gdW5i
bG9jayBpZiB0aGUgY29tbWFuZAorICogICAgZmFpbGVkLi4uIHNob3VsZCB3ZSBhbHNvIGluc3Bl
Y3QgaGVyZT8KKyAqLworc3RhdGljIHZvaWQgc2NzaV9wcm90ZWN0X3dhaXRfZG9uZShzdHJ1Y3Qg
c2NzaV9jbW5kICpjbWQpCit7CisJc3RydWN0IHJlcXVlc3QgKnJlcSA9IGNtZC0+cmVxdWVzdDsK
KwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGNtZC0+ZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlOwor
CXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOworCXVuc2lnbmVkIGxvbmcg
ZmxhZ3M7CisKKwlyZXEtPnJxX3N0YXR1cyA9IFJRX1NDU0lfRE9ORTsJLyogQnVzeSwgYnV0IGlu
ZGljYXRlIHJlcXVlc3QgZG9uZSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9j
aywgZmxhZ3MpOworCWlmIChibGtfcnFfdGFnZ2VkKHJlcSkpCisJCWJsa19xdWV1ZV9lbmRfdGFn
KHEsIHJlcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7
CisKKwlzY3NpX2ludGVybmFsX2RldmljZV9ibG9jayhzZGV2KTsKKworCWlmIChyZXEtPndhaXRp
bmcpCisJCWNvbXBsZXRlKHJlcS0+d2FpdGluZyk7Cit9CisKKy8qCisgKiBBcyBwZXIgc2NzaV93
YWl0X3JlcSgpLCBleGNlcHQgc2V0cyB0aGUgY29tcGxldGlvbiBmdW5jdGlvbgorICogYXMgc2Nz
aV9wcm90ZWN0X3dhaXRfZG9uZSgpLgorICovCit2b2lkIHNjc2lfcHJvdGVjdF93YWl0X3JlcShz
dHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpzcmVxLCBjb25zdCB2b2lkICpjbW5kLCB2b2lkICpidWZmZXIs
CisJCQkgICB1bnNpZ25lZCBidWZmbGVuLCBpbnQgdGltZW91dCwgaW50IHJldHJpZXMpCit7CisJ
REVDTEFSRV9DT01QTEVUSU9OKHdhaXQpOworCisJc3JlcS0+c3JfcmVxdWVzdC0+d2FpdGluZyA9
ICZ3YWl0OworCXNyZXEtPnNyX3JlcXVlc3QtPnJxX3N0YXR1cyA9IFJRX1NDU0lfQlVTWTsKKwlz
cmVxLT5zcl9yZXF1ZXN0LT5lbmRfaW8gPSBzY3NpX3Byb3RlY3Rfd2FpdF9yZXFfZW5kX2lvOwor
CXNjc2lfZG9fcmVxKHNyZXEsIGNtbmQsIGJ1ZmZlciwgYnVmZmxlbiwgc2NzaV9wcm90ZWN0X3dh
aXRfZG9uZSwKKwkJICAgIHRpbWVvdXQsIHJldHJpZXMpOworCXdhaXRfZm9yX2NvbXBsZXRpb24o
JndhaXQpOworCXNyZXEtPnNyX3JlcXVlc3QtPndhaXRpbmcgPSBOVUxMOworCWlmIChzcmVxLT5z
cl9yZXF1ZXN0LT5ycV9zdGF0dXMgIT0gUlFfU0NTSV9ET05FKQorCQlzcmVxLT5zcl9yZXN1bHQg
fD0gKERSSVZFUl9FUlJPUiA8PCAyNCk7CisKKwlfX3Njc2lfcmVsZWFzZV9yZXF1ZXN0KHNyZXEp
OworfQorCisvKgorICogc2NzaV91bnByb3RlY3RfcXVldWUoKQorICogIC0gcmVsZWFzZSB0aGUg
cXVldWUgdGhhdCB3YXMgcHJldmlvdXNseSBibG9ja2VkCisgKi8KK2ludCBzY3NpX3VucHJvdGVj
dF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpeworCisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2
ID0gcS0+cXVldWVkYXRhOworCWludCByYyA9IDAsIHBlbmRpbmcgPSAwOworCXU4IHNjc2lfY21k
W01BWF9DT01NQU5EX1NJWkVdOworCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcjsKKworCWlm
IChzZGV2LT5zZGV2X3N0YXRlICE9IFNERVZfQkxPQ0spCisJCXJldHVybiAtRU5YSU87CisKKwkv
KiBBcmUgdGhlcmUgYW55IHBlbmRpbmcgam9icyBvbiB0aGUgcXVldWU/ICovCisJCQlwZW5kaW5n
ID0gKChxLT5ycS5jb3VudFtSRUFEXSA+IDApIHx8IChxLT5ycS5jb3VudFtXUklURV0gPiAwKSkg
PyAxIDogMDsKKworCQkJCXJjID0gc2NzaV9pbnRlcm5hbF9kZXZpY2VfdW5ibG9jayhzZGV2KTsK
KwkJCQlpZiAocmMpCisJCQkJCXJldHVybiByYzsKKworCQkJCWlmICghcGVuZGluZykgeworcHJp
bnRrKEtFUk5fREVCVUcgInNjc2lfdW5wcm90ZWN0X3F1ZXVlKCk6IE5vIHBlbmRpbmcgSS9PLCBy
ZS1lbmFibGluZyBwb3dlciBtYW5hZ2VtZW50Li5cbiIpOworCittZW1zZXQoc2NzaV9jbWQsIDAs
IHNpemVvZihzY3NpX2NtZCkpOworc2NzaV9jbWRbMF0gID0gQVRBXzE2Oworc2NzaV9jbWRbMV0g
ID0gKDMgPDwgMSk7IC8qIE5vbi1kYXRhICovCisvKiBzY3NpX2NtZFsyXSBpcyBhbHJlYWR5IDAg
LS0gbm8gb2ZmLmxpbmUsIGNjLCBvciBkYXRhIHhmZXIgKi8KK3Njc2lfY21kWzE0XSA9IDB4ZTU7
IC8qIENIRUNLX1BPV0VSX01PREUxICovCisKKy8qIEdvb2QgdmFsdWVzIGZvciB0aW1lb3V0IGFu
ZCByZXRyaWVzPyAgVmFsdWVzIGJlbG93CisgICBmcm9tIHNjc2lfaW9jdGxfc2VuZF9jb21tYW5k
KCkgZm9yIGRlZmF1bHQgY2FzZS4uLiAqLworaWYgKHNjc2lfZXhlY3V0ZV9yZXEoc2Rldiwgc2Nz
aV9jbWQsIERNQV9OT05FLCBOVUxMLCAwLCAmc3NoZHIsCisJCSAgICAgKDEwKkhaKSwgNSkpCisJ
cmMgPSAtRUlPOworCQkJCX0KKwkJCQlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChz
Y3NpX3VucHJvdGVjdF9xdWV1ZSk7CisKKy8qCisgKiBzY3NpX3Byb3RlY3RfcXVldWUoKQorICog
IC0gYnVpbGQgYW5kIGlzc3VlIHRoZSBwYXJrL3N0YW5kYnkgY29tbWFuZC4uCisgKiAgLSBxdWV1
ZSBpcyBibG9ja2VkIGR1cmluZyBjb21tYW5kIGNvbXBsZXRpb24gaGFuZGxlcgorICovCitpbnQg
c2NzaV9wcm90ZWN0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSwgaW50IHVubG9hZCkKK3sKKwlz
dHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBxLT5xdWV1ZWRhdGE7CisJaW50IHJjID0gMDsKKwl1
OCBzY3NpX2NtZFtNQVhfQ09NTUFORF9TSVpFXTsKKwl1OCBhcmdzWzddOworCXN0cnVjdCBzY3Np
X3JlcXVlc3QgKnNyZXE7CisJdW5zaWduZWQgY2hhciAqc2IsICpkZXNjOworCisJaWYgKHNkZXYt
PnNkZXZfc3RhdGUgIT0gU0RFVl9SVU5OSU5HKQorCQlyZXR1cm4gLUVOWElPOworCisJbWVtc2V0
KGFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisKKwlpZiAodW5sb2FkKSB7CisJCWFyZ3NbMF0gPSAw
eGUxOworCQlhcmdzWzFdID0gMHg0NDsKKwkJYXJnc1szXSA9IDB4NGM7CisJCWFyZ3NbNF0gPSAw
eDRlOworCQlhcmdzWzVdID0gMHg1NTsKKwl9IGVsc2UKKwkJYXJnc1swXSA9IDB4ZTA7CisKKwlt
ZW1zZXQoc2NzaV9jbWQsIDAsIHNpemVvZihzY3NpX2NtZCkpOworCXNjc2lfY21kWzBdICA9IEFU
QV8xNjsKKwlzY3NpX2NtZFsxXSAgPSAoMyA8PCAxKTsgLyogTm9uLWRhdGEgKi8KKwlzY3NpX2Nt
ZFsyXSAgPSAweDIwOyAgICAgLyogbm8gb2ZmLmxpbmUsIG9yIGRhdGEgeGZlciwgcmVxdWVzdCBj
YyAqLworCXNjc2lfY21kWzRdICA9IGFyZ3NbMV07CisJc2NzaV9jbWRbNl0gID0gYXJnc1syXTsK
KwlzY3NpX2NtZFs4XSAgPSBhcmdzWzNdOworCXNjc2lfY21kWzEwXSA9IGFyZ3NbNF07CisJc2Nz
aV9jbWRbMTJdID0gYXJnc1s1XTsKKwlzY3NpX2NtZFsxNF0gPSBhcmdzWzBdOworCisJc3JlcSA9
IHNjc2lfYWxsb2NhdGVfcmVxdWVzdChzZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNyZXEpIHsK
KwkJcmMgPSAtRUlOVFI7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3JlcS0+c3JfZGF0YV9kaXJl
Y3Rpb24gPSBETUFfTk9ORTsKKworCXNjc2lfcHJvdGVjdF93YWl0X3JlcShzcmVxLCBzY3NpX2Nt
ZCwgTlVMTCwgMCwgKDEwKkhaKSwgNSk7CisKKwlpZiAoIXNyZXEtPnNyX3Jlc3VsdCA9PSAoKERS
SVZFUl9TRU5TRSA8PCAyNCkgKyBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pKSB7CisJCXByaW50
ayhLRVJOX0RFQlVHICJzY3NpX3Byb3RlY3RfcXVldWUoKTogaGVhZCBOT1QgcGFya2VkIS4uXG4i
KTsKKwkJc2NzaV91bnByb3RlY3RfcXVldWUocSk7CQkvKiBqdXN0IGluIGNhc2Ugd2Ugc3RpbGwg
bWFuYWdlZCB0byBibG9jayAqLworCQlyYyA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJ
c2IgPSBzcmVxLT5zcl9zZW5zZV9idWZmZXI7CisJZGVzYyA9IHNiICsgODsKKworLyogUmV0cmll
dmUgZGF0YSBmcm9tIGNoZWNrIGNvbmRpdGlvbiAqLworCWFyZ3NbMV0gPSBkZXNjWzNdOworCWFy
Z3NbMl0gPSBkZXNjWzVdOworCWFyZ3NbM10gPSBkZXNjWzddOworCWFyZ3NbNF0gPSBkZXNjWzld
OworCWFyZ3NbNV0gPSBkZXNjWzExXTsKKwlhcmdzWzBdID0gZGVzY1sxM107CisKKwlpZiAodW5s
b2FkKSB7CisJCWlmIChhcmdzWzNdID09IDB4YzQpCisJCQlwcmludGsoS0VSTl9ERUJVRyAic2Nz
aV9wcm90ZWN0X3F1ZXVlKCk6IGhlYWQgcGFya2VkLi5cbiIpOworCQllbHNlIHsKKy8qIGVycm9y
IHBhcmtpbmcgdGhlIGhlYWQgKi8KKwkJCXByaW50ayhLRVJOX0RFQlVHICJzY3NpX3Byb3RlY3Rf
cXVldWUoKTogaGVhZCBOT1QgcGFya2VkIS4uXG4iKTsKKwkJCXJjID0gLUVJTzsKKwkJCXNjc2lf
dW5wcm90ZWN0X3F1ZXVlKHEpOworCQl9CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0RFQlVHICJz
Y3NpX3Byb3RlY3RfcXVldWUoKTogaGVhZCBwYXJrIG5vdCByZXF1ZXN0ZWQsIHVzZWQgc3RhbmRi
eSEuLlxuIik7CisKK2Vycm9yOgorCXNjc2lfcmVsZWFzZV9yZXF1ZXN0KHNyZXEpOworCXJldHVy
biByYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNjc2lfcHJvdGVjdF9xdWV1ZSk7CisjZW5kaWYK
IAogLyoqCiAgKiBzY3NpX2ttYXBfYXRvbWljX3NnIC0gZmluZCBhbmQgYXRvbWljYWxseSBtYXAg
YW4gc2ctZWxlbW50CmRpZmYgLU51ciBsaW51eC0yLjYuMTcuMS9pbmNsdWRlL2xpbnV4L2F0YS5o
IGxpbnV4LTIuNi4xNy4xLmhkYXBzL2luY2x1ZGUvbGludXgvYXRhLmgKLS0tIGxpbnV4LTIuNi4x
Ny4xL2luY2x1ZGUvbGludXgvYXRhLmgJMjAwNi0wNi0yNCAyMzo0OTowMi4yMjE2NTgwMDAgKzAy
MDAKKysrIGxpbnV4LTIuNi4xNy4xLmhkYXBzL2luY2x1ZGUvbGludXgvYXRhLmgJMjAwNi0wNi0y
NSAwMDo0Mjo0Mi4yNTg4OTc3NTAgKzAyMDAKQEAgLTI3Nyw2ICsyNzcsNyBAQAogI2RlZmluZSBh
dGFfaWRfcmFoZWFkX2VuYWJsZWQoaWQpICgoaWQpWzg1XSAmICgxIDw8IDYpKQogI2RlZmluZSBh
dGFfaWRfd2NhY2hlX2VuYWJsZWQoaWQpICgoaWQpWzg1XSAmICgxIDw8IDUpKQogI2RlZmluZSBh
dGFfaWRfaHBhX2VuYWJsZWQoaWQpCSgoaWQpWzg1XSAmICgxIDw8IDEwKSkKKyNkZWZpbmUgYXRh
X2lkX2hhc191bmxvYWQoaWQpICAgKChpZClbODRdICYgKDEgPDwgMTMpKQogI2RlZmluZSBhdGFf
aWRfaGFzX2Z1YShpZCkJKChpZClbODRdICYgKDEgPDwgNikpCiAjZGVmaW5lIGF0YV9pZF9oYXNf
Zmx1c2goaWQpCSgoaWQpWzgzXSAmICgxIDw8IDEyKSkKICNkZWZpbmUgYXRhX2lkX2hhc19mbHVz
aF9leHQoaWQpICgoaWQpWzgzXSAmICgxIDw8IDEzKSkKZGlmZiAtTnVyIGxpbnV4LTIuNi4xNy4x
L2luY2x1ZGUvbGludXgvYmxrZGV2LmggbGludXgtMi42LjE3LjEuaGRhcHMvaW5jbHVkZS9saW51
eC9ibGtkZXYuaAotLS0gbGludXgtMi42LjE3LjEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAkyMDA2
LTA2LTI0IDIzOjQ5OjAyLjIzMzY1ODAwMCArMDIwMAorKysgbGludXgtMi42LjE3LjEuaGRhcHMv
aW5jbHVkZS9saW51eC9ibGtkZXYuaAkyMDA2LTA2LTI1IDAwOjQ2OjA5LjY3NTg2MDUwMCArMDIw
MApAQCAtMjk3LDYgKzI5Nyw4IEBACiB0eXBlZGVmIGludCAoaXNzdWVfZmx1c2hfZm4pIChyZXF1
ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IGdlbmRpc2sgKiwgc2VjdG9yX3QgKik7CiB0eXBlZGVmIHZv
aWQgKHByZXBhcmVfZmx1c2hfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3Qg
Kik7CiB0eXBlZGVmIHZvaWQgKHNvZnRpcnFfZG9uZV9mbikoc3RydWN0IHJlcXVlc3QgKik7Cit0
eXBlZGVmIGludCAoaXNzdWVfcHJvdGVjdF9mbikgKHJlcXVlc3RfcXVldWVfdCAqKTsKK3R5cGVk
ZWYgaW50IChpc3N1ZV91bnByb3RlY3RfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKik7CiAKIGVudW0g
YmxrX3F1ZXVlX3N0YXRlIHsKIAlRdWV1ZV9kb3duLApAQCAtMzM5LDYgKzM0MSw4IEBACiAJaXNz
dWVfZmx1c2hfZm4JCSppc3N1ZV9mbHVzaF9mbjsKIAlwcmVwYXJlX2ZsdXNoX2ZuCSpwcmVwYXJl
X2ZsdXNoX2ZuOwogCXNvZnRpcnFfZG9uZV9mbgkJKnNvZnRpcnFfZG9uZV9mbjsKKwlpc3N1ZV9w
cm90ZWN0X2ZuCSppc3N1ZV9wcm90ZWN0X2ZuOworCWlzc3VlX3VucHJvdGVjdF9mbgkqaXNzdWVf
dW5wcm90ZWN0X2ZuOwogCiAJLyoKIAkgKiBEaXNwYXRjaCBxdWV1ZSBzb3J0aW5nCkBAIC03MjAs
NiArNzI0LDggQEAKIGV4dGVybiB1bnNpZ25lZCBibGtfb3JkZXJlZF9jdXJfc2VxKHJlcXVlc3Rf
cXVldWVfdCAqKTsKIGV4dGVybiB1bnNpZ25lZCBibGtfb3JkZXJlZF9yZXFfc2VxKHN0cnVjdCBy
ZXF1ZXN0ICopOwogZXh0ZXJuIHZvaWQgYmxrX29yZGVyZWRfY29tcGxldGVfc2VxKHJlcXVlc3Rf
cXVldWVfdCAqLCB1bnNpZ25lZCwgaW50KTsKK2V4dGVybiB2b2lkIGJsa19xdWV1ZV9pc3N1ZV9w
cm90ZWN0X2ZuKHJlcXVlc3RfcXVldWVfdCAqLCBpc3N1ZV9wcm90ZWN0X2ZuICopOworZXh0ZXJu
IHZvaWQgYmxrX3F1ZXVlX2lzc3VlX3VucHJvdGVjdF9mbihyZXF1ZXN0X3F1ZXVlX3QgKiwgaXNz
dWVfdW5wcm90ZWN0X2ZuICopOwogCiBleHRlcm4gaW50IGJsa19ycV9tYXBfc2cocmVxdWVzdF9x
dWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHN0cnVjdCBzY2F0dGVybGlzdCAqKTsKIGV4dGVy
biB2b2lkIGJsa19kdW1wX3JxX2ZsYWdzKHN0cnVjdCByZXF1ZXN0ICosIGNoYXIgKik7CmRpZmYg
LU51ciBsaW51eC0yLjYuMTcuMS9pbmNsdWRlL2xpbnV4L2lkZS5oIGxpbnV4LTIuNi4xNy4xLmhk
YXBzL2luY2x1ZGUvbGludXgvaWRlLmgKLS0tIGxpbnV4LTIuNi4xNy4xL2luY2x1ZGUvbGludXgv
aWRlLmgJMjAwNi0wNi0yNCAyMzo0OTowMi4yMzc2NTkwMDAgKzAyMDAKKysrIGxpbnV4LTIuNi4x
Ny4xLmhkYXBzL2luY2x1ZGUvbGludXgvaWRlLmgJMjAwNi0wNi0yNSAwMDo0NjowOS42Nzk4NjA3
NTAgKzAyMDAKQEAgLTEwODUsNiArMTA4NSw3IEBACiAgKi8KIHR5cGVkZWYgZW51bSB7CiAJaWRl
X3dhaXQsCS8qIGluc2VydCBycSBhdCBlbmQgb2YgbGlzdCwgYW5kIHdhaXQgZm9yIGl0ICovCisJ
aWRlX25leHQsCS8qIGluc2VydCBycSBpbW1lZGlhdGVseSBhZnRlciBjdXJyZW50IHJlcXVlc3Qg
Ki8KIAlpZGVfcHJlZW1wdCwJLyogaW5zZXJ0IHJxIGluIGZyb250IG9mIGN1cnJlbnQgcmVxdWVz
dCAqLwogCWlkZV9oZWFkX3dhaXQsCS8qIGluc2VydCBycSBpbiBmcm9udCBvZiBjdXJyZW50IHJl
cXVlc3QgYW5kIHdhaXQgZm9yIGl0ICovCiAJaWRlX2VuZAkJLyogaW5zZXJ0IHJxIGF0IGVuZCBv
ZiBsaXN0LCBidXQgZG9uJ3Qgd2FpdCBmb3IgaXQgKi8K
</data>        

          </attachment>
    </bug>

</bugzilla>