<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>12221</bug_id>
          
          <creation_ts>2007-07-05 17:39:05 +0400</creation_ts>
          <short_desc>[4.0.1] forcedeth &amp; MAC</short_desc>
          <delta_ts>2008-03-24 12:46:02 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>kernel-image-std-smp</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>12100</blocked>
    
    <blocked>14167</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>led</reporter>
          <assigned_to name="Sergey Vlasov">vsu</assigned_to>
          <cc>boyarsh</cc>
    
    <cc>icesik</cc>
    
    <cc>lakostis</cc>
    
    <cc>ldv</cc>
    
    <cc>mike</cc>
    
    <cc>peet</cc>
    
    <cc>solo</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>52385</commentid>
    <comment_count>0</comment_count>
    <who name="">led</who>
    <bug_when>2007-07-05 17:39:05 +0400</bug_when>
    <thetext>forcedeth.c: Reverse Engineered nForce ethernet driver. Version 0.56.
ACPI: PCI Interrupt Link [APCH] enabled at IRQ 21
GSI 19 sharing vector 0xC1 and IRQ 19
ACPI: PCI Interrupt 0000:00:07.0[A] -&gt; Link [APCH] -&gt; GSI 21 (level, low) -&gt; 
IRQ 193
PCI: Setting latency timer of device 0000:00:07.0 to 64
forcedeth: using HIGHDMA
0000:00:07.0: Invalid Mac address detected: 2d:b7:72:4d:1a:00
Please complain to your hardware vendor. Switching to a random MAC.

Таким образом, после загрузки получаем каждый раз другой MAC для сетевого 
адаптера (nForce, интегрированный).
В сети говорят, что этот баг починен не то в версии forcedeth 0.57, не то 0.60</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52394</commentid>
    <comment_count>1</comment_count>
    <who name="">led</who>
    <bug_when>2007-07-05 20:50:35 +0400</bug_when>
    <thetext>Могу предоставить бэкпорт forcedeth-0.60 на 2.6.18 или патч к оригинальному 
forcedeth-0.60. Пересобранное kernel-image-std-smp-2.6.18-alt6 с этим 
модулем - MAC-адрес определяется правильно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52484</commentid>
    <comment_count>2</comment_count>
    <who name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</who>
    <bug_when>2007-07-07 00:40:38 +0400</bug_when>
    <thetext>0.57: 14 May 2006: Mac address set in probe/remove and order corrections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52487</commentid>
    <comment_count>3</comment_count>
    <who name="">led</who>
    <bug_when>2007-07-07 00:55:13 +0400</bug_when>
    <thetext>(In reply to comment #2)
&gt; 0.57: 14 May 2006: Mac address set in probe/remove and order corrections.

Может в 0.57 и починили, я проверял 0.60.
У нас в текущем kernel-image-std-smp - 0.56</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52488</commentid>
    <comment_count>4</comment_count>
    <who name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</who>
    <bug_when>2007-07-07 01:02:07 +0400</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; 0.57: 14 May 2006: Mac address set in probe/remove and order corrections.
&gt; 
&gt; Может в 0.57 и починили, я проверял 0.60.
&gt; У нас в текущем kernel-image-std-smp - 0.56

Я к тому, откуда начинать смотреть коммит. Собственно, я его уже себе засунул в
git, так что в новый -wks-smp оно попадет.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52491</commentid>
    <comment_count>5</comment_count>
    <who name="">led</who>
    <bug_when>2007-07-07 01:14:28 +0400</bug_when>
    <thetext>(In reply to comment #4)
&gt; Собственно, я его уже себе засунул в
&gt; git, так что в новый -wks-smp оно попадет.

PCI ID 10de:03ef там уже присутствует?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52494</commentid>
    <comment_count>6</comment_count>
    <who name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</who>
    <bug_when>2007-07-07 01:40:37 +0400</bug_when>
    <thetext>(In reply to comment #5)
&gt; PCI ID 10de:03ef там уже присутствует?
Это subsystem ID на всю плату? Или все-таки видео? 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52496</commentid>
    <comment_count>7</comment_count>
    <who name="">led</who>
    <bug_when>2007-07-07 02:03:22 +0400</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; PCI ID 10de:03ef там уже присутствует?
&gt; Это subsystem ID на всю плату? Или все-таки видео? 

На Ethernet (речь ведь об forcedeth).

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53928</commentid>
    <comment_count>8</comment_count>
      <attachid>2142</attachid>
    <who name="">led</who>
    <bug_when>2007-08-10 20:03:32 +0400</bug_when>
    <thetext>Created attachment 2142
linux-2.6.18-forcedeth-0.60.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53930</commentid>
    <comment_count>9</comment_count>
    <who name="AEN">aen</who>
    <bug_when>2007-08-10 20:23:54 +0400</bug_when>
    <thetext>Не блокер для Desktop  4.0.0 , так мы его никогда не выпустим.
Блокер 4.0.1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53936</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2007-08-10 21:25:34 +0400</bug_when>
    <thetext>Согласен.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53950</commentid>
    <comment_count>11</comment_count>
      <attachid>2143</attachid>
    <who name="">led</who>
    <bug_when>2007-08-12 20:17:32 +0400</bug_when>
    <thetext>Created attachment 2143
linux-2.6.18-forcedeth-0.60.patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53951</commentid>
    <comment_count>12</comment_count>
    <who name="">led</who>
    <bug_when>2007-08-12 20:20:15 +0400</bug_when>
    <thetext>(In reply to comment #10)
&gt; Согласен.

C тем, что поддержка таких &quot;малораспространённых&quot; систем на чипсете nForce, 
выпускаемых с начала этого года - абсолютно необязательна?:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53952</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2007-08-12 21:49:09 +0400</bug_when>
    <thetext>4.0.1 -- это то, что должно поехать в алюминий при отсутствии чего особого :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53960</commentid>
    <comment_count>14</comment_count>
    <who name="Konstantin A Lepikhov (L.A. Kostis)">lakostis</who>
    <bug_when>2007-08-13 01:57:33 +0400</bug_when>
    <thetext>Исправленная версия лежит у меня в git.alt:packages/kernel-image-2.6.18
heads/fix-drivers-net--forcedeth (BTW, вместе с поддержкой NAPI). Если vsu@ ее
одобрит, то в след. сборке std-smp/std-pae данная проблема будет исправлена.

PS Патч не внушает доверия - откуда 31 мая 2006 взялась версия 0.60?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53962</commentid>
    <comment_count>15</comment_count>
    <who name="">led</who>
    <bug_when>2007-08-13 04:51:35 +0400</bug_when>
    <thetext>(In reply to comment #14)
&gt; Исправленная версия лежит у меня в git.alt:packages/kernel-image-2.6.18
&gt; heads/fix-drivers-net--forcedeth (BTW, вместе с поддержкой NAPI). Если vsu@ 
ее
&gt; одобрит, то в след. сборке std-smp/std-pae данная проблема будет исправлена.
&gt; 
&gt; PS Патч не внушает доверия - откуда 31 мая 2006 взялась версия 0.60?

Патч == файл с сайта nvidia + небольшие изменения для совместимости с 2.6.18. 
Эти изменения я могу предоставить.
Почему в файле на nvidia.com стоит 31 May 2006 - я не знаю, я это не правил.

Я не настаиваю на именно этом патче. Я могу только сказать, что ЭТО - НОРМАЛЬНО 
работает уже длительное время и с новыми nForce, и со старыми.

Я также могу предоставить патч, который не добавляет ничего, кроме правильного 
чтения MAC-адреса на старых и на новых nForce (как я это сделал в etherboot) - 
это будет несколько строк. Но, (почему-то) мне кажется, что этот патч вызовет 
ещё меньше доверия.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55818</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2007-09-25 19:11:06 +0400</bug_when>
    <thetext>2 vsu: можно в очередной сборке приложить?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57232</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2007-10-31 14:33:12 +0300</bug_when>
    <thetext>2 vsu: эта проблема для Desktop 4.0.1 похожа на release critical, таких
материнок сейчас достаточно.  Вероятно, для Server исправление тоже пригодится.

Вот, отдаю людям очередную сборку с std-smp и надеюсь, что пока не накопится
изменений на следующий minor -- у них нигде не закупят чуть более новых nforce...

Огромная человеческая просьба принять патчи или обновить драйвер.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57269</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2007-10-31 21:15:42 +0300</bug_when>
    <thetext>BTW ядро с исправлением доступно здесь:
ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/led/Sisyphus/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57475</commentid>
    <comment_count>19</comment_count>
    <who name="Igor Zubkov">icesik</who>
    <bug_when>2007-11-06 02:21:44 +0300</bug_when>
    <thetext>(In reply to comment #13)
&gt; 4.0.1 -- это то, что должно поехать в алюминий при отсутствии чего особого :)

Ага. 4.0.0 в то время уехало в алюминий.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59917</commentid>
    <comment_count>20</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2007-12-24 17:17:06 +0300</bug_when>
    <thetext>Должно быть исправлено в kernel-image-std-smp 2.6.18-alt10 (хотя вроде бы
остаётся какое-то странное железо, на котором не работает - разработчики из
nvidia посылают в этих случаях за обновлением BIOS).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59936</commentid>
    <comment_count>21</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2007-12-24 18:58:10 +0300</bug_when>
    <thetext>На MCP67 заработало, спасибо!

Кажется, одних изменений со времени alt6 достаточно для выпуска Server 4.0.2...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2142</attachid>
            <date>2007-08-10 20:03:32 +0400</date>
            <delta_ts>2007-08-12 20:17:32 +0400</delta_ts>
            <desc>linux-2.6.18-forcedeth-0.60.patch</desc>
            <filename>linux-2.6.18-forcedeth-0.60.patch</filename>
            <type>text/plain</type>
            <size>154527</size>
            <attacher>led</attacher>
            
              <data encoding="base64">ZGlmZiAtdXJOIGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvZHJpdmVycy9uZXQvZm9yY2VkZXRo
LmMga2VybmVsLXNvdXJjZS0yLjYuMTgvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKLS0tIGtlcm5l
bC1zb3VyY2UtMi42LjE4Lm9yaWcvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMJMjAwNi0wOS0yMCAw
Njo0MjowNiArMDMwMAorKysga2VybmVsLXNvdXJjZS0yLjYuMTgvZHJpdmVycy9uZXQvZm9yY2Vk
ZXRoLmMJMjAwNy0wNy0wNSAxODo0MToyOCArMDMwMApAQCAtMTA4LDcgKzEwOCwxMSBAQAogICoJ
MC41MzogMTkgTWFyIDIwMDY6IEZpeCBpbml0IGZyb20gbG93IHBvd2VyIG1vZGUgYW5kIGFkZCBo
dyByZXNldC4KICAqCTAuNTQ6IDIxIE1hciAyMDA2OiBGaXggc3BpbiBsb2NrcyBmb3IgbXVsdGkg
aXJxcyBhbmQgY2xlYW51cC4KICAqCTAuNTU6IDIyIE1hciAyMDA2OiBBZGQgZmxvdyBjb250cm9s
IChwYXVzZSBmcmFtZSkuCi0gKgkwLjU2OiAyMiBNYXIgMjAwNjogQWRkaXRpb25hbCBldGh0b29s
IGNvbmZpZyBhbmQgbW9kdWxlcGFyYW0gc3VwcG9ydC4KKyAqCTAuNTY6IDIyIE1hciAyMDA2OiBB
ZGRpdGlvbmFsIGV0aHRvb2wgYW5kIG1vZHVsZXBhcmFtIHN1cHBvcnQuCisgKgkwLjU3OiAxNCBN
YXkgMjAwNjogTW92ZWQgbWFjIGFkZHJlc3Mgd3JpdGVzIHRvIG52X3Byb2JlIGFuZCBudl9yZW1v
dmUuCisgKgkwLjU4OiAyMCBNYXkgMjAwNjogT3B0aW1pemVkIHJ4IGFuZCB0eCBkYXRhIHBhdGhz
LgorICoJMC41OTogMzEgTWF5IDIwMDY6IEFkZGVkIHN1cHBvcnQgZm9yIHNpZGViYW5kIG1hbmFn
ZW1lbnQgdW5pdC4KKyAqCTAuNjA6IDMxIE1heSAyMDA2OiBBZGRlZCBzdXBwb3J0IGZvciByZWNv
dmVyYWJsZSBlcnJvci4KICAqCiAgKiBLbm93biBidWdzOgogICogV2Ugc3VzcGVjdCB0aGF0IG9u
IHNvbWUgaGFyZHdhcmUgbm8gVFggZG9uZSBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQuCkBAIC0x
MjAsNyArMTI0LDcgQEAKICAqIERFVl9ORUVEX1RJTUVSSVJRIHdpbGwgbm90IGhhcm0geW91IG9u
IHNhbmUgaGFyZHdhcmUsIG9ubHkgZ2VuZXJhdGluZyBhIGZldwogICogc3VwZXJmbHVvdXMgdGlt
ZXIgaW50ZXJydXB0cyBmcm9tIHRoZSBuaWMuCiAgKi8KLSNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJ
T04JCSIwLjU2IgorI2RlZmluZSBGT1JDRURFVEhfVkVSU0lPTgkJIjAuNjAtRHJpdmVyIFBhY2th
Z2UgVjEuMjEiCiAjZGVmaW5lIERSVl9OQU1FCQkJImZvcmNlZGV0aCIKIAogI2luY2x1ZGUgPGxp
bnV4L21vZHVsZS5oPgpAQCAtMTM4LDE5ICsxNDIsMTU1IEBACiAjaW5jbHVkZSA8bGludXgvcmFu
ZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4u
aD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9u
Lmg+CisKKyNkZWZpbmUgUkhFUzMgIAkJMAorI2RlZmluZSBTTEVTOQkgCTEKKyNkZWZpbmUgUkhF
UzQJCTIKKyNkZWZpbmUgU1VTRTEwCQkzIAorI2RlZmluZQlGRURPUkE1CQk0IAorCisgCisjaWYg
TElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDEzKQorI2RlZmluZSBOVlZF
UiBGRURPUkE1CQkKKyNlbGlmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIs
Niw5KQorI2RlZmluZSBOVlZFUiBTVVNFMTAJCQorI2VsaWYgTElOVVhfVkVSU0lPTl9DT0RFID4g
S0VSTkVMX1ZFUlNJT04oMiw2LDYpCisjZGVmaW5lIE5WVkVSIFJIRVM0CQorI2VsaWYgTElOVVhf
VkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDApCisjZGVmaW5lIE5WVkVSIFNMRVM5
CQorI2Vsc2UKKyNkZWZpbmUgTlZWRVIgUkhFUzMgIAkKKyNlbmRpZgorCisjaWYgTlZWRVIgPiBS
SEVTMwogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPGxp
bnV4L2ZvcmNlZGV0aC1jb21wYXQuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgog
I2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8
YXNtL3N5c3RlbS5oPgogCi0jaWYgMAorI2lmZGVmICBOVkxBTl9ERUJVRwogI2RlZmluZSBkcHJp
bnRrCQkJcHJpbnRrCiAjZWxzZQogI2RlZmluZSBkcHJpbnRrKHguLi4pCQlkbyB7IH0gd2hpbGUg
KDApCiAjZW5kaWYKIAorLyogaXQgc2hvdWxkIGFkZCBpbiBwY2lfaWRzLmggKi8KKyNpZm5kZWYg
UENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJ
RElBX05WRU5FVF8xMiAweDAyNjggCisjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9OVklE
SUFfTlZFTkVUXzEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMyAweDAy
NjkgCisjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE0CisjZGVm
aW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNCAweDAzNzIgCisjZW5kaWYKKyNpZm5k
ZWYgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURf
TlZJRElBX05WRU5FVF8xNSAweDAzNzMgCisjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9O
VklESUFfTlZFTkVUXzE2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNiAw
eDAzRTUKKyNlbmRpZgorI2lmbmRlZiBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTcKKyNk
ZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE3IDB4MDNFNiAKKyNlbmRpZgorI2lm
bmRlZiBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTgKKyNkZWZpbmUgUENJX0RFVklDRV9J
RF9OVklESUFfTlZFTkVUXzE4IDB4MDNFRSAKKyNlbmRpZgorI2lmbmRlZiBQQ0lfREVWSUNFX0lE
X05WSURJQV9OVkVORVRfMTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE5
IDB4MDNFRiAKKyNlbmRpZgorI2lmbmRlZiBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjAK
KyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIwIDB4MDQ1MCAKKyNlbmRpZgor
I2lmbmRlZiBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjEKKyNkZWZpbmUgUENJX0RFVklD
RV9JRF9OVklESUFfTlZFTkVUXzIxIDB4MDQ1MSAKKyNlbmRpZgorI2lmbmRlZiBQQ0lfREVWSUNF
X0lEX05WSURJQV9OVkVORVRfMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVU
XzIyIDB4MDQ1MiAKKyNlbmRpZgorI2lmbmRlZiBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRf
MjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIzIDB4MDQ1MyAKKyNlbmRp
ZgorCisvKiBpdCBzaG91bGQgYWRkIGluIG1paS5oICovCisjaWZuZGVmIEFEVkVSVElTRV8xMDAw
SEFMRgorI2RlZmluZSBBRFZFUlRJU0VfMTAwMEhBTEYJMHgwMTAwCisjZW5kaWYKKyNpZm5kZWYg
QURWRVJUSVNFXzEwMDBGVUxMCisjZGVmaW5lIEFEVkVSVElTRV8xMDAwRlVMTAkweDAyMDAKKyNl
bmRpZgorI2lmbmRlZiBBRFZFUlRJU0VfUEFVU0VfQ0FQCisjZGVmaW5lIEFEVkVSVElTRV9QQVVT
RV9DQVAJMHgwNDAwCisjZW5kaWYKKyNpZm5kZWYgQURWRVJUSVNFX1BBVVNFX0FTWU0KKyNkZWZp
bmUgQURWRVJUSVNFX1BBVVNFX0FTWU0JMHgwODAwCisjZW5kaWYKKyNpZm5kZWYgTUlJX0NUUkwx
MDAwCisjZGVmaW5lIE1JSV9DVFJMMTAwMAkJMHgwOSAKKyNlbmRpZgorI2lmbmRlZiBNSUlfU1RB
VDEwMDAKKyNkZWZpbmUgTUlJX1NUQVQxMDAwCQkweDBBIAorI2VuZGlmCisjaWZuZGVmIExQQV8x
MDAwRlVMTAorI2RlZmluZSBMUEFfMTAwMEZVTEwJCTB4MDgwMAorI2VuZGlmCisjaWZuZGVmIExQ
QV8xMDAwSEFMRgorI2RlZmluZSBMUEFfMTAwMEhBTEYJCTB4MDQwMCAKKyNlbmRpZgorI2lmbmRl
ZiBMUEFfUEFVU0VfQ0FQCisjZGVmaW5lIExQQV9QQVVTRV9DQVAJCTB4MDQwMAorI2VuZGlmCisj
aWZuZGVmIExQQV9QQVVTRV9BU1lNCisjZGVmaW5lIExQQV9QQVVTRV9BU1lNCQkweDA4MDAKKyNl
bmRpZgorI2lmbmRlZiBCTUNSX1NQRUVEMTAwMAorI2RlZmluZSBCTUNSX1NQRUVEMTAwMAkJMHgw
MDQwCS8qIE1TQiBvZiBTcGVlZCAoMTAwMCkgICAgICAgICAqLworI2VuZGlmCisKKyNpZm5kZWYg
TkVUREVWX1RYX09LCisjZGVmaW5lIE5FVERFVl9UWF9PSyAJCTAJLyogZHJpdmVyIHRvb2sgY2Fy
ZSBvZiBwYWNrZXQgKi8KKyNlbmRpZgorCisjaWZuZGVmIE5FVERFVl9UWF9CVVNZCisjZGVmaW5l
IE5FVERFVl9UWF9CVVNZIAkJMSAgICAvKiBkcml2ZXIgdHggcGF0aCB3YXMgYnVzeSovCisjZW5k
aWYKKworI2lmbmRlZiBETUFfMzlCSVRfTUFTSworI2RlZmluZSBETUFfMzlCSVRfTUFTSwkJMHgw
MDAwMDA3ZmZmZmZmZmZmVUxMICAgIAorI2VuZGlmCisKKyNpZm5kZWYgX19pb21lbQorI2RlZmlu
ZSBfX2lvbWVtIAorI2VuZGlmCisKKy8qIHJ4L3R4IG1hYyBhZGRyICsgdHlwZSArIHZsYW4gKyBh
bGlnbiArIHNsYWNrKi8KKyNpZm5kZWYgUlhfTklDX0JVRlNJWkUJCisjZGVmaW5lIFJYX05JQ19C
VUZTSVpFCQkoRVRIX0RBVEFfTEVOICsgNjQpCisjZW5kaWYKKy8qIGV2ZW4gbW9yZSBzbGFjayAq
LworI2lmbmRlZiBSWF9BTExPQ19CVUZTSVpFCQorI2RlZmluZSBSWF9BTExPQ19CVUZTSVpFCShF
VEhfREFUQV9MRU4gKyAxMjgpCisjZW5kaWYKKworI2lmbmRlZiBQQ0lfREVWSUNFCisjZGVmaW5l
IFBDSV9ERVZJQ0UodmVuZCxkZXYpIFwKKwkudmVuZG9yID0gKHZlbmQpLCAuZGV2aWNlID0gKGRl
diksIFwKKwkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwgLnN1YmRldmljZSA9IFBDSV9BTllfSUQK
KyNlbmRpZgorCisjaWYgTlZWRVIgPCBSSEVTNAorc3RydWN0IG1zaXhfZW50cnkgeworCXUxNiB2
ZWN0b3I7CS8qIGtlcm5lbCB1c2VzIHRvIHdyaXRlIGFsbG9jYXRlZCB2ZWN0b3IgKi8KKwl1MTYg
ZW50cnk7CS8qIGRyaXZlciB1c2VzIHRvIHNwZWNpZnkgZW50cnksIE9TIHdyaXRlcyAqLworfTsK
KyNlbmRpZgogCiAvKgogICogSGFyZHdhcmUgYWNjZXNzOgpAQCAtMTY4LDExICszMDgsMjMgQEAK
ICNkZWZpbmUgREVWX0hBU19QQVVTRUZSQU1FX1RYICAgMHgwMjAwICAvKiBkZXZpY2Ugc3VwcG9y
dHMgdHggcGF1c2UgZnJhbWVzICovCiAjZGVmaW5lIERFVl9IQVNfU1RBVElTVElDUyAgICAgIDB4
MDQwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGh3IHN0YXRpc3RpY3MgKi8KICNkZWZpbmUgREVWX0hB
U19URVNUX0VYVEVOREVEICAgMHgwODAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgZXh0ZW5kZWQgZGlh
Z25vc3RpYyB0ZXN0ICovCisjZGVmaW5lIERFVl9IQVNfTUdNVF9VTklUICAgICAgIDB4MTAwMCAg
LyogZGV2aWNlIHN1cHBvcnRzIG1hbmFnZW1lbnQgdW5pdCAqLworCisjZGVmaW5lIE5WSURJQV9F
VEhFUk5FVF9JRChkZXZpY2VpZCxudl9kcml2ZXJfZGF0YSkge1wKKwkJLnZlbmRvciA9IFBDSV9W
RU5ET1JfSURfTlZJRElBLCBcCisJCS5kZXZpY2UgPSBkZXZpY2VpZCwgXAorCQkuc3VidmVuZG9y
ID0gUENJX0FOWV9JRCwgXAorCQkuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwgXAorCQkuZHJpdmVy
X2RhdGEgPSBudl9kcml2ZXJfZGF0YSwgXAorCQl9LAorCQkKKyNkZWZpbmUgTXZfTEVEX0NvbnRy
b2wgMTYKKyNkZWZpbmUgTXZfUGFnZV9BZGRyZXNzIDIyCiAKIGVudW0gewogCU52UmVnSXJxU3Rh
dHVzID0gMHgwMDAsCiAjZGVmaW5lIE5WUkVHX0lSUVNUQVRfTUlJRVZFTlQJMHgwNDAKLSNkZWZp
bmUgTlZSRUdfSVJRU1RBVF9NQVNLCQkweDFmZgorI2RlZmluZSBOVlJFR19JUlFTVEFUX01BU0sJ
CTB4ODFmZgogCU52UmVnSXJxTWFzayA9IDB4MDA0LAogI2RlZmluZSBOVlJFR19JUlFfUlhfRVJS
T1IJCTB4MDAwMQogI2RlZmluZSBOVlJFR19JUlFfUlgJCQkweDAwMDIKQEAgLTE4MywxNSArMzM1
LDE2IEBACiAjZGVmaW5lIE5WUkVHX0lSUV9MSU5LCQkJMHgwMDQwCiAjZGVmaW5lIE5WUkVHX0lS
UV9SWF9GT1JDRUQJCTB4MDA4MAogI2RlZmluZSBOVlJFR19JUlFfVFhfRk9SQ0VECQkweDAxMDAK
KyNkZWZpbmUgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IJCTB4ODAwMAogI2RlZmluZSBOVlJFR19J
UlFNQVNLX1RIUk9VR0hQVVQJMHgwMGRmCiAjZGVmaW5lIE5WUkVHX0lSUU1BU0tfQ1BVCQkweDAw
NDAKICNkZWZpbmUgTlZSRUdfSVJRX1RYX0FMTAkJKE5WUkVHX0lSUV9UWF9FUlJ8TlZSRUdfSVJR
X1RYX09LfE5WUkVHX0lSUV9UWF9GT1JDRUQpCiAjZGVmaW5lIE5WUkVHX0lSUV9SWF9BTEwJCShO
VlJFR19JUlFfUlhfRVJST1J8TlZSRUdfSVJRX1JYfE5WUkVHX0lSUV9SWF9OT0JVRnxOVlJFR19J
UlFfUlhfRk9SQ0VEKQotI2RlZmluZSBOVlJFR19JUlFfT1RIRVIJCQkoTlZSRUdfSVJRX1RJTUVS
fE5WUkVHX0lSUV9MSU5LKQorI2RlZmluZSBOVlJFR19JUlFfT1RIRVIJCQkoTlZSRUdfSVJRX1RJ
TUVSfE5WUkVHX0lSUV9MSU5LfE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKQogCiAjZGVmaW5lIE5W
UkVHX0lSUV9VTktOT1dOCSh+KE5WUkVHX0lSUV9SWF9FUlJPUnxOVlJFR19JUlFfUlh8TlZSRUdf
SVJRX1JYX05PQlVGfE5WUkVHX0lSUV9UWF9FUlJ8IFwKIAkJCQkJTlZSRUdfSVJRX1RYX09LfE5W
UkVHX0lSUV9USU1FUnxOVlJFR19JUlFfTElOS3xOVlJFR19JUlFfUlhfRk9SQ0VEfCBcCi0JCQkJ
CU5WUkVHX0lSUV9UWF9GT1JDRUQpKQorCQkJCQlOVlJFR19JUlFfVFhfRk9SQ0VEfE5WUkVHX0lS
UV9SRUNPVkVSX0VSUk9SKSkKIAogCU52UmVnVW5rbm93blNldHVwUmVnNiA9IDB4MDA4LAogI2Rl
ZmluZSBOVlJFR19VTktTRVRVUDZfVkFMCQkzCkBAIC0yMTYsNiArMzY5LDE2IEBACiAjZGVmaW5l
IE5WUkVHX01BQ19SRVNFVF9BU1NFUlQJMHgwRjMKIAlOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCA9
IDB4MDg0LAogI2RlZmluZSBOVlJFR19YTUlUQ1RMX1NUQVJUCTB4MDEKKyNkZWZpbmUgTlZSRUdf
WE1JVENUTF9NR01UX1NUCTB4NDAwMDAwMDAKKyNkZWZpbmUgTlZSRUdfWE1JVENUTF9TWU5DX01B
U0sJCTB4MDAwZjAwMDAKKyNkZWZpbmUgTlZSRUdfWE1JVENUTF9TWU5DX05PVF9SRUFEWQkweDAK
KyNkZWZpbmUgTlZSRUdfWE1JVENUTF9TWU5DX1BIWV9JTklUCTB4MDAwNDAwMDAKKyNkZWZpbmUg
TlZSRUdfWE1JVENUTF9NR01UX1NFTUFfTUFTSwkweDAwMDAwZjAwCisjZGVmaW5lIE5WUkVHX1hN
SVRDVExfTUdNVF9TRU1BX0ZSRUUJMHgwCisjZGVmaW5lIE5WUkVHX1hNSVRDVExfSE9TVF9TRU1B
X01BU0sJMHgwMDAwZjAwMAorI2RlZmluZSBOVlJFR19YTUlUQ1RMX0hPU1RfU0VNQV9BQ1EJMHgw
MDAwZjAwMAorI2RlZmluZSBOVlJFR19YTUlUQ1RMX0hPU1RfTE9BREVECTB4MDAwMDQwMDAKKyNk
ZWZpbmUgTlZSRUdfWE1JVENUTF9UWF9QQVRIX0VOCTB4MDEwMDAwMDAKIAlOdlJlZ1RyYW5zbWl0
dGVyU3RhdHVzID0gMHgwODgsCiAjZGVmaW5lIE5WUkVHX1hNSVRTVEFUX0JVU1kJMHgwMQogCkBA
IC0yMzEsNiArMzk0LDcgQEAKICNkZWZpbmUgTlZSRUdfT0ZGTE9BRF9OT1JNQUwJUlhfTklDX0JV
RlNJWkUKIAlOdlJlZ1JlY2VpdmVyQ29udHJvbCA9IDB4MDk0LAogI2RlZmluZSBOVlJFR19SQ1ZD
VExfU1RBUlQJMHgwMQorI2RlZmluZSBOVlJFR19SQ1ZDVExfUlhfUEFUSF9FTgkweDAxMDAwMDAw
CiAJTnZSZWdSZWNlaXZlclN0YXR1cyA9IDB4OTgsCiAjZGVmaW5lIE5WUkVHX1JDVlNUQVRfQlVT
WQkweDAxCiAKQEAgLTI0MSw3ICs0MDUsNyBAQAogI2RlZmluZSBOVlJFR19STkRTRUVEX0ZPUkNF
MwkweDc0MDAKIAogCU52UmVnVHhEZWZlcnJhbCA9IDB4QTAsCi0jZGVmaW5lIE5WUkVHX1RYX0RF
RkVSUkFMX0RFRkFVTFQJMHgxNTA1MGYKKyNkZWZpbmUgTlZSRUdfVFhfREVGRVJSQUxfREVGQVVM
VCAgICAgIAkweDE1MDUwZgogI2RlZmluZSBOVlJFR19UWF9ERUZFUlJBTF9SR01JSV8xMF8xMDAJ
MHgxNjA3MGYKICNkZWZpbmUgTlZSRUdfVFhfREVGRVJSQUxfUkdNSUlfMTAwMAkweDE0MDUwZgog
CU52UmVnUnhEZWZlcnJhbCA9IDB4QTQsCkBAIC0yNjIsNyArNDI2LDggQEAKIAlOdlJlZ1JpbmdT
aXplcyA9IDB4MTA4LAogI2RlZmluZSBOVlJFR19SSU5HU1pfVFhTSElGVCAwCiAjZGVmaW5lIE5W
UkVHX1JJTkdTWl9SWFNISUZUIDE2Ci0JTnZSZWdVbmtub3duVHJhbnNtaXR0ZXJSZWcgPSAweDEw
YywKKwlOdlJlZ1RyYW5zbWl0UG9sbCA9IDB4MTBjLAorI2RlZmluZSBOVlJFR19UUkFOU01JVFBP
TExfTUFDX0FERFJfUkVWCTB4MDAwMDgwMDAKIAlOdlJlZ0xpbmtTcGVlZCA9IDB4MTEwLAogI2Rl
ZmluZSBOVlJFR19MSU5LU1BFRURfRk9SQ0UgMHgxMDAwMAogI2RlZmluZSBOVlJFR19MSU5LU1BF
RURfMTAJMTAwMApAQCAtMjgzLDggKzQ0OCw4IEBACiAjZGVmaW5lIE5WUkVHX1RYUlhDVExfUkVT
RVQJMHgwMDEwCiAjZGVmaW5lIE5WUkVHX1RYUlhDVExfUlhDSEVDSwkweDA0MDAKICNkZWZpbmUg
TlZSRUdfVFhSWENUTF9ERVNDXzEJMAotI2RlZmluZSBOVlJFR19UWFJYQ1RMX0RFU0NfMgkweDAy
MTAwCi0jZGVmaW5lIE5WUkVHX1RYUlhDVExfREVTQ18zCTB4MDIyMDAKKyNkZWZpbmUgTlZSRUdf
VFhSWENUTF9ERVNDXzIJMHgwMDIxMDAKKyNkZWZpbmUgTlZSRUdfVFhSWENUTF9ERVNDXzMJMHhj
MDIyMDAKICNkZWZpbmUgTlZSRUdfVFhSWENUTF9WTEFOU1RSSVAgMHgwMDA0MAogI2RlZmluZSBO
VlJFR19UWFJYQ1RMX1ZMQU5JTlMJMHgwMDA4MAogCU52UmVnVHhSaW5nUGh5c0FkZHJIaWdoID0g
MHgxNDgsCkBAIC0yOTcsOCArNDYyLDggQEAKICNkZWZpbmUgTlZSRUdfTUlJU1RBVF9MSU5LQ0hB
TkdFCTB4MDAwOAogI2RlZmluZSBOVlJFR19NSUlTVEFUX01BU0sJCTB4MDAwZgogI2RlZmluZSBO
VlJFR19NSUlTVEFUX01BU0syCQkweDAwMGYKLQlOdlJlZ1Vua25vd25TZXR1cFJlZzQgPSAweDE4
NCwKLSNkZWZpbmUgTlZSRUdfVU5LU0VUVVA0X1ZBTAk4CisJTnZSZWdNSUlNYXNrID0gMHgxODQs
CisjZGVmaW5lIE5WUkVHX01JSV9MSU5LQ0hBTkdFCQkweDAwMDgKIAogCU52UmVnQWRhcHRlckNv
bnRyb2wgPSAweDE4OCwKICNkZWZpbmUgTlZSRUdfQURBUFRDVExfU1RBUlQJMHgwMgpAQCAtMzI4
LDYgKzQ5Myw3IEBACiAjZGVmaW5lIE5WUkVHX1dBS0VVUEZMQUdTX0VOQUJMRQkweDExMTEKIAog
CU52UmVnUGF0dGVybkNSQyA9IDB4MjA0LAorI2RlZmluZSBOVl9VTktOT1dOX1ZBTCAgMHgwMQog
CU52UmVnUGF0dGVybk1hc2sgPSAweDIwOCwKIAlOdlJlZ1Bvd2VyQ2FwID0gMHgyNjgsCiAjZGVm
aW5lIE5WUkVHX1BPV0VSQ0FQX0QzU1VQUAkoMTw8MzApCkBAIC0zNjgsNiArNTM0LDcgQEAKIAlO
dlJlZ1R4UGF1c2UgPSAweDJlMCwKIAlOdlJlZ1J4UGF1c2UgPSAweDJlNCwKIAlOdlJlZ1J4RHJv
cEZyYW1lID0gMHgyZTgsCisKIAlOdlJlZ1ZsYW5Db250cm9sID0gMHgzMDAsCiAjZGVmaW5lIE5W
UkVHX1ZMQU5DT05UUk9MX0VOQUJMRQkweDIwMDAKIAlOdlJlZ01TSVhNYXAwID0gMHgzZTAsCkBA
IC00MDksNyArNTc2LDcgQEAKICNkZWZpbmUgTlZfVFhfQ0FSUklFUkxPU1QJKDE8PDI3KQogI2Rl
ZmluZSBOVl9UWF9MQVRFQ09MTElTSU9OCSgxPDwyOCkKICNkZWZpbmUgTlZfVFhfVU5ERVJGTE9X
CQkoMTw8MjkpCi0jZGVmaW5lIE5WX1RYX0VSUk9SCQkoMTw8MzApCisjZGVmaW5lIE5WX1RYX0VS
Uk9SCQkoMTw8MzApIC8qIGxvZ2ljYWwgT1Igb2YgYWxsIGVycm9ycyAqLwogI2RlZmluZSBOVl9U
WF9WQUxJRAkJKDE8PDMxKQogCiAjZGVmaW5lIE5WX1RYMl9MQVNUUEFDS0VUCSgxPDwyOSkKQEAg
LTQyMCw3ICs1ODcsNyBAQAogI2RlZmluZSBOVl9UWDJfTEFURUNPTExJU0lPTgkoMTw8MjcpCiAj
ZGVmaW5lIE5WX1RYMl9VTkRFUkZMT1cJKDE8PDI4KQogLyogZXJyb3IgYW5kIHZhbGlkIGFyZSB0
aGUgc2FtZSBmb3IgYm90aCAqLwotI2RlZmluZSBOVl9UWDJfRVJST1IJCSgxPDwzMCkKKyNkZWZp
bmUgTlZfVFgyX0VSUk9SCQkoMTw8MzApIC8qIGxvZ2ljYWwgT1Igb2YgYWxsIGVycm9ycyAqLwog
I2RlZmluZSBOVl9UWDJfVkFMSUQJCSgxPDwzMSkKICNkZWZpbmUgTlZfVFgyX1RTTwkJKDE8PDI4
KQogI2RlZmluZSBOVl9UWDJfVFNPX1NISUZUCTE0CkBAIC00NDEsNyArNjA4LDcgQEAKICNkZWZp
bmUgTlZfUlhfQ1JDRVJSCQkoMTw8MjcpCiAjZGVmaW5lIE5WX1JYX09WRVJGTE9XCQkoMTw8Mjgp
CiAjZGVmaW5lIE5WX1JYX0ZSQU1JTkdFUlIJKDE8PDI5KQotI2RlZmluZSBOVl9SWF9FUlJPUgkJ
KDE8PDMwKQorI2RlZmluZSBOVl9SWF9FUlJPUgkJKDE8PDMwKSAvKiBsb2dpY2FsIE9SIG9mIGFs
bCBlcnJvcnMgKi8KICNkZWZpbmUgTlZfUlhfQVZBSUwJCSgxPDwzMSkKIAogI2RlZmluZSBOVl9S
WDJfQ0hFQ0tTVU1NQVNLCSgweDFDMDAwMDAwKQpAQCAtNDU4LDcgKzYyNSw3IEBACiAjZGVmaW5l
IE5WX1JYMl9PVkVSRkxPVwkJKDE8PDIzKQogI2RlZmluZSBOVl9SWDJfRlJBTUlOR0VSUgkoMTw8
MjQpCiAvKiBlcnJvciBhbmQgYXZhaWwgYXJlIHRoZSBzYW1lIGZvciBib3RoICovCi0jZGVmaW5l
IE5WX1JYMl9FUlJPUgkJKDE8PDMwKQorI2RlZmluZSBOVl9SWDJfRVJST1IJCSgxPDwzMCkgLyog
bG9naWNhbCBPUiBvZiBhbGwgZXJyb3JzICovCiAjZGVmaW5lIE5WX1JYMl9BVkFJTAkJKDE8PDMx
KQogCiAjZGVmaW5lIE5WX1JYM19WTEFOX1RBR19QUkVTRU5UICgxPDwxNikKQEAgLTQ5MiwxMiAr
NjU5LDEyIEBACiAjZGVmaW5lIE5WX1dBVENIRE9HX1RJTUVPCSg1KkhaKQogCiAjZGVmaW5lIFJY
X1JJTkdfREVGQVVMVAkJMTI4Ci0jZGVmaW5lIFRYX1JJTkdfREVGQVVMVAkJMjU2Ci0jZGVmaW5l
IFJYX1JJTkdfTUlOCQkxMjgKLSNkZWZpbmUgVFhfUklOR19NSU4JCTY0CisjZGVmaW5lIFRYX1JJ
TkdfREVGQVVMVAkJNjQKKyNkZWZpbmUgUlhfUklOR19NSU4JCVJYX1JJTkdfREVGQVVMVAorI2Rl
ZmluZSBUWF9SSU5HX01JTgkJVFhfUklOR19ERUZBVUxUCiAjZGVmaW5lIFJJTkdfTUFYX0RFU0Nf
VkVSXzEJMTAyNAogI2RlZmluZSBSSU5HX01BWF9ERVNDX1ZFUl8yXzMJMTYzODQKLS8qCisvKiAK
ICAqIERpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZ2V0IGFuZCBwdXQgcG9pbnRlcnMgZm9yIHRoZSB0
eCByaW5nLgogICogVGhpcyBpcyB1c2VkIHRvIHRocm90dGxlIHRoZSBhbW91bnQgb2YgZGF0YSBv
dXRzdGFuZGluZyBpbiB0aGUKICAqIHR4IHJpbmcuCkBAIC01MTgsNyArNjg1LDcgQEAKICNkZWZp
bmUgTElOS19USU1FT1VUCSgzKkhaKQogI2RlZmluZSBTVEFUU19JTlRFUlZBTAkoMTAqSFopCiAK
LS8qCisvKiAKICAqIGRlc2NfdmVyIHZhbHVlczoKICAqIFRoZSBuaWMgc3VwcG9ydHMgdGhyZWUg
ZGlmZmVyZW50IGRlc2NyaXB0b3IgdHlwZXM6CiAgKiAtIERFU0NfVkVSXzE6IE9yaWdpbmFsCkBA
IC01MzIsMTYgKzY5OSwzNyBAQAogLyogUEhZIGRlZmluZXMgKi8KICNkZWZpbmUgUEhZX09VSV9N
QVJWRUxMCTB4NTA0MwogI2RlZmluZSBQSFlfT1VJX0NJQ0FEQQkweDAzZjEKKyNkZWZpbmUgUEhZ
X09VSV9WSVRFU1NFCTB4MDFjMQogI2RlZmluZSBQSFlJRDFfT1VJX01BU0sJMHgwM2ZmCiAjZGVm
aW5lIFBIWUlEMV9PVUlfU0hGVAk2CiAjZGVmaW5lIFBIWUlEMl9PVUlfTUFTSwkweGZjMDAKICNk
ZWZpbmUgUEhZSUQyX09VSV9TSEZUCTEwCi0jZGVmaW5lIFBIWV9JTklUMQkweDBmMDAwCi0jZGVm
aW5lIFBIWV9JTklUMgkweDBlMDAKLSNkZWZpbmUgUEhZX0lOSVQzCTB4MDEwMDAKLSNkZWZpbmUg
UEhZX0lOSVQ0CTB4MDIwMAotI2RlZmluZSBQSFlfSU5JVDUJMHgwMDA0Ci0jZGVmaW5lIFBIWV9J
TklUNgkweDAyMDAwCisjZGVmaW5lIFBIWUlEMl9NT0RFTF9NQVNLCQkweDAzZjAKKyNkZWZpbmUg
UEhZX01PREVMX01BUlZFTExfRTMwMTYJCTB4MjIwCisjZGVmaW5lIFBIWV9NQVJWRUxMX0UzMDE2
X0lOSVRNQVNLCTB4MDMwMAorI2RlZmluZSBQSFlfQ0lDQURBX0lOSVQxCTB4MGYwMDAKKyNkZWZp
bmUgUEhZX0NJQ0FEQV9JTklUMgkweDBlMDAKKyNkZWZpbmUgUEhZX0NJQ0FEQV9JTklUMwkweDAx
MDAwCisjZGVmaW5lIFBIWV9DSUNBREFfSU5JVDQJMHgwMjAwCisjZGVmaW5lIFBIWV9DSUNBREFf
SU5JVDUJMHgwMDA0CisjZGVmaW5lIFBIWV9DSUNBREFfSU5JVDYJMHgwMjAwMAorI2RlZmluZSBQ
SFlfVklURVNTRV9JTklUX1JFRzEJMHgxZgorI2RlZmluZSBQSFlfVklURVNTRV9JTklUX1JFRzIJ
MHgxMAorI2RlZmluZSBQSFlfVklURVNTRV9JTklUX1JFRzMJMHgxMQorI2RlZmluZSBQSFlfVklU
RVNTRV9JTklUX1JFRzQJMHgxMgorI2RlZmluZSBQSFlfVklURVNTRV9JTklUX01TSzEJMHhjCisj
ZGVmaW5lIFBIWV9WSVRFU1NFX0lOSVRfTVNLMgkweDAxODAKKyNkZWZpbmUgUEhZX1ZJVEVTU0Vf
SU5JVDEJMHg1MmI1CisjZGVmaW5lIFBIWV9WSVRFU1NFX0lOSVQyCTB4YWY4YQorI2RlZmluZSBQ
SFlfVklURVNTRV9JTklUMwkweDgKKyNkZWZpbmUgUEhZX1ZJVEVTU0VfSU5JVDQJMHg4ZjhhCisj
ZGVmaW5lIFBIWV9WSVRFU1NFX0lOSVQ1CTB4YWY4NgorI2RlZmluZSBQSFlfVklURVNTRV9JTklU
NgkweDhmODYKKyNkZWZpbmUgUEhZX1ZJVEVTU0VfSU5JVDcJMHhhZjgyCisjZGVmaW5lIFBIWV9W
SVRFU1NFX0lOSVQ4CTB4MDEwMAorI2RlZmluZSBQSFlfVklURVNTRV9JTklUOQkweDhmODIKKyNk
ZWZpbmUgUEhZX1ZJVEVTU0VfSU5JVDEwCTB4MAorCiAjZGVmaW5lIFBIWV9HSUdBQklUCTB4MDEw
MAogCiAjZGVmaW5lIFBIWV9USU1FT1VUCTB4MQpAQCAtNTczLDcyICs3NjEsOTMgQEAKICNkZWZp
bmUgTlZfTVNJX1hfVkVDVE9SX09USEVSIDB4MgogCiAvKiBzdGF0aXN0aWNzICovCisjZGVmaW5l
IE5WX1NUQVRTX0NPVU5UX1NXIDEwCisKKyNkZWZpbmUgTlZMQU5fRElTQUJMRV9BTExfRkVBVFVS
RVMgIGRvIHsgXAorCW1zaSA9IE5WX01TSV9JTlRfRElTQUJMRUQ7IFwKKwltc2l4ID0gTlZfTVNJ
WF9JTlRfRElTQUJMRUQ7IFwKKwlzY2F0dGVyX2dhdGhlciA9IE5WX1NDQVRURVJfR0FUSEVSX0RJ
U0FCTEVEOyBcCisJdHNvX29mZmxvYWQgPSBOVl9UU09fRElTQUJMRUQ7IFwKKwl0eF9jaGVja3N1
bV9vZmZsb2FkID0gTlZfVFhfQ0hFQ0tTVU1fRElTQUJMRUQ7IFwKKwlyeF9jaGVja3N1bV9vZmZs
b2FkID0gTlZfUlhfQ0hFQ0tTVU1fRElTQUJMRUQ7IFwKKwl0eF9mbG93X2NvbnRyb2wgPSBOVl9U
WF9GTE9XX0NPTlRST0xfRElTQUJMRUQ7IFwKKwlyeF9mbG93X2NvbnRyb2wgPSBOVl9SWF9GTE9X
X0NPTlRST0xfRElTQUJMRUQ7IFwKKwl3b2wgPSBOVl9XT0xfRElTQUJMRUQ7IFwKKwl0YWdnaW5n
XzgwMjFwcSA9IE5WXzgwMjFQUV9ESVNBQkxFRDsgXAorfSB3aGlsZSAoMCkKKyAgIAogc3RydWN0
IG52X2V0aHRvb2xfc3RyIHsKIAljaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTsKIH07CiAKIHN0
YXRpYyBjb25zdCBzdHJ1Y3QgbnZfZXRodG9vbF9zdHIgbnZfZXN0YXRzX3N0cltdID0geworCXsg
InR4X2Ryb3BwZWQiIH0sCisJeyAidHhfZmlmb19lcnJvcnMiIH0sCisJeyAidHhfY2Fycmllcl9l
cnJvcnMiIH0sCisJeyAidHhfcGFja2V0cyIgfSwKIAl7ICJ0eF9ieXRlcyIgfSwKKwl7ICJyeF9j
cmNfZXJyb3JzIiB9LAorCXsgInJ4X292ZXJfZXJyb3JzIiB9LAorCXsgInJ4X2Vycm9yc190b3Rh
bCIgfSwKKwl7ICJyeF9wYWNrZXRzIiB9LAorCXsgInJ4X2J5dGVzIiB9LAorCQorCS8qIGhhcmR3
YXJlIGNvdW50ZXJzICovCiAJeyAidHhfemVyb19yZXhtdCIgfSwKIAl7ICJ0eF9vbmVfcmV4bXQi
IH0sCiAJeyAidHhfbWFueV9yZXhtdCIgfSwKIAl7ICJ0eF9sYXRlX2NvbGxpc2lvbiIgfSwKLQl7
ICJ0eF9maWZvX2Vycm9ycyIgfSwKLQl7ICJ0eF9jYXJyaWVyX2Vycm9ycyIgfSwKIAl7ICJ0eF9l
eGNlc3NfZGVmZXJyYWwiIH0sCiAJeyAidHhfcmV0cnlfZXJyb3IiIH0sCi0JeyAidHhfZGVmZXJy
YWwiIH0sCi0JeyAidHhfcGFja2V0cyIgfSwKLQl7ICJ0eF9wYXVzZSIgfSwKIAl7ICJyeF9mcmFt
ZV9lcnJvciIgfSwKIAl7ICJyeF9leHRyYV9ieXRlIiB9LAogCXsgInJ4X2xhdGVfY29sbGlzaW9u
IiB9LAogCXsgInJ4X3J1bnQiIH0sCiAJeyAicnhfZnJhbWVfdG9vX2xvbmciIH0sCi0JeyAicnhf
b3Zlcl9lcnJvcnMiIH0sCi0JeyAicnhfY3JjX2Vycm9ycyIgfSwKIAl7ICJyeF9mcmFtZV9hbGln
bl9lcnJvciIgfSwKIAl7ICJyeF9sZW5ndGhfZXJyb3IiIH0sCiAJeyAicnhfdW5pY2FzdCIgfSwK
IAl7ICJyeF9tdWx0aWNhc3QiIH0sCiAJeyAicnhfYnJvYWRjYXN0IiB9LAotCXsgInJ4X2J5dGVz
IiB9LAorCXsgInR4X2RlZmVycmFsIiB9LAorCXsgInR4X3BhdXNlIiB9LAogCXsgInJ4X3BhdXNl
IiB9LAotCXsgInJ4X2Ryb3BfZnJhbWUiIH0sCi0JeyAicnhfcGFja2V0cyIgfSwKLQl7ICJyeF9l
cnJvcnNfdG90YWwiIH0KKwl7ICJyeF9kcm9wX2ZyYW1lIiB9CiB9OwogCiBzdHJ1Y3QgbnZfZXRo
dG9vbF9zdGF0cyB7CisJdTY0IHR4X2Ryb3BwZWQ7CisJdTY0IHR4X2ZpZm9fZXJyb3JzOworCXU2
NCB0eF9jYXJyaWVyX2Vycm9yczsKKwl1NjQgdHhfcGFja2V0czsKIAl1NjQgdHhfYnl0ZXM7CisJ
dTY0IHJ4X2NyY19lcnJvcnM7CisJdTY0IHJ4X292ZXJfZXJyb3JzOworCXU2NCByeF9lcnJvcnNf
dG90YWw7CisJdTY0IHJ4X3BhY2tldHM7CisJdTY0IHJ4X2J5dGVzOworCisJLyogaGFyZHdhcmUg
Y291bnRlcnMgKi8KIAl1NjQgdHhfemVyb19yZXhtdDsKIAl1NjQgdHhfb25lX3JleG10OwogCXU2
NCB0eF9tYW55X3JleG10OwogCXU2NCB0eF9sYXRlX2NvbGxpc2lvbjsKLQl1NjQgdHhfZmlmb19l
cnJvcnM7Ci0JdTY0IHR4X2NhcnJpZXJfZXJyb3JzOwogCXU2NCB0eF9leGNlc3NfZGVmZXJyYWw7
CiAJdTY0IHR4X3JldHJ5X2Vycm9yOwotCXU2NCB0eF9kZWZlcnJhbDsKLQl1NjQgdHhfcGFja2V0
czsKLQl1NjQgdHhfcGF1c2U7CiAJdTY0IHJ4X2ZyYW1lX2Vycm9yOwogCXU2NCByeF9leHRyYV9i
eXRlOwogCXU2NCByeF9sYXRlX2NvbGxpc2lvbjsKIAl1NjQgcnhfcnVudDsKIAl1NjQgcnhfZnJh
bWVfdG9vX2xvbmc7Ci0JdTY0IHJ4X292ZXJfZXJyb3JzOwotCXU2NCByeF9jcmNfZXJyb3JzOwog
CXU2NCByeF9mcmFtZV9hbGlnbl9lcnJvcjsKIAl1NjQgcnhfbGVuZ3RoX2Vycm9yOwogCXU2NCBy
eF91bmljYXN0OwogCXU2NCByeF9tdWx0aWNhc3Q7CiAJdTY0IHJ4X2Jyb2FkY2FzdDsKLQl1NjQg
cnhfYnl0ZXM7CisJdTY0IHR4X2RlZmVycmFsOworCXU2NCB0eF9wYXVzZTsKIAl1NjQgcnhfcGF1
c2U7CiAJdTY0IHJ4X2Ryb3BfZnJhbWU7Ci0JdTY0IHJ4X3BhY2tldHM7Ci0JdTY0IHJ4X2Vycm9y
c190b3RhbDsKIH07CiAKIC8qIGRpYWdub3N0aWNzICovCkBAIC02NjcsMjAgKzg3Niw2MiBAQAog
CXsgMCwwIH0KIH07CiAKK3N0cnVjdCBudl9za2JfbWFwIHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2ti
OworCWRtYV9hZGRyX3QgZG1hOworCXVuc2lnbmVkIGludCBkbWFfbGVuOworfTsKKwogLyoKICAq
IFNNUCBsb2NraW5nOgogICogQWxsIGhhcmR3YXJlIGFjY2VzcyB1bmRlciBkZXYtPnByaXYtPmxv
Y2ssIGV4Y2VwdCB0aGUgcGVyZm9ybWFuY2UKICAqIGNyaXRpY2FsIHBhcnRzOgogICogLSByeCBp
cyAocHNldWRvLSkgbG9ja2xlc3M6IGl0IHJlbGllcyBvbiB0aGUgc2luZ2xlLXRocmVhZGluZyBw
cm92aWRlZAogICoJYnkgdGhlIGFyY2ggY29kZSBmb3IgaW50ZXJydXB0cy4KLSAqIC0gdHggc2V0
dXAgaXMgbG9ja2xlc3M6IGl0IHJlbGllcyBvbiBuZXRpZl90eF9sb2NrLiBBY3R1YWwgc3VibWlz
c2lvbgorICogLSB0eCBzZXR1cCBpcyBsb2NrbGVzczogaXQgcmVsaWVzIG9uIGRldi0+eG1pdF9s
b2NrLiBBY3R1YWwgc3VibWlzc2lvbgogICoJbmVlZHMgZGV2LT5wcml2LT5sb2NrIDotKAotICog
LSBzZXRfbXVsdGljYXN0X2xpc3Q6IHByZXBhcmF0aW9uIGxvY2tsZXNzLCByZWxpZXMgb24gbmV0
aWZfdHhfbG9jay4KKyAqIC0gc2V0X211bHRpY2FzdF9saXN0OiBwcmVwYXJhdGlvbiBsb2NrbGVz
cywgcmVsaWVzIG9uIGRldi0+eG1pdF9sb2NrLgogICovCiAKIC8qIGluIGRldjogYmFzZSwgaXJx
ICovCiBzdHJ1Y3QgZmVfcHJpdiB7CisKKwkvKiBmaWVsZHMgdXNlZCBpbiBmYXN0IHBhdGggYXJl
IGdyb3VwZWQgdG9nZXRoZXIgCisJICAgZm9yIGJldHRlciBjYWNoZSBwZXJmb3JtYW5jZQorCSov
CiAJc3BpbmxvY2tfdCBsb2NrOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgcGNpX2Rl
diAqcGNpX2RldjsKKwl1MzIgdHhyeGN0bF9iaXRzOworCWludCBzdG9wX3R4OworCWludCBuZWVk
X2xpbmt0aW1lcjsKKwl1bnNpZ25lZCBsb25nIGxpbmtfdGltZW91dDsKKwl1MzIgaXJxbWFzazsK
Kwl1MzIgbXNpX2ZsYWdzOworCisJdW5zaWduZWQgaW50IHJ4X2J1Zl9zejsKKwlzdHJ1Y3Qgdmxh
bl9ncm91cCAqdmxhbmdycDsKKwlpbnQgdHhfcmluZ19zaXplOworCWludCByeF9jc3VtOworCisJ
LyoKKwkgKiByeCBzcGVjaWZpYyBmaWVsZHMgaW4gZmFzdCBwYXRoCisJICovCisJcmluZ190eXBl
IGdldF9yeCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKEwxX0NBQ0hFX0JZVEVTKSkpOworCXJpbmdf
dHlwZSBwdXRfcngsIGZpcnN0X3J4LCBsYXN0X3J4OworCXN0cnVjdCBudl9za2JfbWFwICpnZXRf
cnhfY3R4LCAqcHV0X3J4X2N0eDsKKwlzdHJ1Y3QgbnZfc2tiX21hcCAqZmlyc3RfcnhfY3R4LCAq
bGFzdF9yeF9jdHg7CisJCisJLyoKKwkgKiB0eCBzcGVjaWZpYyBmaWVsZHMgaW4gZmFzdCBwYXRo
CisJICovCisJcmluZ190eXBlIGdldF90eCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKEwxX0NBQ0hF
X0JZVEVTKSkpOworCXJpbmdfdHlwZSBwdXRfdHgsIGZpcnN0X3R4LCBsYXN0X3R4OworCXN0cnVj
dCBudl9za2JfbWFwICpnZXRfdHhfY3R4LCAqcHV0X3R4X2N0eDsKKwlzdHJ1Y3QgbnZfc2tiX21h
cCAqZmlyc3RfdHhfY3R4LCAqbGFzdF90eF9jdHg7CisKKwlzdHJ1Y3QgbnZfc2tiX21hcCAqcnhf
c2tiOworCXN0cnVjdCBudl9za2JfbWFwICp0eF9za2I7CiAKIAkvKiBHZW5lcmFsIGRhdGE6CiAJ
ICogTG9ja2luZzogc3Bpbl9sb2NrKCZucC0+bG9jayk7ICovCkBAIC02OTQsNjQgKzk0NSw0NiBA
QAogCWludCBwaHlhZGRyOwogCWludCB3b2xlbmFibGVkOwogCXVuc2lnbmVkIGludCBwaHlfb3Vp
OworCXVuc2lnbmVkIGludCBwaHlfbW9kZWw7CiAJdTE2IGdpZ2FiaXQ7CiAJaW50IGludHJfdGVz
dDsKKwlpbnQgcmVjb3Zlcl9lcnJvcjsKIAogCS8qIEdlbmVyYWwgZGF0YTogUk8gZmllbGRzICov
CiAJZG1hX2FkZHJfdCByaW5nX2FkZHI7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAJdTMy
IG9yaWdfbWFjWzJdOwotCXUzMiBpcnFtYXNrOwogCXUzMiBkZXNjX3ZlcjsKLQl1MzIgdHhyeGN0
bF9iaXRzOwogCXUzMiB2bGFuY3RsX2JpdHM7CiAJdTMyIGRyaXZlcl9kYXRhOwogCXUzMiByZWdp
c3Rlcl9zaXplOwotCi0Jdm9pZCBfX2lvbWVtICpiYXNlOworCXUzMiBtYWNfaW5fdXNlOwogCiAJ
Lyogcnggc3BlY2lmaWMgZmllbGRzLgogCSAqIExvY2tpbmc6IFdpdGhpbiBpcnEgaGFuZGVyIG9y
IGRpc2FibGVfaXJxK3NwaW5fbG9jaygmbnAtPmxvY2spOwogCSAqLwogCXJpbmdfdHlwZSByeF9y
aW5nOwotCXVuc2lnbmVkIGludCBjdXJfcngsIHJlZmlsbF9yeDsKLQlzdHJ1Y3Qgc2tfYnVmZiAq
KnJ4X3NrYnVmZjsKLQlkbWFfYWRkcl90ICpyeF9kbWE7Ci0JdW5zaWduZWQgaW50IHJ4X2J1Zl9z
ejsKIAl1bnNpZ25lZCBpbnQgcGt0X2xpbWl0OwogCXN0cnVjdCB0aW1lcl9saXN0IG9vbV9raWNr
OwogCXN0cnVjdCB0aW1lcl9saXN0IG5pY19wb2xsOwogCXN0cnVjdCB0aW1lcl9saXN0IHN0YXRz
X3BvbGw7CiAJdTMyIG5pY19wb2xsX2lycTsKIAlpbnQgcnhfcmluZ19zaXplOwotCi0JLyogbWVk
aWEgZGV0ZWN0aW9uIHdvcmthcm91bmQuCi0JICogTG9ja2luZzogV2l0aGluIGlycSBoYW5kZXIg
b3IgZGlzYWJsZV9pcnErc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JICovCi0JaW50IG5lZWRfbGlu
a3RpbWVyOwotCXVuc2lnbmVkIGxvbmcgbGlua190aW1lb3V0OworCXUzMiByeF9sZW5fZXJyb3Jz
OwogCS8qCiAJICogdHggc3BlY2lmaWMgZmllbGRzLgogCSAqLwogCXJpbmdfdHlwZSB0eF9yaW5n
OwotCXVuc2lnbmVkIGludCBuZXh0X3R4LCBuaWNfdHg7Ci0Jc3RydWN0IHNrX2J1ZmYgKip0eF9z
a2J1ZmY7Ci0JZG1hX2FkZHJfdCAqdHhfZG1hOwotCXVuc2lnbmVkIGludCAqdHhfZG1hX2xlbjsK
IAl1MzIgdHhfZmxhZ3M7Ci0JaW50IHR4X3Jpbmdfc2l6ZTsKIAlpbnQgdHhfbGltaXRfc3RhcnQ7
CiAJaW50IHR4X2xpbWl0X3N0b3A7CiAKLQkvKiB2bGFuIGZpZWxkcyAqLwotCXN0cnVjdCB2bGFu
X2dyb3VwICp2bGFuZ3JwOwogCiAJLyogbXNpL21zaS14IGZpZWxkcyAqLwotCXUzMiBtc2lfZmxh
Z3M7CiAJc3RydWN0IG1zaXhfZW50cnkgbXNpX3hfZW50cnlbTlZfTVNJX1hfTUFYX1ZFQ1RPUlNd
OwogCiAJLyogZmxvdyBjb250cm9sICovCiAJdTMyIHBhdXNlX2ZsYWdzOworCXUzMiBsZWRfc3Rh
dHNbM107CiB9OwogCiAvKgpAQCAtNzYyLDEyICs5OTUsMTIgQEAKIAogLyoKICAqIE9wdGltaXph
dGlvbiBjYW4gYmUgZWl0aGVyIHRocm91cHV0IG1vZGUgb3IgY3B1IG1vZGUKLSAqCisgKiAKICAq
IFRocm91Z2hwdXQgTW9kZTogRXZlcnkgdHggYW5kIHJ4IHBhY2tldCB3aWxsIGdlbmVyYXRlIGFu
IGludGVycnVwdC4KICAqIENQVSBNb2RlOiBJbnRlcnJ1cHRzIGFyZSBjb250cm9sbGVkIGJ5IGEg
dGltZXIuCiAgKi8KIGVudW0gewotCU5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQsCisJ
TlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCwgCiAJTlZfT1BUSU1JWkFUSU9OX01PREVf
Q1BVCiB9Owogc3RhdGljIGludCBvcHRpbWl6YXRpb25fbW9kZSA9IE5WX09QVElNSVpBVElPTl9N
T0RFX1RIUk9VR0hQVVQ7CkBAIC03ODgsMTYgKzEwMjEsMTEyIEBACiAJTlZfTVNJX0lOVF9ESVNB
QkxFRCwKIAlOVl9NU0lfSU5UX0VOQUJMRUQKIH07CisKKyNpZmRlZiBDT05GSUdfUENJX01TSSAK
IHN0YXRpYyBpbnQgbXNpID0gTlZfTVNJX0lOVF9FTkFCTEVEOworI2Vsc2UKK3N0YXRpYyBpbnQg
bXNpID0gTlZfTVNJX0lOVF9ESVNBQkxFRDsKKyNlbmRpZgogCiAvKgogICogTVNJWCBpbnRlcnJ1
cHRzCiAgKi8KIGVudW0gewotCU5WX01TSVhfSU5UX0RJU0FCTEVELAorCU5WX01TSVhfSU5UX0RJ
U0FCTEVELCAKIAlOVl9NU0lYX0lOVF9FTkFCTEVECiB9OworCisjaWZkZWYgQ09ORklHX1BDSV9N
U0kgCiBzdGF0aWMgaW50IG1zaXggPSBOVl9NU0lYX0lOVF9FTkFCTEVEOworI2Vsc2UKK3N0YXRp
YyBpbnQgbXNpeCA9IE5WX01TSVhfSU5UX0RJU0FCTEVEOworI2VuZGlmCisvKgorICogUEhZIFNw
ZWVkIGFuZCBEdXBsZXgKKyAqLworZW51bSB7CisJTlZfU1BFRURfRFVQTEVYX0FVVE8sCisJTlZf
U1BFRURfRFVQTEVYXzEwX0hBTEZfRFVQTEVYLAorCU5WX1NQRUVEX0RVUExFWF8xMF9GVUxMX0RV
UExFWCwKKwlOVl9TUEVFRF9EVVBMRVhfMTAwX0hBTEZfRFVQTEVYLAorCU5WX1NQRUVEX0RVUExF
WF8xMDBfRlVMTF9EVVBMRVgsCisJTlZfU1BFRURfRFVQTEVYXzEwMDBfRlVMTF9EVVBMRVgKK307
CitzdGF0aWMgaW50IHNwZWVkX2R1cGxleCA9IE5WX1NQRUVEX0RVUExFWF9BVVRPOworCisvKgor
ICogUEhZIGF1dG9uZWdvdGlhdGlvbgorICovCitzdGF0aWMgaW50IGF1dG9uZWcgPSBBVVRPTkVH
X0VOQUJMRTsKKworLyoKKyAqIFNjYXR0ZXIgZ2F0aGVyCisgKi8KK2VudW0geworCU5WX1NDQVRU
RVJfR0FUSEVSX0RJU0FCTEVELAorCU5WX1NDQVRURVJfR0FUSEVSX0VOQUJMRUQKK307CitzdGF0
aWMgaW50IHNjYXR0ZXJfZ2F0aGVyID0gTlZfU0NBVFRFUl9HQVRIRVJfRU5BQkxFRDsKKworLyoK
KyAqIFRDUCBTZWdtZW50YXRpb24gT2ZmbG9hZCAoVFNPKQorICovCitlbnVtIHsKKwlOVl9UU09f
RElTQUJMRUQsCisJTlZfVFNPX0VOQUJMRUQKK307CitzdGF0aWMgaW50IHRzb19vZmZsb2FkID0g
TlZfVFNPX0VOQUJMRUQ7CisKKy8qCisgKiBNVFUgc2V0dGluZ3MKKyAqLworc3RhdGljIGludCBt
dHUgPSBFVEhfREFUQV9MRU47CisKKy8qCisgKiBUeCBjaGVja3N1bSBvZmZsb2FkCisgKi8KK2Vu
dW0geworCU5WX1RYX0NIRUNLU1VNX0RJU0FCTEVELCAKKwlOVl9UWF9DSEVDS1NVTV9FTkFCTEVE
IAorfTsKK3N0YXRpYyBpbnQgdHhfY2hlY2tzdW1fb2ZmbG9hZCA9IE5WX1RYX0NIRUNLU1VNX0VO
QUJMRUQ7CisKKy8qCisgKiBSeCBjaGVja3N1bSBvZmZsb2FkCisgKi8KK2VudW0geworCU5WX1JY
X0NIRUNLU1VNX0RJU0FCTEVELCAKKwlOVl9SWF9DSEVDS1NVTV9FTkFCTEVEIAorfTsKK3N0YXRp
YyBpbnQgcnhfY2hlY2tzdW1fb2ZmbG9hZCA9IE5WX1JYX0NIRUNLU1VNX0VOQUJMRUQ7CisKKy8q
CisgKiBUeCByaW5nIHNpemUKKyAqLworc3RhdGljIGludCB0eF9yaW5nX3NpemUgPSBUWF9SSU5H
X0RFRkFVTFQ7CisKKy8qCisgKiBSeCByaW5nIHNpemUKKyAqLworc3RhdGljIGludCByeF9yaW5n
X3NpemUgPSBSWF9SSU5HX0RFRkFVTFQ7CisKKy8qCisgKiBUeCBmbG93IGNvbnRyb2wKKyAqLwor
ZW51bSB7CisJTlZfVFhfRkxPV19DT05UUk9MX0RJU0FCTEVELCAKKwlOVl9UWF9GTE9XX0NPTlRS
T0xfRU5BQkxFRAorfTsKK3N0YXRpYyBpbnQgdHhfZmxvd19jb250cm9sID0gTlZfVFhfRkxPV19D
T05UUk9MX0VOQUJMRUQ7CisKKy8qCisgKiBSeCBmbG93IGNvbnRyb2wKKyAqLworZW51bSB7CisJ
TlZfUlhfRkxPV19DT05UUk9MX0RJU0FCTEVELCAKKwlOVl9SWF9GTE9XX0NPTlRST0xfRU5BQkxF
RAorfTsKK3N0YXRpYyBpbnQgcnhfZmxvd19jb250cm9sID0gTlZfUlhfRkxPV19DT05UUk9MX0VO
QUJMRUQ7CiAKIC8qCiAgKiBETUEgNjRiaXQKQEAgLTgwOCwxNCArMTEzNyw5MCBAQAogfTsKIHN0
YXRpYyBpbnQgZG1hXzY0Yml0ID0gTlZfRE1BXzY0QklUX0VOQUJMRUQ7CiAKKy8qCisgKiBXYWtl
IE9uIExhbgorICovCitlbnVtIHsKKwlOVl9XT0xfRElTQUJMRUQsCisJTlZfV09MX0VOQUJMRUQK
K307CitzdGF0aWMgaW50IHdvbCA9IE5WX1dPTF9ESVNBQkxFRDsKKworLyoKKyAqIFRhZ2dpbmcg
ODAyLjFwcQorICovCitlbnVtIHsKKwlOVl84MDIxUFFfRElTQUJMRUQsCisJTlZfODAyMVBRX0VO
QUJMRUQKK307CitzdGF0aWMgaW50IHRhZ2dpbmdfODAyMXBxID0gTlZfODAyMVBRX0VOQUJMRUQ7
CisKKyNpZiBOVlZFUiA8IFJIRVM0CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbnZfbXNl
Y3NfdG9famlmZmllcyhjb25zdCB1bnNpZ25lZCBpbnQgbSkKK3sKKyNpZiBIWiA8PSAxMDAwICYm
ICEoMTAwMCAlIEhaKQorICAgICAgICByZXR1cm4gKG0gKyAoMTAwMCAvIEhaKSAtIDEpIC8gKDEw
MDAgLyBIWik7CisjZWxpZiBIWiA+IDEwMDAgJiYgIShIWiAlIDEwMDApCisgICAgICAgIHJldHVy
biBtICogKEhaIC8gMTAwMCk7CisjZWxzZQorICAgICAgICByZXR1cm4gKG0gKiBIWiArIDk5OSkg
LyAxMDAwOworI2VuZGlmCit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbnZfbXNsZWVwKHVuc2ln
bmVkIGludCBtc2VjcykKK3sKKyNpZiBOVlZFUiA+IFNMRVM5IAorCW1zbGVlcChtc2Vjcyk7Cisj
ZWxzZQorCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG52X21zZWNzX3RvX2ppZmZpZXMobXNlY3Mp
OworCisJd2hpbGUgKHRpbWVvdXQpIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVS
UlVQVElCTEUpOworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwl9Cisj
ZW5kaWYKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgZmVfcHJpdiAqZ2V0X252cHJpdihzdHJ1
Y3QgbmV0X2RldmljZSAqZGV2KQogeworI2lmIE5WVkVSID4gUkhFUzMgCiAJcmV0dXJuIG5ldGRl
dl9wcml2KGRldik7CisjZWxzZQorCXJldHVybiAoc3RydWN0IGZlX3ByaXYgKikgZGV2LT5wcml2
OworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBxdWlya19uZm9yY2VfbmV0d29ya19j
bGFzcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwkvKiBTb21lIGltcGxlbWVudGF0aW9ucyBv
ZiB0aGUgblZpZGlhIG5ldHdvcmsgY29udHJvbGxlcnMKKwkgKiBzaG93IHVwIGFzIGJyaWRnZXMs
IHdoZW4gd2UgbmVlZCB0byBzZWUgdGhlbSBhcyBuZXR3b3JrCisJICogZGV2aWNlcy4KKwkgKi8K
KworCS8qIElmIHRoaXMgaXMgYWxyZWFkeSBrbm93biBhcyBhIG5ldHdvcmsgY3RsciwgZG8gbm90
aGluZy4gKi8KKwlpZiAoKHBkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19ORVRXT1JLX0VU
SEVSTkVUKQorCQlyZXR1cm47CisKKwlpZiAoKHBkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFT
U19CUklER0VfT1RIRVIpIHsKKwkJY2hhciAgICBjOworCisJCS8qIENsZWFyaW5nIGJpdCA2IG9m
IHRoZSByZWdpc3RlciBhdCAweGY4CisJCSAqIHNlbGVjdHMgRXRoZXJuZXQgZGV2aWNlIGNsYXNz
CisJCSAqLworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweGY4LCAmYyk7CisJCWMgJj0g
MHhiZjsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4ZjgsIGMpOworCisJCS8qIHN5
c2ZzIG5lZWRzIHBkZXYtPmNsYXNzIHRvIGJlIHNldCBjb3JyZWN0bHkgKi8KKwkJcGRldi0+Y2xh
c3MgJj0gMHgwMDAwZmY7CisJCXBkZXYtPmNsYXNzIHw9IChQQ0lfQ0xBU1NfTkVUV09SS19FVEhF
Uk5FVCA8PCA4KTsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTggX19pb21lbSAqZ2V0X2h3YmFz
ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiAoKHN0cnVjdCBmZV9wcml2ICop
bmV0ZGV2X3ByaXYoZGV2KSktPmJhc2U7CisJcmV0dXJuICgoc3RydWN0IGZlX3ByaXYgKilnZXRf
bnZwcml2KGRldikpLT5iYXNlOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3B1c2godTgg
X19pb21lbSAqYmFzZSkKQEAgLTg5MywxNiArMTI5OCwxMCBAQAogCQkJcGNpX2ZyZWVfY29uc2lz
dGVudChucC0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2NfZXgpICogKG5wLT5yeF9y
aW5nX3NpemUgKyBucC0+dHhfcmluZ19zaXplKSwKIAkJCQkJICAgIG5wLT5yeF9yaW5nLmV4LCBu
cC0+cmluZ19hZGRyKTsKIAl9Ci0JaWYgKG5wLT5yeF9za2J1ZmYpCi0JCWtmcmVlKG5wLT5yeF9z
a2J1ZmYpOwotCWlmIChucC0+cnhfZG1hKQotCQlrZnJlZShucC0+cnhfZG1hKTsKLQlpZiAobnAt
PnR4X3NrYnVmZikKLQkJa2ZyZWUobnAtPnR4X3NrYnVmZik7Ci0JaWYgKG5wLT50eF9kbWEpCi0J
CWtmcmVlKG5wLT50eF9kbWEpOwotCWlmIChucC0+dHhfZG1hX2xlbikKLQkJa2ZyZWUobnAtPnR4
X2RtYV9sZW4pOworCWlmIChucC0+cnhfc2tiKQorCQlrZnJlZShucC0+cnhfc2tiKTsKKwlpZiAo
bnAtPnR4X3NrYikKKwkJa2ZyZWUobnAtPnR4X3NrYik7CQogfQogCiBzdGF0aWMgaW50IHVzaW5n
X211bHRpX2lycXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTkxMCw3ICsxMzA5LDcgQEAK
IAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAKIAlpZiAoIShucC0+bXNp
X2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwKLQkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZf
TVNJX1hfRU5BQkxFRCkgJiYKKwkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxF
RCkgJiYgCiAJICAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spID09
IDB4MSkpKQogCQlyZXR1cm4gMDsKIAllbHNlCkBAIC05MjEsNiArMTMyMCw4IEBACiB7CiAJc3Ry
dWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCisJZHByaW50ayhLRVJOX0RFQlVH
ICIlczogbnZfZW5hYmxlX2lycTogYmVnaW5cbiIsZGV2LT5uYW1lKTsKKwkvKiBtb2RpZnkgbmV0
d29yayBkZXZpY2UgY2xhc3MgaWQgKi8JCiAJaWYgKCF1c2luZ19tdWx0aV9pcnFzKGRldikpIHsK
IAkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQogCQkJZW5hYmxlX2lycShu
cC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKQEAgLTkzNyw2ICsx
MzM4LDcgQEAKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAKKwlk
cHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9kaXNhYmxlX2lycTogYmVnaW5cbiIsZGV2LT5uYW1l
KTsKIAlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgewogCQlpZiAobnAtPm1zaV9mbGFncyAm
IE5WX01TSV9YX0VOQUJMRUQpCiAJCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJ
X1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKQEAgLTEwMjAsMjkgKzE0MjIsODMgQEAKIAlyZXR1cm4g
cmV0dmFsOwogfQogCi1zdGF0aWMgaW50IHBoeV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2
KQorc3RhdGljIHZvaWQgbnZfc2F2ZV9MRURfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikK
K3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisJdTMyIHJlZz0wOwor
CXUzMiB2YWx1ZT0wOworCWludCBpPTA7CisKKwlyZWcgPSBNdl9QYWdlX0FkZHJlc3M7CisJdmFs
dWUgPSAzOworCW1paV9ydyhkZXYsbnAtPnBoeWFkZHIscmVnLHZhbHVlKTsKKwl1ZGVsYXkoNSk7
CisKKwlyZWcgPSBNdl9MRURfQ29udHJvbDsKKwlmb3IoaT0wO2k8MztpKyspeworCQlucC0+bGVk
X3N0YXRzW2ldPW1paV9ydyhkZXYsbnAtPnBoeWFkZHIscmVnK2ksTUlJX1JFQUQpOwkKKwkJZHBy
aW50ayhLRVJOX0RFQlVHICIlczogc2F2ZSBMRUQgcmVnJWQ6IHZhbHVlPTB4JXhcbiIsZGV2LT5u
YW1lLHJlZytpLG5wLT5sZWRfc3RhdHNbaV0pOworCX0KKworCXJlZyA9IE12X1BhZ2VfQWRkcmVz
czsKKwl2YWx1ZSA9IDA7CisJbWlpX3J3KGRldixucC0+cGh5YWRkcixyZWcsdmFsdWUpOworCXVk
ZWxheSg1KTsKK30KKworc3RhdGljIHZvaWQgbnZfcmVzdG9yZV9MRURfc3RhdHMoc3RydWN0IG5l
dF9kZXZpY2UgKmRldikKK3sKKworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2
KTsKKwl1MzIgcmVnPTA7CisJdTMyIHZhbHVlPTA7CisJaW50IGk9MDsKKworCXJlZyA9IE12X1Bh
Z2VfQWRkcmVzczsKKwl2YWx1ZSA9IDM7CisJbWlpX3J3KGRldixucC0+cGh5YWRkcixyZWcsdmFs
dWUpOworCXVkZWxheSg1KTsKKworCXJlZyA9IE12X0xFRF9Db250cm9sOworCWZvcihpPTA7aTwz
O2krKyl7CisJCW1paV9ydyhkZXYsbnAtPnBoeWFkZHIscmVnK2ksbnAtPmxlZF9zdGF0c1tpXSk7
CQorCQl1ZGVsYXkoMSk7CisJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlc3RvcmUgTEVEIHJl
ZyVkOiB2YWx1ZT0weCV4XG4iLGRldi0+bmFtZSxyZWcraSxucC0+bGVkX3N0YXRzW2ldKTsKKwl9
CisKKwlyZWcgPSBNdl9QYWdlX0FkZHJlc3M7CisJdmFsdWUgPSAwOworCW1paV9ydyhkZXYsbnAt
PnBoeWFkZHIscmVnLHZhbHVlKTsKKwl1ZGVsYXkoNSk7Cit9CisKK3N0YXRpYyBpbnQgcGh5X3Jl
c2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBibWNyX3NldHVwKQogewotCXN0cnVjdCBm
ZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0
X252cHJpdihkZXYpOwogCXUzMiBtaWljb250cm9sOwogCXVuc2lnbmVkIGludCB0cmllcyA9IDA7
CiAKLQltaWljb250cm9sID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBNSUlf
UkVBRCk7Ci0JbWlpY29udHJvbCB8PSBCTUNSX1JFU0VUOworCWRwcmludGsoS0VSTl9ERUJVRyAi
JXM6IHBoeV9yZXNldDogYmVnaW5cbiIsZGV2LT5uYW1lKTsKKwkvKiovCisJbnZfc2F2ZV9MRURf
c3RhdHMoZGV2KTsKKwltaWljb250cm9sID0gQk1DUl9SRVNFVCB8IGJtY3Jfc2V0dXA7CiAJaWYg
KG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgbWlpY29udHJvbCkpIHsKIAkJcmV0
dXJuIC0xOwogCX0KIAogCS8qIHdhaXQgZm9yIDUwMG1zICovCi0JbXNsZWVwKDUwMCk7CisJbnZf
bXNsZWVwKDUwMCk7CiAKIAkvKiBtdXN0IHdhaXQgdGlsbCByZXNldCBpcyBkZWFzc2VydGVkICov
CiAJd2hpbGUgKG1paWNvbnRyb2wgJiBCTUNSX1JFU0VUKSB7Ci0JCW1zbGVlcCgxMCk7CisJCW52
X21zbGVlcCgxMCk7CiAJCW1paWNvbnRyb2wgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJ
X0JNQ1IsIE1JSV9SRUFEKTsKIAkJLyogRklYTUU6IDEwMCB0cmllcyBzZWVtIGV4Y2Vzc2l2ZSAq
LwogCQlpZiAodHJpZXMrKyA+IDEwMCkKIAkJCXJldHVybiAtMTsKIAl9CisJbnZfcmVzdG9yZV9M
RURfc3RhdHMoZGV2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMDUyLDkgKzE1MDgsMzYgQEAK
IAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCXUzMiBwaHlpbnRlcmZhY2Us
IHBoeV9yZXNlcnZlZCwgbWlpX3N0YXR1cywgbWlpX2NvbnRyb2wsIG1paV9jb250cm9sXzEwMDAs
cmVnOwogCisJZHByaW50ayhLRVJOX0RFQlVHICIlczogcGh5X2luaXQ6IGJlZ2luXG4iLGRldi0+
bmFtZSk7CisJLyogcGh5IGVycmF0YSBmb3IgRTMwMTYgcGh5ICovCisJaWYgKG5wLT5waHlfbW9k
ZWwgPT0gUEhZX01PREVMX01BUlZFTExfRTMwMTYpIHsKKwkJcmVnID0gbWlpX3J3KGRldiwgbnAt
PnBoeWFkZHIsIE1JSV9OQ09ORklHLCBNSUlfUkVBRCk7CisJCXJlZyAmPSB+UEhZX01BUlZFTExf
RTMwMTZfSU5JVE1BU0s7CisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX05DT05G
SUcsIHJlZykpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgd3JpdGUgdG8gZXJyYXRh
IHJlZyBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOworCQkJcmV0dXJuIFBIWV9F
UlJPUjsKKwkJfQorCX0KKwogCS8qIHNldCBhZHZlcnRpc2UgcmVnaXN0ZXIgKi8KIAlyZWcgPSBt
aWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgTUlJX1JFQUQpOwotCXJlZyB8
PSAoQURWRVJUSVNFXzEwSEFMRnxBRFZFUlRJU0VfMTBGVUxMfEFEVkVSVElTRV8xMDBIQUxGfEFE
VkVSVElTRV8xMDBGVUxMfEFEVkVSVElTRV9QQVVTRV9BU1lNfEFEVkVSVElTRV9QQVVTRV9DQVAp
OworCXJlZyAmPSB+KEFEVkVSVElTRV9BTEwgfCBBRFZFUlRJU0VfMTAwQkFTRTQgfCBBRFZFUlRJ
U0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNFX0FTWU0pOworCWlmIChzcGVlZF9kdXBsZXgg
PT0gTlZfU1BFRURfRFVQTEVYX0FVVE8pCisJCXJlZyB8PSAoQURWRVJUSVNFXzEwSEFMRnxBRFZF
UlRJU0VfMTBGVUxMfEFEVkVSVElTRV8xMDBIQUxGfEFEVkVSVElTRV8xMDBGVUxMKTsKKwlpZiAo
c3BlZWRfZHVwbGV4ID09IE5WX1NQRUVEX0RVUExFWF8xMF9IQUxGX0RVUExFWCkKKwkJcmVnIHw9
IEFEVkVSVElTRV8xMEhBTEY7CisJaWYgKHNwZWVkX2R1cGxleCA9PSBOVl9TUEVFRF9EVVBMRVhf
MTBfRlVMTF9EVVBMRVgpCisJCXJlZyB8PSBBRFZFUlRJU0VfMTBGVUxMOworCWlmIChzcGVlZF9k
dXBsZXggPT0gTlZfU1BFRURfRFVQTEVYXzEwMF9IQUxGX0RVUExFWCkKKwkJcmVnIHw9IEFEVkVS
VElTRV8xMDBIQUxGOworCWlmIChzcGVlZF9kdXBsZXggPT0gTlZfU1BFRURfRFVQTEVYXzEwMF9G
VUxMX0RVUExFWCkKKwkJcmVnIHw9IEFEVkVSVElTRV8xMDBGVUxMOworCWlmIChucC0+cGF1c2Vf
ZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1JYX1JFUSkgLyogZm9yIHJ4IHdlIHNldCBib3RoIGFkdmVy
dGlzbWVudHMgYnV0IGRpc2FibGUgdHggcGF1c2UgKi8KKwkJcmVnIHw9IEFEVkVSVElTRV9QQVVT
RV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKKwlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZf
UEFVU0VGUkFNRV9UWF9SRVEpCisJCXJlZyB8PSBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKKwlucC0+
Zml4ZWRfbW9kZSA9IHJlZzsKKwogCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FE
VkVSVElTRSwgcmVnKSkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IHdyaXRlIHRvIGFk
dmVydGlzZSBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwogCQlyZXR1cm4gUEhZ
X0VSUk9SOwpAQCAtMTA2OSwxMSArMTU1MiwxNSBAQAogCQlucC0+Z2lnYWJpdCA9IFBIWV9HSUdB
QklUOwogCQltaWlfY29udHJvbF8xMDAwID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9D
VFJMMTAwMCwgTUlJX1JFQUQpOwogCQltaWlfY29udHJvbF8xMDAwICY9IH5BRFZFUlRJU0VfMTAw
MEhBTEY7Ci0JCWlmIChwaHlpbnRlcmZhY2UgJiBQSFlfUkdNSUkpCisJCWlmIChwaHlpbnRlcmZh
Y2UgJiBQSFlfUkdNSUkgJiYgCisJCSAgICAoc3BlZWRfZHVwbGV4ID09IE5WX1NQRUVEX0RVUExF
WF9BVVRPIHx8IAorCQkgICAgIChzcGVlZF9kdXBsZXggPT0gTlZfU1BFRURfRFVQTEVYXzEwMDBf
RlVMTF9EVVBMRVggJiYgYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkpKQogCQkJbWlpX2NvbnRy
b2xfMTAwMCB8PSBBRFZFUlRJU0VfMTAwMEZVTEw7Ci0JCWVsc2UKKwkJZWxzZSB7CisJCQlpZiAo
c3BlZWRfZHVwbGV4ID09IE5WX1NQRUVEX0RVUExFWF8xMDAwX0ZVTExfRFVQTEVYICYmIGF1dG9u
ZWcgPT0gQVVUT05FR19ESVNBQkxFKQorCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAxMDAwbXBi
cyBmdWxsIG9ubHkgYWxsb3dlZCB3aXRoIGF1dG9uZWdcbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2
KSk7CiAJCQltaWlfY29udHJvbF8xMDAwICY9IH5BRFZFUlRJU0VfMTAwMEZVTEw7Ci0KKwkJfQog
CQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9DVFJMMTAwMCwgbWlpX2NvbnRyb2xf
MTAwMCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBw
Y2lfbmFtZShucC0+cGNpX2RldikpOwogCQkJcmV0dXJuIFBIWV9FUlJPUjsKQEAgLTEwODIsOCAr
MTU2OSwyNSBAQAogCWVsc2UKIAkJbnAtPmdpZ2FiaXQgPSAwOwogCi0JLyogcmVzZXQgdGhlIHBo
eSAqLwotCWlmIChwaHlfcmVzZXQoZGV2KSkgeworCW1paV9jb250cm9sID0gbWlpX3J3KGRldiwg
bnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBNSUlfUkVBRCk7CisJaWYgKGF1dG9uZWcgPT0gQVVUT05F
R19ESVNBQkxFKXsKKwkJbnAtPnBhdXNlX2ZsYWdzICY9IH4oTlZfUEFVU0VGUkFNRV9SWF9FTkFC
TEUgfCBOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRSk7CisJCWlmIChucC0+cGF1c2VfZmxhZ3MgJiBO
Vl9QQVVTRUZSQU1FX1JYX1JFUSkKKwkJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1F
X1JYX0VOQUJMRTsKKwkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfUkVR
KQorCQkJbnAtPnBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfVFhfRU5BQkxFOworCQltaWlf
Y29udHJvbCAmPSB+KEJNQ1JfQU5FTkFCTEV8Qk1DUl9TUEVFRDEwMHxCTUNSX1NQRUVEMTAwMHxC
TUNSX0ZVTExEUExYKTsKKwkJaWYgKHJlZyAmIChBRFZFUlRJU0VfMTBGVUxMfEFEVkVSVElTRV8x
MDBGVUxMKSkKKwkJCW1paV9jb250cm9sIHw9IEJNQ1JfRlVMTERQTFg7CisJCWlmIChyZWcgJiAo
QURWRVJUSVNFXzEwMEhBTEZ8QURWRVJUSVNFXzEwMEZVTEwpKQorCQkJbWlpX2NvbnRyb2wgfD0g
Qk1DUl9TUEVFRDEwMDsKKwl9IGVsc2UgeworCQltaWlfY29udHJvbCB8PSBCTUNSX0FORU5BQkxF
OworCX0KKworCS8qIHJlc2V0IHRoZSBwaHkgYW5kIHNldHVwIEJNQ1IgCisJICogKGNlcnRhaW4g
cGh5cyBuZWVkIHJlc2V0IGF0IHNhbWUgdGltZSBuZXcgdmFsdWVzIGFyZSBzZXQpICovCisJaWYg
KHBoeV9yZXNldChkZXYsIG1paV9jb250cm9sKSkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczog
cGh5IHJlc2V0IGZhaWxlZFxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKIAkJcmV0dXJuIFBI
WV9FUlJPUjsKIAl9CkBAIC0xMDkxLDE0ICsxNTk1LDE0IEBACiAJLyogcGh5IHZlbmRvciBzcGVj
aWZpYyBjb25maWd1cmF0aW9uICovCiAJaWYgKChucC0+cGh5X291aSA9PSBQSFlfT1VJX0NJQ0FE
QSkgJiYgKHBoeWludGVyZmFjZSAmIFBIWV9SR01JSSkgKSB7CiAJCXBoeV9yZXNlcnZlZCA9IG1p
aV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfUkVTVjEsIE1JSV9SRUFEKTsKLQkJcGh5X3Jlc2Vy
dmVkICY9IH4oUEhZX0lOSVQxIHwgUEhZX0lOSVQyKTsKLQkJcGh5X3Jlc2VydmVkIHw9IChQSFlf
SU5JVDMgfCBQSFlfSU5JVDQpOworCQlwaHlfcmVzZXJ2ZWQgJj0gfihQSFlfQ0lDQURBX0lOSVQx
IHwgUEhZX0NJQ0FEQV9JTklUMik7CisJCXBoeV9yZXNlcnZlZCB8PSAoUEhZX0NJQ0FEQV9JTklU
MyB8IFBIWV9DSUNBREFfSU5JVDQpOwogCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1J
SV9SRVNWMSwgcGh5X3Jlc2VydmVkKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBp
bml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CiAJCQlyZXR1cm4gUEhZX0VS
Uk9SOwogCQl9CiAJCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlf
TkNPTkZJRywgTUlJX1JFQUQpOwotCQlwaHlfcmVzZXJ2ZWQgfD0gUEhZX0lOSVQ1OworCQlwaHlf
cmVzZXJ2ZWQgfD0gUEhZX0NJQ0FEQV9JTklUNTsKIAkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlh
ZGRyLCBNSUlfTkNPTkZJRywgcGh5X3Jlc2VydmVkKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAi
JXM6IHBoeSBpbml0IGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CiAJCQlyZXR1
cm4gUEhZX0VSUk9SOwpAQCAtMTEwNiwzOSArMTYxMCwxMTYgQEAKIAl9CiAJaWYgKG5wLT5waHlf
b3VpID09IFBIWV9PVUlfQ0lDQURBKSB7CiAJCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5w
LT5waHlhZGRyLCBNSUlfU1JFVklTSU9OLCBNSUlfUkVBRCk7Ci0JCXBoeV9yZXNlcnZlZCB8PSBQ
SFlfSU5JVDY7CisJCXBoeV9yZXNlcnZlZCB8PSBQSFlfQ0lDQURBX0lOSVQ2OwogCQlpZiAobWlp
X3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9TUkVWSVNJT04sIHBoeV9yZXNlcnZlZCkpIHsKIAkJ
CXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+
cGNpX2RldikpOwogCQkJcmV0dXJuIFBIWV9FUlJPUjsKIAkJfQogCX0KLQkvKiBzb21lIHBoeXMg
Y2xlYXIgb3V0IHBhdXNlIGFkdmVydGlzbWVudCBvbiByZXNldCwgc2V0IGl0IGJhY2sgKi8KLQlt
aWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0FEVkVSVElTRSwgcmVnKTsKLQotCS8qIHJlc3Rh
cnQgYXV0byBuZWdvdGlhdGlvbiAqLwotCW1paV9jb250cm9sID0gbWlpX3J3KGRldiwgbnAtPnBo
eWFkZHIsIE1JSV9CTUNSLCBNSUlfUkVBRCk7Ci0JbWlpX2NvbnRyb2wgfD0gKEJNQ1JfQU5SRVNU
QVJUIHwgQk1DUl9BTkVOQUJMRSk7Ci0JaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlf
Qk1DUiwgbWlpX2NvbnRyb2wpKSB7Ci0JCXJldHVybiBQSFlfRVJST1I7Ci0JfQotCi0JcmV0dXJu
IDA7CisJaWYgKG5wLT5waHlfb3VpID09IFBIWV9PVUlfVklURVNTRSkgeworCQlpZiAobWlpX3J3
KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9WSVRFU1NFX0lOSVRfUkVHMSwgUEhZX1ZJVEVTU0VfSU5J
VDEpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNp
X25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCXJldHVybiBQSFlfRVJST1I7CisJCX0JCQorCQlpZiAo
bWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9WSVRFU1NFX0lOSVRfUkVHMiwgUEhZX1ZJVEVT
U0VfSU5JVDIpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxu
IiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCXJldHVybiBQSFlfRVJST1I7CisJCX0JCQor
CQlwaHlfcmVzZXJ2ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5J
VF9SRUc0LCBNSUlfUkVBRCk7CisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJ
VEVTU0VfSU5JVF9SRUc0LCBwaHlfcmVzZXJ2ZWQpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIl
czogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCXJldHVy
biBQSFlfRVJST1I7CisJCX0JCQorCQlwaHlfcmVzZXJ2ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5
YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUczLCBNSUlfUkVBRCk7CisJCXBoeV9yZXNlcnZlZCAm
PSB+UEhZX1ZJVEVTU0VfSU5JVF9NU0sxOworCQlwaHlfcmVzZXJ2ZWQgfD0gUEhZX1ZJVEVTU0Vf
SU5JVDM7CisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9S
RUczLCBwaHlfcmVzZXJ2ZWQpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQg
ZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCXJldHVybiBQSFlfRVJST1I7
CisJCX0JCQorCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9WSVRFU1NFX0lOSVRf
UkVHMiwgUEhZX1ZJVEVTU0VfSU5JVDQpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5
IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCXJldHVybiBQSFlf
RVJST1I7CisJCX0JCQorCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9WSVRFU1NF
X0lOSVRfUkVHMiwgUEhZX1ZJVEVTU0VfSU5JVDUpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIl
czogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCXJldHVy
biBQSFlfRVJST1I7CisJCX0JCQorCQlwaHlfcmVzZXJ2ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5
YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUc0LCBNSUlfUkVBRCk7CisJCXBoeV9yZXNlcnZlZCAm
PSB+UEhZX1ZJVEVTU0VfSU5JVF9NU0sxOworCQlwaHlfcmVzZXJ2ZWQgfD0gUEhZX1ZJVEVTU0Vf
SU5JVDM7CisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9S
RUc0LCBwaHlfcmVzZXJ2ZWQpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQg
ZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCXJldHVybiBQSFlfRVJST1I7
CisJCX0JCQorCQlwaHlfcmVzZXJ2ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJ
VEVTU0VfSU5JVF9SRUczLCBNSUlfUkVBRCk7CisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRk
ciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUczLCBwaHlfcmVzZXJ2ZWQpKSB7CisJCQlwcmludGsoS0VS
Tl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsK
KwkJCXJldHVybiBQSFlfRVJST1I7CisJCX0JCQorCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFk
ZHIsIFBIWV9WSVRFU1NFX0lOSVRfUkVHMiwgUEhZX1ZJVEVTU0VfSU5JVDYpKSB7CisJCQlwcmlu
dGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9k
ZXYpKTsKKwkJCXJldHVybiBQSFlfRVJST1I7CisJCX0JCQorCQlpZiAobWlpX3J3KGRldiwgbnAt
PnBoeWFkZHIsIFBIWV9WSVRFU1NFX0lOSVRfUkVHMiwgUEhZX1ZJVEVTU0VfSU5JVDcpKSB7CisJ
CQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAt
PnBjaV9kZXYpKTsKKwkJCXJldHVybiBQSFlfRVJST1I7CisJCX0JCQorCQlwaHlfcmVzZXJ2ZWQg
PSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUc0LCBNSUlfUkVB
RCk7CisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUc0
LCBwaHlfcmVzZXJ2ZWQpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFp
bGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCXJldHVybiBQSFlfRVJST1I7CisJ
CX0JCQorCQlwaHlfcmVzZXJ2ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVT
U0VfSU5JVF9SRUczLCBNSUlfUkVBRCk7CisJCXBoeV9yZXNlcnZlZCAmPSB+UEhZX1ZJVEVTU0Vf
SU5JVF9NU0syOworCQlwaHlfcmVzZXJ2ZWQgfD0gUEhZX1ZJVEVTU0VfSU5JVDg7CisJCWlmICht
aWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUczLCBwaHlfcmVzZXJ2
ZWQpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNp
X25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCXJldHVybiBQSFlfRVJST1I7CisJCX0JCQorCQlpZiAo
bWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9WSVRFU1NFX0lOSVRfUkVHMiwgUEhZX1ZJVEVT
U0VfSU5JVDkpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxu
IiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCXJldHVybiBQSFlfRVJST1I7CisJCX0JCQor
CQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIFBIWV9WSVRFU1NFX0lOSVRfUkVHMSwgUEhZ
X1ZJVEVTU0VfSU5JVDEwKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSBpbml0IGZh
aWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CisJCQlyZXR1cm4gUEhZX0VSUk9SOwor
CQl9CQkKKwl9CisJLyogc29tZSBwaHlzIGNsZWFyIG91dCBwYXVzZSBhZHZlcnRpc21lbnQgb24g
cmVzZXQsIHNldCBpdCBiYWNrICovCisJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZF
UlRJU0UsIHJlZyk7CisKKwkvKiByZXN0YXJ0IGF1dG8gbmVnb3RpYXRpb24gKi8KKwlpZiAoYXV0
b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQltaWlfY29udHJvbCA9IG1paV9ydyhkZXYsIG5w
LT5waHlhZGRyLCBNSUlfQk1DUiwgTUlJX1JFQUQpOworCQltaWlfY29udHJvbCB8PSAoQk1DUl9B
TlJFU1RBUlQgfCBCTUNSX0FORU5BQkxFKTsKKwkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRy
LCBNSUlfQk1DUiwgbWlpX2NvbnRyb2wpKSB7CisJCQlyZXR1cm4gUEhZX0VSUk9SOworCQl9CisJ
fQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG52X3N0YXJ0X3J4KHN0cnVjdCBuZXRf
ZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsK
KwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTggX19pb21lbSAqYmFz
ZSA9IGdldF9od2Jhc2UoZGV2KTsKKwl1MzIgcnhfY3RybCA9IHJlYWRsKGJhc2UgKyBOdlJlZ1Jl
Y2VpdmVyQ29udHJvbCk7CiAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9zdGFydF9yeFxu
IiwgZGV2LT5uYW1lKTsKIAkvKiBBbHJlYWR5IHJ1bm5pbmc/IFN0b3AgaXQuICovCi0JaWYgKHJl
YWRsKGJhc2UgKyBOdlJlZ1JlY2VpdmVyQ29udHJvbCkgJiBOVlJFR19SQ1ZDVExfU1RBUlQpIHsK
LQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ1JlY2VpdmVyQ29udHJvbCk7CisJaWYgKChyZWFkbChi
YXNlICsgTnZSZWdSZWNlaXZlckNvbnRyb2wpICYgTlZSRUdfUkNWQ1RMX1NUQVJUKSAmJiAhbnAt
Pm1hY19pbl91c2UpIHsKKwkJcnhfY3RybCAmPSB+TlZSRUdfUkNWQ1RMX1NUQVJUOworCQl3cml0
ZWwocnhfY3RybCwgYmFzZSArIE52UmVnUmVjZWl2ZXJDb250cm9sKTsKIAkJcGNpX3B1c2goYmFz
ZSk7CiAJfQogCXdyaXRlbChucC0+bGlua3NwZWVkLCBiYXNlICsgTnZSZWdMaW5rU3BlZWQpOwog
CXBjaV9wdXNoKGJhc2UpOwotCXdyaXRlbChOVlJFR19SQ1ZDVExfU1RBUlQsIGJhc2UgKyBOdlJl
Z1JlY2VpdmVyQ29udHJvbCk7CisgICAgICAgIHJ4X2N0cmwgfD0gTlZSRUdfUkNWQ1RMX1NUQVJU
OworICAgICAgICBpZiAobnAtPm1hY19pbl91c2UpCisJCXJ4X2N0cmwgJj0gfk5WUkVHX1JDVkNU
TF9SWF9QQVRIX0VOOworCXdyaXRlbChyeF9jdHJsLCBiYXNlICsgTnZSZWdSZWNlaXZlckNvbnRy
b2wpOwogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3N0YXJ0X3J4IHRvIGR1cGxleCAlZCwg
c3BlZWQgMHglMDh4LlxuIiwKIAkJCQlkZXYtPm5hbWUsIG5wLT5kdXBsZXgsIG5wLT5saW5rc3Bl
ZWQpOwogCXBjaV9wdXNoKGJhc2UpOwpAQCAtMTE0Niw0NCArMTcyNyw2MyBAQAogCiBzdGF0aWMg
dm9pZCBudl9zdG9wX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGZlX3By
aXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNl
KGRldik7CisJdTMyIHJ4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdSZWNlaXZlckNvbnRyb2wp
OwogCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RvcF9yeFxuIiwgZGV2LT5uYW1lKTsK
LQl3cml0ZWwoMCwgYmFzZSArIE52UmVnUmVjZWl2ZXJDb250cm9sKTsKKwlpZiAoIW5wLT5tYWNf
aW5fdXNlKQorCQlyeF9jdHJsICY9IH5OVlJFR19SQ1ZDVExfU1RBUlQ7CisJZWxzZQorCQlyeF9j
dHJsIHw9IE5WUkVHX1JDVkNUTF9SWF9QQVRIX0VOOworCXdyaXRlbChyeF9jdHJsLCBiYXNlICsg
TnZSZWdSZWNlaXZlckNvbnRyb2wpOwogCXJlZ19kZWxheShkZXYsIE52UmVnUmVjZWl2ZXJTdGF0
dXMsIE5WUkVHX1JDVlNUQVRfQlVTWSwgMCwKIAkJCU5WX1JYU1RPUF9ERUxBWTEsIE5WX1JYU1RP
UF9ERUxBWTFNQVgsCiAJCQlLRVJOX0lORk8gIm52X3N0b3Bfcng6IFJlY2VpdmVyU3RhdHVzIHJl
bWFpbmVkIGJ1c3kiKTsKIAogCXVkZWxheShOVl9SWFNUT1BfREVMQVkyKTsKKwlpZiAoIW5wLT5t
YWNfaW5fdXNlKQogCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdMaW5rU3BlZWQpOwogfQogCiBzdGF0
aWMgdm9pZCBudl9zdGFydF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBm
ZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3
YmFzZShkZXYpOworCXUzMiB0eF9jdHJsID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJD
b250cm9sKTsKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3N0YXJ0X3R4XG4iLCBkZXYt
Pm5hbWUpOwotCXdyaXRlbChOVlJFR19YTUlUQ1RMX1NUQVJULCBiYXNlICsgTnZSZWdUcmFuc21p
dHRlckNvbnRyb2wpOworCXR4X2N0cmwgfD0gTlZSRUdfWE1JVENUTF9TVEFSVDsKKwlpZiAobnAt
Pm1hY19pbl91c2UpCisJCXR4X2N0cmwgJj0gfk5WUkVHX1hNSVRDVExfVFhfUEFUSF9FTjsKKwl3
cml0ZWwodHhfY3RybCwgYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKIAlwY2lfcHVz
aChiYXNlKTsKIH0KIAogc3RhdGljIHZvaWQgbnZfc3RvcF90eChzdHJ1Y3QgbmV0X2RldmljZSAq
ZGV2KQogeworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAl1OCBfX2lv
bWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCXUzMiB0eF9jdHJsID0gcmVhZGwoYmFzZSAr
IE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52
X3N0b3BfdHhcbiIsIGRldi0+bmFtZSk7Ci0Jd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0
dGVyQ29udHJvbCk7CisJaWYgKCFucC0+bWFjX2luX3VzZSkKKwkJdHhfY3RybCAmPSB+TlZSRUdf
WE1JVENUTF9TVEFSVDsKKwllbHNlCisJCXR4X2N0cmwgfD0gTlZSRUdfWE1JVENUTF9UWF9QQVRI
X0VOOworCXdyaXRlbCh0eF9jdHJsLCBiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOwog
CXJlZ19kZWxheShkZXYsIE52UmVnVHJhbnNtaXR0ZXJTdGF0dXMsIE5WUkVHX1hNSVRTVEFUX0JV
U1ksIDAsCiAJCQlOVl9UWFNUT1BfREVMQVkxLCBOVl9UWFNUT1BfREVMQVkxTUFYLAogCQkJS0VS
Tl9JTkZPICJudl9zdG9wX3R4OiBUcmFuc21pdHRlclN0YXR1cyByZW1haW5lZCBidXN5Iik7CiAK
IAl1ZGVsYXkoTlZfVFhTVE9QX0RFTEFZMik7Ci0Jd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ1Vua25v
d25UcmFuc21pdHRlclJlZyk7CisJaWYgKCFucC0+bWFjX2luX3VzZSkKKwkJd3JpdGVsKHJlYWRs
KGJhc2UgKyBOdlJlZ1RyYW5zbWl0UG9sbCkgJiBOVlJFR19UUkFOU01JVFBPTExfTUFDX0FERFJf
UkVWLCBiYXNlICsgTnZSZWdUcmFuc21pdFBvbGwpOwogfQogCiBzdGF0aWMgdm9pZCBudl90eHJ4
X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0g
bmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7
CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAogCWRwcmludGsoS0VSTl9E
RUJVRyAiJXM6IG52X3R4cnhfcmVzZXRcbiIsIGRldi0+bmFtZSk7CkBAIC0xMTk2LDcgKzE3OTYs
NyBAQAogCiBzdGF0aWMgdm9pZCBudl9tYWNfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikK
IHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9w
cml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFz
ZShkZXYpOwogCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbWFjX3Jlc2V0XG4iLCBkZXYt
Pm5hbWUpOwpAQCAtMTIxMiw3NSArMTgxMiwxNzAgQEAKIAlwY2lfcHVzaChiYXNlKTsKIH0KIAor
I2lmIE5WVkVSIDwgU0xFUzkKK3N0YXRpYyBpbnQgbnZfZXRodG9vbF9pb2N0bChzdHJ1Y3QgbmV0
X2RldmljZSAqZGV2LCB2b2lkICp1c2VyYWRkcikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBn
ZXRfbnZwcml2KGRldik7CisJdTggKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIGV0aGNt
ZDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZXRoY21kLCB1c2VyYWRkciwgc2l6ZW9mIChldGhj
bWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzd2l0Y2ggKGV0aGNtZCkgeworCQljYXNlIEVU
SFRPT0xfR0RSVklORk86CisJCQl7CisJCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBpbmZvID0g
eyBFVEhUT09MX0dEUlZJTkZPIH07CisJCQkJc3RyY3B5KGluZm8uZHJpdmVyLCAiZm9yY2VkZXRo
Iik7CisJCQkJc3RyY3B5KGluZm8udmVyc2lvbiwgRk9SQ0VERVRIX1ZFUlNJT04pOworCQkJCXN0
cmNweShpbmZvLmJ1c19pbmZvLCBwY2lfbmFtZShucC0+cGNpX2RldikpOworCQkJCWlmIChjb3B5
X3RvX3VzZXIodXNlcmFkZHIsICZpbmZvLCBzaXplb2YgKGluZm8pKSkKKwkJCQkJcmV0dXJuIC1F
RkFVTFQ7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCWNhc2UgRVRIVE9PTF9HTElOSzoKKwkJCXsK
KwkJCQlzdHJ1Y3QgZXRodG9vbF92YWx1ZSBlZGF0YSA9IHsgRVRIVE9PTF9HTElOSyB9OworCisJ
CQkJZWRhdGEuZGF0YSA9ICEhbmV0aWZfY2Fycmllcl9vayhkZXYpOworCisJCQkJaWYgKGNvcHlf
dG9fdXNlcih1c2VyYWRkciwgJmVkYXRhLCBzaXplb2YoZWRhdGEpKSkKKwkJCQkJcmV0dXJuIC1F
RkFVTFQ7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCWNhc2UgRVRIVE9PTF9HV09MOgorCQkJewor
CQkJCXN0cnVjdCBldGh0b29sX3dvbGluZm8gd29saW5mbzsKKwkJCQltZW1zZXQoJndvbGluZm8s
IDAsIHNpemVvZih3b2xpbmZvKSk7CisJCQkJd29saW5mby5zdXBwb3J0ZWQgPSBXQUtFX01BR0lD
OworCisJCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOworCQkJCWlmIChucC0+d29sZW5hYmxl
ZCkKKwkJCQkJd29saW5mby53b2xvcHRzID0gV0FLRV9NQUdJQzsKKwkJCQlzcGluX3VubG9ja19p
cnEoJm5wLT5sb2NrKTsKKworCQkJCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZ3b2xpbmZv
LCBzaXplb2Yod29saW5mbykpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlyZXR1cm4gMDsK
KwkJCX0KKwkJY2FzZSBFVEhUT09MX1NXT0w6CisJCQl7CisJCQkJc3RydWN0IGV0aHRvb2xfd29s
aW5mbyB3b2xpbmZvOworCQkJCWlmIChjb3B5X2Zyb21fdXNlcigmd29saW5mbywgdXNlcmFkZHIs
IHNpemVvZih3b2xpbmZvKSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCisJCQkJc3Bpbl9sb2Nr
X2lycSgmbnAtPmxvY2spOworCQkJCWlmICh3b2xpbmZvLndvbG9wdHMgPT0gMCkgeworCQkJCQl3
cml0ZWwoMCwgYmFzZSArIE52UmVnV2FrZVVwRmxhZ3MpOworCQkJCQlucC0+d29sZW5hYmxlZCA9
IE5WX1dPTF9ESVNBQkxFRDsKKwkJCQl9CisJCQkJaWYgKHdvbGluZm8ud29sb3B0cyAmIFdBS0Vf
TUFHSUMpIHsKKwkJCQkJd3JpdGVsKE5WUkVHX1dBS0VVUEZMQUdTX0VOQUJMRSwgYmFzZSArIE52
UmVnV2FrZVVwRmxhZ3MpOworCQkJCQlucC0+d29sZW5hYmxlZCA9IE5WX1dPTF9FTkFCTEVEOwor
CQkJCX0KKwkJCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJCQlyZXR1cm4gMDsKKwkJ
CX0KKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FT1BOT1RTVVBQOwor
fQorCiAvKgotICogbnZfZ2V0X3N0YXRzOiBkZXYtPmdldF9zdGF0cyBmdW5jdGlvbgotICogR2V0
IGxhdGVzdCBzdGF0cyB2YWx1ZSBmcm9tIHRoZSBuaWMuCi0gKiBDYWxsZWQgd2l0aCByZWFkX2xv
Y2soJmRldl9iYXNlX2xvY2spIGhlbGQgZm9yIHJlYWQgLQotICogb25seSBzeW5jaHJvbml6ZWQg
YWdhaW5zdCB1bnJlZ2lzdGVyX25ldGRldmljZS4KKyAqIG52X2lvY3RsOiBkZXYtPmRvX2lvY3Rs
IGZ1bmN0aW9uCisgKiBDYWxsZWQgd2l0aCBydG5sX2xvY2sgaGVsZC4KICAqLwotc3RhdGljIHN0
cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpudl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRl
dikKK3N0YXRpYyBpbnQgbnZfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlm
cmVxICpycSwgaW50IGNtZCkKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihk
ZXYpOworCXN3aXRjaChjbWQpIHsKKwkJY2FzZSBTSU9DRVRIVE9PTDoKKwkJCXJldHVybiBudl9l
dGh0b29sX2lvY3RsKGRldiwgcnEtPmlmcl9kYXRhKTsKIAotCS8qIEl0IHNlZW1zIHRoYXQgdGhl
IG5pYyBhbHdheXMgZ2VuZXJhdGVzIGludGVycnVwdHMgYW5kIGRvZXNuJ3QKLQkgKiBhY2N1bXVs
YXRlIGVycm9ycyBpbnRlcm5hbGx5LiBUaHVzIHRoZSBjdXJyZW50IHZhbHVlcyBpbiBucC0+c3Rh
dHMKLQkgKiBhcmUgYWxyZWFkeSB1cCB0byBkYXRlLgotCSAqLwotCXJldHVybiAmbnAtPnN0YXRz
OworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KIH0KKyNlbmRpZgogCiAv
KgogICogbnZfYWxsb2Nfcng6IGZpbGwgcnggcmluZyBlbnRyaWVzLgogICogUmV0dXJuIDEgaWYg
dGhlIGFsbG9jYXRpb25zIGZvciB0aGUgc2ticyBmYWlsZWQgYW5kIHRoZQogICogcnggZW5naW5l
IGlzIHdpdGhvdXQgQXZhaWxhYmxlIGRlc2NyaXB0b3JzCiAgKi8KLXN0YXRpYyBpbnQgbnZfYWxs
b2Nfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgaW50IG52X2FsbG9j
X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0
ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBpbnQgcmVmaWxsX3J4ID0gbnAtPnJlZmlsbF9yeDsK
LQlpbnQgbnI7Ci0KLQl3aGlsZSAobnAtPmN1cl9yeCAhPSByZWZpbGxfcngpIHsKLQkJc3RydWN0
IHNrX2J1ZmYgKnNrYjsKLQotCQluciA9IHJlZmlsbF9yeCAlIG5wLT5yeF9yaW5nX3NpemU7Ci0J
CWlmIChucC0+cnhfc2tidWZmW25yXSA9PSBOVUxMKSB7Ci0KLQkJCXNrYiA9IGRldl9hbGxvY19z
a2IobnAtPnJ4X2J1Zl9zeiArIE5WX1JYX0FMTE9DX1BBRCk7Ci0JCQlpZiAoIXNrYikKLQkJCQli
cmVhazsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisJc3RydWN0IHJp
bmdfZGVzYyogbGVzc19yeDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCisJbGVzc19yeCA9IG5w
LT5nZXRfcngub3JpZzsKKwlpZiAobGVzc19yeC0tID09IG5wLT5maXJzdF9yeC5vcmlnKQorCQls
ZXNzX3J4ID0gbnAtPmxhc3Rfcngub3JpZzsKKworCXdoaWxlIChucC0+cHV0X3J4Lm9yaWcgIT0g
bGVzc19yeCkgeworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKG5wLT5yeF9idWZfc3ogKyBOVl9SWF9B
TExPQ19QQUQpOworCQlpZiAoc2tiKSB7CiAJCQlza2ItPmRldiA9IGRldjsKLQkJCW5wLT5yeF9z
a2J1ZmZbbnJdID0gc2tiOworCQkJbnAtPnB1dF9yeF9jdHgtPnNrYiA9IHNrYjsKKwkJCW5wLT5w
dXRfcnhfY3R4LT5kbWEgPSBwY2lfbWFwX3NpbmdsZShucC0+cGNpX2Rldiwgc2tiLT5kYXRhLAor
CQkJCQkJCSAgICAgc2tiLT5lbmQtc2tiLT5kYXRhLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJ
bnAtPnB1dF9yeF9jdHgtPmRtYV9sZW4gPSBza2ItPmVuZC1za2ItPmRhdGE7CisJCQlucC0+cHV0
X3J4Lm9yaWctPlBhY2tldEJ1ZmZlciA9IGNwdV90b19sZTMyKG5wLT5wdXRfcnhfY3R4LT5kbWEp
OworCQkJd21iKCk7CisJCQlucC0+cHV0X3J4Lm9yaWctPkZsYWdMZW4gPSBjcHVfdG9fbGUzMihu
cC0+cnhfYnVmX3N6IHwgTlZfUlhfQVZBSUwpOworCQkJaWYgKHVubGlrZWx5KG5wLT5wdXRfcngu
b3JpZysrID09IG5wLT5sYXN0X3J4Lm9yaWcpKQorCQkJCW5wLT5wdXRfcngub3JpZyA9IG5wLT5m
aXJzdF9yeC5vcmlnOworCQkJaWYgKHVubGlrZWx5KG5wLT5wdXRfcnhfY3R4KysgPT0gbnAtPmxh
c3RfcnhfY3R4KSkKKwkJCQlucC0+cHV0X3J4X2N0eCA9IG5wLT5maXJzdF9yeF9jdHg7CiAJCX0g
ZWxzZSB7Ci0JCQlza2IgPSBucC0+cnhfc2tidWZmW25yXTsKKwkJCXJldHVybiAxOwogCQl9Ci0J
CW5wLT5yeF9kbWFbbnJdID0gcGNpX21hcF9zaW5nbGUobnAtPnBjaV9kZXYsIHNrYi0+ZGF0YSwK
LQkJCQkJc2tiLT5lbmQtc2tiLT5kYXRhLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlpZiAobnAt
PmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsK
LQkJCW5wLT5yeF9yaW5nLm9yaWdbbnJdLlBhY2tldEJ1ZmZlciA9IGNwdV90b19sZTMyKG5wLT5y
eF9kbWFbbnJdKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG52X2Fs
bG9jX3J4X29wdGltaXplZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmZV9w
cml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKwlzdHJ1Y3QgcmluZ19kZXNjX2V4KiBsZXNzX3J4
OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlsZXNzX3J4ID0gbnAtPmdldF9yeC5leDsKKwlp
ZiAobGVzc19yeC0tID09IG5wLT5maXJzdF9yeC5leCkKKwkJbGVzc19yeCA9IG5wLT5sYXN0X3J4
LmV4OworCisJd2hpbGUgKG5wLT5wdXRfcnguZXggIT0gbGVzc19yeCkgeworCQlza2IgPSBkZXZf
YWxsb2Nfc2tiKG5wLT5yeF9idWZfc3ogKyBOVl9SWF9BTExPQ19QQUQpOworCQlpZiAoc2tiKSB7
CisJCQlza2ItPmRldiA9IGRldjsKKwkJCW5wLT5wdXRfcnhfY3R4LT5za2IgPSBza2I7CisJCQlu
cC0+cHV0X3J4X2N0eC0+ZG1hID0gcGNpX21hcF9zaW5nbGUobnAtPnBjaV9kZXYsIHNrYi0+ZGF0
YSwKKwkJCQkJCQkgICAgIHNrYi0+ZW5kLXNrYi0+ZGF0YSwgUENJX0RNQV9GUk9NREVWSUNFKTsK
KwkJCW5wLT5wdXRfcnhfY3R4LT5kbWFfbGVuID0gc2tiLT5lbmQtc2tiLT5kYXRhOworCQkJbnAt
PnB1dF9yeC5leC0+UGFja2V0QnVmZmVySGlnaCA9IGNwdV90b19sZTY0KG5wLT5wdXRfcnhfY3R4
LT5kbWEpID4+IDMyOworCQkJbnAtPnB1dF9yeC5leC0+UGFja2V0QnVmZmVyTG93ID0gY3B1X3Rv
X2xlNjQobnAtPnB1dF9yeF9jdHgtPmRtYSkgJiAweDBGRkZGRkZGRjsJCQkKIAkJCXdtYigpOwot
CQkJbnAtPnJ4X3Jpbmcub3JpZ1tucl0uRmxhZ0xlbiA9IGNwdV90b19sZTMyKG5wLT5yeF9idWZf
c3ogfCBOVl9SWF9BVkFJTCk7CisJCQlucC0+cHV0X3J4LmV4LT5GbGFnTGVuID0gY3B1X3RvX2xl
MzIobnAtPnJ4X2J1Zl9zeiB8IE5WX1JYMl9BVkFJTCk7CisJCQlpZiAodW5saWtlbHkobnAtPnB1
dF9yeC5leCsrID09IG5wLT5sYXN0X3J4LmV4KSkKKwkJCQlucC0+cHV0X3J4LmV4ID0gbnAtPmZp
cnN0X3J4LmV4OworCQkJaWYgKHVubGlrZWx5KG5wLT5wdXRfcnhfY3R4KysgPT0gbnAtPmxhc3Rf
cnhfY3R4KSkKKwkJCQlucC0+cHV0X3J4X2N0eCA9IG5wLT5maXJzdF9yeF9jdHg7CiAJCX0gZWxz
ZSB7Ci0JCQlucC0+cnhfcmluZy5leFtucl0uUGFja2V0QnVmZmVySGlnaCA9IGNwdV90b19sZTY0
KG5wLT5yeF9kbWFbbnJdKSA+PiAzMjsKLQkJCW5wLT5yeF9yaW5nLmV4W25yXS5QYWNrZXRCdWZm
ZXJMb3cgPSBjcHVfdG9fbGU2NChucC0+cnhfZG1hW25yXSkgJiAweDBGRkZGRkZGRjsKLQkJCXdt
YigpOwotCQkJbnAtPnJ4X3JpbmcuZXhbbnJdLkZsYWdMZW4gPSBjcHVfdG9fbGUzMihucC0+cnhf
YnVmX3N6IHwgTlZfUlgyX0FWQUlMKTsKKwkJCXJldHVybiAxOwogCQl9Ci0JCWRwcmludGsoS0VS
Tl9ERUJVRyAiJXM6IG52X2FsbG9jX3J4OiBQYWNrZXQgJWQgbWFya2VkIGFzIEF2YWlsYWJsZVxu
IiwKLQkJCQkJZGV2LT5uYW1lLCByZWZpbGxfcngpOwotCQlyZWZpbGxfcngrKzsKIAl9Ci0JbnAt
PnJlZmlsbF9yeCA9IHJlZmlsbF9yeDsKLQlpZiAobnAtPmN1cl9yeCAtIHJlZmlsbF9yeCA9PSBu
cC0+cnhfcmluZ19zaXplKQotCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKKwogfQogCiBzdGF0aWMg
dm9pZCBudl9kb19yeF9yZWZpbGwodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBuZXRf
ZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKLQlzdHJ1Y3QgZmVfcHJp
diAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnBy
aXYoZGV2KTsKKwlpbnQgcmV0Y29kZTsKIAogCWlmICghdXNpbmdfbXVsdGlfaXJxcyhkZXYpKSB7
CiAJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkKQEAgLTEyOTAsNyArMTk4
NSwxMiBAQAogCX0gZWxzZSB7CiAJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lf
WF9WRUNUT1JfUlhdLnZlY3Rvcik7CiAJfQotCWlmIChudl9hbGxvY19yeChkZXYpKSB7CisKKwlp
ZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVS
XzIpCisJCXJldGNvZGUgPSBudl9hbGxvY19yeChkZXYpOworCWVsc2UKKwkJcmV0Y29kZSA9IG52
X2FsbG9jX3J4X29wdGltaXplZChkZXYpOworCWlmIChyZXRjb2RlKSB7CiAJCXNwaW5fbG9ja19p
cnEoJm5wLT5sb2NrKTsKIAkJaWYgKCFucC0+aW5fc2h1dGRvd24pCiAJCQltb2RfdGltZXIoJm5w
LT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwpAQCAtMTMwNiw2MCArMjAwNiw4OSBA
QAogCX0KIH0KIAotc3RhdGljIHZvaWQgbnZfaW5pdF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2
KQorc3RhdGljIHZvaWQgbnZfaW5pdF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSAKIHsKLQlz
dHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpu
cCA9IGdldF9udnByaXYoZGV2KTsKIAlpbnQgaTsKIAotCW5wLT5jdXJfcnggPSBucC0+cnhfcmlu
Z19zaXplOwotCW5wLT5yZWZpbGxfcnggPSAwOwotCWZvciAoaSA9IDA7IGkgPCBucC0+cnhfcmlu
Z19zaXplOyBpKyspCisJbnAtPmdldF9yeCA9IG5wLT5wdXRfcnggPSBucC0+Zmlyc3RfcnggPSBu
cC0+cnhfcmluZzsKIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNj
X3ZlciA9PSBERVNDX1ZFUl8yKQorCQlucC0+bGFzdF9yeC5vcmlnID0gJm5wLT5yeF9yaW5nLm9y
aWdbbnAtPnJ4X3Jpbmdfc2l6ZS0xXTsKKwllbHNlCisJCW5wLT5sYXN0X3J4LmV4ID0gJm5wLT5y
eF9yaW5nLmV4W25wLT5yeF9yaW5nX3NpemUtMV07CisJbnAtPmdldF9yeF9jdHggPSBucC0+cHV0
X3J4X2N0eCA9IG5wLT5maXJzdF9yeF9jdHggPSBucC0+cnhfc2tiOworCW5wLT5sYXN0X3J4X2N0
eCA9ICZucC0+cnhfc2tiW25wLT5yeF9yaW5nX3NpemUtMV07CisKKwlmb3IgKGkgPSAwOyBpIDwg
bnAtPnJ4X3Jpbmdfc2l6ZTsgaSsrKSB7CisJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJf
MSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgewogCQkJbnAtPnJ4X3Jpbmcub3JpZ1tp
XS5GbGFnTGVuID0gMDsKLQkgICAgICAgIGVsc2UKKwkJCW5wLT5yeF9yaW5nLm9yaWdbaV0uUGFj
a2V0QnVmZmVyID0gMDsKKwkJfSBlbHNlIHsKIAkJCW5wLT5yeF9yaW5nLmV4W2ldLkZsYWdMZW4g
PSAwOworCQkJbnAtPnJ4X3JpbmcuZXhbaV0uVHhWbGFuID0gMDsKKwkJCW5wLT5yeF9yaW5nLmV4
W2ldLlBhY2tldEJ1ZmZlckhpZ2ggPSAwOworCQkJbnAtPnJ4X3JpbmcuZXhbaV0uUGFja2V0QnVm
ZmVyTG93ID0gMDsKKwkJfQorCQlucC0+cnhfc2tiW2ldLnNrYiA9IE5VTEw7CisJCW5wLT5yeF9z
a2JbaV0uZG1hID0gMDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIG52X2luaXRfdHgoc3RydWN0IG5l
dF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYp
OworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAlpbnQgaTsKIAotCW5w
LT5uZXh0X3R4ID0gbnAtPm5pY190eCA9IDA7CisJbnAtPmdldF90eCA9IG5wLT5wdXRfdHggPSBu
cC0+Zmlyc3RfdHggPSBucC0+dHhfcmluZzsKKwlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVS
XzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCisJCW5wLT5sYXN0X3R4Lm9yaWcgPSAm
bnAtPnR4X3Jpbmcub3JpZ1tucC0+dHhfcmluZ19zaXplLTFdOworCWVsc2UKKwkJbnAtPmxhc3Rf
dHguZXggPSAmbnAtPnR4X3JpbmcuZXhbbnAtPnR4X3Jpbmdfc2l6ZS0xXTsKKwlucC0+Z2V0X3R4
X2N0eCA9IG5wLT5wdXRfdHhfY3R4ID0gbnAtPmZpcnN0X3R4X2N0eCA9IG5wLT50eF9za2I7CisJ
bnAtPmxhc3RfdHhfY3R4ID0gJm5wLT50eF9za2JbbnAtPnR4X3Jpbmdfc2l6ZS0xXTsKKwogCWZv
ciAoaSA9IDA7IGkgPCBucC0+dHhfcmluZ19zaXplOyBpKyspIHsKLQkJaWYgKG5wLT5kZXNjX3Zl
ciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQorCQlpZiAobnAt
PmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsK
IAkJCW5wLT50eF9yaW5nLm9yaWdbaV0uRmxhZ0xlbiA9IDA7Ci0JICAgICAgICBlbHNlCisJCQlu
cC0+dHhfcmluZy5vcmlnW2ldLlBhY2tldEJ1ZmZlciA9IDA7CisJCX0gZWxzZSB7CiAJCQlucC0+
dHhfcmluZy5leFtpXS5GbGFnTGVuID0gMDsKLQkJbnAtPnR4X3NrYnVmZltpXSA9IE5VTEw7Ci0J
CW5wLT50eF9kbWFbaV0gPSAwOworCQkJbnAtPnR4X3JpbmcuZXhbaV0uVHhWbGFuID0gMDsKKwkJ
CW5wLT50eF9yaW5nLmV4W2ldLlBhY2tldEJ1ZmZlckhpZ2ggPSAwOworCQkJbnAtPnR4X3Jpbmcu
ZXhbaV0uUGFja2V0QnVmZmVyTG93ID0gMDsKKwkJfQorCQlucC0+dHhfc2tiW2ldLnNrYiA9IE5V
TEw7CisJCW5wLT50eF9za2JbaV0uZG1hID0gMDsKIAl9CiB9CiAKIHN0YXRpYyBpbnQgbnZfaW5p
dF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGZlX3ByaXYgKm5wID0g
Z2V0X252cHJpdihkZXYpOwogCW52X2luaXRfdHgoZGV2KTsKIAludl9pbml0X3J4KGRldik7Ci0J
cmV0dXJuIG52X2FsbG9jX3J4KGRldik7CisJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8x
IHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQorCQlyZXR1cm4gbnZfYWxsb2NfcngoZGV2
KTsKKwllbHNlCisJCXJldHVybiBudl9hbGxvY19yeF9vcHRpbWl6ZWQoZGV2KTsKIH0KIAogc3Rh
dGljIGludCBudl9yZWxlYXNlX3R4c2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVk
IGludCBza2JucikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwor
CXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAogCWRwcmludGsoS0VSTl9J
TkZPICIlczogbnZfcmVsZWFzZV90eHNrYiBmb3Igc2tibnIgJWRcbiIsCiAJCWRldi0+bmFtZSwg
c2tibnIpOwogCi0JaWYgKG5wLT50eF9kbWFbc2tibnJdKSB7Ci0JCXBjaV91bm1hcF9wYWdlKG5w
LT5wY2lfZGV2LCBucC0+dHhfZG1hW3NrYm5yXSwKLQkJCSAgICAgICBucC0+dHhfZG1hX2xlbltz
a2Jucl0sCisJaWYgKG5wLT50eF9za2Jbc2tibnJdLmRtYSkgeworCQlwY2lfdW5tYXBfcGFnZShu
cC0+cGNpX2RldiwgbnAtPnR4X3NrYltza2Jucl0uZG1hLAorCQkJICAgICAgIG5wLT50eF9za2Jb
c2tibnJdLmRtYV9sZW4sCiAJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JCW5wLT50eF9k
bWFbc2tibnJdID0gMDsKKwkJbnAtPnR4X3NrYltza2Jucl0uZG1hID0gMDsKIAl9Ci0KLQlpZiAo
bnAtPnR4X3NrYnVmZltza2Jucl0pIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkobnAtPnR4X3NrYnVm
Zltza2Jucl0pOwotCQlucC0+dHhfc2tidWZmW3NrYm5yXSA9IE5VTEw7CisJaWYgKG5wLT50eF9z
a2Jbc2tibnJdLnNrYikgeworCQlkZXZfa2ZyZWVfc2tiX2FueShucC0+dHhfc2tiW3NrYm5yXS5z
a2IpOworCQlucC0+dHhfc2tiW3NrYm5yXS5za2IgPSBOVUxMOwogCQlyZXR1cm4gMTsKIAl9IGVs
c2UgewogCQlyZXR1cm4gMDsKQEAgLTEzNjgsMTQgKzIwOTcsMTkgQEAKIAogc3RhdGljIHZvaWQg
bnZfZHJhaW5fdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAq
bnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYo
ZGV2KTsKIAl1bnNpZ25lZCBpbnQgaTsKLQorCQogCWZvciAoaSA9IDA7IGkgPCBucC0+dHhfcmlu
Z19zaXplOyBpKyspIHsKLQkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5k
ZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQorCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEg
fHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKIAkJCW5wLT50eF9yaW5nLm9yaWdbaV0u
RmxhZ0xlbiA9IDA7Ci0JCWVsc2UKKwkJCW5wLT50eF9yaW5nLm9yaWdbaV0uUGFja2V0QnVmZmVy
ID0gMDsKKwkJfSBlbHNlIHsKIAkJCW5wLT50eF9yaW5nLmV4W2ldLkZsYWdMZW4gPSAwOworCQkJ
bnAtPnR4X3JpbmcuZXhbaV0uVHhWbGFuID0gMDsKKwkJCW5wLT50eF9yaW5nLmV4W2ldLlBhY2tl
dEJ1ZmZlckhpZ2ggPSAwOworCQkJbnAtPnR4X3JpbmcuZXhbaV0uUGFja2V0QnVmZmVyTG93ID0g
MDsKKwkJfQogCQlpZiAobnZfcmVsZWFzZV90eHNrYihkZXYsIGkpKQogCQkJbnAtPnN0YXRzLnR4
X2Ryb3BwZWQrKzsKIAl9CkBAIC0xMzgzLDIwICsyMTE3LDI1IEBACiAKIHN0YXRpYyB2b2lkIG52
X2RyYWluX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5w
ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRl
dik7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IG5wLT5yeF9yaW5nX3NpemU7IGkrKykgewot
CQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0Nf
VkVSXzIpCisJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIg
PT0gREVTQ19WRVJfMikgewogCQkJbnAtPnJ4X3Jpbmcub3JpZ1tpXS5GbGFnTGVuID0gMDsKLQkJ
ZWxzZQorCQkJbnAtPnJ4X3Jpbmcub3JpZ1tpXS5QYWNrZXRCdWZmZXIgPSAwOworCQl9IGVsc2Ug
ewogCQkJbnAtPnJ4X3JpbmcuZXhbaV0uRmxhZ0xlbiA9IDA7CisJCQlucC0+cnhfcmluZy5leFtp
XS5UeFZsYW4gPSAwOworCQkJbnAtPnJ4X3JpbmcuZXhbaV0uUGFja2V0QnVmZmVySGlnaCA9IDA7
CisJCQlucC0+cnhfcmluZy5leFtpXS5QYWNrZXRCdWZmZXJMb3cgPSAwOworCQl9CiAJCXdtYigp
OwotCQlpZiAobnAtPnJ4X3NrYnVmZltpXSkgewotCQkJcGNpX3VubWFwX3NpbmdsZShucC0+cGNp
X2RldiwgbnAtPnJ4X2RtYVtpXSwKLQkJCQkJCW5wLT5yeF9za2J1ZmZbaV0tPmVuZC1ucC0+cnhf
c2tidWZmW2ldLT5kYXRhLAorCQlpZiAobnAtPnJ4X3NrYltpXS5za2IpIHsKKwkJCXBjaV91bm1h
cF9zaW5nbGUobnAtPnBjaV9kZXYsIG5wLT5yeF9za2JbaV0uZG1hLAorCQkJCQkJbnAtPnJ4X3Nr
YltpXS5za2ItPmVuZC1ucC0+cnhfc2tiW2ldLnNrYi0+ZGF0YSwKIAkJCQkJCVBDSV9ETUFfRlJP
TURFVklDRSk7Ci0JCQlkZXZfa2ZyZWVfc2tiKG5wLT5yeF9za2J1ZmZbaV0pOwotCQkJbnAtPnJ4
X3NrYnVmZltpXSA9IE5VTEw7CisJCQlkZXZfa2ZyZWVfc2tiKG5wLT5yeF9za2JbaV0uc2tiKTsK
KwkJCW5wLT5yeF9za2JbaV0uc2tiID0gTlVMTDsKIAkJfQogCX0KIH0KQEAgLTE0MDksNTcgKzIx
NDgsNTUgQEAKIAogLyoKICAqIG52X3N0YXJ0X3htaXQ6IGRldi0+aGFyZF9zdGFydF94bWl0IGZ1
bmN0aW9uCi0gKiBDYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGhlbGQuCisgKiBDYWxsZWQgd2l0
aCBkZXYtPnhtaXRfbG9jayBoZWxkLgogICovCiBzdGF0aWMgaW50IG52X3N0YXJ0X3htaXQoc3Ry
dWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVf
cHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9u
dnByaXYoZGV2KTsKIAl1MzIgdHhfZmxhZ3MgPSAwOwogCXUzMiB0eF9mbGFnc19leHRyYSA9IChu
cC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSA/IE5WX1RYX0xBU1RQQUNLRVQgOiBOVl9UWDJfTEFT
VFBBQ0tFVCk7CiAJdW5zaWduZWQgaW50IGZyYWdtZW50cyA9IHNrYl9zaGluZm8oc2tiKS0+bnJf
ZnJhZ3M7Ci0JdW5zaWduZWQgaW50IG5yID0gKG5wLT5uZXh0X3R4IC0gMSkgJSBucC0+dHhfcmlu
Z19zaXplOwotCXVuc2lnbmVkIGludCBzdGFydF9uciA9IG5wLT5uZXh0X3R4ICUgbnAtPnR4X3Jp
bmdfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1MzIgb2Zmc2V0ID0gMDsKIAl1MzIgYmNudDsK
IAl1MzIgc2l6ZSA9IHNrYi0+bGVuLXNrYi0+ZGF0YV9sZW47CiAJdTMyIGVudHJpZXMgPSAoc2l6
ZSA+PiBOVl9UWDJfVFNPX01BWF9TSElGVCkgKyAoKHNpemUgJiAoTlZfVFgyX1RTT19NQVhfU0la
RS0xKSkgPyAxIDogMCk7Ci0JdTMyIHR4X2ZsYWdzX3ZsYW4gPSAwOworCXUzMiBlbXB0eV9zbG90
czsKKwlzdHJ1Y3QgcmluZ19kZXNjKiBwdXRfdHg7CisJc3RydWN0IHJpbmdfZGVzYyogc3RhcnRf
dHg7CisJc3RydWN0IHJpbmdfZGVzYyogcHJldl90eDsKKwlzdHJ1Y3QgbnZfc2tiX21hcCogcHJl
dl90eF9jdHg7CiAKKwkvL2RwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3N0YXJ0X3htaXQgXG4i
LCBkZXYtPm5hbWUpOwogCS8qIGFkZCBmcmFnbWVudHMgdG8gZW50cmllcyBjb3VudCAqLwogCWZv
ciAoaSA9IDA7IGkgPCBmcmFnbWVudHM7IGkrKykgewogCQllbnRyaWVzICs9IChza2Jfc2hpbmZv
KHNrYiktPmZyYWdzW2ldLnNpemUgPj4gTlZfVFgyX1RTT19NQVhfU0hJRlQpICsKIAkJCSAgICgo
c2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplICYgKE5WX1RYMl9UU09fTUFYX1NJWkUtMSkp
ID8gMSA6IDApOwogCX0KIAotCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKwllbXB0eV9zbG90
cyA9ICh1MzIpKG5wLT50eF9yaW5nX3NpemUgLSAoKG5wLT50eF9yaW5nX3NpemUgKyAobnAtPnB1
dF90eF9jdHggLSBucC0+Z2V0X3R4X2N0eCkpICUgbnAtPnR4X3Jpbmdfc2l6ZSkpOworCWlmIChs
aWtlbHkoZW1wdHlfc2xvdHMgPiBlbnRyaWVzKSkgewogCi0JaWYgKChucC0+bmV4dF90eCAtIG5w
LT5uaWNfdHggKyBlbnRyaWVzIC0gMSkgPiBucC0+dHhfbGltaXRfc3RvcCkgewotCQlzcGluX3Vu
bG9ja19pcnEoJm5wLT5sb2NrKTsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlyZXR1cm4g
TkVUREVWX1RYX0JVU1k7Ci0JfQorCXN0YXJ0X3R4ID0gcHV0X3R4ID0gbnAtPnB1dF90eC5vcmln
OwogCiAJLyogc2V0dXAgdGhlIGhlYWRlciBidWZmZXIgKi8KIAlkbyB7CisJCXByZXZfdHggPSBw
dXRfdHg7CisJCXByZXZfdHhfY3R4ID0gbnAtPnB1dF90eF9jdHg7CiAJCWJjbnQgPSAoc2l6ZSA+
IE5WX1RYMl9UU09fTUFYX1NJWkUpID8gTlZfVFgyX1RTT19NQVhfU0laRSA6IHNpemU7Ci0JCW5y
ID0gKG5yICsgMSkgJSBucC0+dHhfcmluZ19zaXplOwotCi0JCW5wLT50eF9kbWFbbnJdID0gcGNp
X21hcF9zaW5nbGUobnAtPnBjaV9kZXYsIHNrYi0+ZGF0YSArIG9mZnNldCwgYmNudCwKKwkJbnAt
PnB1dF90eF9jdHgtPmRtYSA9IHBjaV9tYXBfc2luZ2xlKG5wLT5wY2lfZGV2LCBza2ItPmRhdGEg
KyBvZmZzZXQsIGJjbnQsCiAJCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQkJbnAtPnR4X2RtYV9s
ZW5bbnJdID0gYmNudDsKKwkJbnAtPnB1dF90eF9jdHgtPmRtYV9sZW4gPSBiY250OworCQlwdXRf
dHgtPlBhY2tldEJ1ZmZlciA9IGNwdV90b19sZTMyKG5wLT5wdXRfdHhfY3R4LT5kbWEpOworCQlw
dXRfdHgtPkZsYWdMZW4gPSBjcHVfdG9fbGUzMigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKIAotCQlp
ZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVS
XzIpIHsKLQkJCW5wLT50eF9yaW5nLm9yaWdbbnJdLlBhY2tldEJ1ZmZlciA9IGNwdV90b19sZTMy
KG5wLT50eF9kbWFbbnJdKTsKLQkJCW5wLT50eF9yaW5nLm9yaWdbbnJdLkZsYWdMZW4gPSBjcHVf
dG9fbGUzMigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKLQkJfSBlbHNlIHsKLQkJCW5wLT50eF9yaW5n
LmV4W25yXS5QYWNrZXRCdWZmZXJIaWdoID0gY3B1X3RvX2xlNjQobnAtPnR4X2RtYVtucl0pID4+
IDMyOwotCQkJbnAtPnR4X3JpbmcuZXhbbnJdLlBhY2tldEJ1ZmZlckxvdyA9IGNwdV90b19sZTY0
KG5wLT50eF9kbWFbbnJdKSAmIDB4MEZGRkZGRkZGOwotCQkJbnAtPnR4X3JpbmcuZXhbbnJdLkZs
YWdMZW4gPSBjcHVfdG9fbGUzMigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKLQkJfQogCQl0eF9mbGFn
cyA9IG5wLT50eF9mbGFnczsKIAkJb2Zmc2V0ICs9IGJjbnQ7CiAJCXNpemUgLT0gYmNudDsKKwkJ
aWYgKHVubGlrZWx5KHB1dF90eCsrID09IG5wLT5sYXN0X3R4Lm9yaWcpKQorCQkJcHV0X3R4ID0g
bnAtPmZpcnN0X3R4Lm9yaWc7CisJCWlmICh1bmxpa2VseShucC0+cHV0X3R4X2N0eCsrID09IG5w
LT5sYXN0X3R4X2N0eCkpCisJCQlucC0+cHV0X3R4X2N0eCA9IG5wLT5maXJzdF90eF9jdHg7CiAJ
fSB3aGlsZShzaXplKTsKIAogCS8qIHNldHVwIHRoZSBmcmFnbWVudHMgKi8KQEAgLTE0NjksMzQg
KzIyMDYsMzAgQEAKIAkJb2Zmc2V0ID0gMDsKIAogCQlkbyB7CisJCQlwcmV2X3R4ID0gcHV0X3R4
OworCQkJcHJldl90eF9jdHggPSBucC0+cHV0X3R4X2N0eDsKIAkJCWJjbnQgPSAoc2l6ZSA+IE5W
X1RYMl9UU09fTUFYX1NJWkUpID8gTlZfVFgyX1RTT19NQVhfU0laRSA6IHNpemU7Ci0JCQluciA9
IChuciArIDEpICUgbnAtPnR4X3Jpbmdfc2l6ZTsKIAotCQkJbnAtPnR4X2RtYVtucl0gPSBwY2lf
bWFwX3BhZ2UobnAtPnBjaV9kZXYsIGZyYWctPnBhZ2UsIGZyYWctPnBhZ2Vfb2Zmc2V0K29mZnNl
dCwgYmNudCwKLQkJCQkJCSAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJbnAtPnR4X2RtYV9s
ZW5bbnJdID0gYmNudDsKKwkJCW5wLT5wdXRfdHhfY3R4LT5kbWEgPSBwY2lfbWFwX3BhZ2UobnAt
PnBjaV9kZXYsIGZyYWctPnBhZ2UsIGZyYWctPnBhZ2Vfb2Zmc2V0K29mZnNldCwgYmNudCwKKwkJ
CQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCW5wLT5wdXRfdHhfY3R4LT5kbWFfbGVuID0g
YmNudDsKIAotCQkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3Zl
ciA9PSBERVNDX1ZFUl8yKSB7Ci0JCQkJbnAtPnR4X3Jpbmcub3JpZ1tucl0uUGFja2V0QnVmZmVy
ID0gY3B1X3RvX2xlMzIobnAtPnR4X2RtYVtucl0pOwotCQkJCW5wLT50eF9yaW5nLm9yaWdbbnJd
LkZsYWdMZW4gPSBjcHVfdG9fbGUzMigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKLQkJCX0gZWxzZSB7
Ci0JCQkJbnAtPnR4X3JpbmcuZXhbbnJdLlBhY2tldEJ1ZmZlckhpZ2ggPSBjcHVfdG9fbGU2NChu
cC0+dHhfZG1hW25yXSkgPj4gMzI7Ci0JCQkJbnAtPnR4X3JpbmcuZXhbbnJdLlBhY2tldEJ1ZmZl
ckxvdyA9IGNwdV90b19sZTY0KG5wLT50eF9kbWFbbnJdKSAmIDB4MEZGRkZGRkZGOwotCQkJCW5w
LT50eF9yaW5nLmV4W25yXS5GbGFnTGVuID0gY3B1X3RvX2xlMzIoKGJjbnQtMSkgfCB0eF9mbGFn
cyk7Ci0JCQl9CisJCQlwdXRfdHgtPlBhY2tldEJ1ZmZlciA9IGNwdV90b19sZTMyKG5wLT5wdXRf
dHhfY3R4LT5kbWEpOworCQkJcHV0X3R4LT5GbGFnTGVuID0gY3B1X3RvX2xlMzIoKGJjbnQtMSkg
fCB0eF9mbGFncyk7CiAJCQlvZmZzZXQgKz0gYmNudDsKIAkJCXNpemUgLT0gYmNudDsKKwkJCWlm
ICh1bmxpa2VseShwdXRfdHgrKyA9PSBucC0+bGFzdF90eC5vcmlnKSkKKwkJCQlwdXRfdHggPSBu
cC0+Zmlyc3RfdHgub3JpZzsKKwkJCWlmICh1bmxpa2VseShucC0+cHV0X3R4X2N0eCsrID09IG5w
LT5sYXN0X3R4X2N0eCkpCisJCQkJbnAtPnB1dF90eF9jdHggPSBucC0+Zmlyc3RfdHhfY3R4Owog
CQl9IHdoaWxlIChzaXplKTsKIAl9CiAKIAkvKiBzZXQgbGFzdCBmcmFnbWVudCBmbGFnICAqLwot
CWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19W
RVJfMikgewotCQlucC0+dHhfcmluZy5vcmlnW25yXS5GbGFnTGVuIHw9IGNwdV90b19sZTMyKHR4
X2ZsYWdzX2V4dHJhKTsKLQl9IGVsc2UgewotCQlucC0+dHhfcmluZy5leFtucl0uRmxhZ0xlbiB8
PSBjcHVfdG9fbGUzMih0eF9mbGFnc19leHRyYSk7Ci0JfQorCXByZXZfdHgtPkZsYWdMZW4gfD0g
Y3B1X3RvX2xlMzIodHhfZmxhZ3NfZXh0cmEpOwogCi0JbnAtPnR4X3NrYnVmZltucl0gPSBza2I7
CisJLyogc2F2ZSBza2IgaW4gdGhpcyBzbG90J3MgY29udGV4dCBhcmVhICovCisJcHJldl90eF9j
dHgtPnNrYiA9IHNrYjsKIAogI2lmZGVmIE5FVElGX0ZfVFNPCiAJaWYgKHNrYl9pc19nc28oc2ti
KSkKQEAgLTE1MDUsMzggKzIyMzgsMTMyIEBACiAjZW5kaWYKIAl0eF9mbGFnc19leHRyYSA9IChz
a2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyA/IChOVl9UWDJfQ0hFQ0tTVU1fTDN8TlZfVFgy
X0NIRUNLU1VNX0w0KSA6IDApOwogCi0JLyogdmxhbiB0YWcgKi8KLQlpZiAobnAtPnZsYW5ncnAg
JiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCXR4X2ZsYWdzX3ZsYW4gPSBOVl9UWDNf
VkxBTl9UQUdfUFJFU0VOVCB8IHZsYW5fdHhfdGFnX2dldChza2IpOwotCX0KKwlzdGFydF90eC0+
RmxhZ0xlbiB8PSBjcHVfdG9fbGUzMih0eF9mbGFncyB8IHR4X2ZsYWdzX2V4dHJhKTsKKwlucC0+
cHV0X3R4Lm9yaWcgPSBwdXRfdHg7CiAKLQkvKiBzZXQgdHggZmxhZ3MgKi8KLQlpZiAobnAtPmRl
c2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKLQkJ
bnAtPnR4X3Jpbmcub3JpZ1tzdGFydF9ucl0uRmxhZ0xlbiB8PSBjcHVfdG9fbGUzMih0eF9mbGFn
cyB8IHR4X2ZsYWdzX2V4dHJhKTsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwl3cml0
ZWwoTlZSRUdfVFhSWENUTF9LSUNLfG5wLT50eHJ4Y3RsX2JpdHMsIGdldF9od2Jhc2UoZGV2KSAr
IE52UmVnVHhSeENvbnRyb2wpOworCXJldHVybiBORVRERVZfVFhfT0s7CiAJfSBlbHNlIHsKLQkJ
bnAtPnR4X3JpbmcuZXhbc3RhcnRfbnJdLlR4VmxhbiA9IGNwdV90b19sZTMyKHR4X2ZsYWdzX3Zs
YW4pOwotCQlucC0+dHhfcmluZy5leFtzdGFydF9ucl0uRmxhZ0xlbiB8PSBjcHVfdG9fbGUzMih0
eF9mbGFncyB8IHR4X2ZsYWdzX2V4dHJhKTsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlu
cC0+c3RvcF90eCA9IDE7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9Cit9CiAKLQlkcHJp
bnRrKEtFUk5fREVCVUcgIiVzOiBudl9zdGFydF94bWl0OiBwYWNrZXQgJWQgKGVudHJpZXMgJWQp
IHF1ZXVlZCBmb3IgdHJhbnNtaXNzaW9uLiB0eF9mbGFnc19leHRyYTogJXhcbiIsCi0JCWRldi0+
bmFtZSwgbnAtPm5leHRfdHgsIGVudHJpZXMsIHR4X2ZsYWdzX2V4dHJhKTsKLQl7Ci0JCWludCBq
OwotCQlmb3IgKGo9MDsgajw2NDsgaisrKSB7Ci0JCQlpZiAoKGolMTYpID09IDApCi0JCQkJZHBy
aW50aygiXG4lMDN4OiIsIGopOwotCQkJZHByaW50aygiICUwMngiLCAoKHVuc2lnbmVkIGNoYXIq
KXNrYi0+ZGF0YSlbal0pOwotCQl9Ci0JCWRwcmludGsoIlxuIik7CitzdGF0aWMgaW50IG52X3N0
YXJ0X3htaXRfb3B0aW1pemVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNl
ICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCXUzMiB0
eF9mbGFncyA9IDA7CisJdTMyIHR4X2ZsYWdzX2V4dHJhOworCXVuc2lnbmVkIGludCBmcmFnbWVu
dHMgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCXVuc2lnbmVkIGludCBpOworCXUzMiBv
ZmZzZXQgPSAwOworCXUzMiBiY250OworCXUzMiBzaXplID0gc2tiLT5sZW4tc2tiLT5kYXRhX2xl
bjsKKwl1MzIgZW1wdHlfc2xvdHM7CisJc3RydWN0IHJpbmdfZGVzY19leCogcHV0X3R4OworCXN0
cnVjdCByaW5nX2Rlc2NfZXgqIHN0YXJ0X3R4OworCXN0cnVjdCByaW5nX2Rlc2NfZXgqIHByZXZf
dHg7CisJc3RydWN0IG52X3NrYl9tYXAqIHByZXZfdHhfY3R4OworCisJdTMyIGVudHJpZXMgPSAo
c2l6ZSA+PiBOVl9UWDJfVFNPX01BWF9TSElGVCkgKyAoKHNpemUgJiAoTlZfVFgyX1RTT19NQVhf
U0laRS0xKSkgPyAxIDogMCk7CisKKwkvL2RwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3N0YXJ0
X3htaXRfb3B0aW1pemVkIFxuIiwgZGV2LT5uYW1lKTsKKwkvKiBhZGQgZnJhZ21lbnRzIHRvIGVu
dHJpZXMgY291bnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnRzOyBpKyspIHsKKwkJZW50
cmllcyArPSAoc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplID4+IE5WX1RYMl9UU09fTUFY
X1NISUZUKSArCisJCQkgICAoKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSAmIChOVl9U
WDJfVFNPX01BWF9TSVpFLTEpKSA/IDEgOiAwKTsKIAl9CiAKLQlucC0+bmV4dF90eCArPSBlbnRy
aWVzOworCWVtcHR5X3Nsb3RzID0gKHUzMikobnAtPnR4X3Jpbmdfc2l6ZSAtICgobnAtPnR4X3Jp
bmdfc2l6ZSArIChucC0+cHV0X3R4X2N0eCAtIG5wLT5nZXRfdHhfY3R4KSkgJSBucC0+dHhfcmlu
Z19zaXplKSk7CisJaWYgKGxpa2VseShlbXB0eV9zbG90cyA+IGVudHJpZXMpKSB7CisKKwlzdGFy
dF90eCA9IHB1dF90eCA9IG5wLT5wdXRfdHguZXg7CisKKwkvKiBzZXR1cCB0aGUgaGVhZGVyIGJ1
ZmZlciAqLworCWRvIHsKKwkJcHJldl90eCA9IHB1dF90eDsKKwkJcHJldl90eF9jdHggPSBucC0+
cHV0X3R4X2N0eDsKKwkJYmNudCA9IChzaXplID4gTlZfVFgyX1RTT19NQVhfU0laRSkgPyBOVl9U
WDJfVFNPX01BWF9TSVpFIDogc2l6ZTsKKwkJbnAtPnB1dF90eF9jdHgtPmRtYSA9IHBjaV9tYXBf
c2luZ2xlKG5wLT5wY2lfZGV2LCBza2ItPmRhdGEgKyBvZmZzZXQsIGJjbnQsCisJCQkJCQlQQ0lf
RE1BX1RPREVWSUNFKTsKKwkJbnAtPnB1dF90eF9jdHgtPmRtYV9sZW4gPSBiY250OworCQlwdXRf
dHgtPlBhY2tldEJ1ZmZlckhpZ2ggPSBjcHVfdG9fbGU2NChucC0+cHV0X3R4X2N0eC0+ZG1hKSA+
PiAzMjsKKwkJcHV0X3R4LT5QYWNrZXRCdWZmZXJMb3cgPSBjcHVfdG9fbGU2NChucC0+cHV0X3R4
X2N0eC0+ZG1hKSAmIDB4MEZGRkZGRkZGOworCQlwdXRfdHgtPkZsYWdMZW4gPSBjcHVfdG9fbGUz
MigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKKworCQl0eF9mbGFncyA9IE5WX1RYMl9WQUxJRDsKKwkJ
b2Zmc2V0ICs9IGJjbnQ7CisJCXNpemUgLT0gYmNudDsKKwkJaWYgKHVubGlrZWx5KHB1dF90eCsr
ID09IG5wLT5sYXN0X3R4LmV4KSkKKwkJCXB1dF90eCA9IG5wLT5maXJzdF90eC5leDsKKwkJaWYg
KHVubGlrZWx5KG5wLT5wdXRfdHhfY3R4KysgPT0gbnAtPmxhc3RfdHhfY3R4KSkKKwkJCW5wLT5w
dXRfdHhfY3R4ID0gbnAtPmZpcnN0X3R4X2N0eDsKKwl9IHdoaWxlKHNpemUpOworCS8qIHNldHVw
IHRoZSBmcmFnbWVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnRzOyBpKyspIHsKKwkJ
c2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCQl1MzIgc2l6
ZSA9IGZyYWctPnNpemU7CisJCW9mZnNldCA9IDA7CisKKwkJZG8geworCQkJcHJldl90eCA9IHB1
dF90eDsKKwkJCXByZXZfdHhfY3R4ID0gbnAtPnB1dF90eF9jdHg7CisJCQliY250ID0gKHNpemUg
PiBOVl9UWDJfVFNPX01BWF9TSVpFKSA/IE5WX1RYMl9UU09fTUFYX1NJWkUgOiBzaXplOworCisJ
CQlucC0+cHV0X3R4X2N0eC0+ZG1hID0gcGNpX21hcF9wYWdlKG5wLT5wY2lfZGV2LCBmcmFnLT5w
YWdlLCBmcmFnLT5wYWdlX29mZnNldCtvZmZzZXQsIGJjbnQsCisJCQkJCQkJICAgUENJX0RNQV9U
T0RFVklDRSk7CisJCQlucC0+cHV0X3R4X2N0eC0+ZG1hX2xlbiA9IGJjbnQ7CisKKwkJCXB1dF90
eC0+UGFja2V0QnVmZmVySGlnaCA9IGNwdV90b19sZTY0KG5wLT5wdXRfdHhfY3R4LT5kbWEpID4+
IDMyOworCQkJcHV0X3R4LT5QYWNrZXRCdWZmZXJMb3cgPSBjcHVfdG9fbGU2NChucC0+cHV0X3R4
X2N0eC0+ZG1hKSAmIDB4MEZGRkZGRkZGOworCQkJcHV0X3R4LT5GbGFnTGVuID0gY3B1X3RvX2xl
MzIoKGJjbnQtMSkgfCB0eF9mbGFncyk7CisJCQlvZmZzZXQgKz0gYmNudDsKKwkJCXNpemUgLT0g
YmNudDsKKwkJCWlmICh1bmxpa2VseShwdXRfdHgrKyA9PSBucC0+bGFzdF90eC5leCkpCisJCQkJ
cHV0X3R4ID0gbnAtPmZpcnN0X3R4LmV4OworCQkJaWYgKHVubGlrZWx5KG5wLT5wdXRfdHhfY3R4
KysgPT0gbnAtPmxhc3RfdHhfY3R4KSkKKwkJCQlucC0+cHV0X3R4X2N0eCA9IG5wLT5maXJzdF90
eF9jdHg7CisJCX0gd2hpbGUgKHNpemUpOworCX0KKworCS8qIHNldCBsYXN0IGZyYWdtZW50IGZs
YWcgICovCisJcHJldl90eC0+RmxhZ0xlbiB8PSBjcHVfdG9fbGUzMihOVl9UWDJfTEFTVFBBQ0tF
VCk7CisKKwkvKiBzYXZlIHNrYiBpbiB0aGlzIHNsb3QncyBjb250ZXh0IGFyZWEgKi8KKwlwcmV2
X3R4X2N0eC0+c2tiID0gc2tiOworCisjaWZkZWYgTkVUSUZfRl9UU08KKwlpZiAoc2tiX2lzX2dz
byhza2IpKQorCQl0eF9mbGFnc19leHRyYSA9IE5WX1RYMl9UU08gfCAoc2tiX3NoaW5mbyhza2Ip
LT5nc29fc2l6ZSA8PCBOVl9UWDJfVFNPX1NISUZUKTsKKwllbHNlCisjZW5kaWYKKwl0eF9mbGFn
c19leHRyYSA9IChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyA/IChOVl9UWDJfQ0hFQ0tT
VU1fTDN8TlZfVFgyX0NIRUNLU1VNX0w0KSA6IDApOworCisJLyogdmxhbiB0YWcgKi8KKwlpZiAo
bGlrZWx5KCFucC0+dmxhbmdycCkpIHsKKwkJc3RhcnRfdHgtPlR4VmxhbiA9IDA7CisJfSBlbHNl
IHsKKwkJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKKwkJCXN0YXJ0X3R4LT5UeFZsYW4g
PSBjcHVfdG9fbGUzMihOVl9UWDNfVkxBTl9UQUdfUFJFU0VOVCB8IHZsYW5fdHhfdGFnX2dldChz
a2IpKTsKKwkJZWxzZQorCQkJc3RhcnRfdHgtPlR4VmxhbiA9IDA7CisJfQorCisJLyogc2V0IHR4
IGZsYWdzICovCisJc3RhcnRfdHgtPkZsYWdMZW4gfD0gY3B1X3RvX2xlMzIodHhfZmxhZ3MgfCB0
eF9mbGFnc19leHRyYSk7CisJbnAtPnB1dF90eC5leCA9IHB1dF90eDsKIAogCWRldi0+dHJhbnNf
c3RhcnQgPSBqaWZmaWVzOwotCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCXdyaXRlbChO
VlJFR19UWFJYQ1RMX0tJQ0t8bnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShkZXYpICsgTnZS
ZWdUeFJ4Q29udHJvbCk7Ci0JcGNpX3B1c2goZ2V0X2h3YmFzZShkZXYpKTsKIAlyZXR1cm4gTkVU
REVWX1RYX09LOworCisJfSBlbHNlIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlucC0+
c3RvcF90eCA9IDE7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CiB9CiAKIC8qCkBAIC0x
NTQ0LDMwICsyMzcxLDI2IEBACiAgKgogICogQ2FsbGVyIG11c3Qgb3duIG5wLT5sb2NrLgogICov
Ci1zdGF0aWMgdm9pZCBudl90eF9kb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMg
aW5saW5lIHZvaWQgbnZfdHhfZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVj
dCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0g
Z2V0X252cHJpdihkZXYpOwogCXUzMiBGbGFnczsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3Qg
c2tfYnVmZiAqc2tiOworCXN0cnVjdCByaW5nX2Rlc2MqIG9yaWdfZ2V0X3R4ID0gbnAtPmdldF90
eC5vcmlnOworCXN0cnVjdCByaW5nX2Rlc2MqIHB1dF90eCA9IG5wLT5wdXRfdHgub3JpZzsKIAot
CXdoaWxlIChucC0+bmljX3R4ICE9IG5wLT5uZXh0X3R4KSB7Ci0JCWkgPSBucC0+bmljX3R4ICUg
bnAtPnR4X3Jpbmdfc2l6ZTsKKwkvL2RwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3R4X2RvbmUg
XG4iLCBkZXYtPm5hbWUpOworCXdoaWxlICgobnAtPmdldF90eC5vcmlnICE9IHB1dF90eCkgJiYK
KwkgICAgICAgISgoRmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+Z2V0X3R4Lm9yaWctPkZsYWdMZW4p
KSAmIE5WX1RYX1ZBTElEKSkgeworCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl90eF9kb25l
Ok5WTEFOIHR4IGRvbmVcbiIsIGRldi0+bmFtZSk7CiAKLQkJaWYgKG5wLT5kZXNjX3ZlciA9PSBE
RVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQotCQkJRmxhZ3MgPSBsZTMy
X3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2ldLkZsYWdMZW4pOwotCQllbHNlCi0JCQlGbGFncyA9
IGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2ldLkZsYWdMZW4pOworCQlwY2lfdW5tYXBfcGFn
ZShucC0+cGNpX2RldiwgbnAtPmdldF90eF9jdHgtPmRtYSwKKwkJCSAgICAgICBucC0+Z2V0X3R4
X2N0eC0+ZG1hX2xlbiwKKwkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJbnAtPmdldF90
eF9jdHgtPmRtYSA9IDA7CiAKLQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfdHhfZG9uZTog
bG9va2luZyBhdCBwYWNrZXQgJWQsIEZsYWdzIDB4JXguXG4iLAotCQkJCQlkZXYtPm5hbWUsIG5w
LT5uaWNfdHgsIEZsYWdzKTsKLQkJaWYgKEZsYWdzICYgTlZfVFhfVkFMSUQpCi0JCQlicmVhazsK
IAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xKSB7CiAJCQlpZiAoRmxhZ3MgJiBOVl9U
WF9MQVNUUEFDS0VUKSB7Ci0JCQkJc2tiID0gbnAtPnR4X3NrYnVmZltpXTsKLQkJCQlpZiAoRmxh
Z3MgJiAoTlZfVFhfUkVUUllFUlJPUnxOVl9UWF9DQVJSSUVSTE9TVHxOVl9UWF9MQVRFQ09MTElT
SU9OfAotCQkJCQkgICAgIE5WX1RYX1VOREVSRkxPV3xOVl9UWF9FUlJPUikpIHsKKwkJCQlpZiAo
RmxhZ3MgJiBOVl9UWF9FUlJPUikgewogCQkJCQlpZiAoRmxhZ3MgJiBOVl9UWF9VTkRFUkZMT1cp
CiAJCQkJCQlucC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAkJCQkJaWYgKEZsYWdzICYgTlZf
VFhfQ0FSUklFUkxPU1QpCkBAIC0xNTc1LDE0ICsyMzk4LDE1IEBACiAJCQkJCW5wLT5zdGF0cy50
eF9lcnJvcnMrKzsKIAkJCQl9IGVsc2UgewogCQkJCQlucC0+c3RhdHMudHhfcGFja2V0cysrOwot
CQkJCQlucC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQkJCW5wLT5zdGF0cy50eF9i
eXRlcyArPSBucC0+Z2V0X3R4X2N0eC0+c2tiLT5sZW47CiAJCQkJfQorCQkJCWRldl9rZnJlZV9z
a2JfYW55KG5wLT5nZXRfdHhfY3R4LT5za2IpOworCQkJCW5wLT5nZXRfdHhfY3R4LT5za2IgPSBO
VUxMOworCiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoRmxhZ3MgJiBOVl9UWDJfTEFTVFBBQ0tF
VCkgewotCQkJCXNrYiA9IG5wLT50eF9za2J1ZmZbaV07Ci0JCQkJaWYgKEZsYWdzICYgKE5WX1RY
Ml9SRVRSWUVSUk9SfE5WX1RYMl9DQVJSSUVSTE9TVHxOVl9UWDJfTEFURUNPTExJU0lPTnwKLQkJ
CQkJICAgICBOVl9UWDJfVU5ERVJGTE9XfE5WX1RYMl9FUlJPUikpIHsKKwkJCQlpZiAoRmxhZ3Mg
JiBOVl9UWDJfRVJST1IpIHsKIAkJCQkJaWYgKEZsYWdzICYgTlZfVFgyX1VOREVSRkxPVykKIAkJ
CQkJCW5wLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJCQlpZiAoRmxhZ3MgJiBOVl9UWDJf
Q0FSUklFUkxPU1QpCkBAIC0xNTkwLDI3ICsyNDE0LDc0IEBACiAJCQkJCW5wLT5zdGF0cy50eF9l
cnJvcnMrKzsKIAkJCQl9IGVsc2UgewogCQkJCQlucC0+c3RhdHMudHhfcGFja2V0cysrOwotCQkJ
CQlucC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCQkJfQorCQkJCQlucC0+c3RhdHMu
dHhfYnl0ZXMgKz0gbnAtPmdldF90eF9jdHgtPnNrYi0+bGVuOworCQkJCX0JCQkJCisJCQkJZGV2
X2tmcmVlX3NrYl9hbnkobnAtPmdldF90eF9jdHgtPnNrYik7CisJCQkJbnAtPmdldF90eF9jdHgt
PnNrYiA9IE5VTEw7CiAJCQl9CiAJCX0KLQkJbnZfcmVsZWFzZV90eHNrYihkZXYsIGkpOwotCQlu
cC0+bmljX3R4Kys7CisKKwkJaWYgKHVubGlrZWx5KG5wLT5nZXRfdHgub3JpZysrID09IG5wLT5s
YXN0X3R4Lm9yaWcpKQorCQkJbnAtPmdldF90eC5vcmlnID0gbnAtPmZpcnN0X3R4Lm9yaWc7CisJ
CWlmICh1bmxpa2VseShucC0+Z2V0X3R4X2N0eCsrID09IG5wLT5sYXN0X3R4X2N0eCkpCisJCQlu
cC0+Z2V0X3R4X2N0eCA9IG5wLT5maXJzdF90eF9jdHg7CiAJfQotCWlmIChucC0+bmV4dF90eCAt
IG5wLT5uaWNfdHggPCBucC0+dHhfbGltaXRfc3RhcnQpCisJaWYgKHVubGlrZWx5KChucC0+c3Rv
cF90eCA9PSAxKSAmJiAobnAtPmdldF90eC5vcmlnICE9IG9yaWdfZ2V0X3R4KSkpIHsKKwkJbnAt
PnN0b3BfdHggPSAwOwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfQorfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgbnZfdHhfZG9uZV9vcHRpbWl6ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwg
aW50IG1heF93b3JrKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsK
Kwl1MzIgRmxhZ3M7CisJc3RydWN0IHJpbmdfZGVzY19leCogb3JpZ19nZXRfdHggPSBucC0+Z2V0
X3R4LmV4OworCXN0cnVjdCByaW5nX2Rlc2NfZXgqIHB1dF90eCA9IG5wLT5wdXRfdHguZXg7CisK
KwkvL2RwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3R4X2RvbmVfb3B0aW1pemVkIFxuIiwgZGV2
LT5uYW1lKTsKKwl3aGlsZSAoKG5wLT5nZXRfdHguZXggIT0gcHV0X3R4KSAmJgorCSAgICAgICAh
KChGbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfdHguZXgtPkZsYWdMZW4pKSAmIE5WX1RYX1ZB
TElEKSAmJgorCSAgICAgICAobWF4X3dvcmstLSA+IDApKSB7CisJCWRwcmludGsoS0VSTl9ERUJV
RyAiJXM6IG52X3R4X2RvbmVfb3B0aW1pemVkOk5WTEFOIHR4IGRvbmVcbiIsIGRldi0+bmFtZSk7
CisKKwkJcGNpX3VubWFwX3BhZ2UobnAtPnBjaV9kZXYsIG5wLT5nZXRfdHhfY3R4LT5kbWEsCisJ
CQkgICAgICAgbnAtPmdldF90eF9jdHgtPmRtYV9sZW4sCisJCQkgICAgICAgUENJX0RNQV9UT0RF
VklDRSk7CisJCW5wLT5nZXRfdHhfY3R4LT5kbWEgPSAwOworCisJCWlmIChGbGFncyAmIE5WX1RY
Ml9MQVNUUEFDS0VUKSB7CisJCQlpZiAoIShGbGFncyAmIE5WX1RYMl9FUlJPUikpIHsKKwkJCQlu
cC0+c3RhdHMudHhfcGFja2V0cysrOworCQkJfQorCQkJZGV2X2tmcmVlX3NrYl9hbnkobnAtPmdl
dF90eF9jdHgtPnNrYik7CisJCQlucC0+Z2V0X3R4X2N0eC0+c2tiID0gTlVMTDsKKwkJfQorCQkK
KwkJaWYgKHVubGlrZWx5KG5wLT5nZXRfdHguZXgrKyA9PSBucC0+bGFzdF90eC5leCkpCisJCQlu
cC0+Z2V0X3R4LmV4ID0gbnAtPmZpcnN0X3R4LmV4OworCQlpZiAodW5saWtlbHkobnAtPmdldF90
eF9jdHgrKyA9PSBucC0+bGFzdF90eF9jdHgpKQorCQkJbnAtPmdldF90eF9jdHggPSBucC0+Zmly
c3RfdHhfY3R4OworCX0KKwlpZiAodW5saWtlbHkoKG5wLT5zdG9wX3R4ID09IDEpICYmIChucC0+
Z2V0X3R4LmV4ICE9IG9yaWdfZ2V0X3R4KSkpIHsKKwkJbnAtPnN0b3BfdHggPSAwOworCQluZXRp
Zl93YWtlX3F1ZXVlKGRldik7CisJfQogfQogCiAvKgogICogbnZfdHhfdGltZW91dDogZGV2LT50
eF90aW1lb3V0IGZ1bmN0aW9uCi0gKiBDYWxsZWQgd2l0aCBuZXRpZl90eF9sb2NrIGhlbGQuCisg
KiBDYWxsZWQgd2l0aCBkZXYtPnhtaXRfbG9jayBoZWxkLgogICovCiBzdGF0aWMgdm9pZCBudl90
eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5w
ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRl
dik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAl1MzIgc3RhdHVzOwog
CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybjsKKwogCWlmIChucC0+bXNpX2Zs
YWdzICYgTlZfTVNJX1hfRU5BQkxFRCkKIAkJc3RhdHVzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJ
WElycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7CiAJZWxzZQpAQCAtMTYyMSw5ICsyNDky
LDE1IEBACiAJewogCQlpbnQgaTsKIAotCQlwcmludGsoS0VSTl9JTkZPICIlczogUmluZyBhdCAl
bHg6IG5leHQgJWQgbmljICVkXG4iLAotCQkJCWRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcpbnAt
PnJpbmdfYWRkciwKLQkJCQlucC0+bmV4dF90eCwgbnAtPm5pY190eCk7CisJCWlmIChucC0+ZGVz
Y192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgeworCQkJ
cHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJpbmcgYXQgJWx4OiBnZXQgJWx4IHB1dCAlbHhcbiIsCisJ
CQkgICAgICAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZylucC0+dHhfcmluZy5vcmlnLAorCQkJ
ICAgICAgICh1bnNpZ25lZCBsb25nKW5wLT5nZXRfdHgub3JpZywgKHVuc2lnbmVkIGxvbmcpbnAt
PnB1dF90eC5vcmlnKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSaW5n
IGF0ICVseDogZ2V0ICVseCBwdXQgJWx4XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgKHVuc2ln
bmVkIGxvbmcpbnAtPnR4X3JpbmcuZXgsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpbnAtPmdl
dF90eC5leCwgKHVuc2lnbmVkIGxvbmcpbnAtPnB1dF90eC5leCk7CisJCX0KIAkJcHJpbnRrKEtF
Uk5fSU5GTyAiJXM6IER1bXBpbmcgdHggcmVnaXN0ZXJzXG4iLCBkZXYtPm5hbWUpOwogCQlmb3Ig
KGk9MDtpPD1ucC0+cmVnaXN0ZXJfc2l6ZTtpKz0gMzIpIHsKIAkJCXByaW50ayhLRVJOX0lORk8g
IiUzeDogJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLApAQCAtMTYz
Nyw3ICsyNTE0LDcgQEAKIAkJZm9yIChpPTA7aTxucC0+dHhfcmluZ19zaXplO2krPSA0KSB7CiAJ
CQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0Nf
VkVSXzIpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICIlMDN4OiAlMDh4ICUwOHggLy8gJTA4eCAl
MDh4IC8vICUwOHggJTA4eCAvLyAlMDh4ICUwOHhcbiIsCi0JCQkJICAgICAgIGksCisJCQkJICAg
ICAgIGksIAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2ldLlBhY2tl
dEJ1ZmZlciksCiAJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaV0uRmxh
Z0xlbiksCiAJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaSsxXS5QYWNr
ZXRCdWZmZXIpLApAQCAtMTY0OCw3ICsyNTI1LDcgQEAKIAkJCQkgICAgICAgbGUzMl90b19jcHUo
bnAtPnR4X3Jpbmcub3JpZ1tpKzNdLkZsYWdMZW4pKTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRr
KEtFUk5fSU5GTyAiJTAzeDogJTA4eCAlMDh4ICUwOHggLy8gJTA4eCAlMDh4ICUwOHggLy8gJTA4
eCAlMDh4ICUwOHggLy8gJTA4eCAlMDh4ICUwOHhcbiIsCi0JCQkJICAgICAgIGksCisJCQkJICAg
ICAgIGksIAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpXS5QYWNrZXRC
dWZmZXJIaWdoKSwKIAkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaV0uUGFj
a2V0QnVmZmVyTG93KSwKIAkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaV0u
RmxhZ0xlbiksCkBAIC0xNjY1LDE5ICsyNTQyLDI3IEBACiAJCX0KIAl9CiAKKwludl9kaXNhYmxl
X2lycShkZXYpOwogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAogCS8qIDEpIHN0b3AgdHgg
ZW5naW5lICovCiAJbnZfc3RvcF90eChkZXYpOwogCiAJLyogMikgY2hlY2sgdGhhdCB0aGUgcGFj
a2V0cyB3ZXJlIG5vdCBzZW50IGFscmVhZHk6ICovCisJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVND
X1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQogCW52X3R4X2RvbmUoZGV2KTsK
KwllbHNlCisJCW52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgbnAtPnR4X3Jpbmdfc2l6ZSk7CiAK
IAkvKiAzKSBpZiB0aGVyZSBhcmUgZGVhZCBlbnRyaWVzOiBjbGVhciBldmVyeXRoaW5nICovCi0J
aWYgKG5wLT5uZXh0X3R4ICE9IG5wLT5uaWNfdHgpIHsKKwlpZiAobnAtPmdldF90eF9jdHggIT0g
bnAtPnB1dF90eF9jdHgpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eF90aW1lb3V0OiBk
ZWFkIGVudHJpZXMhXG4iLCBkZXYtPm5hbWUpOwogCQludl9kcmFpbl90eChkZXYpOwotCQlucC0+
bmV4dF90eCA9IG5wLT5uaWNfdHggPSAwOworCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVS
XzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCisJCQlucC0+Z2V0X3R4Lm9yaWcgPSBu
cC0+cHV0X3R4Lm9yaWcgPSBucC0+Zmlyc3RfdHgub3JpZzsKKwkJZWxzZQorCQkJbnAtPmdldF90
eC5leCA9IG5wLT5wdXRfdHguZXggPSBucC0+Zmlyc3RfdHguZXg7CisJCW5wLT5nZXRfdHhfY3R4
ID0gbnAtPnB1dF90eF9jdHggPSBucC0+Zmlyc3RfdHhfY3R4OwogCQlzZXR1cF9od19yaW5ncyhk
ZXYsIE5WX1NFVFVQX1RYX1JJTkcpOwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQpAQCAt
MTY4NSw2ICsyNTcwLDcgQEAKIAkvKiA0KSByZXN0YXJ0IHR4IGVuZ2luZSAqLwogCW52X3N0YXJ0
X3R4KGRldik7CiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CisJbnZfZW5hYmxlX2lycShk
ZXYpOwogfQogCiAvKgpAQCAtMTc0MCw0MyArMjYyNiwyMyBAQAogCX0KIH0KIAotc3RhdGljIHZv
aWQgbnZfcnhfcHJvY2VzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSB2
b2lkIG52X3J4X3Byb2Nlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVf
cHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9u
dnByaXYoZGV2KTsKIAl1MzIgRmxhZ3M7Ci0JdTMyIHZsYW5mbGFncyA9IDA7Ci0KLQlmb3IgKDs7
KSB7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCWludCBsZW47Ci0JCWludCBpOwotCQlpZiAo
bnAtPmN1cl9yeCAtIG5wLT5yZWZpbGxfcnggPj0gbnAtPnJ4X3Jpbmdfc2l6ZSkKLQkJCWJyZWFr
OwkvKiB3ZSBzY2FubmVkIHRoZSB3aG9sZSByaW5nIC0gZG8gbm90IGNvbnRpbnVlICovCi0KLQkJ
aSA9IG5wLT5jdXJfcnggJSBucC0+cnhfcmluZ19zaXplOwotCQlpZiAobnAtPmRlc2NfdmVyID09
IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKLQkJCUZsYWdzID0g
bGUzMl90b19jcHUobnAtPnJ4X3Jpbmcub3JpZ1tpXS5GbGFnTGVuKTsKLQkJCWxlbiA9IG52X2Rl
c2NyX2dldGxlbmd0aCgmbnAtPnJ4X3Jpbmcub3JpZ1tpXSwgbnAtPmRlc2NfdmVyKTsKLQkJfSBl
bHNlIHsKLQkJCUZsYWdzID0gbGUzMl90b19jcHUobnAtPnJ4X3JpbmcuZXhbaV0uRmxhZ0xlbik7
Ci0JCQlsZW4gPSBudl9kZXNjcl9nZXRsZW5ndGhfZXgoJm5wLT5yeF9yaW5nLmV4W2ldLCBucC0+
ZGVzY192ZXIpOwotCQkJdmxhbmZsYWdzID0gbGUzMl90b19jcHUobnAtPnJ4X3JpbmcuZXhbaV0u
UGFja2V0QnVmZmVyTG93KTsKLQkJfQorCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGxlbjsK
IAotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9yeF9wcm9jZXNzOiBsb29raW5nIGF0IHBh
Y2tldCAlZCwgRmxhZ3MgMHgleC5cbiIsCi0JCQkJCWRldi0+bmFtZSwgbnAtPmN1cl9yeCwgRmxh
Z3MpOworCS8vZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfcnhfcHJvY2VzcyBcbiIsIGRldi0+
bmFtZSk7CisJd2hpbGUoKG5wLT5nZXRfcngub3JpZyAhPSBucC0+cHV0X3J4Lm9yaWcpICYmCisJ
ICAgICAgISgoRmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+Z2V0X3J4Lm9yaWctPkZsYWdMZW4pKSAm
IE5WX1JYX0FWQUlMKSkgeworCisJCXBjaV91bm1hcF9zaW5nbGUobnAtPnBjaV9kZXYsIG5wLT5n
ZXRfcnhfY3R4LT5kbWEsCisJCQkJIG5wLT5nZXRfcnhfY3R4LT5kbWFfbGVuLAorCQkJCSBQQ0lf
RE1BX0ZST01ERVZJQ0UpOwogCi0JCWlmIChGbGFncyAmIE5WX1JYX0FWQUlMKQotCQkJYnJlYWs7
CS8qIHN0aWxsIG93bmVkIGJ5IGhhcmR3YXJlLCAqLwotCi0JCS8qCi0JCSAqIHRoZSBwYWNrZXQg
aXMgZm9yIHVzIC0gaW1tZWRpYXRlbHkgdGVhciBkb3duIHRoZSBwY2kgbWFwcGluZy4KLQkJICog
VE9ETzogY2hlY2sgaWYgYSBwcmVmZXRjaCBvZiB0aGUgZmlyc3QgY2FjaGVsaW5lIGltcHJvdmVz
Ci0JCSAqIHRoZSBwZXJmb3JtYW5jZS4KLQkJICovCi0JCXBjaV91bm1hcF9zaW5nbGUobnAtPnBj
aV9kZXYsIG5wLT5yeF9kbWFbaV0sCi0JCQkJbnAtPnJ4X3NrYnVmZltpXS0+ZW5kLW5wLT5yeF9z
a2J1ZmZbaV0tPmRhdGEsCi0JCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJc2tiID0gbnAtPmdl
dF9yeF9jdHgtPnNrYjsKKwkJbnAtPmdldF9yeF9jdHgtPnNrYiA9IE5VTEw7CiAKIAkJewogCQkJ
aW50IGo7CkBAIC0xNzg0LDExOCArMjY1MCwxOTggQEAKIAkJCWZvciAoaj0wOyBqPDY0OyBqKysp
IHsKIAkJCQlpZiAoKGolMTYpID09IDApCiAJCQkJCWRwcmludGsoIlxuJTAzeDoiLCBqKTsKLQkJ
CQlkcHJpbnRrKCIgJTAyeCIsICgodW5zaWduZWQgY2hhciopbnAtPnJ4X3NrYnVmZltpXS0+ZGF0
YSlbal0pOworCQkJCWRwcmludGsoIiAlMDJ4IiwgKCh1bnNpZ25lZCBjaGFyKilza2ItPmRhdGEp
W2pdKTsKIAkJCX0KIAkJCWRwcmludGsoIlxuIik7CiAJCX0KLQkJLyogbG9vayBhdCB3aGF0IHdl
IGFjdHVhbGx5IGdvdDogKi8KKwogCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEpIHsK
LQkJCWlmICghKEZsYWdzICYgTlZfUlhfREVTQ1JJUFRPUlZBTElEKSkKLQkJCQlnb3RvIG5leHRf
cGt0OwogCi0JCQlpZiAoRmxhZ3MgJiBOVl9SWF9FUlJPUikgewotCQkJCWlmIChGbGFncyAmIE5W
X1JYX01JU1NFREZSQU1FKSB7Ci0JCQkJCW5wLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7Ci0J
CQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQkJZ290byBuZXh0X3BrdDsKLQkJCQl9Ci0J
CQkJaWYgKEZsYWdzICYgKE5WX1JYX0VSUk9SMXxOVl9SWF9FUlJPUjJ8TlZfUlhfRVJST1IzKSkg
ewotCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJCWdvdG8gbmV4dF9wa3Q7Ci0JCQkJ
fQotCQkJCWlmIChGbGFncyAmIE5WX1JYX0NSQ0VSUikgewotCQkJCQlucC0+c3RhdHMucnhfY3Jj
X2Vycm9ycysrOwotCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJCWdvdG8gbmV4dF9w
a3Q7Ci0JCQkJfQotCQkJCWlmIChGbGFncyAmIE5WX1JYX09WRVJGTE9XKSB7Ci0JCQkJCW5wLT5z
dGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJ
CWdvdG8gbmV4dF9wa3Q7CisJCQlpZiAobGlrZWx5KEZsYWdzICYgTlZfUlhfREVTQ1JJUFRPUlZB
TElEKSkgeworCQkJCWxlbiA9IEZsYWdzICYgTEVOX01BU0tfVjE7CisJCQkJaWYgKHVubGlrZWx5
KEZsYWdzICYgTlZfUlhfRVJST1IpKSB7CisJCQkJCWlmIChGbGFncyAmIE5WX1JYX0VSUk9SNCkg
eworCQkJCQkJbGVuID0gbnZfZ2V0bGVuKGRldiwgc2tiLT5kYXRhLCBsZW4pOworCQkJCQkJaWYg
KGxlbiA8IDApIHsKKwkJCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCQkJZGV2X2tm
cmVlX3NrYihza2IpOworCQkJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJCQl9CisJCQkJCX0KKwkJ
CQkJLyogZnJhbWluZyBlcnJvcnMgYXJlIHNvZnQgZXJyb3JzICovCisJCQkJCWVsc2UgaWYgKEZs
YWdzICYgTlZfUlhfRlJBTUlOR0VSUikgeworCQkJCQkJaWYgKEZsYWdzICYgTlZfUlhfU1VCU1RS
QUNUMSkgeworCQkJCQkJCWxlbi0tOworCQkJCQkJfQorCQkJCQl9CisJCQkJCS8qIHRoZSByZXN0
IGFyZSBoYXJkIGVycm9ycyAqLworCQkJCQllbHNlIHsKKwkJCQkJCWlmIChGbGFncyAmIE5WX1JY
X01JU1NFREZSQU1FKQorCQkJCQkJCW5wLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQkJ
CQlpZiAoRmxhZ3MgJiBOVl9SWF9DUkNFUlIpCisJCQkJCQkJbnAtPnN0YXRzLnJ4X2NyY19lcnJv
cnMrKzsKKwkJCQkJCWlmIChGbGFncyAmIE5WX1JYX09WRVJGTE9XKQorCQkJCQkJCW5wLT5zdGF0
cy5yeF9vdmVyX2Vycm9ycysrOworCQkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQkJ
ZGV2X2tmcmVlX3NrYihza2IpOworCQkJCQkJZ290byBuZXh0X3BrdDsKKwkJCQkJfQogCQkJCX0K
LQkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9FUlJPUjQpIHsKLQkJCQkJbGVuID0gbnZfZ2V0bGVuKGRl
diwgbnAtPnJ4X3NrYnVmZltpXS0+ZGF0YSwgbGVuKTsKLQkJCQkJaWYgKGxlbiA8IDApIHsKKwkJ
CX0gZWxzZSB7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJCWdvdG8gbmV4dF9wa3Q7CisJ
CQl9CisJCX0gZWxzZSB7CisJCQlpZiAobGlrZWx5KEZsYWdzICYgTlZfUlgyX0RFU0NSSVBUT1JW
QUxJRCkpIHsKKwkJCQlsZW4gPSBGbGFncyAmIExFTl9NQVNLX1YyOworCQkJCWlmICh1bmxpa2Vs
eShGbGFncyAmIE5WX1JYMl9FUlJPUikpIHsKKwkJCQkJaWYgKEZsYWdzICYgTlZfUlgyX0VSUk9S
NCkgeworCQkJCQkJbGVuID0gbnZfZ2V0bGVuKGRldiwgc2tiLT5kYXRhLCBsZW4pOworCQkJCQkJ
aWYgKGxlbiA8IDApIHsKKwkJCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCQkJZGV2
X2tmcmVlX3NrYihza2IpOworCQkJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJCQl9CisJCQkJCX0K
KwkJCQkJLyogZnJhbWluZyBlcnJvcnMgYXJlIHNvZnQgZXJyb3JzICovCisJCQkJCWVsc2UgaWYg
KEZsYWdzICYgTlZfUlgyX0ZSQU1JTkdFUlIpIHsKKwkJCQkJCWlmIChGbGFncyAmIE5WX1JYMl9T
VUJTVFJBQ1QxKSB7CisJCQkJCQkJbGVuLS07CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJLyogdGhl
IHJlc3QgYXJlIGhhcmQgZXJyb3JzICovCisJCQkJCWVsc2UgeworCQkJCQkJaWYgKEZsYWdzICYg
TlZfUlgyX0NSQ0VSUikKKwkJCQkJCQlucC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCQkJ
aWYgKEZsYWdzICYgTlZfUlgyX09WRVJGTE9XKQorCQkJCQkJCW5wLT5zdGF0cy5yeF9vdmVyX2Vy
cm9ycysrOwogCQkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQkJZGV2X2tmcmVlX3Nr
Yihza2IpOwogCQkJCQkJZ290byBuZXh0X3BrdDsKIAkJCQkJfQogCQkJCX0KLQkJCQkvKiBmcmFt
aW5nIGVycm9ycyBhcmUgc29mdCBlcnJvcnMuICovCi0JCQkJaWYgKEZsYWdzICYgTlZfUlhfRlJB
TUlOR0VSUikgewotCQkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9TVUJTVFJBQ1QxKSB7Ci0JCQkJCQls
ZW4tLTsKKwkJCQlpZiAoKEZsYWdzICYgTlZfUlgyX0NIRUNLU1VNTUFTSykgPT0gTlZfUlgyX0NI
RUNLU1VNT0syKS8qaXAgYW5kIHRjcCAqLyB7CisJCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tT
VU1fVU5ORUNFU1NBUlk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKChGbGFncyAmIE5WX1JYMl9D
SEVDS1NVTU1BU0spID09IE5WX1JYMl9DSEVDS1NVTU9LMSB8fAorCQkJCQkgICAgKEZsYWdzICYg
TlZfUlgyX0NIRUNLU1VNTUFTSykgPT0gTlZfUlgyX0NIRUNLU1VNT0szKSB7CisJCQkJCQlza2It
PmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJCQl9CiAJCQkJfQotCQkJfQot
CQl9IGVsc2UgewotCQkJaWYgKCEoRmxhZ3MgJiBOVl9SWDJfREVTQ1JJUFRPUlZBTElEKSkKKwkJ
CX0gZWxzZSB7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJCWdvdG8gbmV4dF9wa3Q7CisJ
CQl9CisJCX0KKworCQkvKiBnb3QgYSB2YWxpZCBwYWNrZXQgLSBmb3J3YXJkIGl0IHRvIHRoZSBu
ZXR3b3JrIGNvcmUgKi8KKwkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfcnhfcHJvY2VzczpO
VkxBTiByeCBkb25lXG4iLCBkZXYtPm5hbWUpOworCQlza2JfcHV0KHNrYiwgbGVuKTsKKwkJc2ti
LT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJbmV0aWZfcngoc2tiKTsK
KwkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJbnAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJ
bnAtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKK25leHRfcGt0OgorCQlpZiAodW5saWtlbHkobnAt
PmdldF9yeC5vcmlnKysgPT0gbnAtPmxhc3Rfcngub3JpZykpCisJCQlucC0+Z2V0X3J4Lm9yaWcg
PSBucC0+Zmlyc3Rfcngub3JpZzsKKwkJaWYgKHVubGlrZWx5KG5wLT5nZXRfcnhfY3R4KysgPT0g
bnAtPmxhc3RfcnhfY3R4KSkKKwkJCW5wLT5nZXRfcnhfY3R4ID0gbnAtPmZpcnN0X3J4X2N0eDsK
Kwl9Cit9CiAKLQkJCWlmIChGbGFncyAmIE5WX1JYMl9FUlJPUikgewotCQkJCWlmIChGbGFncyAm
IChOVl9SWDJfRVJST1IxfE5WX1JYMl9FUlJPUjJ8TlZfUlgyX0VSUk9SMykpIHsKLQkJCQkJbnAt
PnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCQlnb3RvIG5leHRfcGt0OwotCQkJCX0KLQkJCQlpZiAo
RmxhZ3MgJiBOVl9SWDJfQ1JDRVJSKSB7Ci0JCQkJCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7
Ci0JCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQkJZ290byBuZXh0X3BrdDsKLQkJCQl9
Ci0JCQkJaWYgKEZsYWdzICYgTlZfUlgyX09WRVJGTE9XKSB7Ci0JCQkJCW5wLT5zdGF0cy5yeF9v
dmVyX2Vycm9ycysrOwotCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJCWdvdG8gbmV4
dF9wa3Q7Ci0JCQkJfQorc3RhdGljIGlubGluZSBpbnQgbnZfcnhfcHJvY2Vzc19vcHRpbWl6ZWQo
c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG1heF93b3JrKQoreworCXN0cnVjdCBmZV9wcml2
ICpucCA9IGdldF9udnByaXYoZGV2KTsKKwl1MzIgRmxhZ3M7CisJdTMyIHZsYW5mbGFncyA9IDA7
CisJdTMyIHJ4X3Byb2Nlc3NlZF9jbnQgPSAwOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50
IGxlbjsKKworLy8JZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfcnhfcHJvY2Vzc19vcHRpbWl6
ZWQgXG4iLCBkZXYtPm5hbWUpOworCXdoaWxlKChucC0+Z2V0X3J4LmV4ICE9IG5wLT5wdXRfcngu
ZXgpICYmCisJICAgICAgISgoRmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+Z2V0X3J4LmV4LT5GbGFn
TGVuKSkgJiBOVl9SWDJfQVZBSUwpICYmCisJICAgICAgKHJ4X3Byb2Nlc3NlZF9jbnQrKyA8IG1h
eF93b3JrKSkgeworCisJCXBjaV91bm1hcF9zaW5nbGUobnAtPnBjaV9kZXYsIG5wLT5nZXRfcnhf
Y3R4LT5kbWEsCisJCQkJIG5wLT5nZXRfcnhfY3R4LT5kbWFfbGVuLAorCQkJCSBQQ0lfRE1BX0ZS
T01ERVZJQ0UpOworCisJCXNrYiA9IG5wLT5nZXRfcnhfY3R4LT5za2I7CisJCW5wLT5nZXRfcnhf
Y3R4LT5za2IgPSBOVUxMOworCisJCS8qIGxvb2sgYXQgd2hhdCB3ZSBhY3R1YWxseSBnb3Q6ICov
CisJCWlmIChsaWtlbHkoRmxhZ3MgJiBOVl9SWDJfREVTQ1JJUFRPUlZBTElEKSkgeworCQkJbGVu
ID0gRmxhZ3MgJiBMRU5fTUFTS19WMjsKKwkJCWlmICh1bmxpa2VseShGbGFncyAmIE5WX1JYMl9F
UlJPUikpIHsKIAkJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRVJST1I0KSB7Ci0JCQkJCWxlbiA9IG52
X2dldGxlbihkZXYsIG5wLT5yeF9za2J1ZmZbaV0tPmRhdGEsIGxlbik7CisJCQkJCWxlbiA9IG52
X2dldGxlbihkZXYsIHNrYi0+ZGF0YSwgbGVuKTsKIAkJCQkJaWYgKGxlbiA8IDApIHsKLQkJCQkJ
CW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJCW5wLT5yeF9sZW5fZXJyb3JzKys7CisJCQkJ
CQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQkJCQlnb3RvIG5leHRfcGt0OwogCQkJCQl9CiAJCQkJ
fQogCQkJCS8qIGZyYW1pbmcgZXJyb3JzIGFyZSBzb2Z0IGVycm9ycyAqLwotCQkJCWlmIChGbGFn
cyAmIE5WX1JYMl9GUkFNSU5HRVJSKSB7CisJCQkJZWxzZSBpZiAoRmxhZ3MgJiBOVl9SWDJfRlJB
TUlOR0VSUikgewogCQkJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfU1VCU1RSQUNUMSkgewogCQkJCQkJ
bGVuLS07CiAJCQkJCX0KIAkJCQl9CisJCQkJLyogdGhlIHJlc3QgYXJlIGhhcmQgZXJyb3JzICov
CisJCQkJZWxzZSB7CisJCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCQkJZ290byBuZXh0X3Br
dDsKKwkJCQl9CiAJCQl9Ci0JCQlpZiAobnAtPnR4cnhjdGxfYml0cyAmIE5WUkVHX1RYUlhDVExf
UlhDSEVDSykgewotCQkJCUZsYWdzICY9IE5WX1JYMl9DSEVDS1NVTU1BU0s7Ci0JCQkJaWYgKEZs
YWdzID09IE5WX1JYMl9DSEVDS1NVTU9LMSB8fAotCQkJCSAgICBGbGFncyA9PSBOVl9SWDJfQ0hF
Q0tTVU1PSzIgfHwKLQkJCQkgICAgRmxhZ3MgPT0gTlZfUlgyX0NIRUNLU1VNT0szKSB7Ci0JCQkJ
CWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGh3IGNoZWNrc3VtIGhpdCEuXG4iLCBkZXYtPm5hbWUp
OwotCQkJCQlucC0+cnhfc2tidWZmW2ldLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FS
WTsKKworCQkJaWYgKGxpa2VseShucC0+cnhfY3N1bSkpIHsKKwkJCQlpZiAobGlrZWx5KChGbGFn
cyAmIE5WX1JYMl9DSEVDS1NVTU1BU0spID09IE5WX1JYMl9DSEVDS1NVTU9LMikpIHsKKwkJCQkJ
LyppcCBhbmQgdGNwICovCisJCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NB
Ulk7CiAJCQkJfSBlbHNlIHsKLQkJCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogaHdjaGVja3N1
bSBtaXNzIS5cbiIsIGRldi0+bmFtZSk7CisJCQkJCWlmICgoRmxhZ3MgJiBOVl9SWDJfQ0hFQ0tT
VU1NQVNLKSA9PSBOVl9SWDJfQ0hFQ0tTVU1PSzEgfHwKKwkJCQkJICAgIChGbGFncyAmIE5WX1JY
Ml9DSEVDS1NVTU1BU0spID09IE5WX1JYMl9DSEVDS1NVTU9LMykgeworCQkJCQkJc2tiLT5pcF9z
dW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KLQkJfQot
CQkvKiBnb3QgYSB2YWxpZCBwYWNrZXQgLSBmb3J3YXJkIGl0IHRvIHRoZSBuZXR3b3JrIGNvcmUg
Ki8KLQkJc2tiID0gbnAtPnJ4X3NrYnVmZltpXTsKLQkJbnAtPnJ4X3NrYnVmZltpXSA9IE5VTEw7
CisJCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9yeF9wcm9jZXNzX29wdGltaXplZDpOVkxB
TiByeCBkb25lXG4iLCBkZXYtPm5hbWUpOwogCi0JCXNrYl9wdXQoc2tiLCBsZW4pOwotCQlza2It
PnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQlkcHJpbnRrKEtFUk5fREVC
VUcgIiVzOiBudl9yeF9wcm9jZXNzOiBwYWNrZXQgJWQgd2l0aCAlZCBieXRlcywgcHJvdG8gJWQg
YWNjZXB0ZWQuXG4iLAotCQkJCQlkZXYtPm5hbWUsIG5wLT5jdXJfcngsIGxlbiwgc2tiLT5wcm90
b2NvbCk7Ci0JCWlmIChucC0+dmxhbmdycCAmJiAodmxhbmZsYWdzICYgTlZfUlgzX1ZMQU5fVEFH
X1BSRVNFTlQpKSB7Ci0JCQl2bGFuX2h3YWNjZWxfcngoc2tiLCBucC0+dmxhbmdycCwgdmxhbmZs
YWdzICYgTlZfUlgzX1ZMQU5fVEFHX01BU0spOworCQkJLyogZ290IGEgdmFsaWQgcGFja2V0IC0g
Zm9yd2FyZCBpdCB0byB0aGUgbmV0d29yayBjb3JlICovCisJCQlza2JfcHV0KHNrYiwgbGVuKTsK
KwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQlwcmVmZXRj
aChza2ItPmRhdGEpOworCisJCQlpZiAobGlrZWx5KCFucC0+dmxhbmdycCkpIHsKKwkJCQluZXRp
Zl9yeChza2IpOworCQkJfSBlbHNlIHsKKwkJCQl2bGFuZmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+
Z2V0X3J4LmV4LT5QYWNrZXRCdWZmZXJMb3cpOworCQkJCWlmICh2bGFuZmxhZ3MgJiBOVl9SWDNf
VkxBTl9UQUdfUFJFU0VOVCkKKwkJCQkJdmxhbl9od2FjY2VsX3J4KHNrYiwgbnAtPnZsYW5ncnAs
IHZsYW5mbGFncyAmIE5WX1JYM19WTEFOX1RBR19NQVNLKTsKKwkJCQllbHNlCisJCQkJCW5ldGlm
X3J4KHNrYik7CisJCQl9CisKKwkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCQlucC0+c3Rh
dHMucnhfcGFja2V0cysrOworCQkJbnAtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIAkJfSBlbHNl
IHsKLQkJCW5ldGlmX3J4KHNrYik7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCX0KLQkJZGV2
LT5sYXN0X3J4ID0gamlmZmllczsKLQkJbnAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJbnAtPnN0
YXRzLnJ4X2J5dGVzICs9IGxlbjsKIG5leHRfcGt0OgotCQlucC0+Y3VyX3J4Kys7CisJCWlmICh1
bmxpa2VseShucC0+Z2V0X3J4LmV4KysgPT0gbnAtPmxhc3RfcnguZXgpKQorCQkJbnAtPmdldF9y
eC5leCA9IG5wLT5maXJzdF9yeC5leDsKKwkJaWYgKHVubGlrZWx5KG5wLT5nZXRfcnhfY3R4Kysg
PT0gbnAtPmxhc3RfcnhfY3R4KSkKKwkJCW5wLT5nZXRfcnhfY3R4ID0gbnAtPmZpcnN0X3J4X2N0
eDsKIAl9CisJcmV0dXJuIHJ4X3Byb2Nlc3NlZF9jbnQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9i
dWZzaXplKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0g
bmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7
CiAKIAlpZiAoZGV2LT5tdHUgPD0gRVRIX0RBVEFfTEVOKQogCQlucC0+cnhfYnVmX3N6ID0gRVRI
X0RBVEFfTEVOICsgTlZfUlhfSEVBREVSUzsKQEAgLTE5MDksNyArMjg1NSw3IEBACiAgKi8KIHN0
YXRpYyBpbnQgbnZfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210
dSkKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBm
ZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAlpbnQgb2xkX210dTsKIAogCWlmIChuZXdf
bXR1IDwgNjQgfHwgbmV3X210dSA+IG5wLT5wa3RfbGltaXQpCkBAIC0xOTg3LDEyICsyOTMzLDEz
IEBACiAgKi8KIHN0YXRpYyBpbnQgbnZfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNl
ICpkZXYsIHZvaWQgKmFkZHIpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYo
ZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJc3RydWN0IHNv
Y2thZGRyICptYWNhZGRyID0gKHN0cnVjdCBzb2NrYWRkciopYWRkcjsKIAogCWlmKCFpc192YWxp
ZF9ldGhlcl9hZGRyKG1hY2FkZHItPnNhX2RhdGEpKQogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7
CiAKKwlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9zZXRfbWFjX2FkZHJlc3MgXG4iLCBkZXYt
Pm5hbWUpOwogCS8qIHN5bmNocm9uaXplZCBhZ2FpbnN0IG9wZW4gOiBydG5sX2xvY2soKSBoZWxk
IGJ5IGNhbGxlciAqLwogCW1lbWNweShkZXYtPmRldl9hZGRyLCBtYWNhZGRyLT5zYV9kYXRhLCBF
VEhfQUxFTik7CiAKQEAgLTIwMTgsMTEgKzI5NjUsMTEgQEAKIAogLyoKICAqIG52X3NldF9tdWx0
aWNhc3Q6IGRldi0+c2V0X211bHRpY2FzdCBmdW5jdGlvbgotICogQ2FsbGVkIHdpdGggbmV0aWZf
dHhfbG9jayBoZWxkLgorICogQ2FsbGVkIHdpdGggZGV2LT54bWl0X2xvY2sgaGVsZC4KICAqLwog
c3RhdGljIHZvaWQgbnZfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewot
CXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYg
Km5wID0gZ2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRl
dik7CiAJdTMyIGFkZHJbMl07CiAJdTMyIG1hc2tbMl07CkBAIC0yMDMyLDcgKzI5NzksNyBAQAog
CW1lbXNldChtYXNrLCAwLCBzaXplb2YobWFzaykpOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZf
UFJPTUlTQykgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBQcm9taXNjdW91cyBtb2RlIGVu
YWJsZWQuXG4iLCBkZXYtPm5hbWUpOworCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQcm9taXNj
dW91cyBtb2RlIGVuYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwogCQlwZmYgfD0gTlZSRUdfUEZGX1BS
T01JU0M7CiAJfSBlbHNlIHsKIAkJcGZmIHw9IE5WUkVHX1BGRl9NWUFERFI7CkBAIC0yMDgyLDcg
KzMwMjksNyBAQAogCiBzdGF0aWMgdm9pZCBudl91cGRhdGVfcGF1c2Uoc3RydWN0IG5ldF9kZXZp
Y2UgKmRldiwgdTMyIHBhdXNlX2ZsYWdzKQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRl
dl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCXU4
IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAKIAlucC0+cGF1c2VfZmxhZ3MgJj0g
fihOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRSB8IE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFKTsKQEAg
LTIxMDQsNyArMzA1MSw3IEBACiAJCQlucC0+cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9U
WF9FTkFCTEU7CiAJCX0gZWxzZSB7CiAJCQl3cml0ZWwoTlZSRUdfVFhfUEFVU0VGUkFNRV9ESVNB
QkxFLCAgYmFzZSArIE52UmVnVHhQYXVzZUZyYW1lKTsKLQkJCXdyaXRlbChyZWdtaXNjLCBiYXNl
ICsgTnZSZWdNaXNjMSk7CisJCQl3cml0ZWwocmVnbWlzYywgYmFzZSArIE52UmVnTWlzYzEpOwkJ
CQogCQl9CiAJfQogfQpAQCAtMjEyMiw3ICszMDY5LDcgQEAKICAqLwogc3RhdGljIGludCBudl91
cGRhdGVfbGlua3NwZWVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZlX3By
aXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZw
cml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAlpbnQgYWR2
ID0gMDsKIAlpbnQgbHBhID0gMDsKQEAgLTIxNDgsNyArMzA5NSw3IEBACiAJCWdvdG8gc2V0X3Nw
ZWVkOwogCX0KIAotCWlmIChucC0+YXV0b25lZyA9PSAwKSB7CisJaWYgKG5wLT5hdXRvbmVnID09
IEFVVE9ORUdfRElTQUJMRSkgewogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl91cGRhdGVf
bGlua3NwZWVkOiBhdXRvbmVnIG9mZiwgUEhZIHNldCB0byAweCUwNHguXG4iLAogCQkJCWRldi0+
bmFtZSwgbnAtPmZpeGVkX21vZGUpOwogCQlpZiAobnAtPmZpeGVkX21vZGUgJiBMUEFfMTAwRlVM
TCkgewpAQCAtMjE4MSw3ICszMTI4LDYgQEAKIAlscGEgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRk
ciwgTUlJX0xQQSwgTUlJX1JFQUQpOwogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3VwZGF0
ZV9saW5rc3BlZWQ6IFBIWSBhZHZlcnRpc2VzIDB4JTA0eCwgbHBhIDB4JTA0eC5cbiIsCiAJCQkJ
ZGV2LT5uYW1lLCBhZHYsIGxwYSk7Ci0KIAlyZXR2YWwgPSAxOwogCWlmIChucC0+Z2lnYWJpdCA9
PSBQSFlfR0lHQUJJVCkgewogCQljb250cm9sXzEwMDAgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRk
ciwgTUlJX0NUUkwxMDAwLCBNSUlfUkVBRCk7CkBAIC0yMjY4LDcgKzMyMTQsNiBAQAogCQkJdHhy
ZWcgPSBOVlJFR19UWF9XTV9ERVNDMl8zX0RFRkFVTFQ7CiAJfQogCXdyaXRlbCh0eHJlZywgYmFz
ZSArIE52UmVnVHhXYXRlcm1hcmspOwotCiAJd3JpdGVsKE5WUkVHX01JU0MxX0ZPUkNFIHwgKCBu
cC0+ZHVwbGV4ID8gMCA6IE5WUkVHX01JU0MxX0hEKSwKIAkJYmFzZSArIE52UmVnTWlzYzEpOwog
CXBjaV9wdXNoKGJhc2UpOwpAQCAtMjMwNiw3ICszMjUxLDcgQEAKIAkJCQlpZiAobHBhX3BhdXNl
ID09IExQQV9QQVVTRV9BU1lNKQogCQkJCXsKIAkJCQkJcGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VG
UkFNRV9SWF9FTkFCTEU7Ci0JCQkJfQorCQkJCX0gCiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxz
ZSB7CkBAIC0yMzUyLDcgKzMyOTcsNyBAQAogc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnEo
aW50IGZvbywgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IG5l
dF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwotCXN0cnVjdCBmZV9w
cml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252
cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJdTMyIGV2
ZW50czsKIAlpbnQgaTsKQEAgLTIzNzIsMTAgKzMzMTcsOCBAQAogCQlpZiAoIShldmVudHMgJiBu
cC0+aXJxbWFzaykpCiAJCQlicmVhazsKIAotCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJbnZf
dHhfZG9uZShkZXYpOwotCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCisJCQogCQludl9yeF9w
cm9jZXNzKGRldik7CiAJCWlmIChudl9hbGxvY19yeChkZXYpKSB7CiAJCQlzcGluX2xvY2soJm5w
LT5sb2NrKTsKQEAgLTIzODMsNyArMzMyNiw3IEBACiAJCQkJbW9kX3RpbWVyKCZucC0+b29tX2tp
Y2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKIAkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiAJ
CX0KLQorCQkKIAkJaWYgKGV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSB7CiAJCQlzcGluX2xvY2so
Jm5wLT5sb2NrKTsKIAkJCW52X2xpbmtfaXJxKGRldik7CkBAIC0yNDI3LDEwICszMzcwLDc2IEBA
CiAJcmV0dXJuIElSUV9SRVRWQUwoaSk7CiB9CiAKKyNkZWZpbmUgVFhfV09SS19QRVJfTE9PUCAg
NjQKKyNkZWZpbmUgUlhfV09SS19QRVJfTE9PUCAgNjQKK3N0YXRpYyBpcnFyZXR1cm5fdCBudl9u
aWNfaXJxX29wdGltaXplZChpbnQgZm9vLCB2b2lkICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVn
cykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRh
dGE7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCXU4IF9faW9tZW0g
KmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIGV2ZW50czsKKwlpbnQgaSA9IDE7CisKKwlk
byB7CisJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkgeworCQkJZXZl
bnRzID0gcmVhZGwoYmFzZSArIE52UmVnSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsK
KwkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CisJ
CX0gZWxzZSB7CisJCQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKSAm
IE5WUkVHX0lSUVNUQVRfTUFTSzsKKwkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2Ug
KyBOdlJlZ01TSVhJcnFTdGF0dXMpOworCQl9CisJCWlmIChldmVudHMgJiBucC0+aXJxbWFzaykg
eworCisJCQludl90eF9kb25lX29wdGltaXplZChkZXYsIFRYX1dPUktfUEVSX0xPT1ApOworCisJ
CQlpZiAobnZfcnhfcHJvY2Vzc19vcHRpbWl6ZWQoZGV2LCBSWF9XT1JLX1BFUl9MT09QKSkgewor
CQkJCWlmICh1bmxpa2VseShudl9hbGxvY19yeF9vcHRpbWl6ZWQoZGV2KSkpIHsKKwkJCQkJc3Bp
bl9sb2NrKCZucC0+bG9jayk7CisJCQkJCWlmICghbnAtPmluX3NodXRkb3duKQorCQkJCQkJbW9k
X3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKKwkJCQkJc3Bpbl91
bmxvY2soJm5wLT5sb2NrKTsKKwkJCQl9CisJCQl9CisJCQlpZiAodW5saWtlbHkoZXZlbnRzICYg
TlZSRUdfSVJRX0xJTkspKSB7CisJCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCQkJbnZfbGlu
a19pcnEoZGV2KTsKKwkJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQkJfQorCQkJaWYgKHVu
bGlrZWx5KG5wLT5uZWVkX2xpbmt0aW1lciAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG5wLT5saW5r
X3RpbWVvdXQpKSkgeworCQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkJCW52X2xpbmtjaGFu
Z2UoZGV2KTsKKwkJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQkJCW5wLT5saW5rX3RpbWVv
dXQgPSBqaWZmaWVzICsgTElOS19USU1FT1VUOworCQkJfQorCQkJaWYgKHVubGlrZWx5KGV2ZW50
cyAmIE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKSkgeworCQkJCXNwaW5fbG9jaygmbnAtPmxvY2sp
OworCQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCisJCQkJaWYgKCEobnAt
Pm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQorCQkJCQl3cml0ZWwoMCwgYmFzZSArIE52
UmVnSXJxTWFzayk7CisJCQkJZWxzZQorCQkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBO
dlJlZ0lycU1hc2spOworCQkJCXBjaV9wdXNoKGJhc2UpOworCisJCQkJaWYgKCFucC0+aW5fc2h1
dGRvd24pIHsKKwkJCQkJbnAtPm5pY19wb2xsX2lycSA9IG5wLT5pcnFtYXNrOworCQkJCQlucC0+
cmVjb3Zlcl9lcnJvciA9IDE7CisJCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVz
ICsgUE9MTF9XQUlUKTsKKwkJCQl9CisJCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCQli
cmVhazsKKwkJCX0KKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CisJd2hpbGUgKGkrKyA8PSBtYXhf
aW50ZXJydXB0X3dvcmspOworCisJcmV0dXJuIElSUV9SRVRWQUwoaSk7Cit9CisKIHN0YXRpYyBp
cnFyZXR1cm5fdCBudl9uaWNfaXJxX3R4KGludCBmb28sIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9y
ZWdzICpyZWdzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZp
Y2UgKikgZGF0YTsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0
cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0g
Z2V0X2h3YmFzZShkZXYpOwogCXUzMiBldmVudHM7CiAJaW50IGk7CkBAIC0yNDQwLDE1ICszNDQ5
LDEyIEBACiAJZm9yIChpPTA7IDsgaSsrKSB7CiAJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJl
Z01TSVhJcnFTdGF0dXMpICYgTlZSRUdfSVJRX1RYX0FMTDsKIAkJd3JpdGVsKE5WUkVHX0lSUV9U
WF9BTEwsIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwotCQlwY2lfcHVzaChiYXNlKTsKIAkJ
ZHByaW50ayhLRVJOX0RFQlVHICIlczogdHggaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIGV2ZW50
cyk7CiAJCWlmICghKGV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKIAkJCWJyZWFrOwogCi0JCXNwaW5f
bG9ja19pcnEoJm5wLT5sb2NrKTsKLQkJbnZfdHhfZG9uZShkZXYpOwotCQlzcGluX3VubG9ja19p
cnEoJm5wLT5sb2NrKTsKLQorCQludl90eF9kb25lX29wdGltaXplZChkZXYsIFRYX1dPUktfUEVS
X0xPT1ApOworCQkKIAkJaWYgKGV2ZW50cyAmIChOVlJFR19JUlFfVFhfRVJSKSkgewogCQkJZHBy
aW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggZXZlbnRzIDB4JXguIFByb2Jh
Ymx5IFRYIGZhaWwuXG4iLAogCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwpAQCAtMjQ3Nyw3ICsz
NDgzLDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBudl9uaWNfaXJxX3J4KGludCBmb28sIHZvaWQg
KmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYg
PSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRk
ZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAl1
OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCXUzMiBldmVudHM7CiAJaW50IGk7
CkBAIC0yNDg3LDE5ICszNDkzLDE5IEBACiAJZm9yIChpPTA7IDsgaSsrKSB7CiAJCWV2ZW50cyA9
IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpICYgTlZSRUdfSVJRX1JYX0FMTDsKIAkJ
d3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwotCQlw
Y2lfcHVzaChiYXNlKTsKIAkJZHByaW50ayhLRVJOX0RFQlVHICIlczogcnggaXJxOiAlMDh4XG4i
LCBkZXYtPm5hbWUsIGV2ZW50cyk7CiAJCWlmICghKGV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKIAkJ
CWJyZWFrOwotCi0JCW52X3J4X3Byb2Nlc3MoZGV2KTsKLQkJaWYgKG52X2FsbG9jX3J4KGRldikp
IHsKKwkJCisJCWlmIChudl9yeF9wcm9jZXNzX29wdGltaXplZChkZXYsIFJYX1dPUktfUEVSX0xP
T1ApKSB7CisJCQlpZiAodW5saWtlbHkobnZfYWxsb2Nfcnhfb3B0aW1pemVkKGRldikpKSB7CiAJ
CQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKIAkJ
CQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwogCQkJc3Bp
bl91bmxvY2tfaXJxKCZucC0+bG9jayk7CisJCQl9CiAJCX0KLQorCQkKIAkJaWYgKGkgPiBtYXhf
aW50ZXJydXB0X3dvcmspIHsKIAkJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJCS8qIGRp
c2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCkBAIC0yNTI0LDcgKzM1MzAsNyBAQAogc3Rh
dGljIGlycXJldHVybl90IG52X25pY19pcnFfb3RoZXIoaW50IGZvbywgdm9pZCAqZGF0YSwgc3Ry
dWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3Qg
bmV0X2RldmljZSAqKSBkYXRhOwotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRl
dik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0g
KmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJdTMyIGV2ZW50czsKIAlpbnQgaTsKQEAgLTI1MzQs
MTEgKzM1NDAsMTAgQEAKIAlmb3IgKGk9MDsgOyBpKyspIHsKIAkJZXZlbnRzID0gcmVhZGwoYmFz
ZSArIE52UmVnTVNJWElycVN0YXR1cykgJiBOVlJFR19JUlFfT1RIRVI7CiAJCXdyaXRlbChOVlJF
R19JUlFfT1RIRVIsIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOwotCQlwY2lfcHVzaChiYXNl
KTsKIAkJZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIGV2
ZW50cyk7CiAJCWlmICghKGV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKIAkJCWJyZWFrOwotCisJCQog
CQlpZiAoZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspIHsKIAkJCXNwaW5fbG9ja19pcnEoJm5wLT5s
b2NrKTsKIAkJCW52X2xpbmtfaXJxKGRldik7CkBAIC0yNTUwLDYgKzM1NTUsMjAgQEAKIAkJCXNw
aW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJbnAtPmxpbmtfdGltZW91dCA9IGppZmZpZXMg
KyBMSU5LX1RJTUVPVVQ7CiAJCX0KKwkJaWYgKGV2ZW50cyAmIE5WUkVHX0lSUV9SRUNPVkVSX0VS
Uk9SKSB7CisJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CisJCQkvKiBkaXNhYmxlIGludGVy
cnVwdHMgb24gdGhlIG5pYyAqLworCQkJd3JpdGVsKE5WUkVHX0lSUV9PVEhFUiwgYmFzZSArIE52
UmVnSXJxTWFzayk7CisJCQlwY2lfcHVzaChiYXNlKTsKKwkJCQorCQkJaWYgKCFucC0+aW5fc2h1
dGRvd24pIHsKKwkJCQlucC0+bmljX3BvbGxfaXJxIHw9IE5WUkVHX0lSUV9PVEhFUjsKKwkJCQlu
cC0+cmVjb3Zlcl9lcnJvciA9IDE7CisJCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZp
ZXMgKyBQT0xMX1dBSVQpOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CisJ
CQlicmVhazsKKwkJfQogCQlpZiAoZXZlbnRzICYgKE5WUkVHX0lSUV9VTktOT1dOKSkgewogCQkJ
cHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCB1bmtub3duIGV2ZW50cyAw
eCV4LiBQbGVhc2UgcmVwb3J0XG4iLAogCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwpAQCAtMjU3
OCw3ICszNTk3LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBudl9uaWNfaXJxX3Rlc3QoaW50IGZv
bywgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IG5ldF9kZXZp
Y2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwotCXN0cnVjdCBmZV9wcml2ICpu
cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihk
ZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJdTMyIGV2ZW50czsK
IApAQCAtMjU5NSwxNiArMzYxNCwxNyBAQAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycTog
JTA4eFxuIiwgZGV2LT5uYW1lLCBldmVudHMpOwogCWlmICghKGV2ZW50cyAmIE5WUkVHX0lSUV9U
SU1FUikpCiAJCXJldHVybiBJUlFfUkVUVkFMKDApOwotCisJCiAJc3Bpbl9sb2NrKCZucC0+bG9j
ayk7CiAJbnAtPmludHJfdGVzdCA9IDE7CiAJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQorCQkK
IAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxX3Rlc3QgY29tcGxldGVkXG4iLCBk
ZXYtPm5hbWUpOwogCiAJcmV0dXJuIElSUV9SRVRWQUwoMSk7CiB9CiAKKyNpZmRlZiBDT05GSUdf
UENJX01TSQogc3RhdGljIHZvaWQgc2V0X21zaXhfdmVjdG9yX21hcChzdHJ1Y3QgbmV0X2Rldmlj
ZSAqZGV2LCB1MzIgdmVjdG9yLCB1MzIgaXJxbWFzaykKIHsKIAl1OCBfX2lvbWVtICpiYXNlID0g
Z2V0X2h3YmFzZShkZXYpOwpAQCAtMjYzMCwxMiArMzY1MCwxNSBAQAogCX0KIAl3cml0ZWwocmVh
ZGwoYmFzZSArIE52UmVnTVNJWE1hcDEpIHwgbXNpeG1hcCwgYmFzZSArIE52UmVnTVNJWE1hcDEp
OwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgbnZfcmVxdWVzdF9pcnEoc3RydWN0IG5ldF9kZXZp
Y2UgKmRldiwgaW50IGludHJfdGVzdCkKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZw
cml2KGRldik7Ci0JdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAlpbnQgcmV0
ID0gMTsKKworI2lmIE5WVkVSID4gU0xFUzkKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFz
ZShkZXYpOwogCWludCBpOwogCiAJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9DQVBBQkxF
KSB7CkBAIC0yNjQ2LDIxICszNjY5LDIxIEBACiAJCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9Y
X0VOQUJMRUQ7CiAJCQlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01P
REVfVEhST1VHSFBVVCAmJiAhaW50cl90ZXN0KSB7CiAJCQkJLyogUmVxdWVzdCBpcnEgZm9yIHJ4
IGhhbmRsaW5nICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lf
WF9WRUNUT1JfUlhdLnZlY3RvciwgJm52X25pY19pcnFfcngsIElSUUZfU0hBUkVELCBkZXYtPm5h
bWUsIGRldikgIT0gMCkgeworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZf
TVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IsICZudl9uaWNfaXJxX3J4LCBTQV9TSElSUSwgZGV2LT5u
YW1lLCBkZXYpICE9IDApIHsKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1
ZXN0X2lycSBmYWlsZWQgZm9yIHJ4ICVkXG4iLCByZXQpOwogCQkJCQlwY2lfZGlzYWJsZV9tc2l4
KG5wLT5wY2lfZGV2KTsKIAkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsK
IAkJCQkJZ290byBvdXRfZXJyOwogCQkJCX0KIAkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgdHggaGFu
ZGxpbmcgKi8KLQkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZF
Q1RPUl9UWF0udmVjdG9yLCAmbnZfbmljX2lycV90eCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwg
ZGV2KSAhPSAwKSB7CisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lf
WF9WRUNUT1JfVFhdLnZlY3RvciwgJm52X25pY19pcnFfdHgsIFNBX1NISVJRLCBkZXYtPm5hbWUs
IGRldikgIT0gMCkgewogCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3Rf
aXJxIGZhaWxlZCBmb3IgdHggJWRcbiIsIHJldCk7CiAJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAt
PnBjaV9kZXYpOwogCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwogCQkJ
CQlnb3RvIG91dF9mcmVlX3J4OwogCQkJCX0KIAkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgbGluayBh
bmQgdGltZXIgaGFuZGxpbmcgKi8KLQkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5
W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVjdG9yLCAmbnZfbmljX2lycV9vdGhlciwgSVJRRl9T
SEFSRUQsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7CisJCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5t
c2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3RvciwgJm52X25pY19pcnFfb3Ro
ZXIsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgewogCQkJCQlwcmludGsoS0VSTl9J
TkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgbGluayAlZFxuIiwgcmV0KTsK
IAkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CiAJCQkJCW5wLT5tc2lfZmxhZ3Mg
Jj0gfk5WX01TSV9YX0VOQUJMRUQ7CkBAIC0yNjY5LDE1ICszNjkyLDE5IEBACiAJCQkJLyogbWFw
IGludGVycnVwdHMgdG8gdGhlaXIgcmVzcGVjdGl2ZSB2ZWN0b3IgKi8KIAkJCQl3cml0ZWwoMCwg
YmFzZSArIE52UmVnTVNJWE1hcDApOwogCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lYTWFw
MSk7CisjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAkJCQlzZXRfbXNpeF92ZWN0b3JfbWFwKGRldiwg
TlZfTVNJX1hfVkVDVE9SX1JYLCBOVlJFR19JUlFfUlhfQUxMKTsKIAkJCQlzZXRfbXNpeF92ZWN0
b3JfbWFwKGRldiwgTlZfTVNJX1hfVkVDVE9SX1RYLCBOVlJFR19JUlFfVFhfQUxMKTsKIAkJCQlz
ZXRfbXNpeF92ZWN0b3JfbWFwKGRldiwgTlZfTVNJX1hfVkVDVE9SX09USEVSLCBOVlJFR19JUlFf
T1RIRVIpOworI2VuZGlmCiAJCQl9IGVsc2UgewogCQkJCS8qIFJlcXVlc3QgaXJxIGZvciBhbGwg
aW50ZXJydXB0cyAqLwotCQkJCWlmICgoIWludHJfdGVzdCAmJgotCQkJCSAgICAgcmVxdWVzdF9p
cnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3RvciwgJm52X25pY19p
cnEsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkgfHwKKwkJCQlpZiAoKCFpbnRy
X3Rlc3QgJiYgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzMgJiYKKwkJCQkgICAgIHJlcXVlc3Rf
aXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IsICZudl9uaWNf
aXJxX29wdGltaXplZCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB8fAorCQkJCSAg
ICAoIWludHJfdGVzdCAmJiBucC0+ZGVzY192ZXIgIT0gREVTQ19WRVJfMyAmJgorCQkJCSAgICAg
cmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3Rvciwg
Jm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgfHwKIAkJCQkgICAg
KGludHJfdGVzdCAmJgotCQkJCSAgICAgcmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01T
SV9YX1ZFQ1RPUl9BTExdLnZlY3RvciwgJm52X25pY19pcnFfdGVzdCwgSVJRRl9TSEFSRUQsIGRl
di0+bmFtZSwgZGV2KSAhPSAwKSkgeworCQkJCSAgICAgcmVxdWVzdF9pcnEobnAtPm1zaV94X2Vu
dHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3RvciwgJm52X25pY19pcnFfdGVzdCwgU0FfU0hJ
UlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSkgewogCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3Jj
ZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCAlZFxuIiwgcmV0KTsKIAkJCQkJcGNpX2Rpc2FibGVf
bXNpeChucC0+cGNpX2Rldik7CiAJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJM
RUQ7CkBAIC0yNjkzLDggKzM3MjAsOTUgQEAKIAlpZiAocmV0ICE9IDAgJiYgbnAtPm1zaV9mbGFn
cyAmIE5WX01TSV9DQVBBQkxFKSB7CiAJCWlmICgocmV0ID0gcGNpX2VuYWJsZV9tc2kobnAtPnBj
aV9kZXYpKSA9PSAwKSB7CiAJCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9FTkFCTEVEOwotCQkJ
aWYgKCghaW50cl90ZXN0ICYmIHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNf
aXJxLCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHx8Ci0JCQkgICAgKGludHJf
dGVzdCAmJiByZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycV90ZXN0LCBJ
UlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpICE9IDApKSB7CisJCQlpZiAoKCFpbnRyX3Rlc3Qg
JiYgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzMgJiYKKwkJCSAgICAgcmVxdWVzdF9pcnEobnAt
PnBjaV9kZXYtPmlycSwgJm52X25pY19pcnFfb3B0aW1pemVkLCBTQV9TSElSUSwgZGV2LT5uYW1l
LCBkZXYpICE9IDApIHx8CisJCQkgICAgKCFpbnRyX3Rlc3QgJiYgbnAtPmRlc2NfdmVyICE9IERF
U0NfVkVSXzMgJiYKKwkJCSAgICAgcmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25p
Y19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgfHwKKwkJCSAgICAoaW50cl90
ZXN0ICYmIHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxX3Rlc3QsIFNB
X1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJm
b3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCQlwY2lfZGlzYWJs
ZV9tc2kobnAtPnBjaV9kZXYpOworCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9FTkFCTEVE
OworCQkJCWdvdG8gb3V0X2VycjsKKwkJCX0KKworCQkJLyogbWFwIGludGVycnVwdHMgdG8gdmVj
dG9yIDAgKi8KKwkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lNYXAwKTsKKwkJCXdyaXRlbCgw
LCBiYXNlICsgTnZSZWdNU0lNYXAxKTsKKwkJCS8qIGVuYWJsZSBtc2kgdmVjdG9yIDAgKi8KKwkJ
CXdyaXRlbChOVlJFR19NU0lfVkVDVE9SXzBfRU5BQkxFRCwgYmFzZSArIE52UmVnTVNJSXJxTWFz
ayk7CisJCX0KKwl9CisjZWxzZQorI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJdTggX19pb21lbSAq
YmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKwlpbnQgaTsKKworCWlmIChucC0+bXNpX2ZsYWdzICYg
TlZfTVNJX1hfQ0FQQUJMRSkgeworCQlmb3IgKGkgPSAwOyBpIDwgKG5wLT5tc2lfZmxhZ3MgJiBO
Vl9NU0lfWF9WRUNUT1JTX01BU0spOyBpKyspIHsKKwkJCW5wLT5tc2lfeF9lbnRyeVtpXS5lbnRy
eSA9IGk7CisJCX0KKwkJaWYgKChyZXQgPSBwY2lfZW5hYmxlX21zaShucC0+cGNpX2RldikpID09
IDApIHsKKwkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hfRU5BQkxFRDsKKwkJCWlmIChvcHRp
bWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUICYmICFpbnRy
X3Rlc3QpIHsKKwkJCQltc2lfYWxsb2NfdmVjdG9ycyhucC0+cGNpX2RldiwoaW50ICopbnAtPm1z
aV94X2VudHJ5LDIpOworCQkJCS8qIFJlcXVlc3QgaXJxIGZvciByeCBoYW5kbGluZyAqLworCQkJ
CWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0
b3IsICZudl9uaWNfaXJxX3J4LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJ
CQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIHJ4
ICVkXG4iLCByZXQpOworCQkJCQlwY2lfZGlzYWJsZV9tc2kobnAtPnBjaV9kZXYpOworCQkJCQlu
cC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOworCQkJCQlnb3RvIG91dF9lcnI7CisJ
CQkJfQorCQkJCS8qIFJlcXVlc3QgaXJxIGZvciB0eCBoYW5kbGluZyAqLworCQkJCWlmIChyZXF1
ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsICZudl9u
aWNfaXJxX3R4LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQkJcHJpbnRr
KEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIHR4ICVkXG4iLCBy
ZXQpOworCQkJCQlwY2lfZGlzYWJsZV9tc2kobnAtPnBjaV9kZXYpOworCQkJCQlucC0+bXNpX2Zs
YWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOworCQkJCQlnb3RvIG91dF9mcmVlX3J4OworCQkJCX0K
KwkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgbGluayBhbmQgdGltZXIgaGFuZGxpbmcgKi8KKwkJCQlp
ZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVj
dG9yLCAmbnZfbmljX2lycV9vdGhlciwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7
CisJCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkIGZv
ciBsaW5rICVkXG4iLCByZXQpOworCQkJCQlwY2lfZGlzYWJsZV9tc2kobnAtPnBjaV9kZXYpOwor
CQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOworCQkJCQlnb3RvIG91dF9m
cmVlX3R4OworCQkJCX0KKwkJCQkvKiBtYXAgaW50ZXJydXB0cyB0byB0aGVpciByZXNwZWN0aXZl
IHZlY3RvciAqLworCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lYTWFwMCk7CisJCQkJd3Jp
dGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAxKTsKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCQkJ
CXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfUlgsIE5WUkVHX0lSUV9S
WF9BTEwpOworCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lfWF9WRUNUT1JfVFgs
IE5WUkVHX0lSUV9UWF9BTEwpOworCQkJCXNldF9tc2l4X3ZlY3Rvcl9tYXAoZGV2LCBOVl9NU0lf
WF9WRUNUT1JfT1RIRVIsIE5WUkVHX0lSUV9PVEhFUik7CisjZW5kaWYKKwkJCX0gZWxzZSB7CisJ
CQkJLyogUmVxdWVzdCBpcnEgZm9yIGFsbCBpbnRlcnJ1cHRzICovCisJCQkJaWYgKCghaW50cl90
ZXN0ICYmIG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8zICYmCisJCQkJICAgICByZXF1ZXN0X2ly
cShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yLCAmbnZfbmljX2ly
cV9vcHRpbWl6ZWQsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgfHwKKwkJCQkgICAg
KCFpbnRyX3Rlc3QgJiYgbnAtPmRlc2NfdmVyICE9IERFU0NfVkVSXzMgJiYKKwkJCQkgICAgIHJl
cXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IsICZu
dl9uaWNfaXJxLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHx8CisJCQkJICAgIChp
bnRyX3Rlc3QgJiYKKwkJCQkgICAgIHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lf
WF9WRUNUT1JfQUxMXS52ZWN0b3IsICZudl9uaWNfaXJxX3Rlc3QsIFNBX1NISVJRLCBkZXYtPm5h
bWUsIGRldikgIT0gMCkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1
ZXN0X2lycSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQkJCXBjaV9kaXNhYmxlX21zaShucC0+cGNp
X2Rldik7CisJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CisJCQkJCWdv
dG8gb3V0X2VycjsKKwkJCQl9CisKKwkJCQkvKiBtYXAgaW50ZXJydXB0cyB0byB2ZWN0b3IgMCAq
LworCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lYTWFwMCk7CisJCQkJd3JpdGVsKDAsIGJh
c2UgKyBOdlJlZ01TSVhNYXAxKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAocmV0ICE9IDAgJiYgbnAt
Pm1zaV9mbGFncyAmIE5WX01TSV9DQVBBQkxFKSB7CisKKwkJaWYgKChyZXQgPSBwY2lfZW5hYmxl
X21zaShucC0+cGNpX2RldikpID09IDApIHsKKwkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX0VO
QUJMRUQ7CisJCQlpZiAoKCFpbnRyX3Rlc3QgJiYgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzMg
JiYKKwkJCSAgICAgcmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnFfb3B0
aW1pemVkLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHx8CisJCQkgICAgKCFpbnRy
X3Rlc3QgJiYgbnAtPmRlc2NfdmVyICE9IERFU0NfVkVSXzMgJiYKKwkJCSAgICAgcmVxdWVzdF9p
cnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRl
dikgIT0gMCkgfHwKKwkJCSAgICAoaW50cl90ZXN0ICYmIHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2
LT5pcnEsICZudl9uaWNfaXJxX3Rlc3QsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkp
IHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCAl
ZFxuIiwgcmV0KTsKIAkJCQlwY2lfZGlzYWJsZV9tc2kobnAtPnBjaV9kZXYpOwogCQkJCW5wLT5t
c2lfZmxhZ3MgJj0gfk5WX01TSV9FTkFCTEVEOwpAQCAtMjcwOCwyNyArMzgyMiw0MyBAQAogCQkJ
d3JpdGVsKE5WUkVHX01TSV9WRUNUT1JfMF9FTkFCTEVELCBiYXNlICsgTnZSZWdNU0lJcnFNYXNr
KTsKIAkJfQogCX0KKyNlbmRpZgorI2VuZGlmCiAJaWYgKHJldCAhPSAwKSB7Ci0JCWlmICgoIWlu
dHJfdGVzdCAmJiByZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycSwgSVJR
Rl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB8fAotCQkgICAgKGludHJfdGVzdCAmJiBy
ZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycV90ZXN0LCBJUlFGX1NIQVJF
RCwgZGV2LT5uYW1lLCBkZXYpICE9IDApKQorCQlpZiAoKCFpbnRyX3Rlc3QgICYmIG5wLT5kZXNj
X3ZlciA9PSBERVNDX1ZFUl8zICYmIAorCQkgICAgIHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5p
cnEsICZudl9uaWNfaXJxX29wdGltaXplZCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAw
KSB8fAorCQkgICAgKCFpbnRyX3Rlc3QgICYmIG5wLT5kZXNjX3ZlciAhPSBERVNDX1ZFUl8zICYm
CisJCSAgICAgcmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnEsIFNBX1NI
SVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgfHwgCisJCSAgICAoaW50cl90ZXN0ICYmIHJlcXVl
c3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxX3Rlc3QsIFNBX1NISVJRLCBkZXYt
Pm5hbWUsIGRldikgIT0gMCkpCiAJCQlnb3RvIG91dF9lcnI7Ci0KKwkJCQogCX0KIAogCXJldHVy
biAwOworCisjaWYgTlZWRVIgPiBTTEVTOQorb3V0X2ZyZWVfdHg6CisJZnJlZV9pcnEobnAtPm1z
aV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yLCBkZXYpOworb3V0X2ZyZWVfcng6
CisJZnJlZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yLCBk
ZXYpOworI2Vsc2UKKyNpZmRlZiBDT05GSUdfUENJX01TSQkKIG91dF9mcmVlX3R4OgogCWZyZWVf
aXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3RvciwgZGV2KTsKIG91
dF9mcmVlX3J4OgogCWZyZWVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhd
LnZlY3RvciwgZGV2KTsKKyNlbmRpZgorI2VuZGlmCiBvdXRfZXJyOgogCXJldHVybiAxOwogfQog
CisjaWYgTlZWRVIgPiBTTEVTOQogc3RhdGljIHZvaWQgbnZfZnJlZV9pcnEoc3RydWN0IG5ldF9k
ZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJ
aW50IGk7Ci0KKwkKIAlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpIHsKIAkJ
Zm9yIChpID0gMDsgaSA8IChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKTsg
aSsrKSB7CiAJCQlmcmVlX2lycShucC0+bXNpX3hfZW50cnlbaV0udmVjdG9yLCBkZXYpOwpAQCAt
Mjc0MywxMSArMzg3MywzOSBAQAogCQl9CiAJfQogfQorI2Vsc2UKK3N0YXRpYyB2b2lkIG52X2Zy
ZWVfaXJxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0g
Z2V0X252cHJpdihkZXYpOworCQorI2lmZGVmIENPTkZJR19QQ0lfTVNJCQkKKwlpbnQgaTsKKwor
CWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgeworCQlmb3IgKGkgPSAwOyBp
IDwgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spOyBpKyspIHsKKwkJCWZy
ZWVfaXJxKG5wLT5tc2lfeF9lbnRyeVtpXS52ZWN0b3IsIGRldik7CisJCX0KKwkJcGNpX2Rpc2Fi
bGVfbXNpKG5wLT5wY2lfZGV2KTsKKwkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxF
RDsKKwl9IGVsc2UgeworCQlmcmVlX2lycShucC0+cGNpX2Rldi0+aXJxLCBkZXYpOworCisJCWlm
IChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX0VOQUJMRUQpIHsKKwkJCXBjaV9kaXNhYmxlX21zaShu
cC0+cGNpX2Rldik7CisJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfRU5BQkxFRDsKKwkJfQor
CX0KKyNlbHNlCisJZnJlZV9pcnEobnAtPnBjaV9kZXYtPmlycSwgZGV2KTsKKyNlbmRpZgorCQor
fQorI2VuZGlmIAogCiBzdGF0aWMgdm9pZCBudl9kb19uaWNfcG9sbCh1bnNpZ25lZCBsb25nIGRh
dGEpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBk
YXRhOwotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZl
X3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdi
YXNlKGRldik7CiAJdTMyIG1hc2sgPSAwOwogCkBAIC0yNzU3LDExNSArMzkxNSwyMDggQEAKIAkg
KiBudl9uaWNfaXJxIGJlY2F1c2UgdGhhdCBtYXkgZGVjaWRlIHRvIGRvIG90aGVyd2lzZQogCSAq
LwogCi0JaWYgKCF1c2luZ19tdWx0aV9pcnFzKGRldikpIHsKLQkJaWYgKG5wLT5tc2lfZmxhZ3Mg
JiBOVl9NU0lfWF9FTkFCTEVEKQotCQkJZGlzYWJsZV9pcnFfbG9ja2RlcChucC0+bXNpX3hfZW50
cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKLQkJZWxzZQotCQkJZGlzYWJsZV9pcnFf
bG9ja2RlcChkZXYtPmlycSk7Ci0JCW1hc2sgPSBucC0+aXJxbWFzazsKLQl9IGVsc2UgewotCQlp
ZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9SWF9BTEwpIHsKLQkJCWRpc2FibGVfaXJx
X2xvY2tkZXAobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yKTsKLQkJ
CW1hc2sgfD0gTlZSRUdfSVJRX1JYX0FMTDsKLQkJfQotCQlpZiAobnAtPm5pY19wb2xsX2lycSAm
IE5WUkVHX0lSUV9UWF9BTEwpIHsKLQkJCWRpc2FibGVfaXJxX2xvY2tkZXAobnAtPm1zaV94X2Vu
dHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yKTsKLQkJCW1hc2sgfD0gTlZSRUdfSVJRX1RY
X0FMTDsKLQkJfQotCQlpZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9PVEhFUikgewot
CQkJZGlzYWJsZV9pcnFfbG9ja2RlcChucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09U
SEVSXS52ZWN0b3IpOwotCQkJbWFzayB8PSBOVlJFR19JUlFfT1RIRVI7CisJaWYgKCF1c2luZ19t
dWx0aV9pcnFzKGRldikpIHsKKwkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVE
KQorCQkJZGlzYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZl
Y3Rvcik7CisJCWVsc2UKKwkJCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwkJbWFzayA9IG5wLT5p
cnFtYXNrOworCX0gZWxzZSB7CisJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZSRUdfSVJRX1JY
X0FMTCkgeworCQkJZGlzYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9S
WF0udmVjdG9yKTsKKwkJCW1hc2sgfD0gTlZSRUdfSVJRX1JYX0FMTDsKKwkJfQorCQlpZiAobnAt
Pm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9UWF9BTEwpIHsKKwkJCWRpc2FibGVfaXJxKG5wLT5t
c2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7CisJCQltYXNrIHw9IE5WUkVH
X0lSUV9UWF9BTEw7CisJCX0KKwkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfT1RI
RVIpIHsKKwkJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RI
RVJdLnZlY3Rvcik7CisJCQltYXNrIHw9IE5WUkVHX0lSUV9PVEhFUjsKKwkJfQorCX0KKwlucC0+
bmljX3BvbGxfaXJxID0gMDsKKworCWlmIChucC0+cmVjb3Zlcl9lcnJvcikgeworCQlucC0+cmVj
b3Zlcl9lcnJvciA9IDA7CisJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogTUFDIGluIHJl
Y292ZXJhYmxlIGVycm9yIHN0YXRlXG4iKTsKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewor
CQkJbmV0aWZfdHhfbG9ja19iaChkZXYpOworCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCQkv
KiBzdG9wIGVuZ2luZXMgKi8KKwkJCW52X3N0b3BfcngoZGV2KTsKKwkJCW52X3N0b3BfdHgoZGV2
KTsKKwkJCW52X3R4cnhfcmVzZXQoZGV2KTsKKwkJCS8qIGRyYWluIHJ4IHF1ZXVlICovCisJCQlu
dl9kcmFpbl9yeChkZXYpOworCQkJbnZfZHJhaW5fdHgoZGV2KTsKKwkJCS8qIHJlaW5pdCBkcml2
ZXIgdmlldyBvZiB0aGUgcnggcXVldWUgKi8KKwkJCXNldF9idWZzaXplKGRldik7CisJCQlpZiAo
bnZfaW5pdF9yaW5nKGRldikpIHsKKwkJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKKwkJCQkJbW9k
X3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKKwkJCX0KKwkJCS8q
IHJlaW5pdCBuaWMgdmlldyBvZiB0aGUgcnggcXVldWUgKi8KKwkJCXdyaXRlbChucC0+cnhfYnVm
X3N6LCBiYXNlICsgTnZSZWdPZmZsb2FkQ29uZmlnKTsKKwkJCXNldHVwX2h3X3JpbmdzKGRldiwg
TlZfU0VUVVBfUlhfUklORyB8IE5WX1NFVFVQX1RYX1JJTkcpOworCQkJd3JpdGVsKCAoKG5wLT5y
eF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1JYU0hJRlQpICsgKChucC0+dHhfcmluZ19z
aXplLTEpIDw8IE5WUkVHX1JJTkdTWl9UWFNISUZUKSwKKwkJCQliYXNlICsgTnZSZWdSaW5nU2l6
ZXMpOworCQkJcGNpX3B1c2goYmFzZSk7CisJCQl3cml0ZWwoTlZSRUdfVFhSWENUTF9LSUNLfG5w
LT50eHJ4Y3RsX2JpdHMsIGdldF9od2Jhc2UoZGV2KSArIE52UmVnVHhSeENvbnRyb2wpOworCQkJ
cGNpX3B1c2goYmFzZSk7CisKKwkJCS8qIHJlc3RhcnQgcnggZW5naW5lICovCisJCQludl9zdGFy
dF9yeChkZXYpOworCQkJbnZfc3RhcnRfdHgoZGV2KTsKKwkJCXNwaW5fdW5sb2NrKCZucC0+bG9j
ayk7CisJCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAkJfQogCX0KLQlucC0+bmljX3BvbGxf
aXJxID0gMDsKLQogCS8qIEZJWE1FOiBEbyB3ZSBuZWVkIHN5bmNocm9uaXplX2lycShkZXYtPmly
cSkgaGVyZT8gKi8KLQorCQogCXdyaXRlbChtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKIAlw
Y2lfcHVzaChiYXNlKTsKIAogCWlmICghdXNpbmdfbXVsdGlfaXJxcyhkZXYpKSB7Ci0JCW52X25p
Y19pcnEoMCwgZGV2LCBOVUxMKTsKKwkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8
IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQorCQludl9uaWNfaXJxKChpbnQpIDAsICh2b2lk
ICopIGRhdGEsIChzdHJ1Y3QgcHRfcmVncyAqKSBOVUxMKTsKKwkJZWxzZQorCQkJbnZfbmljX2ly
cV9vcHRpbWl6ZWQoKGludCkgMCwgKHZvaWQgKikgZGF0YSwgKHN0cnVjdCBwdF9yZWdzICopIE5V
TEwpOwogCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCi0JCQllbmFibGVf
aXJxX2xvY2tkZXAobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3Rvcik7
CisJCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0
b3IpOwogCQllbHNlCi0JCQllbmFibGVfaXJxX2xvY2tkZXAoZGV2LT5pcnEpOworCQkJZW5hYmxl
X2lycShkZXYtPmlycSk7CiAJfSBlbHNlIHsKIAkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJF
R19JUlFfUlhfQUxMKSB7Ci0JCQludl9uaWNfaXJxX3J4KDAsIGRldiwgTlVMTCk7Ci0JCQllbmFi
bGVfaXJxX2xvY2tkZXAobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9y
KTsKKwkJCW52X25pY19pcnFfcngoKGludCkgMCwgKHZvaWQgKikgZGF0YSwgKHN0cnVjdCBwdF9y
ZWdzICopIE5VTEwpOworCQkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVD
VE9SX1JYXS52ZWN0b3IpOwogCQl9CiAJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZSRUdfSVJR
X1RYX0FMTCkgewotCQkJbnZfbmljX2lycV90eCgwLCBkZXYsIE5VTEwpOwotCQkJZW5hYmxlX2ly
cV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7CisJ
CQludl9uaWNfaXJxX3R4KChpbnQpIDAsICh2b2lkICopIGRhdGEsIChzdHJ1Y3QgcHRfcmVncyAq
KSBOVUxMKTsKKwkJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9U
WF0udmVjdG9yKTsKIAkJfQogCQlpZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9PVEhF
UikgewotCQkJbnZfbmljX2lycV9vdGhlcigwLCBkZXYsIE5VTEwpOwotCQkJZW5hYmxlX2lycV9s
b2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3Rvcik7CisJ
CQludl9uaWNfaXJxX290aGVyKChpbnQpIDAsICh2b2lkICopIGRhdGEsIChzdHJ1Y3QgcHRfcmVn
cyAqKSBOVUxMKTsKKwkJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RP
Ul9PVEhFUl0udmVjdG9yKTsKIAkJfQogCX0KIH0KIAorI2lmIE5WVkVSID4gUkhFUzMKICNpZmRl
ZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgbnZfcG9sbF9jb250cm9s
bGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJbnZfZG9fbmljX3BvbGwoKHVuc2lnbmVk
IGxvbmcpIGRldik7CiB9CiAjZW5kaWYKKyNlbHNlCitzdGF0aWMgdm9pZCBudl9wb2xsX2NvbnRy
b2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwludl9kb19uaWNfcG9sbCgodW5zaWdu
ZWQgbG9uZykgZGV2KTsKK30KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBudl9kb19zdGF0c19wb2xs
KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVj
dCBuZXRfZGV2aWNlICopIGRhdGE7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYo
ZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTggX19pb21l
bSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAotCW5wLT5lc3RhdHMudHhfYnl0ZXMgKz0gcmVh
ZGwoYmFzZSArIE52UmVnVHhDbnQpOwotCW5wLT5lc3RhdHMudHhfemVyb19yZXhtdCArPSByZWFk
bChiYXNlICsgTnZSZWdUeFplcm9SZVhtdCk7Ci0JbnAtPmVzdGF0cy50eF9vbmVfcmV4bXQgKz0g
cmVhZGwoYmFzZSArIE52UmVnVHhPbmVSZVhtdCk7Ci0JbnAtPmVzdGF0cy50eF9tYW55X3JleG10
ICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4TWFueVJlWG10KTsKLQlucC0+ZXN0YXRzLnR4X2xhdGVf
Y29sbGlzaW9uICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4TGF0ZUNvbCk7Ci0JbnAtPmVzdGF0cy50
eF9maWZvX2Vycm9ycyArPSByZWFkbChiYXNlICsgTnZSZWdUeFVuZGVyZmxvdyk7Ci0JbnAtPmVz
dGF0cy50eF9jYXJyaWVyX2Vycm9ycyArPSByZWFkbChiYXNlICsgTnZSZWdUeExvc3NDYXJyaWVy
KTsKLQlucC0+ZXN0YXRzLnR4X2V4Y2Vzc19kZWZlcnJhbCArPSByZWFkbChiYXNlICsgTnZSZWdU
eEV4Y2Vzc0RlZik7Ci0JbnAtPmVzdGF0cy50eF9yZXRyeV9lcnJvciArPSByZWFkbChiYXNlICsg
TnZSZWdUeFJldHJ5RXJyKTsKLQlucC0+ZXN0YXRzLnR4X2RlZmVycmFsICs9IHJlYWRsKGJhc2Ug
KyBOdlJlZ1R4RGVmKTsKLQlucC0+ZXN0YXRzLnR4X3BhY2tldHMgKz0gcmVhZGwoYmFzZSArIE52
UmVnVHhGcmFtZSk7Ci0JbnAtPmVzdGF0cy50eF9wYXVzZSArPSByZWFkbChiYXNlICsgTnZSZWdU
eFBhdXNlKTsKLQlucC0+ZXN0YXRzLnJ4X2ZyYW1lX2Vycm9yICs9IHJlYWRsKGJhc2UgKyBOdlJl
Z1J4RnJhbWVFcnIpOwotCW5wLT5lc3RhdHMucnhfZXh0cmFfYnl0ZSArPSByZWFkbChiYXNlICsg
TnZSZWdSeEV4dHJhQnl0ZSk7Ci0JbnAtPmVzdGF0cy5yeF9sYXRlX2NvbGxpc2lvbiArPSByZWFk
bChiYXNlICsgTnZSZWdSeExhdGVDb2wpOwotCW5wLT5lc3RhdHMucnhfcnVudCArPSByZWFkbChi
YXNlICsgTnZSZWdSeFJ1bnQpOwotCW5wLT5lc3RhdHMucnhfZnJhbWVfdG9vX2xvbmcgKz0gcmVh
ZGwoYmFzZSArIE52UmVnUnhGcmFtZVRvb0xvbmcpOwotCW5wLT5lc3RhdHMucnhfb3Zlcl9lcnJv
cnMgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhPdmVyZmxvdyk7Ci0JbnAtPmVzdGF0cy5yeF9jcmNf
ZXJyb3JzICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4RkNTRXJyKTsKLQlucC0+ZXN0YXRzLnJ4X2Zy
YW1lX2FsaWduX2Vycm9yICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4RnJhbWVBbGlnbkVycik7Ci0J
bnAtPmVzdGF0cy5yeF9sZW5ndGhfZXJyb3IgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhMZW5FcnIp
OwotCW5wLT5lc3RhdHMucnhfdW5pY2FzdCArPSByZWFkbChiYXNlICsgTnZSZWdSeFVuaWNhc3Qp
OwotCW5wLT5lc3RhdHMucnhfbXVsdGljYXN0ICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4TXVsdGlj
YXN0KTsKLQlucC0+ZXN0YXRzLnJ4X2Jyb2FkY2FzdCArPSByZWFkbChiYXNlICsgTnZSZWdSeEJy
b2FkY2FzdCk7Ci0JbnAtPmVzdGF0cy5yeF9ieXRlcyArPSByZWFkbChiYXNlICsgTnZSZWdSeENu
dCk7Ci0JbnAtPmVzdGF0cy5yeF9wYXVzZSArPSByZWFkbChiYXNlICsgTnZSZWdSeFBhdXNlKTsK
LQlucC0+ZXN0YXRzLnJ4X2Ryb3BfZnJhbWUgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhEcm9wRnJh
bWUpOwotCW5wLT5lc3RhdHMucnhfcGFja2V0cyA9Ci0JCW5wLT5lc3RhdHMucnhfdW5pY2FzdCAr
Ci0JCW5wLT5lc3RhdHMucnhfbXVsdGljYXN0ICsKLQkJbnAtPmVzdGF0cy5yeF9icm9hZGNhc3Q7
Ci0JbnAtPmVzdGF0cy5yeF9lcnJvcnNfdG90YWwgPQotCQlucC0+ZXN0YXRzLnJ4X2NyY19lcnJv
cnMgKwotCQlucC0+ZXN0YXRzLnJ4X292ZXJfZXJyb3JzICsKLQkJbnAtPmVzdGF0cy5yeF9mcmFt
ZV9lcnJvciArCi0JCShucC0+ZXN0YXRzLnJ4X2ZyYW1lX2FsaWduX2Vycm9yIC0gbnAtPmVzdGF0
cy5yeF9leHRyYV9ieXRlKSArCi0JCW5wLT5lc3RhdHMucnhfbGF0ZV9jb2xsaXNpb24gKwotCQlu
cC0+ZXN0YXRzLnJ4X3J1bnQgKwotCQlucC0+ZXN0YXRzLnJ4X2ZyYW1lX3Rvb19sb25nOworCXNw
aW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKwkKKwlucC0+ZXN0YXRzLnR4X2Ryb3BwZWQgPSBucC0+
c3RhdHMudHhfZHJvcHBlZDsKKwlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19TVEFUSVNU
SUNTKSB7CisJCW5wLT5lc3RhdHMudHhfcGFja2V0cyArPSByZWFkbChiYXNlICsgTnZSZWdUeEZy
YW1lKTsKKwkJbnAtPmVzdGF0cy50eF9maWZvX2Vycm9ycyArPSByZWFkbChiYXNlICsgTnZSZWdU
eFVuZGVyZmxvdyk7CisJCW5wLT5lc3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gcmVhZGwoYmFz
ZSArIE52UmVnVHhMb3NzQ2Fycmllcik7CisJCW5wLT5lc3RhdHMudHhfYnl0ZXMgKz0gcmVhZGwo
YmFzZSArIE52UmVnVHhDbnQpOworCQlucC0+ZXN0YXRzLnJ4X2J5dGVzICs9IHJlYWRsKGJhc2Ug
KyBOdlJlZ1J4Q250KTsKKwkJbnAtPmVzdGF0cy5yeF9jcmNfZXJyb3JzICs9IHJlYWRsKGJhc2Ug
KyBOdlJlZ1J4RkNTRXJyKTsKKwkJbnAtPmVzdGF0cy5yeF9vdmVyX2Vycm9ycyArPSByZWFkbChi
YXNlICsgTnZSZWdSeE92ZXJmbG93KTsKKworCQlucC0+ZXN0YXRzLnR4X3plcm9fcmV4bXQgKz0g
cmVhZGwoYmFzZSArIE52UmVnVHhaZXJvUmVYbXQpOworCQlucC0+ZXN0YXRzLnR4X29uZV9yZXht
dCArPSByZWFkbChiYXNlICsgTnZSZWdUeE9uZVJlWG10KTsKKwkJbnAtPmVzdGF0cy50eF9tYW55
X3JleG10ICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4TWFueVJlWG10KTsKKwkJbnAtPmVzdGF0cy50
eF9sYXRlX2NvbGxpc2lvbiArPSByZWFkbChiYXNlICsgTnZSZWdUeExhdGVDb2wpOworCQlucC0+
ZXN0YXRzLnR4X2V4Y2Vzc19kZWZlcnJhbCArPSByZWFkbChiYXNlICsgTnZSZWdUeEV4Y2Vzc0Rl
Zik7CisJCW5wLT5lc3RhdHMudHhfcmV0cnlfZXJyb3IgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhS
ZXRyeUVycik7CisJCW5wLT5lc3RhdHMucnhfZnJhbWVfZXJyb3IgKz0gcmVhZGwoYmFzZSArIE52
UmVnUnhGcmFtZUVycik7CisJCW5wLT5lc3RhdHMucnhfZXh0cmFfYnl0ZSArPSByZWFkbChiYXNl
ICsgTnZSZWdSeEV4dHJhQnl0ZSk7CisJCW5wLT5lc3RhdHMucnhfbGF0ZV9jb2xsaXNpb24gKz0g
cmVhZGwoYmFzZSArIE52UmVnUnhMYXRlQ29sKTsKKwkJbnAtPmVzdGF0cy5yeF9ydW50ICs9IHJl
YWRsKGJhc2UgKyBOdlJlZ1J4UnVudCk7CisJCW5wLT5lc3RhdHMucnhfZnJhbWVfdG9vX2xvbmcg
Kz0gcmVhZGwoYmFzZSArIE52UmVnUnhGcmFtZVRvb0xvbmcpOworCQlucC0+ZXN0YXRzLnJ4X2Zy
YW1lX2FsaWduX2Vycm9yICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4RnJhbWVBbGlnbkVycik7CisJ
CW5wLT5lc3RhdHMucnhfbGVuZ3RoX2Vycm9yICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4TGVuRXJy
KTsKKwkJbnAtPmVzdGF0cy5yeF91bmljYXN0ICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4VW5pY2Fz
dCk7CisJCW5wLT5lc3RhdHMucnhfbXVsdGljYXN0ICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4TXVs
dGljYXN0KTsKKwkJbnAtPmVzdGF0cy5yeF9icm9hZGNhc3QgKz0gcmVhZGwoYmFzZSArIE52UmVn
UnhCcm9hZGNhc3QpOworCQlucC0+ZXN0YXRzLnR4X2RlZmVycmFsICs9IHJlYWRsKGJhc2UgKyBO
dlJlZ1R4RGVmKTsKKwkJbnAtPmVzdGF0cy50eF9wYXVzZSArPSByZWFkbChiYXNlICsgTnZSZWdU
eFBhdXNlKTsKKwkJbnAtPmVzdGF0cy5yeF9wYXVzZSArPSByZWFkbChiYXNlICsgTnZSZWdSeFBh
dXNlKTsKKwkJbnAtPmVzdGF0cy5yeF9kcm9wX2ZyYW1lICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4
RHJvcEZyYW1lKTsKKwkJbnAtPmVzdGF0cy5yeF9wYWNrZXRzID0gCisJCQlucC0+ZXN0YXRzLnJ4
X3VuaWNhc3QgKyAKKwkJCW5wLT5lc3RhdHMucnhfbXVsdGljYXN0ICsgCisJCQlucC0+ZXN0YXRz
LnJ4X2Jyb2FkY2FzdDsKKwkJbnAtPmVzdGF0cy5yeF9lcnJvcnNfdG90YWwgPSAKKwkJCW5wLT5l
c3RhdHMucnhfY3JjX2Vycm9ycyArCisJCQlucC0+ZXN0YXRzLnJ4X292ZXJfZXJyb3JzICsKKwkJ
CW5wLT5lc3RhdHMucnhfZnJhbWVfZXJyb3IgKworCQkJKG5wLT5lc3RhdHMucnhfZnJhbWVfYWxp
Z25fZXJyb3IgLSBucC0+ZXN0YXRzLnJ4X2V4dHJhX2J5dGUpICsKKwkJCW5wLT5lc3RhdHMucnhf
bGF0ZV9jb2xsaXNpb24gKworCQkJbnAtPmVzdGF0cy5yeF9ydW50ICsKKwkJCW5wLT5lc3RhdHMu
cnhfZnJhbWVfdG9vX2xvbmcgKworCQkJbnAtPnJ4X2xlbl9lcnJvcnM7CisKKwkJLyogY29weSB0
byBuZXRfZGV2aWNlIHN0YXRzICovCisJCW5wLT5zdGF0cy50eF9wYWNrZXRzID0gbnAtPmVzdGF0
cy50eF9wYWNrZXRzOworCQlucC0+c3RhdHMudHhfZmlmb19lcnJvcnMgPSBucC0+ZXN0YXRzLnR4
X2ZpZm9fZXJyb3JzOworCQlucC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgPSBucC0+ZXN0YXRz
LnR4X2NhcnJpZXJfZXJyb3JzOworCQlucC0+c3RhdHMudHhfYnl0ZXMgPSBucC0+ZXN0YXRzLnR4
X2J5dGVzOworCQlucC0+c3RhdHMucnhfYnl0ZXMgPSBucC0+ZXN0YXRzLnJ4X2J5dGVzOworCQlu
cC0+c3RhdHMucnhfY3JjX2Vycm9ycyA9IG5wLT5lc3RhdHMucnhfY3JjX2Vycm9yczsKKwkJbnAt
PnN0YXRzLnJ4X292ZXJfZXJyb3JzID0gbnAtPmVzdGF0cy5yeF9vdmVyX2Vycm9yczsKKwkJbnAt
PnN0YXRzLnJ4X3BhY2tldHMgPSBucC0+ZXN0YXRzLnJ4X3BhY2tldHM7CisJCW5wLT5zdGF0cy5y
eF9lcnJvcnMgPSBucC0+ZXN0YXRzLnJ4X2Vycm9yc190b3RhbDsKKwkJCisJfSBlbHNlIHsKKwkJ
bnAtPmVzdGF0cy50eF9wYWNrZXRzID0gbnAtPnN0YXRzLnR4X3BhY2tldHM7CisJCW5wLT5lc3Rh
dHMudHhfZmlmb19lcnJvcnMgPSBucC0+c3RhdHMudHhfZmlmb19lcnJvcnM7CisJCW5wLT5lc3Rh
dHMudHhfY2Fycmllcl9lcnJvcnMgPSBucC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnM7CisJCW5w
LT5lc3RhdHMudHhfYnl0ZXMgPSBucC0+c3RhdHMudHhfYnl0ZXM7CisJCW5wLT5lc3RhdHMucnhf
Ynl0ZXMgPSBucC0+c3RhdHMucnhfYnl0ZXM7CisJCW5wLT5lc3RhdHMucnhfY3JjX2Vycm9ycyA9
IG5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzOworCQlucC0+ZXN0YXRzLnJ4X292ZXJfZXJyb3JzID0g
bnAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzOworCQlucC0+ZXN0YXRzLnJ4X3BhY2tldHMgPSBucC0+
c3RhdHMucnhfcGFja2V0czsKKwkJbnAtPmVzdGF0cy5yeF9lcnJvcnNfdG90YWwgPSBucC0+c3Rh
dHMucnhfZXJyb3JzOworCX0KIAotCWlmICghbnAtPmluX3NodXRkb3duKQorCWlmICghbnAtPmlu
X3NodXRkb3duICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJbW9kX3RpbWVyKCZucC0+c3RhdHNf
cG9sbCwgamlmZmllcyArIFNUQVRTX0lOVEVSVkFMKTsKKwlzcGluX3VubG9ja19pcnEoJm5wLT5s
b2NrKTsKK30KKworLyoKKyAqIG52X2dldF9zdGF0czogZGV2LT5nZXRfc3RhdHMgZnVuY3Rpb24K
KyAqIEdldCBsYXRlc3Qgc3RhdHMgdmFsdWUgZnJvbSB0aGUgbmljLgorICogQ2FsbGVkIHdpdGgg
cmVhZF9sb2NrKCZkZXZfYmFzZV9sb2NrKSBoZWxkIGZvciByZWFkIC0KKyAqIG9ubHkgc3luY2hy
b25pemVkIGFnYWluc3QgdW5yZWdpc3Rlcl9uZXRkZXZpY2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qg
bmV0X2RldmljZV9zdGF0cyAqbnZfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7
CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCisJLyogSXQgc2VlbXMg
dGhhdCB0aGUgbmljIGFsd2F5cyBnZW5lcmF0ZXMgaW50ZXJydXB0cyBhbmQgZG9lc24ndAorCSAq
IGFjY3VtdWxhdGUgZXJyb3JzIGludGVybmFsbHkuIFRodXMgdGhlIGN1cnJlbnQgdmFsdWVzIGlu
IG5wLT5zdGF0cworCSAqIGFyZSBhbHJlYWR5IHVwIHRvIGRhdGUuCisJICovCisJbnZfZG9fc3Rh
dHNfcG9sbCgodW5zaWduZWQgbG9uZylkZXYpOworCXJldHVybiAmbnAtPnN0YXRzOwogfQogCiBz
dGF0aWMgdm9pZCBudl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qg
ZXRodG9vbF9kcnZpbmZvICppbmZvKQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9w
cml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCXN0cmNw
eShpbmZvLT5kcml2ZXIsICJmb3JjZWRldGgiKTsKIAlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRk9S
Q0VERVRIX1ZFUlNJT04pOwogCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUobnAtPnBj
aV9kZXYpKTsKQEAgLTI4NzMsNyArNDEyNCw3IEBACiAKIHN0YXRpYyB2b2lkIG52X2dldF93b2wo
c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29saW5mbykK
IHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9w
cml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAl3b2xpbmZvLT5zdXBwb3J0ZWQgPSBXQUtFX01B
R0lDOwogCiAJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwpAQCAtMjg4NCw3ICs0MTM1LDcgQEAK
IAogc3RhdGljIGludCBudl9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBl
dGh0b29sX3dvbGluZm8gKndvbGluZm8pCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2
X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTgg
X19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAl1MzIgZmxhZ3MgPSAwOwogCkBAIC0y
OTA0LDcgKzQxNTUsNyBAQAogCiBzdGF0aWMgaW50IG52X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0
X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7Ci0Jc3RydWN0IGZlX3By
aXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZw
cml2KGRldik7CiAJaW50IGFkdjsKIAogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKQEAgLTI5
NzgsOCArNDIyOSw5IEBACiAKIHN0YXRpYyBpbnQgbnZfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRf
ZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKIHsKLQlzdHJ1Y3QgZmVfcHJp
diAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnBy
aXYoZGV2KTsKIAorCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3NldF9zZXR0aW5ncyBcbiIs
IGRldi0+bmFtZSk7CiAJaWYgKGVjbWQtPnBvcnQgIT0gUE9SVF9NSUkpCiAJCXJldHVybiAtRUlO
VkFMOwogCWlmIChlY21kLT50cmFuc2NlaXZlciAhPSBYQ1ZSX0VYVEVSTkFMKQpAQCAtMzA1Nyw5
ICs0MzA5LDE4IEBACiAJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiAJCQlwcmludGsoS0VSTl9J
TkZPICIlczogbGluayBkb3duLlxuIiwgZGV2LT5uYW1lKTsKIAkJYm1jciA9IG1paV9ydyhkZXYs
IG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgTUlJX1JFQUQpOworCQlpZiAobnAtPnBoeV9tb2RlbCA9
PSBQSFlfTU9ERUxfTUFSVkVMTF9FMzAxNikgeworCQkJYm1jciB8PSBCTUNSX0FORU5BQkxFOwor
CQkJLyogcmVzZXQgdGhlIHBoeSBpbiBvcmRlciBmb3Igc2V0dGluZ3MgdG8gc3RpY2ssCisJCQkg
KiBhbmQgY2F1c2UgYXV0b25lZyB0byBzdGFydCAqLworCQkJaWYgKHBoeV9yZXNldChkZXYsIGJt
Y3IpKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSByZXNldCBmYWlsZWRcbiIsIGRl
di0+bmFtZSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0gZWxzZSB7CiAJCWJtY3Ig
fD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CiAJCW1paV9ydyhkZXYsIG5wLT5w
aHlhZGRyLCBNSUlfQk1DUiwgYm1jcik7Ci0KKwkJfQogCX0gZWxzZSB7CiAJCWludCBhZHYsIGJt
Y3I7CiAKQEAgLTMwOTksMTcgKzQzNjAsMTkgQEAKIAkJCWJtY3IgfD0gQk1DUl9GVUxMRFBMWDsK
IAkJaWYgKG5wLT5maXhlZF9tb2RlICYgKEFEVkVSVElTRV8xMDBIQUxGfEFEVkVSVElTRV8xMDBG
VUxMKSkKIAkJCWJtY3IgfD0gQk1DUl9TUEVFRDEwMDsKLQkJbWlpX3J3KGRldiwgbnAtPnBoeWFk
ZHIsIE1JSV9CTUNSLCBibWNyKTsKIAkJaWYgKG5wLT5waHlfb3VpID09IFBIWV9PVUlfTUFSVkVM
TCkgewotCQkJLyogcmVzZXQgdGhlIHBoeSAqLwotCQkJaWYgKHBoeV9yZXNldChkZXYpKSB7CisJ
CQkvKiByZXNldCB0aGUgcGh5IGluIG9yZGVyIGZvciBmb3JjZWQgbW9kZSBzZXR0aW5ncyB0byBz
dGljayAqLworCQkJaWYgKHBoeV9yZXNldChkZXYsIGJtY3IpKSB7CiAJCQkJcHJpbnRrKEtFUk5f
SU5GTyAiJXM6IHBoeSByZXNldCBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CiAJCQkJcmV0dXJuIC1F
SU5WQUw7CiAJCQl9Ci0JCX0gZWxzZSBpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCQkvKiBX
YWl0IGEgYml0IGFuZCB0aGVuIHJlY29uZmlndXJlIHRoZSBuaWMuICovCi0JCQl1ZGVsYXkoMTAp
OwotCQkJbnZfbGlua2NoYW5nZShkZXYpOworCQl9IGVsc2UgeworCQkJbWlpX3J3KGRldiwgbnAt
PnBoeWFkZHIsIE1JSV9CTUNSLCBibWNyKTsKKwkJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsK
KwkJCQkvKiBXYWl0IGEgYml0IGFuZCB0aGVuIHJlY29uZmlndXJlIHRoZSBuaWMuICovCisJCQkJ
dWRlbGF5KDEwKTsKKwkJCQludl9saW5rY2hhbmdlKGRldik7CisJCQl9CiAJCX0KIAl9CiAKQEAg
LTMxMjYsMTMgKzQzODksMTMgQEAKIAogc3RhdGljIGludCBudl9nZXRfcmVnc19sZW4oc3RydWN0
IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihk
ZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAlyZXR1cm4gbnAt
PnJlZ2lzdGVyX3NpemU7CiB9CiAKIHN0YXRpYyB2b2lkIG52X2dldF9yZWdzKHN0cnVjdCBuZXRf
ZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKmJ1ZikKIHsKLQlz
dHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpu
cCA9IGdldF9udnByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYp
OwogCXUzMiAqcmJ1ZiA9IGJ1ZjsKIAlpbnQgaTsKQEAgLTMxNDYsNyArNDQwOSw3IEBACiAKIHN0
YXRpYyBpbnQgbnZfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVj
dCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0g
Z2V0X252cHJpdihkZXYpOwogCWludCByZXQ7CiAKIAlpZiAobnAtPmF1dG9uZWcpIHsKQEAgLTMx
NjYsOCArNDQyOSwxNyBAQAogCQl9CiAKIAkJYm1jciA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRy
LCBNSUlfQk1DUiwgTUlJX1JFQUQpOwotCQlibWNyIHw9IChCTUNSX0FORU5BQkxFIHwgQk1DUl9B
TlJFU1RBUlQpOwotCQltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIGJtY3IpOwor
CQlpZiAobnAtPnBoeV9tb2RlbCA9PSBQSFlfTU9ERUxfTUFSVkVMTF9FMzAxNikgeworCQkJYm1j
ciB8PSBCTUNSX0FORU5BQkxFOworCQkJLyogcmVzZXQgdGhlIHBoeSBpbiBvcmRlciBmb3Igc2V0
dGluZ3MgdG8gc3RpY2sqLworCQkJaWYgKHBoeV9yZXNldChkZXYsIGJtY3IpKSB7CisJCQkJcHJp
bnRrKEtFUk5fSU5GTyAiJXM6IHBoeSByZXNldCBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CisJCQkJ
cmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlibWNyIHw9IChCTUNSX0FORU5B
QkxFIHwgQk1DUl9BTlJFU1RBUlQpOworCQkJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9C
TUNSLCBibWNyKTsKKwkJfQogCiAJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJCW52X3N0
YXJ0X3J4KGRldik7CkBAIC0zMTgyLDE5ICs0NDU0LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1z
dGF0aWMgaW50IG52X3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQot
ewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoKG5wLT5k
cml2ZXJfZGF0YSAmIERFVl9IQVNfQ0hFQ0tTVU0pKQotCQlyZXR1cm4gZXRodG9vbF9vcF9zZXRf
dHNvKGRldiwgdmFsdWUpOwotCWVsc2UKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCiBzdGF0
aWMgdm9pZCBudl9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBl
dGh0b29sX3JpbmdwYXJhbSogcmluZykKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZf
cHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAogCXJp
bmctPnJ4X21heF9wZW5kaW5nID0gKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xKSA/IFJJTkdf
TUFYX0RFU0NfVkVSXzEgOiBSSU5HX01BWF9ERVNDX1ZFUl8yXzM7CiAJcmluZy0+cnhfbWluaV9t
YXhfcGVuZGluZyA9IDA7CkBAIC0zMjA5LDIwICs0NDcxLDIwIEBACiAKIHN0YXRpYyBpbnQgbnZf
c2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5n
cGFyYW0qIHJpbmcpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsK
KwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTggX19pb21lbSAqYmFz
ZSA9IGdldF9od2Jhc2UoZGV2KTsKLQl1OCAqcnh0eF9yaW5nLCAqcnhfc2tidWZmLCAqdHhfc2ti
dWZmLCAqcnhfZG1hLCAqdHhfZG1hLCAqdHhfZG1hX2xlbjsKKwl1OCAqcnh0eF9yaW5nLCAqcnhf
c2tidWZmLCAqdHhfc2tidWZmOwogCWRtYV9hZGRyX3QgcmluZ19hZGRyOwogCiAJaWYgKHJpbmct
PnJ4X3BlbmRpbmcgPCBSWF9SSU5HX01JTiB8fAogCSAgICByaW5nLT50eF9wZW5kaW5nIDwgVFhf
UklOR19NSU4gfHwKIAkgICAgcmluZy0+cnhfbWluaV9wZW5kaW5nICE9IDAgfHwKIAkgICAgcmlu
Zy0+cnhfanVtYm9fcGVuZGluZyAhPSAwIHx8Ci0JICAgIChucC0+ZGVzY192ZXIgPT0gREVTQ19W
RVJfMSAmJgotCSAgICAgKHJpbmctPnJ4X3BlbmRpbmcgPiBSSU5HX01BWF9ERVNDX1ZFUl8xIHx8
CisJICAgIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSAmJiAKKwkgICAgIChyaW5nLT5yeF9w
ZW5kaW5nID4gUklOR19NQVhfREVTQ19WRVJfMSB8fCAKIAkgICAgICByaW5nLT50eF9wZW5kaW5n
ID4gUklOR19NQVhfREVTQ19WRVJfMSkpIHx8Ci0JICAgIChucC0+ZGVzY192ZXIgIT0gREVTQ19W
RVJfMSAmJgotCSAgICAgKHJpbmctPnJ4X3BlbmRpbmcgPiBSSU5HX01BWF9ERVNDX1ZFUl8yXzMg
fHwKKwkgICAgKG5wLT5kZXNjX3ZlciAhPSBERVNDX1ZFUl8xICYmIAorCSAgICAgKHJpbmctPnJ4
X3BlbmRpbmcgPiBSSU5HX01BWF9ERVNDX1ZFUl8yXzMgfHwgCiAJICAgICAgcmluZy0+dHhfcGVu
ZGluZyA+IFJJTkdfTUFYX0RFU0NfVkVSXzJfMykpKSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0K
QEAgLTMyMzcsMTIgKzQ0OTksMTAgQEAKIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcmluZ19kZXNj
X2V4KSAqIChyaW5nLT5yeF9wZW5kaW5nICsgcmluZy0+dHhfcGVuZGluZyksCiAJCQkJCSAgICAm
cmluZ19hZGRyKTsKIAl9Ci0Jcnhfc2tidWZmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1
ZmYqKSAqIHJpbmctPnJ4X3BlbmRpbmcsIEdGUF9LRVJORUwpOwotCXJ4X2RtYSA9IGttYWxsb2Mo
c2l6ZW9mKGRtYV9hZGRyX3QpICogcmluZy0+cnhfcGVuZGluZywgR0ZQX0tFUk5FTCk7Ci0JdHhf
c2tidWZmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYqKSAqIHJpbmctPnR4X3BlbmRp
bmcsIEdGUF9LRVJORUwpOwotCXR4X2RtYSA9IGttYWxsb2Moc2l6ZW9mKGRtYV9hZGRyX3QpICog
cmluZy0+dHhfcGVuZGluZywgR0ZQX0tFUk5FTCk7Ci0JdHhfZG1hX2xlbiA9IGttYWxsb2Moc2l6
ZW9mKHVuc2lnbmVkIGludCkgKiByaW5nLT50eF9wZW5kaW5nLCBHRlBfS0VSTkVMKTsKLQlpZiAo
IXJ4dHhfcmluZyB8fCAhcnhfc2tidWZmIHx8ICFyeF9kbWEgfHwgIXR4X3NrYnVmZiB8fCAhdHhf
ZG1hIHx8ICF0eF9kbWFfbGVuKSB7CisJcnhfc2tidWZmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0
IG52X3NrYl9tYXApICogcmluZy0+cnhfcGVuZGluZywgR0ZQX0tFUk5FTCk7CisJdHhfc2tidWZm
ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG52X3NrYl9tYXApICogcmluZy0+dHhfcGVuZGluZywg
R0ZQX0tFUk5FTCk7CisKKwlpZiAoIXJ4dHhfcmluZyB8fCAhcnhfc2tidWZmIHx8ICF0eF9za2J1
ZmYpIHsKIAkJLyogZmFsbCBiYWNrIHRvIG9sZCByaW5ncyAqLwogCQlpZiAobnAtPmRlc2NfdmVy
ID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKIAkJCWlmKHJ4
dHhfcmluZykKQEAgLTMyNTUsMTQgKzQ1MTUsOCBAQAogCQl9CiAJCWlmIChyeF9za2J1ZmYpCiAJ
CQlrZnJlZShyeF9za2J1ZmYpOwotCQlpZiAocnhfZG1hKQotCQkJa2ZyZWUocnhfZG1hKTsKIAkJ
aWYgKHR4X3NrYnVmZikKIAkJCWtmcmVlKHR4X3NrYnVmZik7Ci0JCWlmICh0eF9kbWEpCi0JCQlr
ZnJlZSh0eF9kbWEpOwotCQlpZiAodHhfZG1hX2xlbikKLQkJCWtmcmVlKHR4X2RtYV9sZW4pOwog
CQlnb3RvIGV4aXQ7CiAJfQogCkBAIC0zMjgwLDEyICs0NTM0LDEyIEBACiAJCS8qIGRlbGV0ZSBx
dWV1ZXMgKi8KIAkJZnJlZV9yaW5ncyhkZXYpOwogCX0KLQorCQogCS8qIHNldCBuZXcgdmFsdWVz
ICovCiAJbnAtPnJ4X3Jpbmdfc2l6ZSA9IHJpbmctPnJ4X3BlbmRpbmc7CiAJbnAtPnR4X3Jpbmdf
c2l6ZSA9IHJpbmctPnR4X3BlbmRpbmc7Ci0JbnAtPnR4X2xpbWl0X3N0b3AgPSByaW5nLT50eF9w
ZW5kaW5nIC0gVFhfTElNSVRfRElGRkVSRU5DRTsKLQlucC0+dHhfbGltaXRfc3RhcnQgPSByaW5n
LT50eF9wZW5kaW5nIC0gVFhfTElNSVRfRElGRkVSRU5DRSAtIDE7CisJbnAtPnR4X2xpbWl0X3N0
b3AgPW5wLT50eF9yaW5nX3NpemUgLSBUWF9MSU1JVF9ESUZGRVJFTkNFOworCW5wLT50eF9saW1p
dF9zdGFydCA9bnAtPnR4X3Jpbmdfc2l6ZSAtIFRYX0xJTUlUX0RJRkZFUkVOQ0UgLSAxOwogCWlm
IChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJf
MikgewogCQlucC0+cnhfcmluZy5vcmlnID0gKHN0cnVjdCByaW5nX2Rlc2MqKXJ4dHhfcmluZzsK
IAkJbnAtPnR4X3Jpbmcub3JpZyA9ICZucC0+cnhfcmluZy5vcmlnW25wLT5yeF9yaW5nX3NpemVd
OwpAQCAtMzI5MywxOCArNDU0NywxMiBAQAogCQlucC0+cnhfcmluZy5leCA9IChzdHJ1Y3Qgcmlu
Z19kZXNjX2V4KilyeHR4X3Jpbmc7CiAJCW5wLT50eF9yaW5nLmV4ID0gJm5wLT5yeF9yaW5nLmV4
W25wLT5yeF9yaW5nX3NpemVdOwogCX0KLQlucC0+cnhfc2tidWZmID0gKHN0cnVjdCBza19idWZm
Kiopcnhfc2tidWZmOwotCW5wLT5yeF9kbWEgPSAoZG1hX2FkZHJfdCopcnhfZG1hOwotCW5wLT50
eF9za2J1ZmYgPSAoc3RydWN0IHNrX2J1ZmYqKil0eF9za2J1ZmY7Ci0JbnAtPnR4X2RtYSA9IChk
bWFfYWRkcl90Kil0eF9kbWE7Ci0JbnAtPnR4X2RtYV9sZW4gPSAodW5zaWduZWQgaW50Kil0eF9k
bWFfbGVuOworCW5wLT5yeF9za2IgPSAoc3RydWN0IG52X3NrYl9tYXAqKXJ4X3NrYnVmZjsKKwlu
cC0+dHhfc2tiID0gKHN0cnVjdCBudl9za2JfbWFwKil0eF9za2J1ZmY7CiAJbnAtPnJpbmdfYWRk
ciA9IHJpbmdfYWRkcjsKLQotCW1lbXNldChucC0+cnhfc2tidWZmLCAwLCBzaXplb2Yoc3RydWN0
IHNrX2J1ZmYqKSAqIG5wLT5yeF9yaW5nX3NpemUpOwotCW1lbXNldChucC0+cnhfZG1hLCAwLCBz
aXplb2YoZG1hX2FkZHJfdCkgKiBucC0+cnhfcmluZ19zaXplKTsKLQltZW1zZXQobnAtPnR4X3Nr
YnVmZiwgMCwgc2l6ZW9mKHN0cnVjdCBza19idWZmKikgKiBucC0+dHhfcmluZ19zaXplKTsKLQlt
ZW1zZXQobnAtPnR4X2RtYSwgMCwgc2l6ZW9mKGRtYV9hZGRyX3QpICogbnAtPnR4X3Jpbmdfc2l6
ZSk7Ci0JbWVtc2V0KG5wLT50eF9kbWFfbGVuLCAwLCBzaXplb2YodW5zaWduZWQgaW50KSAqIG5w
LT50eF9yaW5nX3NpemUpOworCQorCW1lbXNldChucC0+cnhfc2tiLCAwLCBzaXplb2Yoc3RydWN0
IG52X3NrYl9tYXApICogbnAtPnJ4X3Jpbmdfc2l6ZSk7CisJbWVtc2V0KG5wLT50eF9za2IsIDAs
IHNpemVvZihzdHJ1Y3QgbnZfc2tiX21hcCkgKiBucC0+dHhfcmluZ19zaXplKTsKIAogCWlmIChu
ZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJLyogcmVpbml0IGRyaXZlciB2aWV3IG9mIHRoZSBxdWV1
ZXMgKi8KQEAgLTMzMTMsNyArNDU2MSw3IEBACiAJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKIAkJ
CQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwogCQl9Ci0K
KwkJCiAJCS8qIHJlaW5pdCBuaWMgdmlldyBvZiB0aGUgcXVldWVzICovCiAJCXdyaXRlbChucC0+
cnhfYnVmX3N6LCBiYXNlICsgTnZSZWdPZmZsb2FkQ29uZmlnKTsKIAkJc2V0dXBfaHdfcmluZ3Mo
ZGV2LCBOVl9TRVRVUF9SWF9SSU5HIHwgTlZfU0VUVVBfVFhfUklORyk7CkBAIC0zMzIyLDcgKzQ1
NzAsNyBAQAogCQlwY2lfcHVzaChiYXNlKTsKIAkJd3JpdGVsKE5WUkVHX1RYUlhDVExfS0lDS3xu
cC0+dHhyeGN0bF9iaXRzLCBnZXRfaHdiYXNlKGRldikgKyBOdlJlZ1R4UnhDb250cm9sKTsKIAkJ
cGNpX3B1c2goYmFzZSk7Ci0KKwkJCiAJCS8qIHJlc3RhcnQgZW5naW5lcyAqLwogCQludl9zdGFy
dF9yeChkZXYpOwogCQludl9zdGFydF90eChkZXYpOwpAQCAtMzMzNyw3ICs0NTg1LDcgQEAKIAog
c3RhdGljIHZvaWQgbnZfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3Ry
dWN0IGV0aHRvb2xfcGF1c2VwYXJhbSogcGF1c2UpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0g
bmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7
CiAKIAlwYXVzZS0+YXV0b25lZyA9IChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX0FV
VE9ORUcpICE9IDA7CiAJcGF1c2UtPnJ4X3BhdXNlID0gKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BB
VVNFRlJBTUVfUlhfRU5BQkxFKSAhPSAwOwpAQCAtMzM0NiwxMiArNDU5NCwxMiBAQAogCiBzdGF0
aWMgaW50IG52X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBl
dGh0b29sX3BhdXNlcGFyYW0qIHBhdXNlKQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRl
dl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCWlu
dCBhZHYsIGJtY3I7CiAKIAlpZiAoKCFucC0+YXV0b25lZyAmJiBucC0+ZHVwbGV4ID09IDApIHx8
CiAJICAgIChucC0+YXV0b25lZyAmJiAhcGF1c2UtPmF1dG9uZWcgJiYgbnAtPmR1cGxleCA9PSAw
KSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuIG5vdCBzZXQgcGF1c2Ugc2V0dGluZ3Mg
d2hlbiBmb3JjZWQgbGluayBpcyBpbiBoYWxmIGR1cGxleC5cbiIsCisJCXByaW50ayhLRVJOX0lO
Rk8gIiVzOiBjYW4gbm90IHNldCBwYXVzZSBzZXR0aW5ncyB3aGVuIGZvcmNlZCBsaW5rIGlzIGlu
IGhhbGYgZHVwbGV4LlxuIiwgCiAJCSAgICAgICBkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZB
TDsKIAl9CkBAIC0zNDE3LDMxICs0NjY1LDI2IEBACiAKIHN0YXRpYyB1MzIgbnZfZ2V0X3J4X2Nz
dW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRk
ZXZfcHJpdihkZXYpOwotCXJldHVybiAobnAtPnR4cnhjdGxfYml0cyAmIE5WUkVHX1RYUlhDVExf
UlhDSEVDSykgIT0gMDsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisJ
cmV0dXJuIChucC0+cnhfY3N1bSkgIT0gMDsKIH0KIAogc3RhdGljIGludCBudl9zZXRfcnhfY3N1
bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAq
bnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYo
ZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCWludCByZXRjb2Rl
ID0gMDsKIAogCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKSB7CiAKLQkJ
aWYgKCgobnAtPnR4cnhjdGxfYml0cyAmIE5WUkVHX1RYUlhDVExfUlhDSEVDSykgJiYgZGF0YSkg
fHwKLQkJICAgICghKG5wLT50eHJ4Y3RsX2JpdHMgJiBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0spICYm
ICFkYXRhKSkgewotCQkJLyogYWxyZWFkeSBzZXQgb3IgdW5zZXQgKi8KLQkJCXJldHVybiAwOwot
CQl9Ci0KIAkJaWYgKGRhdGEpIHsKKwkJCW5wLT5yeF9jc3VtID0gMTsKIAkJCW5wLT50eHJ4Y3Rs
X2JpdHMgfD0gTlZSRUdfVFhSWENUTF9SWENIRUNLOwotCQl9IGVsc2UgaWYgKCEobnAtPnZsYW5j
dGxfYml0cyAmIE5WUkVHX1ZMQU5DT05UUk9MX0VOQUJMRSkpIHsKLQkJCW5wLT50eHJ4Y3RsX2Jp
dHMgJj0gfk5WUkVHX1RYUlhDVExfUlhDSEVDSzsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJO
X0lORk8gIkNhbiBub3QgZGlzYWJsZSByeCBjaGVja3N1bSBpZiB2bGFuIGlzIGVuYWJsZWRcbiIp
OwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlucC0+cnhfY3N1bSA9IDA7CisJCQkvKiB2bGFuIGlz
IGRlcGVuZGVudCBvbiByeCBjaGVja3N1bSBvZmZsb2FkICovCisJCQlpZiAoIShucC0+dmxhbmN0
bF9iaXRzICYgTlZSRUdfVkxBTkNPTlRST0xfRU5BQkxFKSkKKwkJCQlucC0+dHhyeGN0bF9iaXRz
ICY9IH5OVlJFR19UWFJYQ1RMX1JYQ0hFQ0s7CiAJCX0KIAogCQlpZiAobmV0aWZfcnVubmluZyhk
ZXYpKSB7CkBAIC0zNDU2LDM5ICs0Njk5LDgzIEBACiAJcmV0dXJuIHJldGNvZGU7CiB9CiAKLXN0
YXRpYyBpbnQgbnZfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEp
CisjaWZkZWYgTkVUSUZfRl9UU08KK3N0YXRpYyBpbnQgbnZfc2V0X3RzbyhzdHJ1Y3QgbmV0X2Rl
dmljZSAqZGV2LCB1MzIgZGF0YSkKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJp
dihkZXYpOwotCi0JaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfQ0hFQ0tTVU0pCi0JCXJl
dHVybiBldGh0b29sX29wX3NldF90eF9od19jc3VtKGRldiwgZGF0YSk7Ci0JZWxzZQotCQlyZXR1
cm4gLUVPUE5PVFNVUFA7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwor
CQorCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKXsKKyNpZiBOVlZFUiA8
IFNVU0UxMCAKKwkJaWYoZGF0YSl7CisJCQlpZihldGh0b29sX29wX2dldF9zZyhkZXYpPT0wKQor
CQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorI2VuZGlmCisJCXJldHVybiBldGh0b29sX29wX3Nl
dF90c28oZGV2LCBkYXRhKTsKKwl9ZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKIH0KKyNlbmRpZgog
CiBzdGF0aWMgaW50IG52X3NldF9zZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkK
IHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9w
cml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKwkKKwlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVW
X0hBU19DSEVDS1NVTSl7CisjaWYgTlZWRVIgPCBTVVNFMTAKKwkJaWYoZGF0YSl7CisJCQlpZihl
dGh0b29sX29wX2dldF90eF9jc3VtKGRldik9PTApCisJCQkJCXJldHVybiAtRUlOVkFMOworCQl9
CisjaWZkZWYgTkVUSUZfRl9UU08KKwkJaWYoIWRhdGEpCisJCSAgICAJLyogc2V0IHRzbyBvZmYg
Ki8KKwkJCQludl9zZXRfdHNvKGRldixkYXRhKTsgICAKKyNlbmRpZgorI2VuZGlmCisJCXJldHVy
biBldGh0b29sX29wX3NldF9zZyhkZXYsIGRhdGEpOworCX1lbHNlCisJCXJldHVybiAtRUlOVkFM
OworfQogCitzdGF0aWMgaW50IG52X3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYs
IHUzMiBkYXRhKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKwor
I2lmIE5WVkVSIDwgU1VTRTEwCisJLyogc2V0IHNnIG9mZiBpZiB0eCBvZmYgKi8KKwlpZighZGF0
YSkKKwkJbnZfc2V0X3NnKGRldixkYXRhKTsKKyNlbmRpZgkKIAlpZiAobnAtPmRyaXZlcl9kYXRh
ICYgREVWX0hBU19DSEVDS1NVTSkKLQkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3NnKGRldiwgZGF0
YSk7CisjaWYgTlZWRVIgPiBSSEVTNCAKKwkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2Nz
dW0oZGV2LCBkYXRhKTsKKyNlbHNlCisJeworCQkJaWYgKGRhdGEpCisJCQkJZGV2LT5mZWF0dXJl
cyB8PSBORVRJRl9GX0lQX0NTVU07CisJCQllbHNlCisJCQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVU
SUZfRl9JUF9DU1VNOworCQkJcmV0dXJuIDA7CisJfQorI2VuZGlmCiAJZWxzZQotCQlyZXR1cm4g
LUVPUE5PVFNVUFA7CisJCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IG52X2dldF9z
dGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmZV9wcml2ICpu
cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihk
ZXYpOwogCiAJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDUykKIAkJcmV0
dXJuIChzaXplb2Yoc3RydWN0IG52X2V0aHRvb2xfc3RhdHMpL3NpemVvZih1NjQpKTsKIAllbHNl
Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTlZfU1RBVFNfQ09VTlRfU1c7CiB9CiAKIHN0YXRpYyB2
b2lkIG52X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBl
dGh0b29sX3N0YXRzICplc3RhdHMsIHU2NCAqYnVmZmVyKQogewotCXN0cnVjdCBmZV9wcml2ICpu
cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihk
ZXYpOwogCiAJLyogdXBkYXRlIHN0YXRzICovCiAJbnZfZG9fc3RhdHNfcG9sbCgodW5zaWduZWQg
bG9uZylkZXYpOwpAQCAtMzQ5OCw3ICs0Nzg1LDcgQEAKIAogc3RhdGljIGludCBudl9zZWxmX3Rl
c3RfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAg
PSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2
KTsKIAogCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1RFU1RfRVhURU5ERUQpCiAJCXJl
dHVybiBOVl9URVNUX0NPVU5UX0VYVEVOREVEOwpAQCAtMzUwOCw3ICs0Nzk1LDcgQEAKIAogc3Rh
dGljIGludCBudl9saW5rX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qg
ZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdl
dF9udnByaXYoZGV2KTsKIAlpbnQgbWlpX3N0YXR1czsKIAogCW1paV9ydyhkZXYsIG5wLT5waHlh
ZGRyLCBNSUlfQk1TUiwgTUlJX1JFQUQpOwpAQCAtMzU1MSw3ICs0ODM4LDcgQEAKIAogc3RhdGlj
IGludCBudl9pbnRlcnJ1cHRfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVj
dCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0g
Z2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJ
aW50IHJldCA9IDE7CiAJaW50IHRlc3RjbnQ7CkBAIC0zNTgwLDcgKzQ4NjcsNyBAQAogCW52X2Vu
YWJsZV9od19pbnRlcnJ1cHRzKGRldiwgTlZSRUdfSVJRX1RJTUVSKTsKIAogCS8qIHdhaXQgZm9y
IGF0IGxlYXN0IG9uZSBpbnRlcnJ1cHQgKi8KLQltc2xlZXAoMTAwKTsKKwludl9tc2xlZXAoMTAw
KTsKIAogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIApAQCAtMzYxNCw3ICs0OTAxLDcgQEAK
IAogc3RhdGljIGludCBudl9sb29wYmFja190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7
Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJp
diAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2Uo
ZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiLCAqcnhfc2tiOwogCWRtYV9hZGRyX3QgdGVz
dF9kbWFfYWRkcjsKQEAgLTM2NzMsMTMgKzQ5NjAsMTMgQEAKIAl3cml0ZWwoTlZSRUdfVFhSWENU
TF9LSUNLfG5wLT50eHJ4Y3RsX2JpdHMsIGdldF9od2Jhc2UoZGV2KSArIE52UmVnVHhSeENvbnRy
b2wpOwogCXBjaV9wdXNoKGdldF9od2Jhc2UoZGV2KSk7CiAKLQltc2xlZXAoNTAwKTsKKwludl9t
c2xlZXAoNTAwKTsKIAogCS8qIGNoZWNrIGZvciByeCBvZiB0aGUgcGFja2V0ICovCiAJaWYgKG5w
LT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7
CiAJCUZsYWdzID0gbGUzMl90b19jcHUobnAtPnJ4X3Jpbmcub3JpZ1swXS5GbGFnTGVuKTsKIAkJ
bGVuID0gbnZfZGVzY3JfZ2V0bGVuZ3RoKCZucC0+cnhfcmluZy5vcmlnWzBdLCBucC0+ZGVzY192
ZXIpOwotCisJCQkKIAl9IGVsc2UgewogCQlGbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5yeF9yaW5n
LmV4WzBdLkZsYWdMZW4pOwogCQlsZW4gPSBudl9kZXNjcl9nZXRsZW5ndGhfZXgoJm5wLT5yeF9y
aW5nLmV4WzBdLCBucC0+ZGVzY192ZXIpOwpAQCAtMzY5NiwxNyArNDk4MywxNyBAQAogCQl9CiAJ
fQogCi0JaWYgKHJldCkgeworCWlmIChyZXQpIHsJCQogCQlpZiAobGVuICE9IHBrdF9sZW4pIHsK
IAkJCXJldCA9IDA7Ci0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBsb29wYmFjayBsZW4gbWlz
bWF0Y2ggJWQgdnMgJWRcbiIsCisJCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBsb29wYmFjayBs
ZW4gbWlzbWF0Y2ggJWQgdnMgJWRcbiIsIAogCQkJCWRldi0+bmFtZSwgbGVuLCBwa3RfbGVuKTsK
IAkJfSBlbHNlIHsKLQkJCXJ4X3NrYiA9IG5wLT5yeF9za2J1ZmZbMF07CisJCQlyeF9za2IgPSBu
cC0+cnhfc2tiWzBdLnNrYjsKIAkJCWZvciAoaSA9IDA7IGkgPCBwa3RfbGVuOyBpKyspIHsKIAkJ
CQlpZiAocnhfc2tiLT5kYXRhW2ldICE9ICh1OCkoaSAmIDB4ZmYpKSB7CiAJCQkJCXJldCA9IDA7
Ci0JCQkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGxvb3BiYWNrIHBhdHRlcm4gY2hlY2sgZmFp
bGVkIG9uIGJ5dGUgJWRcbiIsCisJCQkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGxvb3BiYWNr
IHBhdHRlcm4gY2hlY2sgZmFpbGVkIG9uIGJ5dGUgJWRcbiIsIAogCQkJCQkJZGV2LT5uYW1lLCBp
KTsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtMzcyMCw3ICs1MDA3LDcgQEAKIAkJICAgICAgIHR4
X3NrYi0+ZW5kLXR4X3NrYi0+ZGF0YSwKIAkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwogCWRl
dl9rZnJlZV9za2JfYW55KHR4X3NrYik7Ci0KKwkKIAkvKiBzdG9wIGVuZ2luZXMgKi8KIAludl9z
dG9wX3J4KGRldik7CiAJbnZfc3RvcF90eChkZXYpOwpAQCAtMzc0MCw3ICs1MDI3LDcgQEAKIAog
c3RhdGljIHZvaWQgbnZfc2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBl
dGh0b29sX3Rlc3QgKnRlc3QsIHU2NCAqYnVmZmVyKQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9
IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYp
OwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJaW50IHJlc3VsdDsKIAlt
ZW1zZXQoYnVmZmVyLCAwLCBudl9zZWxmX3Rlc3RfY291bnQoZGV2KSpzaXplb2YodTY0KSk7CkBA
IC0zODM4LDkgKzUxMjUsOSBAQAogCS5nZXRfcmVnc19sZW4gPSBudl9nZXRfcmVnc19sZW4sCiAJ
LmdldF9yZWdzID0gbnZfZ2V0X3JlZ3MsCiAJLm53YXlfcmVzZXQgPSBudl9ud2F5X3Jlc2V0LAor
I2lmIE5WVkVSID4gU1VTRTEwCiAJLmdldF9wZXJtX2FkZHIgPSBldGh0b29sX29wX2dldF9wZXJt
X2FkZHIsCi0JLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gPSBudl9z
ZXRfdHNvLAorI2VuZGlmCiAJLmdldF9yaW5ncGFyYW0gPSBudl9nZXRfcmluZ3BhcmFtLAogCS5z
ZXRfcmluZ3BhcmFtID0gbnZfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBudl9n
ZXRfcGF1c2VwYXJhbSwKQEAgLTM4NTEsNiArNTEzOCwxMCBAQAogCS5zZXRfdHhfY3N1bSA9IG52
X3NldF90eF9jc3VtLAogCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKIAkuc2V0X3NnID0g
bnZfc2V0X3NnLAorI2lmZGVmIE5FVElGX0ZfVFNPCisJLmdldF90c28gPSBldGh0b29sX29wX2dl
dF90c28sCisJLnNldF90c28gPSBudl9zZXRfdHNvLAorI2VuZGlmCiAJLmdldF9zdHJpbmdzID0g
bnZfZ2V0X3N0cmluZ3MsCiAJLmdldF9zdGF0c19jb3VudCA9IG52X2dldF9zdGF0c19jb3VudCwK
IAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBudl9nZXRfZXRodG9vbF9zdGF0cywKQEAgLTM4NzAsMTAg
KzUxNjEsMTMgQEAKIAlpZiAoZ3JwKSB7CiAJCS8qIGVuYWJsZSB2bGFuIG9uIE1BQyAqLwogCQlu
cC0+dHhyeGN0bF9iaXRzIHw9IE5WUkVHX1RYUlhDVExfVkxBTlNUUklQIHwgTlZSRUdfVFhSWENU
TF9WTEFOSU5TOworCQlucC0+dHhyeGN0bF9iaXRzIHw9IE5WUkVHX1RYUlhDVExfUlhDSEVDSzsK
IAl9IGVsc2UgewogCQkvKiBkaXNhYmxlIHZsYW4gb24gTUFDICovCiAJCW5wLT50eHJ4Y3RsX2Jp
dHMgJj0gfk5WUkVHX1RYUlhDVExfVkxBTlNUUklQOwogCQlucC0+dHhyeGN0bF9iaXRzICY9IH5O
VlJFR19UWFJYQ1RMX1ZMQU5JTlM7CisJCWlmICghbnAtPnJ4X2NzdW0pCisJCQlucC0+dHhyeGN0
bF9iaXRzICY9IH5OVlJFR19UWFJYQ1RMX1JYQ0hFQ0s7CiAJfQogCiAJd3JpdGVsKG5wLT50eHJ4
Y3RsX2JpdHMsIGdldF9od2Jhc2UoZGV2KSArIE52UmVnVHhSeENvbnRyb2wpOwpAQCAtMzg4Niw1
MyArNTE4MCwxMDIgQEAKIAkvKiBub3RoaW5nIHRvIGRvICovCiB9OwogCisvKiBUaGUgbWdtdCB1
bml0IGFuZCBkcml2ZXIgdXNlIGEgc2VtYXBob3JlIHRvIGFjY2VzcyB0aGUgcGh5IGR1cmluZyBp
bml0ICovCitzdGF0aWMgaW50IG52X21nbXRfYWNxdWlyZV9zZW1hKHN0cnVjdCBuZXRfZGV2aWNl
ICpkZXYpCit7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKwlpbnQgaTsK
Kwl1MzIgdHhfY3RybCwgbWdtdF9zZW1hOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsK
KwkJbWdtdF9zZW1hID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5W
UkVHX1hNSVRDVExfTUdNVF9TRU1BX01BU0s7CisJCWlmIChtZ210X3NlbWEgPT0gTlZSRUdfWE1J
VENUTF9NR01UX1NFTUFfRlJFRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZHByaW50ayhL
RVJOX0lORk8gImZvcmNlZGV0aDogbnZfbWdtdF9hY3F1aXJlX3NlbWE6IHNlbWEgaXMgZnJlZVxu
Iik7CisJCQlicmVhazsKKyAgICAgICAgICAgICAgICB9CisJCW52X21zbGVlcCg1MDApOworCX0K
KworCWlmIChtZ210X3NlbWEgIT0gTlZSRUdfWE1JVENUTF9NR01UX1NFTUFfRlJFRSkgeworICAg
ICAgICAgICAgICAgIGRwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IG52X21nbXRfYWNxdWly
ZV9zZW1hOiBzZW1hIGlzIG5vdCBmcmVlXG4iKTsKKwkJcmV0dXJuIDA7CisgICAgICAgIH0KKwor
CWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJdHhfY3RybCA9IHJlYWRsKGJhc2UgKyBOdlJl
Z1RyYW5zbWl0dGVyQ29udHJvbCk7CisJCXR4X2N0cmwgfD0gTlZSRUdfWE1JVENUTF9IT1NUX1NF
TUFfQUNROworCQl3cml0ZWwodHhfY3RybCwgYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9s
KTsKKworCQkvKiB2ZXJpZnkgdGhhdCBzZW1hcGhvcmUgd2FzIGFjcXVpcmVkICovCisJCXR4X2N0
cmwgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOworCQlpZiAoKCh0eF9j
dHJsICYgTlZSRUdfWE1JVENUTF9IT1NUX1NFTUFfTUFTSykgPT0gTlZSRUdfWE1JVENUTF9IT1NU
X1NFTUFfQUNRKSAmJgorCQkgICAgKCh0eF9jdHJsICYgTlZSRUdfWE1JVENUTF9NR01UX1NFTUFf
TUFTSykgPT0gTlZSRUdfWE1JVENUTF9NR01UX1NFTUFfRlJFRSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IG52X21nbXRfYWNxdWlyZV9z
ZW1hOiBhY3F1aXJlZCBzZW1hXG4iKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UKKwkJCXVkZWxh
eSg1MCk7CisJfQorCisgICAgICAgIGRwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IG52X21n
bXRfYWNxdWlyZV9zZW1hOiBleGl0XG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyogSW5kaWNhdGUg
dG8gbWdtdCB1bml0IHdoZXRoZXIgZHJpdmVyIGlzIGxvYWRlZCBvciBub3QgKi8KK3N0YXRpYyB2
b2lkIG52X21nbXRfZHJpdmVyX2xvYWRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbG9h
ZGVkKQoreworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIHR4X2N0
cmw7CisKKwl0eF9jdHJsID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsK
KwlpZiAobG9hZGVkKQorCQl0eF9jdHJsIHw9IE5WUkVHX1hNSVRDVExfSE9TVF9MT0FERUQ7CisJ
ZWxzZQorCQl0eF9jdHJsICY9IH5OVlJFR19YTUlUQ1RMX0hPU1RfTE9BREVEOworCXdyaXRlbCh0
eF9jdHJsLCBiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOworfQorCiBzdGF0aWMgaW50
IG52X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAg
PSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2
KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCWludCByZXQgPSAxOwog
CWludCBvb20sIGk7CiAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIm52X29wZW46IGJlZ2luXG4iKTsK
IAotCS8qIDEpIGVyYXNlIHByZXZpb3VzIG1pc2NvbmZpZ3VyYXRpb24gKi8KKwkvKiBlcmFzZSBw
cmV2aW91cyBtaXNjb25maWd1cmF0aW9uICovCiAJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9I
QVNfUE9XRVJfQ05UUkwpCiAJCW52X21hY19yZXNldChkZXYpOwotCS8qIDQuMS0xOiBzdG9wIGFk
YXB0ZXI6IGlnbm9yZWQsIDQuMyBzZWVtcyB0byBiZSBvdmVya2lsbCAqLworCS8qIHN0b3AgYWRh
cHRlcjogaWdub3JlZCwgNC4zIHNlZW1zIHRvIGJlIG92ZXJraWxsICovCiAJd3JpdGVsKE5WUkVH
X01DQVNUQUREUkFfRk9SQ0UsIGJhc2UgKyBOdlJlZ011bHRpY2FzdEFkZHJBKTsKIAl3cml0ZWwo
MCwgYmFzZSArIE52UmVnTXVsdGljYXN0QWRkckIpOwogCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdN
dWx0aWNhc3RNYXNrQSk7CiAJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ011bHRpY2FzdE1hc2tCKTsK
IAl3cml0ZWwoMCwgYmFzZSArIE52UmVnUGFja2V0RmlsdGVyRmxhZ3MpOwogCi0Jd3JpdGVsKDAs
IGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7Ci0Jd3JpdGVsKDAsIGJhc2UgKyBOdlJl
Z1JlY2VpdmVyQ29udHJvbCk7CisJbnZfc3RvcF90eChkZXYpOworCW52X3N0b3BfcngoZGV2KTsK
IAogCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdBZGFwdGVyQ29udHJvbCk7CiAKIAlpZiAobnAtPnBh
dXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9UWF9DQVBBQkxFKQogCQl3cml0ZWwoTlZSRUdfVFhf
UEFVU0VGUkFNRV9ESVNBQkxFLCAgYmFzZSArIE52UmVnVHhQYXVzZUZyYW1lKTsKIAotCS8qIDIp
IGluaXRpYWxpemUgZGVzY3JpcHRvciByaW5ncyAqLworCS8qIGluaXRpYWxpemUgZGVzY3JpcHRv
ciByaW5ncyAqLwogCXNldF9idWZzaXplKGRldik7CiAJb29tID0gbnZfaW5pdF9yaW5nKGRldik7
CiAKLQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTGlua1NwZWVkKTsKLQl3cml0ZWwoMCwgYmFzZSAr
IE52UmVnVW5rbm93blRyYW5zbWl0dGVyUmVnKTsKIAludl90eHJ4X3Jlc2V0KGRldik7CiAJd3Jp
dGVsKDAsIGJhc2UgKyBOdlJlZ1Vua25vd25TZXR1cFJlZzYpOwogCiAJbnAtPmluX3NodXRkb3du
ID0gMDsKIAotCS8qIDMpIHNldCBtYWMgYWRkcmVzcyAqLwotCW52X2NvcHlfbWFjX3RvX2h3KGRl
dik7Ci0KLQkvKiA0KSBnaXZlIGh3IHJpbmdzICovCisJLyogZ2l2ZSBodyByaW5ncyAqLwogCXNl
dHVwX2h3X3JpbmdzKGRldiwgTlZfU0VUVVBfUlhfUklORyB8IE5WX1NFVFVQX1RYX1JJTkcpOwog
CXdyaXRlbCggKChucC0+cnhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9SWFNISUZUKSAr
ICgobnAtPnR4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfVFhTSElGVCksCiAJCWJhc2Ug
KyBOdlJlZ1JpbmdTaXplcyk7CiAKLQkvKiA1KSBjb250aW51ZSBzZXR1cCAqLworCS8qIGNvbnRp
bnVlIHNldHVwICovCiAJd3JpdGVsKG5wLT5saW5rc3BlZWQsIGJhc2UgKyBOdlJlZ0xpbmtTcGVl
ZCk7CiAJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xKQogCQl3cml0ZWwoTlZSRUdfVFhf
V01fREVTQzFfREVGQVVMVCwgYmFzZSArIE52UmVnVHhXYXRlcm1hcmspOwpAQCAtMzk0NiwxMSAr
NTI4OSwxMSBAQAogCQkJTlZfU0VUVVA1X0RFTEFZLCBOVl9TRVRVUDVfREVMQVlNQVgsCiAJCQlL
RVJOX0lORk8gIm9wZW46IFNldHVwUmVnNSwgQml0IDMxIHJlbWFpbmVkIG9mZlxuIik7CiAKLQl3
cml0ZWwoMCwgYmFzZSArIE52UmVnVW5rbm93blNldHVwUmVnNCk7CisJd3JpdGVsKDAsIGJhc2Ug
KyBOdlJlZ01JSU1hc2spOwogCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJl
Z0lycVN0YXR1cyk7CiAJd3JpdGVsKE5WUkVHX01JSVNUQVRfTUFTSzIsIGJhc2UgKyBOdlJlZ01J
SVN0YXR1cyk7CiAKLQkvKiA2KSBjb250aW51ZSBzZXR1cCAqLworCS8qIGNvbnRpbnVlIHNldHVw
ICovCiAJd3JpdGVsKE5WUkVHX01JU0MxX0ZPUkNFIHwgTlZSRUdfTUlTQzFfSEQsIGJhc2UgKyBO
dlJlZ01pc2MxKTsKIAl3cml0ZWwocmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJTdGF0dXMp
LCBiYXNlICsgTnZSZWdUcmFuc21pdHRlclN0YXR1cyk7CiAJd3JpdGVsKE5WUkVHX1BGRl9BTFdB
WVMsIGJhc2UgKyBOdlJlZ1BhY2tldEZpbHRlckZsYWdzKTsKQEAgLTM5NzMsNyArNTMxNiw3IEBA
CiAJd3JpdGVsKChucC0+cGh5YWRkciA8PCBOVlJFR19BREFQVENUTF9QSFlTSElGVCl8TlZSRUdf
QURBUFRDVExfUEhZVkFMSUR8TlZSRUdfQURBUFRDVExfUlVOTklORywKIAkJCWJhc2UgKyBOdlJl
Z0FkYXB0ZXJDb250cm9sKTsKIAl3cml0ZWwoTlZSRUdfTUlJU1BFRURfQklUOHxOVlJFR19NSUlE
RUxBWSwgYmFzZSArIE52UmVnTUlJU3BlZWQpOwotCXdyaXRlbChOVlJFR19VTktTRVRVUDRfVkFM
LCBiYXNlICsgTnZSZWdVbmtub3duU2V0dXBSZWc0KTsKKwl3cml0ZWwoTlZSRUdfTUlJX0xJTktD
SEFOR0UsIGJhc2UgKyBOdlJlZ01JSU1hc2spOwogCWlmIChucC0+d29sZW5hYmxlZCkKIAkJd3Jp
dGVsKE5WUkVHX1dBS0VVUEZMQUdTX0VOQUJMRSAsIGJhc2UgKyBOdlJlZ1dha2VVcEZsYWdzKTsK
IApAQCAtNDAyMywxNSArNTM2NiwxNCBAQAogCWlmIChyZXQpIHsKIAkJbmV0aWZfY2Fycmllcl9v
bihkZXYpOwogCX0gZWxzZSB7Ci0JCXByaW50aygiJXM6IG5vIGxpbmsgZHVyaW5nIGluaXRpYWxp
emF0aW9uLlxuIiwgZGV2LT5uYW1lKTsKKwkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbm8gbGlu
ayBkdXJpbmcgaW5pdGlhbGl6YXRpb24uXG4iLCBkZXYtPm5hbWUpOwogCQluZXRpZl9jYXJyaWVy
X29mZihkZXYpOwogCX0KIAlpZiAob29tKQogCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlm
ZmllcyArIE9PTV9SRUZJTEwpOwogCiAJLyogc3RhcnQgc3RhdGlzdGljcyB0aW1lciAqLwotCWlm
IChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1NUQVRJU1RJQ1MpCi0JCW1vZF90aW1lcigmbnAt
PnN0YXRzX3BvbGwsIGppZmZpZXMgKyBTVEFUU19JTlRFUlZBTCk7CisJbW9kX3RpbWVyKCZucC0+
c3RhdHNfcG9sbCwgamlmZmllcyArIFNUQVRTX0lOVEVSVkFMKTsKIAogCXNwaW5fdW5sb2NrX2ly
cSgmbnAtPmxvY2spOwogCkBAIC00MDQzLDEzICs1Mzg1LDE5IEBACiAKIHN0YXRpYyBpbnQgbnZf
Y2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBu
ZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsK
IAl1OCBfX2lvbWVtICpiYXNlOwogCisJZHByaW50ayhLRVJOX0RFQlVHICJudl9jbG9zZTogYmVn
aW5cbiIpOwogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAlucC0+aW5fc2h1dGRvd24gPSAx
OwogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOworCisjaWYgTlZWRVIgPiBSSEVTMwogCXN5
bmNocm9uaXplX2lycShkZXYtPmlycSk7CisjZWxzZQorCXN5bmNocm9uaXplX2lycSgpOworI2Vu
ZGlmCiAKIAlkZWxfdGltZXJfc3luYygmbnAtPm9vbV9raWNrKTsKIAlkZWxfdGltZXJfc3luYygm
bnAtPm5pY19wb2xsKTsKQEAgLTQwNzYsMTIgKzU0MjQsNiBAQAogCWlmIChucC0+d29sZW5hYmxl
ZCkKIAkJbnZfc3RhcnRfcngoZGV2KTsKIAotCS8qIHNwZWNpYWwgb3A6IHdyaXRlIGJhY2sgdGhl
IG1pc29yZGVyZWQgTUFDIGFkZHJlc3MgLSBvdGhlcndpc2UKLQkgKiB0aGUgbmV4dCBudl9wcm9i
ZSB3b3VsZCBzZWUgYSB3cm9uZyBhZGRyZXNzLgotCSAqLwotCXdyaXRlbChucC0+b3JpZ19tYWNb
MF0sIGJhc2UgKyBOdlJlZ01hY0FkZHJBKTsKLQl3cml0ZWwobnAtPm9yaWdfbWFjWzFdLCBiYXNl
ICsgTnZSZWdNYWNBZGRyQik7Ci0KIAkvKiBGSVhNRTogcG93ZXIgZG93biBuaWMgKi8KIAogCXJl
dHVybiAwOwpAQCAtNDA5NCwxNCArNTQzNiwxOSBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAl1
OCBfX2lvbWVtICpiYXNlOwogCWludCBlcnIsIGk7Ci0JdTMyIHBvd2Vyc3RhdGU7CisJdTMyIHBv
d2Vyc3RhdGUsIHBoeXN0YXRlX29yaWcgPSAwLCBwaHlzdGF0ZSwgdHhyZWc7CisJaW50IHBoeWlu
aXRpYWxpemVkID0gMDsKIAorCS8vTlZMQU5fRElTQUJMRV9BTExfRkVBVFVSRVMgOworICAgICAg
IAkvKiBtb2RpZnkgbmV0d29yayBkZXZpY2UgY2xhc3MgaWQgKi8JCisJcXVpcmtfbmZvcmNlX25l
dHdvcmtfY2xhc3MocGNpX2Rldik7CiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVj
dCBmZV9wcml2KSk7CiAJZXJyID0gLUVOT01FTTsKIAlpZiAoIWRldikKIAkJZ290byBvdXQ7CiAK
LQlucCA9IG5ldGRldl9wcml2KGRldik7CisJZHByaW50ayhLRVJOX0RFQlVHICIlczpudl9wcm9i
ZTogYmVnaW5cbiIsZGV2LT5uYW1lKTsKKwlucCA9IGdldF9udnByaXYoZGV2KTsKIAlucC0+cGNp
X2RldiA9IHBjaV9kZXY7CiAJc3Bpbl9sb2NrX2luaXQoJm5wLT5sb2NrKTsKIAlTRVRfTU9EVUxF
X09XTkVSKGRldik7CkBAIC00MTcwLDEwICs1NTE3LDEyIEBACiAJCQkJZGV2LT5mZWF0dXJlcyB8
PSBORVRJRl9GX0hJR0hETUE7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiB1c2lu
ZyBISUdIRE1BXG4iKTsKIAkJCX0KKyNpZiBOVlZFUiA+IFJIRVMzCiAJCQlpZiAocGNpX3NldF9j
b25zaXN0ZW50X2RtYV9tYXNrKHBjaV9kZXYsIERNQV8zOUJJVF9NQVNLKSkgewogCQkJCXByaW50
ayhLRVJOX0lORk8gImZvcmNlZGV0aDogNjQtYml0IERNQSAoY29uc2lzdGVudCkgZmFpbGVkLCB1
c2luZyAzMi1iaXQgcmluZyBidWZmZXJzIGZvciBkZXZpY2UgJXMuXG4iLAogCQkJCSAgICAgICBw
Y2lfbmFtZShwY2lfZGV2KSk7CiAJCQl9CisjZW5kaWYKIAkJfQogCX0gZWxzZSBpZiAoaWQtPmRy
aXZlcl9kYXRhICYgREVWX0hBU19MQVJHRURFU0MpIHsKIAkJLyogcGFja2V0IGZvcm1hdCAyOiBz
dXBwb3J0cyBqdW1ibyBmcmFtZXMgKi8KQEAgLTQxODgsMjEgKzU1MzcsNDMgQEAKIAlucC0+cGt0
X2xpbWl0ID0gTlZfUEtUTElNSVRfMTsKIAlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19M
QVJHRURFU0MpCiAJCW5wLT5wa3RfbGltaXQgPSBOVl9QS1RMSU1JVF8yOworCWlmIChtdHUgPiBu
cC0+cGt0X2xpbWl0KSB7CisJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogTVRVIHZhbHVl
IG9mICVkIGlzIHRvbyBsYXJnZS4gU2V0dGluZyB0byBtYXhpbXVtIHZhbHVlIG9mICVkXG4iLAor
CQkgICAgICAgbXR1LCBucC0+cGt0X2xpbWl0KTsKKwkJZGV2LT5tdHUgPSBucC0+cGt0X2xpbWl0
OworCX0gZWxzZSB7CisJCWRldi0+bXR1ID0gbXR1OworCX0KIAogCWlmIChpZC0+ZHJpdmVyX2Rh
dGEgJiBERVZfSEFTX0NIRUNLU1VNKSB7Ci0JCW5wLT50eHJ4Y3RsX2JpdHMgfD0gTlZSRUdfVFhS
WENUTF9SWENIRUNLOwotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElG
X0ZfU0c7CisJCWlmIChyeF9jaGVja3N1bV9vZmZsb2FkKSB7CisJCQlucC0+cnhfY3N1bSA9IDE7
CisJCQlucC0+dHhyeGN0bF9iaXRzIHw9IE5WUkVHX1RYUlhDVExfUlhDSEVDSzsKKwkJfQorCisJ
CWlmICh0eF9jaGVja3N1bV9vZmZsb2FkKQkKKyNpZiBOVlZFUiA+IFJIRVM0CisJCQlkZXYtPmZl
YXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKyNlbHNlCisJCQlkZXYtPmZlYXR1cmVzIHw9IE5F
VElGX0ZfSVBfQ1NVTTsKKyNlbmRpZgorCisJCWlmIChzY2F0dGVyX2dhdGhlcikKKwkJCWRldi0+
ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKICNpZmRlZiBORVRJRl9GX1RTTwotCQlkZXYtPmZlYXR1
cmVzIHw9IE5FVElGX0ZfVFNPOworCQlpZiAodHNvX29mZmxvYWQpCisJCQlkZXYtPmZlYXR1cmVz
IHw9IE5FVElGX0ZfVFNPOwogI2VuZGlmCiAgCX0KIAogCW5wLT52bGFuY3RsX2JpdHMgPSAwOwot
CWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1ZMQU4pIHsKLQkJbnAtPnZsYW5jdGxfYml0
cyA9IE5WUkVHX1ZMQU5DT05UUk9MX0VOQUJMRTsKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9G
X0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fVFg7Ci0JCWRldi0+dmxhbl9yeF9yZWdpc3Rl
ciA9IG52X3ZsYW5fcnhfcmVnaXN0ZXI7Ci0JCWRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IG52X3Zs
YW5fcnhfa2lsbF92aWQ7CisJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfVkxBTiAmJiB0
YWdnaW5nXzgwMjFwcSkgeworCQkJbnAtPnZsYW5jdGxfYml0cyA9IE5WUkVHX1ZMQU5DT05UUk9M
X0VOQUJMRTsKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZf
Rl9IV19WTEFOX1RYOworCQkJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gbnZfdmxhbl9yeF9yZWdp
c3RlcjsKKwkJCWRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IG52X3ZsYW5fcnhfa2lsbF92aWQ7CisJ
CS8qIHZsYW4gbmVlZHMgcnggY2hlY2tzdW0gc3VwcG9ydCwgc28gZm9yY2UgaXQgKi8KKwkJbnAt
PnR4cnhjdGxfYml0cyB8PSBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0s7CiAJfQogCiAJbnAtPm1zaV9m
bGFncyA9IDA7CkBAIC00MjEyLDEyICs1NTgzLDIxIEBACiAJaWYgKChpZC0+ZHJpdmVyX2RhdGEg
JiBERVZfSEFTX01TSV9YKSAmJiBtc2l4KSB7CiAJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hf
Q0FQQUJMRTsKIAl9Ci0KLQlucC0+cGF1c2VfZmxhZ3MgPSBOVl9QQVVTRUZSQU1FX1JYX0NBUEFC
TEUgfCBOVl9QQVVTRUZSQU1FX1JYX1JFUSB8IE5WX1BBVVNFRlJBTUVfQVVUT05FRzsKKwkKKwlu
cC0+cGF1c2VfZmxhZ3MgPSBOVl9QQVVTRUZSQU1FX1JYX0NBUEFCTEU7CisJaWYgKHJ4X2Zsb3df
Y29udHJvbCA9PSBOVl9SWF9GTE9XX0NPTlRST0xfRU5BQkxFRCkKKwkJbnAtPnBhdXNlX2ZsYWdz
IHw9IE5WX1BBVVNFRlJBTUVfUlhfUkVROwogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFT
X1BBVVNFRlJBTUVfVFgpIHsKLQkJbnAtPnBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfVFhf
Q0FQQUJMRSB8IE5WX1BBVVNFRlJBTUVfVFhfUkVROworCQlucC0+cGF1c2VfZmxhZ3MgfD0gTlZf
UEFVU0VGUkFNRV9UWF9DQVBBQkxFOworCQlpZiAodHhfZmxvd19jb250cm9sID09IE5WX1RYX0ZM
T1dfQ09OVFJPTF9FTkFCTEVEKQorCQkJbnAtPnBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVf
VFhfUkVROworCX0KKwlpZiAoYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQlucC0+cGF1
c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9BVVRPTkVHOworCX0gZWxzZSBpZiAoc3BlZWRfZHVw
bGV4ID09IE5WX1NQRUVEX0RVUExFWF8xMDAwX0ZVTExfRFVQTEVYKSB7CisJCXByaW50ayhLRVJO
X0lORk8gImZvcmNlZGV0aDogc3BlZWRfZHVwbGV4IG9mIDEwMDAgZnVsbCBjYW4gbm90IGVuYWJs
ZWQgaWYgYXV0b25lZyBpcyBkaXNhYmxlZFxuIik7CisJCWdvdG8gb3V0X3JlbHJlZzsKIAl9Ci0K
IAogCWVyciA9IC1FTk9NRU07CiAJbnAtPmJhc2UgPSBpb3JlbWFwKGFkZHIsIG5wLT5yZWdpc3Rl
cl9zaXplKTsKQEAgLTQyMjcsMTAgKzU2MDcsMzMgQEAKIAogCWRldi0+aXJxID0gcGNpX2Rldi0+
aXJxOwogCi0JbnAtPnJ4X3Jpbmdfc2l6ZSA9IFJYX1JJTkdfREVGQVVMVDsKLQlucC0+dHhfcmlu
Z19zaXplID0gVFhfUklOR19ERUZBVUxUOwotCW5wLT50eF9saW1pdF9zdG9wID0gbnAtPnR4X3Jp
bmdfc2l6ZSAtIFRYX0xJTUlUX0RJRkZFUkVOQ0U7Ci0JbnAtPnR4X2xpbWl0X3N0YXJ0ID0gbnAt
PnR4X3Jpbmdfc2l6ZSAtIFRYX0xJTUlUX0RJRkZFUkVOQ0UgLSAxOworCWlmIChucC0+ZGVzY192
ZXIgPT0gREVTQ19WRVJfMSkgeworCQlpZiAocnhfcmluZ19zaXplID4gUklOR19NQVhfREVTQ19W
RVJfMSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByeF9yaW5nX3NpemUgb2Yg
JWQgaXMgdG9vIGxhcmdlLiBTZXR0aW5nIHRvIG1heGltdW0gb2YgJWRcbiIsCisJCQkgICAgICAg
cnhfcmluZ19zaXplLCBSSU5HX01BWF9ERVNDX1ZFUl8xKTsKKwkJCXJ4X3Jpbmdfc2l6ZSA9IFJJ
TkdfTUFYX0RFU0NfVkVSXzE7CisJCX0KKwkJaWYgKHR4X3Jpbmdfc2l6ZSA+IFJJTkdfTUFYX0RF
U0NfVkVSXzEpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogdHhfcmluZ19zaXpl
IG9mICVkIGlzIHRvbyBsYXJnZS4gU2V0dGluZyB0byBtYXhpbXVtIG9mICVkXG4iLAorCQkJICAg
ICAgIHR4X3Jpbmdfc2l6ZSwgUklOR19NQVhfREVTQ19WRVJfMSk7CisJCQl0eF9yaW5nX3NpemUg
PSBSSU5HX01BWF9ERVNDX1ZFUl8xOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJ4X3Jpbmdfc2l6
ZSA+IFJJTkdfTUFYX0RFU0NfVkVSXzJfMykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2Vk
ZXRoOiByeF9yaW5nX3NpemUgb2YgJWQgaXMgdG9vIGxhcmdlLiBTZXR0aW5nIHRvIG1heGltdW0g
b2YgJWRcbiIsCisJCQkgICAgICAgcnhfcmluZ19zaXplLCBSSU5HX01BWF9ERVNDX1ZFUl8yXzMp
OworCQkJcnhfcmluZ19zaXplID0gUklOR19NQVhfREVTQ19WRVJfMl8zOworCQl9CisJCWlmICh0
eF9yaW5nX3NpemUgPiBSSU5HX01BWF9ERVNDX1ZFUl8yXzMpIHsKKwkJCXByaW50ayhLRVJOX0lO
Rk8gImZvcmNlZGV0aDogdHhfcmluZ19zaXplIG9mICVkIGlzIHRvbyBsYXJnZS4gU2V0dGluZyB0
byBtYXhpbXVtIG9mICVkXG4iLAorCQkJICAgICAgIHR4X3Jpbmdfc2l6ZSwgUklOR19NQVhfREVT
Q19WRVJfMl8zKTsKKwkJCXR4X3Jpbmdfc2l6ZSA9IFJJTkdfTUFYX0RFU0NfVkVSXzJfMzsKKwkJ
fQorCX0KKwlucC0+cnhfcmluZ19zaXplID0gcnhfcmluZ19zaXplOworCW5wLT50eF9yaW5nX3Np
emUgPSB0eF9yaW5nX3NpemU7CisJbnAtPnR4X2xpbWl0X3N0b3AgPSB0eF9yaW5nX3NpemUgLSBU
WF9MSU1JVF9ESUZGRVJFTkNFOworCW5wLT50eF9saW1pdF9zdGFydCA9IHR4X3Jpbmdfc2l6ZSAt
IFRYX0xJTUlUX0RJRkZFUkVOQ0UgLSAxOwogCiAJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZF
Ul8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CiAJCW5wLT5yeF9yaW5nLm9yaWcg
PSBwY2lfYWxsb2NfY29uc2lzdGVudChwY2lfZGV2LApAQCAtNDI0NywyOSArNTY1MCwzNiBAQAog
CQkJZ290byBvdXRfdW5tYXA7CiAJCW5wLT50eF9yaW5nLmV4ID0gJm5wLT5yeF9yaW5nLmV4W25w
LT5yeF9yaW5nX3NpemVdOwogCX0KLQlucC0+cnhfc2tidWZmID0ga21hbGxvYyhzaXplb2Yoc3Ry
dWN0IHNrX2J1ZmYqKSAqIG5wLT5yeF9yaW5nX3NpemUsIEdGUF9LRVJORUwpOwotCW5wLT5yeF9k
bWEgPSBrbWFsbG9jKHNpemVvZihkbWFfYWRkcl90KSAqIG5wLT5yeF9yaW5nX3NpemUsIEdGUF9L
RVJORUwpOwotCW5wLT50eF9za2J1ZmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiop
ICogbnAtPnR4X3Jpbmdfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JbnAtPnR4X2RtYSA9IGttYWxsb2Mo
c2l6ZW9mKGRtYV9hZGRyX3QpICogbnAtPnR4X3Jpbmdfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JbnAt
PnR4X2RtYV9sZW4gPSBrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBpbnQpICogbnAtPnR4X3Jpbmdf
c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFucC0+cnhfc2tidWZmIHx8ICFucC0+cnhfZG1hIHx8
ICFucC0+dHhfc2tidWZmIHx8ICFucC0+dHhfZG1hIHx8ICFucC0+dHhfZG1hX2xlbikKKwlucC0+
cnhfc2tiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG52X3NrYl9tYXApICogbnAtPnJ4X3Jpbmdf
c2l6ZSwgR0ZQX0tFUk5FTCk7CisJbnAtPnR4X3NrYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBu
dl9za2JfbWFwKSAqIG5wLT50eF9yaW5nX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghbnAtPnJ4
X3NrYiB8fCAhbnAtPnR4X3NrYikKIAkJZ290byBvdXRfZnJlZXJpbmc7Ci0JbWVtc2V0KG5wLT5y
eF9za2J1ZmYsIDAsIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiopICogbnAtPnJ4X3Jpbmdfc2l6ZSk7
Ci0JbWVtc2V0KG5wLT5yeF9kbWEsIDAsIHNpemVvZihkbWFfYWRkcl90KSAqIG5wLT5yeF9yaW5n
X3NpemUpOwotCW1lbXNldChucC0+dHhfc2tidWZmLCAwLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYq
KSAqIG5wLT50eF9yaW5nX3NpemUpOwotCW1lbXNldChucC0+dHhfZG1hLCAwLCBzaXplb2YoZG1h
X2FkZHJfdCkgKiBucC0+dHhfcmluZ19zaXplKTsKLQltZW1zZXQobnAtPnR4X2RtYV9sZW4sIDAs
IHNpemVvZih1bnNpZ25lZCBpbnQpICogbnAtPnR4X3Jpbmdfc2l6ZSk7CisJbWVtc2V0KG5wLT5y
eF9za2IsIDAsIHNpemVvZihzdHJ1Y3QgbnZfc2tiX21hcCkgKiBucC0+cnhfcmluZ19zaXplKTsK
KwltZW1zZXQobnAtPnR4X3NrYiwgMCwgc2l6ZW9mKHN0cnVjdCBudl9za2JfbWFwKSAqIG5wLT50
eF9yaW5nX3NpemUpOwogCiAJZGV2LT5vcGVuID0gbnZfb3BlbjsKIAlkZXYtPnN0b3AgPSBudl9j
bG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG52X3N0YXJ0X3htaXQ7CisJaWYgKG5wLT5k
ZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQorCQlk
ZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG52X3N0YXJ0X3htaXQ7CisJZWxzZQorCQlkZXYtPmhhcmRf
c3RhcnRfeG1pdCA9IG52X3N0YXJ0X3htaXRfb3B0aW1pemVkOwogCWRldi0+Z2V0X3N0YXRzID0g
bnZfZ2V0X3N0YXRzOwogCWRldi0+Y2hhbmdlX210dSA9IG52X2NoYW5nZV9tdHU7CiAJZGV2LT5z
ZXRfbWFjX2FkZHJlc3MgPSBudl9zZXRfbWFjX2FkZHJlc3M7CiAJZGV2LT5zZXRfbXVsdGljYXN0
X2xpc3QgPSBudl9zZXRfbXVsdGljYXN0OworCisjaWYgTlZWRVIgPCBTTEVTOQorCWRldi0+ZG9f
aW9jdGwgPSBudl9pb2N0bDsKKyNlbmRpZgorCisjaWYgTlZWRVIgPiBSSEVTMwogI2lmZGVmIENP
TkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBudl9wb2xs
X2NvbnRyb2xsZXI7CiAjZW5kaWYKKyNlbHNlCisJZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBudl9w
b2xsX2NvbnRyb2xsZXI7CisjZW5kaWYKKwogCVNFVF9FVEhUT09MX09QUyhkZXYsICZvcHMpOwog
CWRldi0+dHhfdGltZW91dCA9IG52X3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9
IE5WX1dBVENIRE9HX1RJTUVPOwpAQCAtNDI4MSwxNSArNTY5MSwzNiBAQAogCW5wLT5vcmlnX21h
Y1swXSA9IHJlYWRsKGJhc2UgKyBOdlJlZ01hY0FkZHJBKTsKIAlucC0+b3JpZ19tYWNbMV0gPSBy
ZWFkbChiYXNlICsgTnZSZWdNYWNBZGRyQik7CiAKKwkvKiBjaGVjayB0aGUgd29ya2Fyb3VuZCBi
aXQgZm9yIGNvcnJlY3QgbWFjIGFkZHJlc3Mgb3JkZXIgKi8KKwl0eHJlZyA9IHJlYWRsKGJhc2Ug
KyBOdlJlZ1RyYW5zbWl0UG9sbCk7CisJaWYgKHR4cmVnICYgTlZSRUdfVFJBTlNNSVRQT0xMX01B
Q19BRERSX1JFVikgeworCQkvKiBtYWMgYWRkcmVzcyBpcyBhbHJlYWR5IGluIGNvcnJlY3Qgb3Jk
ZXIgKi8KKwkJZGV2LT5kZXZfYWRkclswXSA9IChucC0+b3JpZ19tYWNbMF0gPj4gIDApICYgMHhm
ZjsKKwkJZGV2LT5kZXZfYWRkclsxXSA9IChucC0+b3JpZ19tYWNbMF0gPj4gIDgpICYgMHhmZjsK
KwkJZGV2LT5kZXZfYWRkclsyXSA9IChucC0+b3JpZ19tYWNbMF0gPj4gMTYpICYgMHhmZjsKKwkJ
ZGV2LT5kZXZfYWRkclszXSA9IChucC0+b3JpZ19tYWNbMF0gPj4gMjQpICYgMHhmZjsKKwkJZGV2
LT5kZXZfYWRkcls0XSA9IChucC0+b3JpZ19tYWNbMV0gPj4gIDApICYgMHhmZjsKKwkJZGV2LT5k
ZXZfYWRkcls1XSA9IChucC0+b3JpZ19tYWNbMV0gPj4gIDgpICYgMHhmZjsKKwl9IGVsc2Ugewog
CWRldi0+ZGV2X2FkZHJbMF0gPSAobnAtPm9yaWdfbWFjWzFdID4+ICA4KSAmIDB4ZmY7CiAJZGV2
LT5kZXZfYWRkclsxXSA9IChucC0+b3JpZ19tYWNbMV0gPj4gIDApICYgMHhmZjsKIAlkZXYtPmRl
dl9hZGRyWzJdID0gKG5wLT5vcmlnX21hY1swXSA+PiAyNCkgJiAweGZmOwogCWRldi0+ZGV2X2Fk
ZHJbM10gPSAobnAtPm9yaWdfbWFjWzBdID4+IDE2KSAmIDB4ZmY7CiAJZGV2LT5kZXZfYWRkcls0
XSA9IChucC0+b3JpZ19tYWNbMF0gPj4gIDgpICYgMHhmZjsKIAlkZXYtPmRldl9hZGRyWzVdID0g
KG5wLT5vcmlnX21hY1swXSA+PiAgMCkgJiAweGZmOworCQkvKiBzZXQgcGVybWFuZW50IGFkZHJl
c3MgdG8gYmUgY29ycmVjdCBhc3dlbGwgKi8KKwkJbnAtPm9yaWdfbWFjWzBdID0gKGRldi0+ZGV2
X2FkZHJbMF0gPDwgMCkgKyAoZGV2LT5kZXZfYWRkclsxXSA8PCA4KSArCisJCQkoZGV2LT5kZXZf
YWRkclsyXSA8PCAxNikgKyAoZGV2LT5kZXZfYWRkclszXSA8PCAyNCk7CisJCW5wLT5vcmlnX21h
Y1sxXSA9IChkZXYtPmRldl9hZGRyWzRdIDw8IDApICsgKGRldi0+ZGV2X2FkZHJbNV0gPDwgOCk7
CisJCXdyaXRlbCh0eHJlZ3xOVlJFR19UUkFOU01JVFBPTExfTUFDX0FERFJfUkVWLCBiYXNlICsg
TnZSZWdUcmFuc21pdFBvbGwpOworCX0KKyNpZiBOVlZFUiA+IFNVU0UxMAogCW1lbWNweShkZXYt
PnBlcm1fYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CiAKIAlpZiAoIWlzX3Zh
bGlkX2V0aGVyX2FkZHIoZGV2LT5wZXJtX2FkZHIpKSB7CisjZWxzZQorCWlmICghaXNfdmFsaWRf
ZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgewkJCisjZW5kaWYJCiAJCS8qCiAJCSAqIEJhZCBt
YWMgYWRkcmVzcy4gQXQgbGVhc3Qgb25lIGJpb3Mgc2V0cyB0aGUgbWFjIGFkZHJlc3MKIAkJICog
dG8gMDE6MjM6NDU6Njc6ODk6YWIKQEAgLTQzMDgsMTAgKzU3MzksMTIgQEAKIAlkcHJpbnRrKEtF
Uk5fREVCVUcgIiVzOiBNQUMgQWRkcmVzcyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxu
IiwgcGNpX25hbWUocGNpX2RldiksCiAJCQlkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRy
WzFdLCBkZXYtPmRldl9hZGRyWzJdLAogCQkJZGV2LT5kZXZfYWRkclszXSwgZGV2LT5kZXZfYWRk
cls0XSwgZGV2LT5kZXZfYWRkcls1XSk7CisJLyogc2V0IG1hYyBhZGRyZXNzICovCisJbnZfY29w
eV9tYWNfdG9faHcoZGV2KTsKIAogCS8qIGRpc2FibGUgV09MICovCiAJd3JpdGVsKDAsIGJhc2Ug
KyBOdlJlZ1dha2VVcEZsYWdzKTsKLQlucC0+d29sZW5hYmxlZCA9IDA7CisJbnAtPndvbGVuYWJs
ZWQgPSB3b2w7CiAKIAlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19QT1dFUl9DTlRSTCkg
ewogCQl1OCByZXZpc2lvbl9pZDsKQEAgLTQzNTMsNiArNTc4Niw1OSBAQAogCQlucC0+bmVlZF9s
aW5rdGltZXIgPSAwOwogCX0KIAorCS8qIGNsZWFyIHBoeSBzdGF0ZSBhbmQgdGVtcG9yYXJpbHkg
aGFsdCBwaHkgaW50ZXJydXB0cyAqLworCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNSUlNYXNrKTsK
KwlwaHlzdGF0ZSA9IHJlYWRsKGJhc2UgKyBOdlJlZ0FkYXB0ZXJDb250cm9sKTsKKwlpZiAocGh5
c3RhdGUgJiBOVlJFR19BREFQVENUTF9SVU5OSU5HKSB7CisJCXBoeXN0YXRlX29yaWcgPSAxOwor
CQlwaHlzdGF0ZSAmPSB+TlZSRUdfQURBUFRDVExfUlVOTklORzsKKwkJd3JpdGVsKHBoeXN0YXRl
LCBiYXNlICsgTnZSZWdBZGFwdGVyQ29udHJvbCk7CisJfQorCXdyaXRlbChOVlJFR19NSUlTVEFU
X01BU0ssIGJhc2UgKyBOdlJlZ01JSVN0YXR1cyk7CisKKwlpZiAoaWQtPmRyaXZlcl9kYXRhICYg
REVWX0hBU19NR01UX1VOSVQpIHsKKwkJd3JpdGVsKE5WX1VOS05PV05fVkFMLCBiYXNlICsgTnZS
ZWdQYXR0ZXJuQ1JDKTsKKwkgICAgICAgCXBjaV9wdXNoKGJhc2UpOworCQludl9tc2xlZXAoNTAw
KTsKKwkJLyogbWFuYWdlbWVudCB1bml0IHJ1bm5pbmcgb24gdGhlIG1hYz8gKi8KKwkJbnAtPm1h
Y19pbl91c2UgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdf
WE1JVENUTF9NR01UX1NUOworCQlpZiAobnAtPm1hY19pbl91c2UpIHsKKwkJCXUzMiBtZ210X3N5
bmM7CisJCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcm9iZTogbWFjIGluIHVzZVxuIixkZXYt
Pm5hbWUpOworCQkJLyogbWFuYWdlbWVudCB1bml0IHNldHVwIHRoZSBwaHkgYWxyZWFkeT8gKi8K
KwkJCW1nbXRfc3luYyA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBO
VlJFR19YTUlUQ1RMX1NZTkNfTUFTSzsKKwkJCWlmIChtZ210X3N5bmMgPT0gTlZSRUdfWE1JVENU
TF9TWU5DX05PVF9SRUFEWSkgeworCQkJCWRwcmludGsoS0VSTl9ERUJVRyIlcyA6IHByb2JlOiBz
eW5jIG5vdCByZWFkeVxuIixkZXYtPm5hbWUpOworCQkJCWlmICghbnZfbWdtdF9hY3F1aXJlX3Nl
bWEoZGV2KSkgeworCQkJCQlkcHJpbnRrKEtFUk5fREVCVUciJXM6IHByb2JlOiBjb3VsZCBub3Qg
YWNxdWlyZSBzZW1hXG4iLGRldi0+bmFtZSk7CisJCQkJCWZvciAoaSA9IDA7IGkgPCA1MDAwOyBp
KyspIHsKKwkJCQkJCW52X21zbGVlcCgxKTsKKwkJCQkJCW1nbXRfc3luYyA9IHJlYWRsKGJhc2Ug
KyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX1NZTkNfTUFTSzsKKwkJ
CQkJCWlmIChtZ210X3N5bmMgPT0gTlZSRUdfWE1JVENUTF9TWU5DX05PVF9SRUFEWSkKKwkJCQkJ
CQljb250aW51ZTsKKwkJCQkJCWlmIChtZ210X3N5bmMgPT0gTlZSRUdfWE1JVENUTF9TWU5DX1BI
WV9JTklUKSB7CisJCQkJCQkJZHByaW50ayhLRVJOX0RFQlVHIiVzOiBwcm9iZTogcGh5IGluaXRl
ZCBieSBTTVUgMVxuIixkZXYtPm5hbWUpOworCQkJCQkJCXBoeWluaXRpYWxpemVkID0gMTsKKwkJ
CQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQkJZHByaW50ayhLRVJOX0RFQlVHIiVzOiBwcm9iZTog
YnJlYWtpbmcgb3V0IG9mIGxvb3BcbiIsZGV2LT5uYW1lKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7
CisJCQkJCS8qIHdlIG5lZWQgdG8gaW5pdCB0aGUgcGh5ICovCisJCQkJCWRwcmludGsoS0VSTl9E
RUJVRyIlczogcHJvYmU6IHdlIG5lZWQgdG8gaW5pdCBwaHkgMVxuIixkZXYtPm5hbWUpOworCQkJ
CX0KKwkJCX0gZWxzZSBpZiAobWdtdF9zeW5jID09IE5WUkVHX1hNSVRDVExfU1lOQ19QSFlfSU5J
VCkgeworCQkJCWRwcmludGsoS0VSTl9ERUJVRyIlczogcHJvYmU6IHBoeSBpbml0ZWQgYnkgU01V
IDJcbiIsZGV2LT5uYW1lKTsKKwkJCQkvKiBwaHkgaXMgaW5pdGVkIGJ5IFNNVSAqLworCQkJCXBo
eWluaXRpYWxpemVkID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJLyogd2UgbmVlZCB0byBpbml0IHRo
ZSBwaHkgKi8KKwkJCQlkcHJpbnRrKEtFUk5fREVCVUciJXM6IHByb2JlOiB3ZSBuZWVkIHRvIGlu
aXQgcGh5IDJcbiIsZGV2LT5uYW1lKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlkcHJpbnRrKEtFUk5f
REVCVUciJXM6IHByb2JlOiBtYWMgbm90IGluIHVzZVxuIixkZXYtPm5hbWUpOworCX0KKwogCS8q
IGZpbmQgYSBzdWl0YWJsZSBwaHkgKi8KIAlmb3IgKGkgPSAxOyBpIDw9IDMyOyBpKyspIHsKIAkJ
aW50IGlkMSwgaWQyOwpAQCAtNDM2OSw2ICs1ODU1LDcgQEAKIAkJaWYgKGlkMiA8IDAgfHwgaWQy
ID09IDB4ZmZmZikKIAkJCWNvbnRpbnVlOwogCisJCW5wLT5waHlfbW9kZWwgPSBpZDIgJiBQSFlJ
RDJfTU9ERUxfTUFTSzsKIAkJaWQxID0gKGlkMSAmIFBIWUlEMV9PVUlfTUFTSykgPDwgUEhZSUQx
X09VSV9TSEZUOwogCQlpZDIgPSAoaWQyICYgUEhZSUQyX09VSV9NQVNLKSA+PiBQSFlJRDJfT1VJ
X1NIRlQ7CiAJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9wZW46IEZvdW5kIFBIWSAlMDR4OiUw
NHggYXQgYWRkcmVzcyAlZC5cbiIsCkBAIC00MzgyLDE0ICs1ODY5LDI1IEBACiAJCSAgICAgICBw
Y2lfbmFtZShwY2lfZGV2KSk7CiAJCWdvdG8gb3V0X2Vycm9yOwogCX0KLQorCQorCWlmICghcGh5
aW5pdGlhbGl6ZWQpIHsJCQogCS8qIHJlc2V0IGl0ICovCiAJcGh5X2luaXQoZGV2KTsKKwl9IGVs
c2UgeworCQkvKiBzZWUgaWYgZ2lnYWJpdCBwaHkgKi8KKwkJdTMyIG1paV9zdGF0dXMgPSBtaWlf
cncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNU1IsIE1JSV9SRUFEKTsKKwkJaWYgKG1paV9zdGF0
dXMgJiBQSFlfR0lHQUJJVCkgeworCQkJbnAtPmdpZ2FiaXQgPSBQSFlfR0lHQUJJVDsKKwkJfQor
CX0KKwlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NR01UX1VOSVQpIHsKKwkJbnZfbWdt
dF9kcml2ZXJfbG9hZGVkKGRldiwgMSk7CisJfQogCiAJLyogc2V0IGRlZmF1bHQgbGluayBzcGVl
ZCBzZXR0aW5ncyAqLwogCW5wLT5saW5rc3BlZWQgPSBOVlJFR19MSU5LU1BFRURfRk9SQ0V8TlZS
RUdfTElOS1NQRUVEXzEwOwogCW5wLT5kdXBsZXggPSAwOwotCW5wLT5hdXRvbmVnID0gMTsKKwlu
cC0+YXV0b25lZyA9IGF1dG9uZWc7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlp
ZiAoZXJyKSB7CkBAIC00NDAzLDYgKzU5MDEsMTAgQEAKIAlyZXR1cm4gMDsKIAogb3V0X2Vycm9y
OgorCWlmIChwaHlzdGF0ZV9vcmlnKQorCQl3cml0ZWwocGh5c3RhdGV8TlZSRUdfQURBUFRDVExf
UlVOTklORywgYmFzZSArIE52UmVnQWRhcHRlckNvbnRyb2wpOworCWlmIChucC0+bWFjX2luX3Vz
ZSkKKwkJbnZfbWdtdF9kcml2ZXJfbG9hZGVkKGRldiwgMCk7CiAJcGNpX3NldF9kcnZkYXRhKHBj
aV9kZXYsIE5VTEwpOwogb3V0X2ZyZWVyaW5nOgogCWZyZWVfcmluZ3MoZGV2KTsKQEAgLTQ0MjEs
OCArNTkyMywxNyBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IG52X3JlbW92ZShzdHJ1Y3QgcGNp
X2RldiAqcGNpX2RldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZk
YXRhKHBjaV9kZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKwl1
OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYo
ZGV2KTsKKwkvKiBzcGVjaWFsIG9wOiB3cml0ZSBiYWNrIHRoZSBtaXNvcmRlcmVkIE1BQyBhZGRy
ZXNzIC0gb3RoZXJ3aXNlCisJICogdGhlIG5leHQgbnZfcHJvYmUgd291bGQgc2VlIGEgd3Jvbmcg
YWRkcmVzcy4KKwkgKi8KKwl3cml0ZWwobnAtPm9yaWdfbWFjWzBdLCBiYXNlICsgTnZSZWdNYWNB
ZGRyQSk7CisJd3JpdGVsKG5wLT5vcmlnX21hY1sxXSwgYmFzZSArIE52UmVnTWFjQWRkckIpOwor
CWlmIChucC0+bWFjX2luX3VzZSkKKwkJbnZfbWdtdF9kcml2ZXJfbG9hZGVkKGRldiwgMCk7CiAK
IAkvKiBmcmVlIGFsbCBzdHJ1Y3R1cmVzICovCiAJZnJlZV9yaW5ncyhkZXYpOwpAQCAtNDQ4OCw0
MyArNTk5OSw0MyBAQAogCX0sCiAJewkvKiBNQ1A1NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJ
CVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05W
RU5FVF8xNCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJ
TktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9E
TUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9D
TlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVT
VF9FWFRFTkRFRCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURf
TElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdI
X0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VS
X0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19U
RVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklULAogCX0sCiAJewkvKiBNQ1A1NSBFdGhlcm5l
dCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9E
RVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJ
TUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNL
U1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJ
X1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFU
SVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURf
VElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hF
Q0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19N
U0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NU
QVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklULAogCX0sCiAJ
ewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRP
Ul9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNiksCi0JCS5kcml2ZXJf
ZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hf
RE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RY
fERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUQsCisJCS5kcml2ZXJfZGF0
YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1B
fERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERF
Vl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVQs
CiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQ
Q0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE3KSwKLQkJ
LmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9I
QVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNF
RlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKKwkJLmRy
aXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNf
SElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJB
TUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01H
TVRfVU5JVCwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lf
REVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRf
MTgpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElN
RVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9I
QVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVE
LAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8
REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNf
UEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVEfERF
Vl9IQVNfTUdNVF9VTklULAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICov
CiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElB
X05WRU5FVF8xOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVE
X0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19N
U0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1Rf
RVhURU5ERUQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJ
TktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8
REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhU
RU5ERUR8REVWX0hBU19NR01UX1VOSVQsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRy
b2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9J
RF9OVklESUFfTlZFTkVUXzIwKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8
REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVW
X0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFV
U0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAorCQku
ZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hB
U19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9X
RVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElT
VElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVQsCiAJfSwKIAl7CS8q
IE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lE
X05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIxKSwKLQkJLmRyaXZlcl9kYXRh
ID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVND
fERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERF
Vl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hB
U19URVNUX0VYVEVOREVELAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZf
TkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFT
X0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZS
QU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19N
R01UX1VOSVQsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJ
X0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVU
XzIyKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJ
TUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxE
RVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZf
SEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAorCQkuZHJpdmVyX2RhdGEgPSBE
RVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVW
X0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hB
U19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RF
U1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVQsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0
IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RF
VklDRV9JRF9OVklESUFfTlZFTkVUXzIzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElN
RVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tT
VU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9I
QVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVE
LAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8
REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9I
QVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNf
U1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVQsCiAJfSwK
IAl7MCx9LAogfTsKQEAgLTQ1NDAsNiArNjA1MSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0
X25pYyh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aC5jOiBSZXZlcnNlIEVu
Z2luZWVyZWQgbkZvcmNlIGV0aGVybmV0IGRyaXZlci4gVmVyc2lvbiAlcy5cbiIsIEZPUkNFREVU
SF9WRVJTSU9OKTsKKwlkcHJpbnRrKEtFUk5fREVCVUcgIkRFQlVHIFZFUlNJT05cbiIpOwogCXJl
dHVybiBwY2lfbW9kdWxlX2luaXQoJmRyaXZlcik7CiB9CiAKQEAgLTQ1NDgsNiArNjA2MCw3IEBA
CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQogCisjaWYgTlZWRVIgPiBTTEVT
OQogbW9kdWxlX3BhcmFtKG1heF9pbnRlcnJ1cHRfd29yaywgaW50LCAwKTsKIE1PRFVMRV9QQVJN
X0RFU0MobWF4X2ludGVycnVwdF93b3JrLCAiZm9yY2VkZXRoIG1heGltdW0gZXZlbnRzIGhhbmRs
ZWQgcGVyIGludGVycnVwdCIpOwogbW9kdWxlX3BhcmFtKG9wdGltaXphdGlvbl9tb2RlLCBpbnQs
IDApOwpAQCAtNDU1OCw5ICs2MDcxLDc3IEBACiBNT0RVTEVfUEFSTV9ERVNDKG1zaSwgIk1TSSBp
bnRlcnJ1cHRzIGFyZSBlbmFibGVkIGJ5IHNldHRpbmcgdG8gMSBhbmQgZGlzYWJsZWQgYnkgc2V0
dGluZyB0byAwLiIpOwogbW9kdWxlX3BhcmFtKG1zaXgsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9E
RVNDKG1zaXgsICJNU0lYIGludGVycnVwdHMgYXJlIGVuYWJsZWQgYnkgc2V0dGluZyB0byAxIGFu
ZCBkaXNhYmxlZCBieSBzZXR0aW5nIHRvIDAuIik7CisKK21vZHVsZV9wYXJhbShzcGVlZF9kdXBs
ZXgsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNwZWVkX2R1cGxleCwgIlBIWSBzcGVlZCBh
bmQgZHVwbGV4IHNldHRpbmdzLiBBdXRvID0gMCwgMTBtYnBzIGhhbGYgPSAxLCAxMG1icHMgZnVs
bCA9IDIsIDEwMG1icHMgaGFsZiA9IDMsIDEwMG1icHMgZnVsbCA9IDQsIDEwMDBtYnBzIGZ1bGwg
PSA1LiIpOworbW9kdWxlX3BhcmFtKGF1dG9uZWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVND
KGF1dG9uZWcsICJQSFkgYXV0b25lZ290aWF0ZSBpcyBlbmFibGVkIGJ5IHNldHRpbmcgdG8gMSBh
bmQgZGlzYWJsZWQgYnkgc2V0dGluZyB0byAwLiIpOworbW9kdWxlX3BhcmFtKHNjYXR0ZXJfZ2F0
aGVyLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzY2F0dGVyX2dhdGhlciwgIlNjYXR0ZXIg
Z2F0aGVyIGlzIGVuYWJsZWQgYnkgc2V0dGluZyB0byAxIGFuZCBkaXNhYmxlZCBieSBzZXR0aW5n
IHRvIDAuIik7Cittb2R1bGVfcGFyYW0odHNvX29mZmxvYWQsIGludCwgMCk7CitNT0RVTEVfUEFS
TV9ERVNDKHRzb19vZmZsb2FkLCAiVENQIFNlZ21lbnRhdGlvbiBvZmZsb2FkIGlzIGVuYWJsZWQg
Ynkgc2V0dGluZyB0byAxIGFuZCBkaXNhYmxlZCBieSBzZXR0aW5nIHRvIDAuIik7Cittb2R1bGVf
cGFyYW0obXR1LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtdHUsICJNVFUgdmFsdWUuIE1h
eGltdW0gdmFsdWUgb2YgMTUwMCBvciA5MTAwIGRlcGVuZGluZyBvbiBoYXJkd2FyZS4iKTsKK21v
ZHVsZV9wYXJhbSh0eF9jaGVja3N1bV9vZmZsb2FkLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVT
Qyh0eF9jaGVja3N1bV9vZmZsb2FkLCAiVHggY2hlY2tzdW0gb2ZmbG9hZCBpcyBlbmFibGVkIGJ5
IHNldHRpbmcgdG8gMSBhbmQgZGlzYWJsZWQgYnkgc2V0dGluZyB0byAwLiIpOworbW9kdWxlX3Bh
cmFtKHJ4X2NoZWNrc3VtX29mZmxvYWQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHJ4X2No
ZWNrc3VtX29mZmxvYWQsICJSeCBjaGVja3N1bSBvZmZsb2FkIGlzIGVuYWJsZWQgYnkgc2V0dGlu
ZyB0byAxIGFuZCBkaXNhYmxlZCBieSBzZXR0aW5nIHRvIDAuIik7Cittb2R1bGVfcGFyYW0odHhf
cmluZ19zaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0eF9yaW5nX3NpemUsICJUeCBy
aW5nIHNpemUuIE1heGltdW0gdmFsdWUgb2YgMTAyNCBvciAxNjM4NCBkZXBlbmRpbmcgb24gaGFy
ZHdhcmUuIik7Cittb2R1bGVfcGFyYW0ocnhfcmluZ19zaXplLCBpbnQsIDApOworTU9EVUxFX1BB
Uk1fREVTQyhyeF9yaW5nX3NpemUsICJSeCByaW5nIHNpemUuIE1heGltdW0gdmFsdWUgb2YgMTAy
NCBvciAxNjM4NCBkZXBlbmRpbmcgb24gaGFyZHdhcmUuIik7Cittb2R1bGVfcGFyYW0odHhfZmxv
d19jb250cm9sLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0eF9mbG93X2NvbnRyb2wsICJU
eCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBieSBzZXR0aW5nIHRvIDEgYW5kIGRpc2FibGVkIGJ5
IHNldHRpbmcgdG8gMC4iKTsKK21vZHVsZV9wYXJhbShyeF9mbG93X2NvbnRyb2wsIGludCwgMCk7
CitNT0RVTEVfUEFSTV9ERVNDKHJ4X2Zsb3dfY29udHJvbCwgIlJ4IGZsb3cgY29udHJvbCBpcyBl
bmFibGVkIGJ5IHNldHRpbmcgdG8gMSBhbmQgZGlzYWJsZWQgYnkgc2V0dGluZyB0byAwLiIpOwog
bW9kdWxlX3BhcmFtKGRtYV82NGJpdCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZG1hXzY0
Yml0LCAiSGlnaCBETUEgaXMgZW5hYmxlZCBieSBzZXR0aW5nIHRvIDEgYW5kIGRpc2FibGVkIGJ5
IHNldHRpbmcgdG8gMC4iKTsKLQorbW9kdWxlX3BhcmFtKHdvbCwgaW50LCAwKTsKK01PRFVMRV9Q
QVJNX0RFU0Mod29sLCAiV2FrZS1Pbi1MYW4gaXMgZW5hYmxlZCBieSBzZXR0aW5nIHRvIDEgYW5k
IGRpc2FibGVkIGJ5IHNldHRpbmcgdG8gMC4iKTsKK21vZHVsZV9wYXJhbSh0YWdnaW5nXzgwMjFw
cSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModGFnZ2luZ184MDIxcHEsICI4MDIuMXBxIHRh
Z2dpbmcgaXMgZW5hYmxlZCBieSBzZXR0aW5nIHRvIDEgYW5kIGRpc2FibGVkIGJ5IHNldHRpbmcg
dG8gMC4iKTsKKyNlbHNlCitNT0RVTEVfUEFSTShtYXhfaW50ZXJydXB0X3dvcmssICJpIik7CitN
T0RVTEVfUEFSTV9ERVNDKG1heF9pbnRlcnJ1cHRfd29yaywgImZvcmNlZGV0aCBtYXhpbXVtIGV2
ZW50cyBoYW5kbGVkIHBlciBpbnRlcnJ1cHQiKTsKK01PRFVMRV9QQVJNKG9wdGltaXphdGlvbl9t
b2RlLCAiaSIpOworTU9EVUxFX1BBUk1fREVTQyhvcHRpbWl6YXRpb25fbW9kZSwgIkluIHRocm91
Z2hwdXQgbW9kZSAoMCksIGV2ZXJ5IHR4ICYgcnggcGFja2V0IHdpbGwgZ2VuZXJhdGUgYW4gaW50
ZXJydXB0LiBJbiBDUFUgbW9kZSAoMSksIGludGVycnVwdHMgYXJlIGNvbnRyb2xsZWQgYnkgYSB0
aW1lci4iKTsKK01PRFVMRV9QQVJNKHBvbGxfaW50ZXJ2YWwsICJpIik7CitNT0RVTEVfUEFSTV9E
RVNDKHBvbGxfaW50ZXJ2YWwsICJJbnRlcnZhbCBkZXRlcm1pbmVzIGhvdyBmcmVxdWVudCB0aW1l
ciBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IFsodGltZV9pbl9taWNyb19zZWNzICogMTAwKSAv
ICgyXjEwKV0uIE1pbiBpcyAwIGFuZCBNYXggaXMgNjU1MzUuIik7CisjaWZkZWYgQ09ORklHX1BD
SV9NU0kKK01PRFVMRV9QQVJNKG1zaSwgImkiKTsKK01PRFVMRV9QQVJNX0RFU0MobXNpLCAiTVNJ
IGludGVycnVwdHMgYXJlIGVuYWJsZWQgYnkgc2V0dGluZyB0byAxIGFuZCBkaXNhYmxlZCBieSBz
ZXR0aW5nIHRvIDAuIik7CitNT0RVTEVfUEFSTShtc2l4LCAiaSIpOworTU9EVUxFX1BBUk1fREVT
Qyhtc2l4LCAiTVNJWCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGJ5IHNldHRpbmcgdG8gMSBhbmQg
ZGlzYWJsZWQgYnkgc2V0dGluZyB0byAwLiIpOworI2VuZGlmCitNT0RVTEVfUEFSTShzcGVlZF9k
dXBsZXgsICJpIik7CitNT0RVTEVfUEFSTV9ERVNDKHNwZWVkX2R1cGxleCwgIlBIWSBzcGVlZCBh
bmQgZHVwbGV4IHNldHRpbmdzLiBBdXRvID0gMCwgMTBtYnBzIGhhbGYgPSAxLCAxMG1icHMgZnVs
bCA9IDIsIDEwMG1icHMgaGFsZiA9IDMsIDEwMG1icHMgZnVsbCA9IDQsIDEwMDBtYnBzIGZ1bGwg
PSA1LiIpOworTU9EVUxFX1BBUk0oYXV0b25lZywgImkiKTsKK01PRFVMRV9QQVJNX0RFU0MoYXV0
b25lZywgIlBIWSBhdXRvbmVnb3RpYXRlIGlzIGVuYWJsZWQgYnkgc2V0dGluZyB0byAxIGFuZCBk
aXNhYmxlZCBieSBzZXR0aW5nIHRvIDAuIik7CitNT0RVTEVfUEFSTShzY2F0dGVyX2dhdGhlciwg
ImkiKTsKK01PRFVMRV9QQVJNX0RFU0Moc2NhdHRlcl9nYXRoZXIsICJTY2F0dGVyIGdhdGhlciBp
cyBlbmFibGVkIGJ5IHNldHRpbmcgdG8gMSBhbmQgZGlzYWJsZWQgYnkgc2V0dGluZyB0byAwLiIp
OworTU9EVUxFX1BBUk0odHNvX29mZmxvYWQsICJpIik7CitNT0RVTEVfUEFSTV9ERVNDKHRzb19v
ZmZsb2FkLCAiVENQIFNlZ21lbnRhdGlvbiBvZmZsb2FkIGlzIGVuYWJsZWQgYnkgc2V0dGluZyB0
byAxIGFuZCBkaXNhYmxlZCBieSBzZXR0aW5nIHRvIDAuIik7CitNT0RVTEVfUEFSTShtdHUsICJp
Iik7CitNT0RVTEVfUEFSTV9ERVNDKG10dSwgIk1UVSB2YWx1ZS4gTWF4aW11bSB2YWx1ZSBvZiAx
NTAwIG9yIDkxMDAgZGVwZW5kaW5nIG9uIGhhcmR3YXJlLiIpOworTU9EVUxFX1BBUk0odHhfY2hl
Y2tzdW1fb2ZmbG9hZCwgImkiKTsKK01PRFVMRV9QQVJNX0RFU0ModHhfY2hlY2tzdW1fb2ZmbG9h
ZCwgIlR4IGNoZWNrc3VtIG9mZmxvYWQgaXMgZW5hYmxlZCBieSBzZXR0aW5nIHRvIDEgYW5kIGRp
c2FibGVkIGJ5IHNldHRpbmcgdG8gMC4iKTsKK01PRFVMRV9QQVJNKHJ4X2NoZWNrc3VtX29mZmxv
YWQsICJpIik7CitNT0RVTEVfUEFSTV9ERVNDKHJ4X2NoZWNrc3VtX29mZmxvYWQsICJSeCBjaGVj
a3N1bSBvZmZsb2FkIGlzIGVuYWJsZWQgYnkgc2V0dGluZyB0byAxIGFuZCBkaXNhYmxlZCBieSBz
ZXR0aW5nIHRvIDAuIik7CitNT0RVTEVfUEFSTSh0eF9yaW5nX3NpemUsICJpIik7CitNT0RVTEVf
UEFSTV9ERVNDKHR4X3Jpbmdfc2l6ZSwgIlR4IHJpbmcgc2l6ZS4gTWF4aW11bSB2YWx1ZSBvZiAx
MDI0IG9yIDE2Mzg0IGRlcGVuZGluZyBvbiBoYXJkd2FyZS4iKTsKK01PRFVMRV9QQVJNKHJ4X3Jp
bmdfc2l6ZSwgImkiKTsKK01PRFVMRV9QQVJNX0RFU0MocnhfcmluZ19zaXplLCAiUnggcmluZyBz
aXplLiBNYXhpbXVtIHZhbHVlIG9mIDEwMjQgb3IgMTYzODQgZGVwZW5kaW5nIG9uIGhhcmR3YXJl
LiIpOworTU9EVUxFX1BBUk0odHhfZmxvd19jb250cm9sLCAiaSIpOworTU9EVUxFX1BBUk1fREVT
Qyh0eF9mbG93X2NvbnRyb2wsICJUeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBieSBzZXR0aW5n
IHRvIDEgYW5kIGRpc2FibGVkIGJ5IHNldHRpbmcgdG8gMC4iKTsKK01PRFVMRV9QQVJNKHJ4X2Zs
b3dfY29udHJvbCwgImkiKTsKK01PRFVMRV9QQVJNX0RFU0MocnhfZmxvd19jb250cm9sLCAiUngg
ZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgYnkgc2V0dGluZyB0byAxIGFuZCBkaXNhYmxlZCBieSBz
ZXR0aW5nIHRvIDAuIik7CitNT0RVTEVfUEFSTShkbWFfNjRiaXQsICJpIik7CitNT0RVTEVfUEFS
TV9ERVNDKGRtYV82NGJpdCwgIkhpZ2ggRE1BIGlzIGVuYWJsZWQgYnkgc2V0dGluZyB0byAxIGFu
ZCBkaXNhYmxlZCBieSBzZXR0aW5nIHRvIDAuIik7CitNT0RVTEVfUEFSTSh3b2wsICJpIik7CitN
T0RVTEVfUEFSTV9ERVNDKHdvbCwgIldha2UtT24tTGFuIGlzIGVuYWJsZWQgYnkgc2V0dGluZyB0
byAxIGFuZCBkaXNhYmxlZCBieSBzZXR0aW5nIHRvIDAuIik7CitNT0RVTEVfUEFSTSh0YWdnaW5n
XzgwMjFwcSwgImkiKTsKK01PRFVMRV9QQVJNX0RFU0ModGFnZ2luZ184MDIxcHEsICI4MDIuMXBx
IHRhZ2dpbmcgaXMgZW5hYmxlZCBieSBzZXR0aW5nIHRvIDEgYW5kIGRpc2FibGVkIGJ5IHNldHRp
bmcgdG8gMC4iKTsKKyNlbmRpZgogTU9EVUxFX0FVVEhPUigiTWFuZnJlZCBTcHJhdWwgPG1hbmZy
ZWRAY29sb3JmdWxsaWZlLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUmV2ZXJzZSBFbmdp
bmVlcmVkIG5Gb3JjZSBldGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2143</attachid>
            <date>2007-08-12 20:17:32 +0400</date>
            <delta_ts>2007-08-12 20:17:32 +0400</delta_ts>
            <desc>linux-2.6.18-forcedeth-0.60.patch</desc>
            <filename>linux-2.6.18-forcedeth-0.60.patch</filename>
            <type>text/plain</type>
            <size>137792</size>
            <attacher>led</attacher>
            
              <data encoding="base64">ZGlmZiAtdXJOIGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvZHJpdmVycy9uZXQvZm9yY2VkZXRo
LmMga2VybmVsLXNvdXJjZS0yLjYuMTgvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKLS0tIGtlcm5l
bC1zb3VyY2UtMi42LjE4Lm9yaWcvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMJMjAwNi0wOS0yMCAw
Njo0MjowNiArMDMwMAorKysga2VybmVsLXNvdXJjZS0yLjYuMTgvZHJpdmVycy9uZXQvZm9yY2Vk
ZXRoLmMJMjAwNy0wOC0xMiAwMjozOTo0MSArMDMwMApAQCAtMTA5LDYgKzEwOSwxMCBAQAogICoJ
MC41NDogMjEgTWFyIDIwMDY6IEZpeCBzcGluIGxvY2tzIGZvciBtdWx0aSBpcnFzIGFuZCBjbGVh
bnVwLgogICoJMC41NTogMjIgTWFyIDIwMDY6IEFkZCBmbG93IGNvbnRyb2wgKHBhdXNlIGZyYW1l
KS4KICAqCTAuNTY6IDIyIE1hciAyMDA2OiBBZGRpdGlvbmFsIGV0aHRvb2wgY29uZmlnIGFuZCBt
b2R1bGVwYXJhbSBzdXBwb3J0LgorICoJMC41NzogMTQgTWF5IDIwMDY6IE1vdmVkIG1hYyBhZGRy
ZXNzIHdyaXRlcyB0byBudl9wcm9iZSBhbmQgbnZfcmVtb3ZlLgorICoJMC41ODogMjAgTWF5IDIw
MDY6IE9wdGltaXplZCByeCBhbmQgdHggZGF0YSBwYXRocy4KKyAqCTAuNTk6IDMxIE1heSAyMDA2
OiBBZGRlZCBzdXBwb3J0IGZvciBzaWRlYmFuZCBtYW5hZ2VtZW50IHVuaXQuCisgKgkwLjYwOiAz
MSBNYXkgMjAwNjogQWRkZWQgc3VwcG9ydCBmb3IgcmVjb3ZlcmFibGUgZXJyb3IuCiAgKgogICog
S25vd24gYnVnczoKICAqIFdlIHN1c3BlY3QgdGhhdCBvbiBzb21lIGhhcmR3YXJlIG5vIFRYIGRv
bmUgaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkLgpAQCAtMTIwLDcgKzEyNCw3IEBACiAgKiBERVZf
TkVFRF9USU1FUklSUSB3aWxsIG5vdCBoYXJtIHlvdSBvbiBzYW5lIGhhcmR3YXJlLCBvbmx5IGdl
bmVyYXRpbmcgYSBmZXcKICAqIHN1cGVyZmx1b3VzIHRpbWVyIGludGVycnVwdHMgZnJvbSB0aGUg
bmljLgogICovCi0jZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC41NiIKKyNkZWZpbmUgRk9S
Q0VERVRIX1ZFUlNJT04JCSIwLjYwIgogI2RlZmluZSBEUlZfTkFNRQkJCSJmb3JjZWRldGgiCiAK
ICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE2OCwxMSArMTcyLDIzIEBACiAjZGVmaW5l
IERFVl9IQVNfUEFVU0VGUkFNRV9UWCAgIDB4MDIwMCAgLyogZGV2aWNlIHN1cHBvcnRzIHR4IHBh
dXNlIGZyYW1lcyAqLwogI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1MgICAgICAweDA0MDAgIC8q
IGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzICovCiAjZGVmaW5lIERFVl9IQVNfVEVTVF9F
WFRFTkRFRCAgIDB4MDgwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGV4dGVuZGVkIGRpYWdub3N0aWMg
dGVzdCAqLworI2RlZmluZSBERVZfSEFTX01HTVRfVU5JVCAgICAgICAweDEwMDAgIC8qIGRldmlj
ZSBzdXBwb3J0cyBtYW5hZ2VtZW50IHVuaXQgKi8KKworI2RlZmluZSBOVklESUFfRVRIRVJORVRf
SUQoZGV2aWNlaWQsbnZfZHJpdmVyX2RhdGEpIHtcCisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lE
X05WSURJQSwgXAorCQkuZGV2aWNlID0gZGV2aWNlaWQsIFwKKwkJLnN1YnZlbmRvciA9IFBDSV9B
TllfSUQsIFwKKwkJLnN1YmRldmljZSA9IFBDSV9BTllfSUQsIFwKKwkJLmRyaXZlcl9kYXRhID0g
bnZfZHJpdmVyX2RhdGEsIFwKKwkJfSwKKwkJCisjZGVmaW5lIE12X0xFRF9Db250cm9sIDE2Cisj
ZGVmaW5lIE12X1BhZ2VfQWRkcmVzcyAyMgogCiBlbnVtIHsKIAlOdlJlZ0lycVN0YXR1cyA9IDB4
MDAwLAogI2RlZmluZSBOVlJFR19JUlFTVEFUX01JSUVWRU5UCTB4MDQwCi0jZGVmaW5lIE5WUkVH
X0lSUVNUQVRfTUFTSwkJMHgxZmYKKyNkZWZpbmUgTlZSRUdfSVJRU1RBVF9NQVNLCQkweDgxZmYK
IAlOdlJlZ0lycU1hc2sgPSAweDAwNCwKICNkZWZpbmUgTlZSRUdfSVJRX1JYX0VSUk9SCQkweDAw
MDEKICNkZWZpbmUgTlZSRUdfSVJRX1JYCQkJMHgwMDAyCkBAIC0xODMsMTUgKzE5OSwxNiBAQAog
I2RlZmluZSBOVlJFR19JUlFfTElOSwkJCTB4MDA0MAogI2RlZmluZSBOVlJFR19JUlFfUlhfRk9S
Q0VECQkweDAwODAKICNkZWZpbmUgTlZSRUdfSVJRX1RYX0ZPUkNFRAkJMHgwMTAwCisjZGVmaW5l
IE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SCQkweDgwMDAKICNkZWZpbmUgTlZSRUdfSVJRTUFTS19U
SFJPVUdIUFVUCTB4MDBkZgogI2RlZmluZSBOVlJFR19JUlFNQVNLX0NQVQkJMHgwMDQwCiAjZGVm
aW5lIE5WUkVHX0lSUV9UWF9BTEwJCShOVlJFR19JUlFfVFhfRVJSfE5WUkVHX0lSUV9UWF9PS3xO
VlJFR19JUlFfVFhfRk9SQ0VEKQogI2RlZmluZSBOVlJFR19JUlFfUlhfQUxMCQkoTlZSRUdfSVJR
X1JYX0VSUk9SfE5WUkVHX0lSUV9SWHxOVlJFR19JUlFfUlhfTk9CVUZ8TlZSRUdfSVJRX1JYX0ZP
UkNFRCkKLSNkZWZpbmUgTlZSRUdfSVJRX09USEVSCQkJKE5WUkVHX0lSUV9USU1FUnxOVlJFR19J
UlFfTElOSykKKyNkZWZpbmUgTlZSRUdfSVJRX09USEVSCQkJKE5WUkVHX0lSUV9USU1FUnxOVlJF
R19JUlFfTElOS3xOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikKIAogI2RlZmluZSBOVlJFR19JUlFf
VU5LTk9XTgkofihOVlJFR19JUlFfUlhfRVJST1J8TlZSRUdfSVJRX1JYfE5WUkVHX0lSUV9SWF9O
T0JVRnxOVlJFR19JUlFfVFhfRVJSfCBcCiAJCQkJCU5WUkVHX0lSUV9UWF9PS3xOVlJFR19JUlFf
VElNRVJ8TlZSRUdfSVJRX0xJTkt8TlZSRUdfSVJRX1JYX0ZPUkNFRHwgXAotCQkJCQlOVlJFR19J
UlFfVFhfRk9SQ0VEKSkKKwkJCQkJTlZSRUdfSVJRX1RYX0ZPUkNFRHxOVlJFR19JUlFfUkVDT1ZF
Ul9FUlJPUikpCiAKIAlOdlJlZ1Vua25vd25TZXR1cFJlZzYgPSAweDAwOCwKICNkZWZpbmUgTlZS
RUdfVU5LU0VUVVA2X1ZBTAkJMwpAQCAtMjE2LDYgKzIzMywxNiBAQAogI2RlZmluZSBOVlJFR19N
QUNfUkVTRVRfQVNTRVJUCTB4MEYzCiAJTnZSZWdUcmFuc21pdHRlckNvbnRyb2wgPSAweDA4NCwK
ICNkZWZpbmUgTlZSRUdfWE1JVENUTF9TVEFSVAkweDAxCisjZGVmaW5lIE5WUkVHX1hNSVRDVExf
TUdNVF9TVAkweDQwMDAwMDAwCisjZGVmaW5lIE5WUkVHX1hNSVRDVExfU1lOQ19NQVNLCQkweDAw
MGYwMDAwCisjZGVmaW5lIE5WUkVHX1hNSVRDVExfU1lOQ19OT1RfUkVBRFkJMHgwCisjZGVmaW5l
IE5WUkVHX1hNSVRDVExfU1lOQ19QSFlfSU5JVAkweDAwMDQwMDAwCisjZGVmaW5lIE5WUkVHX1hN
SVRDVExfTUdNVF9TRU1BX01BU0sJMHgwMDAwMGYwMAorI2RlZmluZSBOVlJFR19YTUlUQ1RMX01H
TVRfU0VNQV9GUkVFCTB4MAorI2RlZmluZSBOVlJFR19YTUlUQ1RMX0hPU1RfU0VNQV9NQVNLCTB4
MDAwMGYwMDAKKyNkZWZpbmUgTlZSRUdfWE1JVENUTF9IT1NUX1NFTUFfQUNRCTB4MDAwMGYwMDAK
KyNkZWZpbmUgTlZSRUdfWE1JVENUTF9IT1NUX0xPQURFRAkweDAwMDA0MDAwCisjZGVmaW5lIE5W
UkVHX1hNSVRDVExfVFhfUEFUSF9FTgkweDAxMDAwMDAwCiAJTnZSZWdUcmFuc21pdHRlclN0YXR1
cyA9IDB4MDg4LAogI2RlZmluZSBOVlJFR19YTUlUU1RBVF9CVVNZCTB4MDEKIApAQCAtMjMxLDYg
KzI1OCw3IEBACiAjZGVmaW5lIE5WUkVHX09GRkxPQURfTk9STUFMCVJYX05JQ19CVUZTSVpFCiAJ
TnZSZWdSZWNlaXZlckNvbnRyb2wgPSAweDA5NCwKICNkZWZpbmUgTlZSRUdfUkNWQ1RMX1NUQVJU
CTB4MDEKKyNkZWZpbmUgTlZSRUdfUkNWQ1RMX1JYX1BBVEhfRU4JMHgwMTAwMDAwMAogCU52UmVn
UmVjZWl2ZXJTdGF0dXMgPSAweDk4LAogI2RlZmluZSBOVlJFR19SQ1ZTVEFUX0JVU1kJMHgwMQog
CkBAIC0yNDEsNyArMjY5LDcgQEAKICNkZWZpbmUgTlZSRUdfUk5EU0VFRF9GT1JDRTMJMHg3NDAw
CiAKIAlOdlJlZ1R4RGVmZXJyYWwgPSAweEEwLAotI2RlZmluZSBOVlJFR19UWF9ERUZFUlJBTF9E
RUZBVUxUCTB4MTUwNTBmCisjZGVmaW5lIE5WUkVHX1RYX0RFRkVSUkFMX0RFRkFVTFQgICAgICAJ
MHgxNTA1MGYKICNkZWZpbmUgTlZSRUdfVFhfREVGRVJSQUxfUkdNSUlfMTBfMTAwCTB4MTYwNzBm
CiAjZGVmaW5lIE5WUkVHX1RYX0RFRkVSUkFMX1JHTUlJXzEwMDAJMHgxNDA1MGYKIAlOdlJlZ1J4
RGVmZXJyYWwgPSAweEE0LApAQCAtMjYyLDcgKzI5MCw4IEBACiAJTnZSZWdSaW5nU2l6ZXMgPSAw
eDEwOCwKICNkZWZpbmUgTlZSRUdfUklOR1NaX1RYU0hJRlQgMAogI2RlZmluZSBOVlJFR19SSU5H
U1pfUlhTSElGVCAxNgotCU52UmVnVW5rbm93blRyYW5zbWl0dGVyUmVnID0gMHgxMGMsCisJTnZS
ZWdUcmFuc21pdFBvbGwgPSAweDEwYywKKyNkZWZpbmUgTlZSRUdfVFJBTlNNSVRQT0xMX01BQ19B
RERSX1JFVgkweDAwMDA4MDAwCiAJTnZSZWdMaW5rU3BlZWQgPSAweDExMCwKICNkZWZpbmUgTlZS
RUdfTElOS1NQRUVEX0ZPUkNFIDB4MTAwMDAKICNkZWZpbmUgTlZSRUdfTElOS1NQRUVEXzEwCTEw
MDAKQEAgLTI4Myw4ICszMTIsOCBAQAogI2RlZmluZSBOVlJFR19UWFJYQ1RMX1JFU0VUCTB4MDAx
MAogI2RlZmluZSBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0sJMHgwNDAwCiAjZGVmaW5lIE5WUkVHX1RY
UlhDVExfREVTQ18xCTAKLSNkZWZpbmUgTlZSRUdfVFhSWENUTF9ERVNDXzIJMHgwMjEwMAotI2Rl
ZmluZSBOVlJFR19UWFJYQ1RMX0RFU0NfMwkweDAyMjAwCisjZGVmaW5lIE5WUkVHX1RYUlhDVExf
REVTQ18yCTB4MDAyMTAwCisjZGVmaW5lIE5WUkVHX1RYUlhDVExfREVTQ18zCTB4YzAyMjAwCiAj
ZGVmaW5lIE5WUkVHX1RYUlhDVExfVkxBTlNUUklQIDB4MDAwNDAKICNkZWZpbmUgTlZSRUdfVFhS
WENUTF9WTEFOSU5TCTB4MDAwODAKIAlOdlJlZ1R4UmluZ1BoeXNBZGRySGlnaCA9IDB4MTQ4LApA
QCAtMjk3LDggKzMyNiw4IEBACiAjZGVmaW5lIE5WUkVHX01JSVNUQVRfTElOS0NIQU5HRQkweDAw
MDgKICNkZWZpbmUgTlZSRUdfTUlJU1RBVF9NQVNLCQkweDAwMGYKICNkZWZpbmUgTlZSRUdfTUlJ
U1RBVF9NQVNLMgkJMHgwMDBmCi0JTnZSZWdVbmtub3duU2V0dXBSZWc0ID0gMHgxODQsCi0jZGVm
aW5lIE5WUkVHX1VOS1NFVFVQNF9WQUwJOAorCU52UmVnTUlJTWFzayA9IDB4MTg0LAorI2RlZmlu
ZSBOVlJFR19NSUlfTElOS0NIQU5HRQkJMHgwMDA4CiAKIAlOdlJlZ0FkYXB0ZXJDb250cm9sID0g
MHgxODgsCiAjZGVmaW5lIE5WUkVHX0FEQVBUQ1RMX1NUQVJUCTB4MDIKQEAgLTMyOCw2ICszNTcs
NyBAQAogI2RlZmluZSBOVlJFR19XQUtFVVBGTEFHU19FTkFCTEUJMHgxMTExCiAKIAlOdlJlZ1Bh
dHRlcm5DUkMgPSAweDIwNCwKKyNkZWZpbmUgTlZfVU5LTk9XTl9WQUwgIDB4MDEKIAlOdlJlZ1Bh
dHRlcm5NYXNrID0gMHgyMDgsCiAJTnZSZWdQb3dlckNhcCA9IDB4MjY4LAogI2RlZmluZSBOVlJF
R19QT1dFUkNBUF9EM1NVUFAJKDE8PDMwKQpAQCAtMzY4LDYgKzM5OCw3IEBACiAJTnZSZWdUeFBh
dXNlID0gMHgyZTAsCiAJTnZSZWdSeFBhdXNlID0gMHgyZTQsCiAJTnZSZWdSeERyb3BGcmFtZSA9
IDB4MmU4LAorCiAJTnZSZWdWbGFuQ29udHJvbCA9IDB4MzAwLAogI2RlZmluZSBOVlJFR19WTEFO
Q09OVFJPTF9FTkFCTEUJMHgyMDAwCiAJTnZSZWdNU0lYTWFwMCA9IDB4M2UwLApAQCAtNDA5LDcg
KzQ0MCw3IEBACiAjZGVmaW5lIE5WX1RYX0NBUlJJRVJMT1NUCSgxPDwyNykKICNkZWZpbmUgTlZf
VFhfTEFURUNPTExJU0lPTgkoMTw8MjgpCiAjZGVmaW5lIE5WX1RYX1VOREVSRkxPVwkJKDE8PDI5
KQotI2RlZmluZSBOVl9UWF9FUlJPUgkJKDE8PDMwKQorI2RlZmluZSBOVl9UWF9FUlJPUgkJKDE8
PDMwKSAvKiBsb2dpY2FsIE9SIG9mIGFsbCBlcnJvcnMgKi8KICNkZWZpbmUgTlZfVFhfVkFMSUQJ
CSgxPDwzMSkKIAogI2RlZmluZSBOVl9UWDJfTEFTVFBBQ0tFVAkoMTw8MjkpCkBAIC00MjAsNyAr
NDUxLDcgQEAKICNkZWZpbmUgTlZfVFgyX0xBVEVDT0xMSVNJT04JKDE8PDI3KQogI2RlZmluZSBO
Vl9UWDJfVU5ERVJGTE9XCSgxPDwyOCkKIC8qIGVycm9yIGFuZCB2YWxpZCBhcmUgdGhlIHNhbWUg
Zm9yIGJvdGggKi8KLSNkZWZpbmUgTlZfVFgyX0VSUk9SCQkoMTw8MzApCisjZGVmaW5lIE5WX1RY
Ml9FUlJPUgkJKDE8PDMwKSAvKiBsb2dpY2FsIE9SIG9mIGFsbCBlcnJvcnMgKi8KICNkZWZpbmUg
TlZfVFgyX1ZBTElECQkoMTw8MzEpCiAjZGVmaW5lIE5WX1RYMl9UU08JCSgxPDwyOCkKICNkZWZp
bmUgTlZfVFgyX1RTT19TSElGVAkxNApAQCAtNDQxLDcgKzQ3Miw3IEBACiAjZGVmaW5lIE5WX1JY
X0NSQ0VSUgkJKDE8PDI3KQogI2RlZmluZSBOVl9SWF9PVkVSRkxPVwkJKDE8PDI4KQogI2RlZmlu
ZSBOVl9SWF9GUkFNSU5HRVJSCSgxPDwyOSkKLSNkZWZpbmUgTlZfUlhfRVJST1IJCSgxPDwzMCkK
KyNkZWZpbmUgTlZfUlhfRVJST1IJCSgxPDwzMCkgLyogbG9naWNhbCBPUiBvZiBhbGwgZXJyb3Jz
ICovCiAjZGVmaW5lIE5WX1JYX0FWQUlMCQkoMTw8MzEpCiAKICNkZWZpbmUgTlZfUlgyX0NIRUNL
U1VNTUFTSwkoMHgxQzAwMDAwMCkKQEAgLTQ1OCw3ICs0ODksNyBAQAogI2RlZmluZSBOVl9SWDJf
T1ZFUkZMT1cJCSgxPDwyMykKICNkZWZpbmUgTlZfUlgyX0ZSQU1JTkdFUlIJKDE8PDI0KQogLyog
ZXJyb3IgYW5kIGF2YWlsIGFyZSB0aGUgc2FtZSBmb3IgYm90aCAqLwotI2RlZmluZSBOVl9SWDJf
RVJST1IJCSgxPDwzMCkKKyNkZWZpbmUgTlZfUlgyX0VSUk9SCQkoMTw8MzApIC8qIGxvZ2ljYWwg
T1Igb2YgYWxsIGVycm9ycyAqLwogI2RlZmluZSBOVl9SWDJfQVZBSUwJCSgxPDwzMSkKIAogI2Rl
ZmluZSBOVl9SWDNfVkxBTl9UQUdfUFJFU0VOVCAoMTw8MTYpCkBAIC00OTIsMTIgKzUyMywxMiBA
QAogI2RlZmluZSBOVl9XQVRDSERPR19USU1FTwkoNSpIWikKIAogI2RlZmluZSBSWF9SSU5HX0RF
RkFVTFQJCTEyOAotI2RlZmluZSBUWF9SSU5HX0RFRkFVTFQJCTI1NgotI2RlZmluZSBSWF9SSU5H
X01JTgkJMTI4Ci0jZGVmaW5lIFRYX1JJTkdfTUlOCQk2NAorI2RlZmluZSBUWF9SSU5HX0RFRkFV
TFQJCTY0CisjZGVmaW5lIFJYX1JJTkdfTUlOCQlSWF9SSU5HX0RFRkFVTFQKKyNkZWZpbmUgVFhf
UklOR19NSU4JCVRYX1JJTkdfREVGQVVMVAogI2RlZmluZSBSSU5HX01BWF9ERVNDX1ZFUl8xCTEw
MjQKICNkZWZpbmUgUklOR19NQVhfREVTQ19WRVJfMl8zCTE2Mzg0Ci0vKgorLyogCiAgKiBEaWZm
ZXJlbmNlIGJldHdlZW4gdGhlIGdldCBhbmQgcHV0IHBvaW50ZXJzIGZvciB0aGUgdHggcmluZy4K
ICAqIFRoaXMgaXMgdXNlZCB0byB0aHJvdHRsZSB0aGUgYW1vdW50IG9mIGRhdGEgb3V0c3RhbmRp
bmcgaW4gdGhlCiAgKiB0eCByaW5nLgpAQCAtNTE4LDcgKzU0OSw3IEBACiAjZGVmaW5lIExJTktf
VElNRU9VVAkoMypIWikKICNkZWZpbmUgU1RBVFNfSU5URVJWQUwJKDEwKkhaKQogCi0vKgorLyog
CiAgKiBkZXNjX3ZlciB2YWx1ZXM6CiAgKiBUaGUgbmljIHN1cHBvcnRzIHRocmVlIGRpZmZlcmVu
dCBkZXNjcmlwdG9yIHR5cGVzOgogICogLSBERVNDX1ZFUl8xOiBPcmlnaW5hbApAQCAtNTMyLDE2
ICs1NjMsMzcgQEAKIC8qIFBIWSBkZWZpbmVzICovCiAjZGVmaW5lIFBIWV9PVUlfTUFSVkVMTAkw
eDUwNDMKICNkZWZpbmUgUEhZX09VSV9DSUNBREEJMHgwM2YxCisjZGVmaW5lIFBIWV9PVUlfVklU
RVNTRQkweDAxYzEKICNkZWZpbmUgUEhZSUQxX09VSV9NQVNLCTB4MDNmZgogI2RlZmluZSBQSFlJ
RDFfT1VJX1NIRlQJNgogI2RlZmluZSBQSFlJRDJfT1VJX01BU0sJMHhmYzAwCiAjZGVmaW5lIFBI
WUlEMl9PVUlfU0hGVAkxMAotI2RlZmluZSBQSFlfSU5JVDEJMHgwZjAwMAotI2RlZmluZSBQSFlf
SU5JVDIJMHgwZTAwCi0jZGVmaW5lIFBIWV9JTklUMwkweDAxMDAwCi0jZGVmaW5lIFBIWV9JTklU
NAkweDAyMDAKLSNkZWZpbmUgUEhZX0lOSVQ1CTB4MDAwNAotI2RlZmluZSBQSFlfSU5JVDYJMHgw
MjAwMAorI2RlZmluZSBQSFlJRDJfTU9ERUxfTUFTSwkJMHgwM2YwCisjZGVmaW5lIFBIWV9NT0RF
TF9NQVJWRUxMX0UzMDE2CQkweDIyMAorI2RlZmluZSBQSFlfTUFSVkVMTF9FMzAxNl9JTklUTUFT
SwkweDAzMDAKKyNkZWZpbmUgUEhZX0NJQ0FEQV9JTklUMQkweDBmMDAwCisjZGVmaW5lIFBIWV9D
SUNBREFfSU5JVDIJMHgwZTAwCisjZGVmaW5lIFBIWV9DSUNBREFfSU5JVDMJMHgwMTAwMAorI2Rl
ZmluZSBQSFlfQ0lDQURBX0lOSVQ0CTB4MDIwMAorI2RlZmluZSBQSFlfQ0lDQURBX0lOSVQ1CTB4
MDAwNAorI2RlZmluZSBQSFlfQ0lDQURBX0lOSVQ2CTB4MDIwMDAKKyNkZWZpbmUgUEhZX1ZJVEVT
U0VfSU5JVF9SRUcxCTB4MWYKKyNkZWZpbmUgUEhZX1ZJVEVTU0VfSU5JVF9SRUcyCTB4MTAKKyNk
ZWZpbmUgUEhZX1ZJVEVTU0VfSU5JVF9SRUczCTB4MTEKKyNkZWZpbmUgUEhZX1ZJVEVTU0VfSU5J
VF9SRUc0CTB4MTIKKyNkZWZpbmUgUEhZX1ZJVEVTU0VfSU5JVF9NU0sxCTB4YworI2RlZmluZSBQ
SFlfVklURVNTRV9JTklUX01TSzIJMHgwMTgwCisjZGVmaW5lIFBIWV9WSVRFU1NFX0lOSVQxCTB4
NTJiNQorI2RlZmluZSBQSFlfVklURVNTRV9JTklUMgkweGFmOGEKKyNkZWZpbmUgUEhZX1ZJVEVT
U0VfSU5JVDMJMHg4CisjZGVmaW5lIFBIWV9WSVRFU1NFX0lOSVQ0CTB4OGY4YQorI2RlZmluZSBQ
SFlfVklURVNTRV9JTklUNQkweGFmODYKKyNkZWZpbmUgUEhZX1ZJVEVTU0VfSU5JVDYJMHg4Zjg2
CisjZGVmaW5lIFBIWV9WSVRFU1NFX0lOSVQ3CTB4YWY4MgorI2RlZmluZSBQSFlfVklURVNTRV9J
TklUOAkweDAxMDAKKyNkZWZpbmUgUEhZX1ZJVEVTU0VfSU5JVDkJMHg4ZjgyCisjZGVmaW5lIFBI
WV9WSVRFU1NFX0lOSVQxMAkweDAKKwogI2RlZmluZSBQSFlfR0lHQUJJVAkweDAxMDAKIAogI2Rl
ZmluZSBQSFlfVElNRU9VVAkweDEKQEAgLTU3Myw3MiArNjI1LDkzIEBACiAjZGVmaW5lIE5WX01T
SV9YX1ZFQ1RPUl9PVEhFUiAweDIKIAogLyogc3RhdGlzdGljcyAqLworI2RlZmluZSBOVl9TVEFU
U19DT1VOVF9TVyAxMAorCisjZGVmaW5lIE5WTEFOX0RJU0FCTEVfQUxMX0ZFQVRVUkVTICBkbyB7
IFwKKwltc2kgPSBOVl9NU0lfSU5UX0RJU0FCTEVEOyBcCisJbXNpeCA9IE5WX01TSVhfSU5UX0RJ
U0FCTEVEOyBcCisJc2NhdHRlcl9nYXRoZXIgPSBOVl9TQ0FUVEVSX0dBVEhFUl9ESVNBQkxFRDsg
XAorCXRzb19vZmZsb2FkID0gTlZfVFNPX0RJU0FCTEVEOyBcCisJdHhfY2hlY2tzdW1fb2ZmbG9h
ZCA9IE5WX1RYX0NIRUNLU1VNX0RJU0FCTEVEOyBcCisJcnhfY2hlY2tzdW1fb2ZmbG9hZCA9IE5W
X1JYX0NIRUNLU1VNX0RJU0FCTEVEOyBcCisJdHhfZmxvd19jb250cm9sID0gTlZfVFhfRkxPV19D
T05UUk9MX0RJU0FCTEVEOyBcCisJcnhfZmxvd19jb250cm9sID0gTlZfUlhfRkxPV19DT05UUk9M
X0RJU0FCTEVEOyBcCisJd29sID0gTlZfV09MX0RJU0FCTEVEOyBcCisJdGFnZ2luZ184MDIxcHEg
PSBOVl84MDIxUFFfRElTQUJMRUQ7IFwKK30gd2hpbGUgKDApCisgICAKIHN0cnVjdCBudl9ldGh0
b29sX3N0ciB7CiAJY2hhciBuYW1lW0VUSF9HU1RSSU5HX0xFTl07CiB9OwogCiBzdGF0aWMgY29u
c3Qgc3RydWN0IG52X2V0aHRvb2xfc3RyIG52X2VzdGF0c19zdHJbXSA9IHsKKwl7ICJ0eF9kcm9w
cGVkIiB9LAorCXsgInR4X2ZpZm9fZXJyb3JzIiB9LAorCXsgInR4X2NhcnJpZXJfZXJyb3JzIiB9
LAorCXsgInR4X3BhY2tldHMiIH0sCiAJeyAidHhfYnl0ZXMiIH0sCisJeyAicnhfY3JjX2Vycm9y
cyIgfSwKKwl7ICJyeF9vdmVyX2Vycm9ycyIgfSwKKwl7ICJyeF9lcnJvcnNfdG90YWwiIH0sCisJ
eyAicnhfcGFja2V0cyIgfSwKKwl7ICJyeF9ieXRlcyIgfSwKKwkKKwkvKiBoYXJkd2FyZSBjb3Vu
dGVycyAqLwogCXsgInR4X3plcm9fcmV4bXQiIH0sCiAJeyAidHhfb25lX3JleG10IiB9LAogCXsg
InR4X21hbnlfcmV4bXQiIH0sCiAJeyAidHhfbGF0ZV9jb2xsaXNpb24iIH0sCi0JeyAidHhfZmlm
b19lcnJvcnMiIH0sCi0JeyAidHhfY2Fycmllcl9lcnJvcnMiIH0sCiAJeyAidHhfZXhjZXNzX2Rl
ZmVycmFsIiB9LAogCXsgInR4X3JldHJ5X2Vycm9yIiB9LAotCXsgInR4X2RlZmVycmFsIiB9LAot
CXsgInR4X3BhY2tldHMiIH0sCi0JeyAidHhfcGF1c2UiIH0sCiAJeyAicnhfZnJhbWVfZXJyb3Ii
IH0sCiAJeyAicnhfZXh0cmFfYnl0ZSIgfSwKIAl7ICJyeF9sYXRlX2NvbGxpc2lvbiIgfSwKIAl7
ICJyeF9ydW50IiB9LAogCXsgInJ4X2ZyYW1lX3Rvb19sb25nIiB9LAotCXsgInJ4X292ZXJfZXJy
b3JzIiB9LAotCXsgInJ4X2NyY19lcnJvcnMiIH0sCiAJeyAicnhfZnJhbWVfYWxpZ25fZXJyb3Ii
IH0sCiAJeyAicnhfbGVuZ3RoX2Vycm9yIiB9LAogCXsgInJ4X3VuaWNhc3QiIH0sCiAJeyAicnhf
bXVsdGljYXN0IiB9LAogCXsgInJ4X2Jyb2FkY2FzdCIgfSwKLQl7ICJyeF9ieXRlcyIgfSwKKwl7
ICJ0eF9kZWZlcnJhbCIgfSwKKwl7ICJ0eF9wYXVzZSIgfSwKIAl7ICJyeF9wYXVzZSIgfSwKLQl7
ICJyeF9kcm9wX2ZyYW1lIiB9LAotCXsgInJ4X3BhY2tldHMiIH0sCi0JeyAicnhfZXJyb3JzX3Rv
dGFsIiB9CisJeyAicnhfZHJvcF9mcmFtZSIgfQogfTsKIAogc3RydWN0IG52X2V0aHRvb2xfc3Rh
dHMgeworCXU2NCB0eF9kcm9wcGVkOworCXU2NCB0eF9maWZvX2Vycm9yczsKKwl1NjQgdHhfY2Fy
cmllcl9lcnJvcnM7CisJdTY0IHR4X3BhY2tldHM7CiAJdTY0IHR4X2J5dGVzOworCXU2NCByeF9j
cmNfZXJyb3JzOworCXU2NCByeF9vdmVyX2Vycm9yczsKKwl1NjQgcnhfZXJyb3JzX3RvdGFsOwor
CXU2NCByeF9wYWNrZXRzOworCXU2NCByeF9ieXRlczsKKworCS8qIGhhcmR3YXJlIGNvdW50ZXJz
ICovCiAJdTY0IHR4X3plcm9fcmV4bXQ7CiAJdTY0IHR4X29uZV9yZXhtdDsKIAl1NjQgdHhfbWFu
eV9yZXhtdDsKIAl1NjQgdHhfbGF0ZV9jb2xsaXNpb247Ci0JdTY0IHR4X2ZpZm9fZXJyb3JzOwot
CXU2NCB0eF9jYXJyaWVyX2Vycm9yczsKIAl1NjQgdHhfZXhjZXNzX2RlZmVycmFsOwogCXU2NCB0
eF9yZXRyeV9lcnJvcjsKLQl1NjQgdHhfZGVmZXJyYWw7Ci0JdTY0IHR4X3BhY2tldHM7Ci0JdTY0
IHR4X3BhdXNlOwogCXU2NCByeF9mcmFtZV9lcnJvcjsKIAl1NjQgcnhfZXh0cmFfYnl0ZTsKIAl1
NjQgcnhfbGF0ZV9jb2xsaXNpb247CiAJdTY0IHJ4X3J1bnQ7CiAJdTY0IHJ4X2ZyYW1lX3Rvb19s
b25nOwotCXU2NCByeF9vdmVyX2Vycm9yczsKLQl1NjQgcnhfY3JjX2Vycm9yczsKIAl1NjQgcnhf
ZnJhbWVfYWxpZ25fZXJyb3I7CiAJdTY0IHJ4X2xlbmd0aF9lcnJvcjsKIAl1NjQgcnhfdW5pY2Fz
dDsKIAl1NjQgcnhfbXVsdGljYXN0OwogCXU2NCByeF9icm9hZGNhc3Q7Ci0JdTY0IHJ4X2J5dGVz
OworCXU2NCB0eF9kZWZlcnJhbDsKKwl1NjQgdHhfcGF1c2U7CiAJdTY0IHJ4X3BhdXNlOwogCXU2
NCByeF9kcm9wX2ZyYW1lOwotCXU2NCByeF9wYWNrZXRzOwotCXU2NCByeF9lcnJvcnNfdG90YWw7
CiB9OwogCiAvKiBkaWFnbm9zdGljcyAqLwpAQCAtNjY3LDIwICs3NDAsNjIgQEAKIAl7IDAsMCB9
CiB9OwogCitzdHJ1Y3QgbnZfc2tiX21hcCB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFf
YWRkcl90IGRtYTsKKwl1bnNpZ25lZCBpbnQgZG1hX2xlbjsKK307CisKIC8qCiAgKiBTTVAgbG9j
a2luZzoKICAqIEFsbCBoYXJkd2FyZSBhY2Nlc3MgdW5kZXIgZGV2LT5wcml2LT5sb2NrLCBleGNl
cHQgdGhlIHBlcmZvcm1hbmNlCiAgKiBjcml0aWNhbCBwYXJ0czoKICAqIC0gcnggaXMgKHBzZXVk
by0pIGxvY2tsZXNzOiBpdCByZWxpZXMgb24gdGhlIHNpbmdsZS10aHJlYWRpbmcgcHJvdmlkZWQK
ICAqCWJ5IHRoZSBhcmNoIGNvZGUgZm9yIGludGVycnVwdHMuCi0gKiAtIHR4IHNldHVwIGlzIGxv
Y2tsZXNzOiBpdCByZWxpZXMgb24gbmV0aWZfdHhfbG9jay4gQWN0dWFsIHN1Ym1pc3Npb24KKyAq
IC0gdHggc2V0dXAgaXMgbG9ja2xlc3M6IGl0IHJlbGllcyBvbiBkZXYtPnhtaXRfbG9jay4gQWN0
dWFsIHN1Ym1pc3Npb24KICAqCW5lZWRzIGRldi0+cHJpdi0+bG9jayA6LSgKLSAqIC0gc2V0X211
bHRpY2FzdF9saXN0OiBwcmVwYXJhdGlvbiBsb2NrbGVzcywgcmVsaWVzIG9uIG5ldGlmX3R4X2xv
Y2suCisgKiAtIHNldF9tdWx0aWNhc3RfbGlzdDogcHJlcGFyYXRpb24gbG9ja2xlc3MsIHJlbGll
cyBvbiBkZXYtPnhtaXRfbG9jay4KICAqLwogCiAvKiBpbiBkZXY6IGJhc2UsIGlycSAqLwogc3Ry
dWN0IGZlX3ByaXYgeworCisJLyogZmllbGRzIHVzZWQgaW4gZmFzdCBwYXRoIGFyZSBncm91cGVk
IHRvZ2V0aGVyIAorCSAgIGZvciBiZXR0ZXIgY2FjaGUgcGVyZm9ybWFuY2UKKwkqLwogCXNwaW5s
b2NrX3QgbG9jazsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9k
ZXY7CisJdTMyIHR4cnhjdGxfYml0czsKKwlpbnQgc3RvcF90eDsKKwlpbnQgbmVlZF9saW5rdGlt
ZXI7CisJdW5zaWduZWQgbG9uZyBsaW5rX3RpbWVvdXQ7CisJdTMyIGlycW1hc2s7CisJdTMyIG1z
aV9mbGFnczsKKworCXVuc2lnbmVkIGludCByeF9idWZfc3o7CisJc3RydWN0IHZsYW5fZ3JvdXAg
KnZsYW5ncnA7CisJaW50IHR4X3Jpbmdfc2l6ZTsKKwlpbnQgcnhfY3N1bTsKKworCS8qCisJICog
cnggc3BlY2lmaWMgZmllbGRzIGluIGZhc3QgcGF0aAorCSAqLworCXJpbmdfdHlwZSBnZXRfcngg
X19hdHRyaWJ1dGVfXygoYWxpZ25lZChMMV9DQUNIRV9CWVRFUykpKTsKKwlyaW5nX3R5cGUgcHV0
X3J4LCBmaXJzdF9yeCwgbGFzdF9yeDsKKwlzdHJ1Y3QgbnZfc2tiX21hcCAqZ2V0X3J4X2N0eCwg
KnB1dF9yeF9jdHg7CisJc3RydWN0IG52X3NrYl9tYXAgKmZpcnN0X3J4X2N0eCwgKmxhc3Rfcnhf
Y3R4OworCQorCS8qCisJICogdHggc3BlY2lmaWMgZmllbGRzIGluIGZhc3QgcGF0aAorCSAqLwor
CXJpbmdfdHlwZSBnZXRfdHggX19hdHRyaWJ1dGVfXygoYWxpZ25lZChMMV9DQUNIRV9CWVRFUykp
KTsKKwlyaW5nX3R5cGUgcHV0X3R4LCBmaXJzdF90eCwgbGFzdF90eDsKKwlzdHJ1Y3QgbnZfc2ti
X21hcCAqZ2V0X3R4X2N0eCwgKnB1dF90eF9jdHg7CisJc3RydWN0IG52X3NrYl9tYXAgKmZpcnN0
X3R4X2N0eCwgKmxhc3RfdHhfY3R4OworCisJc3RydWN0IG52X3NrYl9tYXAgKnJ4X3NrYjsKKwlz
dHJ1Y3QgbnZfc2tiX21hcCAqdHhfc2tiOwogCiAJLyogR2VuZXJhbCBkYXRhOgogCSAqIExvY2tp
bmc6IHNwaW5fbG9jaygmbnAtPmxvY2spOyAqLwpAQCAtNjk0LDY0ICs4MDksNDYgQEAKIAlpbnQg
cGh5YWRkcjsKIAlpbnQgd29sZW5hYmxlZDsKIAl1bnNpZ25lZCBpbnQgcGh5X291aTsKKwl1bnNp
Z25lZCBpbnQgcGh5X21vZGVsOwogCXUxNiBnaWdhYml0OwogCWludCBpbnRyX3Rlc3Q7CisJaW50
IHJlY292ZXJfZXJyb3I7CiAKIAkvKiBHZW5lcmFsIGRhdGE6IFJPIGZpZWxkcyAqLwogCWRtYV9h
ZGRyX3QgcmluZ19hZGRyOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwogCXUzMiBvcmlnX21h
Y1syXTsKLQl1MzIgaXJxbWFzazsKIAl1MzIgZGVzY192ZXI7Ci0JdTMyIHR4cnhjdGxfYml0czsK
IAl1MzIgdmxhbmN0bF9iaXRzOwogCXUzMiBkcml2ZXJfZGF0YTsKIAl1MzIgcmVnaXN0ZXJfc2l6
ZTsKLQotCXZvaWQgX19pb21lbSAqYmFzZTsKKwl1MzIgbWFjX2luX3VzZTsKIAogCS8qIHJ4IHNw
ZWNpZmljIGZpZWxkcy4KIAkgKiBMb2NraW5nOiBXaXRoaW4gaXJxIGhhbmRlciBvciBkaXNhYmxl
X2lycStzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkgKi8KIAlyaW5nX3R5cGUgcnhfcmluZzsKLQl1
bnNpZ25lZCBpbnQgY3VyX3J4LCByZWZpbGxfcng7Ci0Jc3RydWN0IHNrX2J1ZmYgKipyeF9za2J1
ZmY7Ci0JZG1hX2FkZHJfdCAqcnhfZG1hOwotCXVuc2lnbmVkIGludCByeF9idWZfc3o7CiAJdW5z
aWduZWQgaW50IHBrdF9saW1pdDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBvb21fa2ljazsKIAlzdHJ1
Y3QgdGltZXJfbGlzdCBuaWNfcG9sbDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzdGF0c19wb2xsOwog
CXUzMiBuaWNfcG9sbF9pcnE7CiAJaW50IHJ4X3Jpbmdfc2l6ZTsKLQotCS8qIG1lZGlhIGRldGVj
dGlvbiB3b3JrYXJvdW5kLgotCSAqIExvY2tpbmc6IFdpdGhpbiBpcnEgaGFuZGVyIG9yIGRpc2Fi
bGVfaXJxK3NwaW5fbG9jaygmbnAtPmxvY2spOwotCSAqLwotCWludCBuZWVkX2xpbmt0aW1lcjsK
LQl1bnNpZ25lZCBsb25nIGxpbmtfdGltZW91dDsKKwl1MzIgcnhfbGVuX2Vycm9yczsKIAkvKgog
CSAqIHR4IHNwZWNpZmljIGZpZWxkcy4KIAkgKi8KIAlyaW5nX3R5cGUgdHhfcmluZzsKLQl1bnNp
Z25lZCBpbnQgbmV4dF90eCwgbmljX3R4OwotCXN0cnVjdCBza19idWZmICoqdHhfc2tidWZmOwot
CWRtYV9hZGRyX3QgKnR4X2RtYTsKLQl1bnNpZ25lZCBpbnQgKnR4X2RtYV9sZW47CiAJdTMyIHR4
X2ZsYWdzOwotCWludCB0eF9yaW5nX3NpemU7CiAJaW50IHR4X2xpbWl0X3N0YXJ0OwogCWludCB0
eF9saW1pdF9zdG9wOwogCi0JLyogdmxhbiBmaWVsZHMgKi8KLQlzdHJ1Y3Qgdmxhbl9ncm91cCAq
dmxhbmdycDsKIAogCS8qIG1zaS9tc2kteCBmaWVsZHMgKi8KLQl1MzIgbXNpX2ZsYWdzOwogCXN0
cnVjdCBtc2l4X2VudHJ5IG1zaV94X2VudHJ5W05WX01TSV9YX01BWF9WRUNUT1JTXTsKIAogCS8q
IGZsb3cgY29udHJvbCAqLwogCXUzMiBwYXVzZV9mbGFnczsKKwl1MzIgbGVkX3N0YXRzWzNdOwog
fTsKIAogLyoKQEAgLTc2MiwxMiArODU5LDEyIEBACiAKIC8qCiAgKiBPcHRpbWl6YXRpb24gY2Fu
IGJlIGVpdGhlciB0aHJvdXB1dCBtb2RlIG9yIGNwdSBtb2RlCi0gKgorICogCiAgKiBUaHJvdWdo
cHV0IE1vZGU6IEV2ZXJ5IHR4IGFuZCByeCBwYWNrZXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1
cHQuCiAgKiBDUFUgTW9kZTogSW50ZXJydXB0cyBhcmUgY29udHJvbGxlZCBieSBhIHRpbWVyLgog
ICovCiBlbnVtIHsKLQlOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVULAorCU5WX09QVElN
SVpBVElPTl9NT0RFX1RIUk9VR0hQVVQsIAogCU5WX09QVElNSVpBVElPTl9NT0RFX0NQVQogfTsK
IHN0YXRpYyBpbnQgb3B0aW1pemF0aW9uX21vZGUgPSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJP
VUdIUFVUOwpAQCAtNzg4LDE2ICs4ODUsMTEyIEBACiAJTlZfTVNJX0lOVF9ESVNBQkxFRCwKIAlO
Vl9NU0lfSU5UX0VOQUJMRUQKIH07CisKKyNpZmRlZiBDT05GSUdfUENJX01TSSAKIHN0YXRpYyBp
bnQgbXNpID0gTlZfTVNJX0lOVF9FTkFCTEVEOworI2Vsc2UKK3N0YXRpYyBpbnQgbXNpID0gTlZf
TVNJX0lOVF9ESVNBQkxFRDsKKyNlbmRpZgogCiAvKgogICogTVNJWCBpbnRlcnJ1cHRzCiAgKi8K
IGVudW0gewotCU5WX01TSVhfSU5UX0RJU0FCTEVELAorCU5WX01TSVhfSU5UX0RJU0FCTEVELCAK
IAlOVl9NU0lYX0lOVF9FTkFCTEVECiB9OworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kgCiBzdGF0
aWMgaW50IG1zaXggPSBOVl9NU0lYX0lOVF9FTkFCTEVEOworI2Vsc2UKK3N0YXRpYyBpbnQgbXNp
eCA9IE5WX01TSVhfSU5UX0RJU0FCTEVEOworI2VuZGlmCisvKgorICogUEhZIFNwZWVkIGFuZCBE
dXBsZXgKKyAqLworZW51bSB7CisJTlZfU1BFRURfRFVQTEVYX0FVVE8sCisJTlZfU1BFRURfRFVQ
TEVYXzEwX0hBTEZfRFVQTEVYLAorCU5WX1NQRUVEX0RVUExFWF8xMF9GVUxMX0RVUExFWCwKKwlO
Vl9TUEVFRF9EVVBMRVhfMTAwX0hBTEZfRFVQTEVYLAorCU5WX1NQRUVEX0RVUExFWF8xMDBfRlVM
TF9EVVBMRVgsCisJTlZfU1BFRURfRFVQTEVYXzEwMDBfRlVMTF9EVVBMRVgKK307CitzdGF0aWMg
aW50IHNwZWVkX2R1cGxleCA9IE5WX1NQRUVEX0RVUExFWF9BVVRPOworCisvKgorICogUEhZIGF1
dG9uZWdvdGlhdGlvbgorICovCitzdGF0aWMgaW50IGF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsK
KworLyoKKyAqIFNjYXR0ZXIgZ2F0aGVyCisgKi8KK2VudW0geworCU5WX1NDQVRURVJfR0FUSEVS
X0RJU0FCTEVELAorCU5WX1NDQVRURVJfR0FUSEVSX0VOQUJMRUQKK307CitzdGF0aWMgaW50IHNj
YXR0ZXJfZ2F0aGVyID0gTlZfU0NBVFRFUl9HQVRIRVJfRU5BQkxFRDsKKworLyoKKyAqIFRDUCBT
ZWdtZW50YXRpb24gT2ZmbG9hZCAoVFNPKQorICovCitlbnVtIHsKKwlOVl9UU09fRElTQUJMRUQs
CisJTlZfVFNPX0VOQUJMRUQKK307CitzdGF0aWMgaW50IHRzb19vZmZsb2FkID0gTlZfVFNPX0VO
QUJMRUQ7CisKKy8qCisgKiBNVFUgc2V0dGluZ3MKKyAqLworc3RhdGljIGludCBtdHUgPSBFVEhf
REFUQV9MRU47CisKKy8qCisgKiBUeCBjaGVja3N1bSBvZmZsb2FkCisgKi8KK2VudW0geworCU5W
X1RYX0NIRUNLU1VNX0RJU0FCTEVELCAKKwlOVl9UWF9DSEVDS1NVTV9FTkFCTEVEIAorfTsKK3N0
YXRpYyBpbnQgdHhfY2hlY2tzdW1fb2ZmbG9hZCA9IE5WX1RYX0NIRUNLU1VNX0VOQUJMRUQ7CisK
Ky8qCisgKiBSeCBjaGVja3N1bSBvZmZsb2FkCisgKi8KK2VudW0geworCU5WX1JYX0NIRUNLU1VN
X0RJU0FCTEVELCAKKwlOVl9SWF9DSEVDS1NVTV9FTkFCTEVEIAorfTsKK3N0YXRpYyBpbnQgcnhf
Y2hlY2tzdW1fb2ZmbG9hZCA9IE5WX1JYX0NIRUNLU1VNX0VOQUJMRUQ7CisKKy8qCisgKiBUeCBy
aW5nIHNpemUKKyAqLworc3RhdGljIGludCB0eF9yaW5nX3NpemUgPSBUWF9SSU5HX0RFRkFVTFQ7
CisKKy8qCisgKiBSeCByaW5nIHNpemUKKyAqLworc3RhdGljIGludCByeF9yaW5nX3NpemUgPSBS
WF9SSU5HX0RFRkFVTFQ7CisKKy8qCisgKiBUeCBmbG93IGNvbnRyb2wKKyAqLworZW51bSB7CisJ
TlZfVFhfRkxPV19DT05UUk9MX0RJU0FCTEVELCAKKwlOVl9UWF9GTE9XX0NPTlRST0xfRU5BQkxF
RAorfTsKK3N0YXRpYyBpbnQgdHhfZmxvd19jb250cm9sID0gTlZfVFhfRkxPV19DT05UUk9MX0VO
QUJMRUQ7CisKKy8qCisgKiBSeCBmbG93IGNvbnRyb2wKKyAqLworZW51bSB7CisJTlZfUlhfRkxP
V19DT05UUk9MX0RJU0FCTEVELCAKKwlOVl9SWF9GTE9XX0NPTlRST0xfRU5BQkxFRAorfTsKK3N0
YXRpYyBpbnQgcnhfZmxvd19jb250cm9sID0gTlZfUlhfRkxPV19DT05UUk9MX0VOQUJMRUQ7CiAK
IC8qCiAgKiBETUEgNjRiaXQKQEAgLTgwOCwxNCArMTAwMSw2NCBAQAogfTsKIHN0YXRpYyBpbnQg
ZG1hXzY0Yml0ID0gTlZfRE1BXzY0QklUX0VOQUJMRUQ7CiAKKy8qCisgKiBXYWtlIE9uIExhbgor
ICovCitlbnVtIHsKKwlOVl9XT0xfRElTQUJMRUQsCisJTlZfV09MX0VOQUJMRUQKK307CitzdGF0
aWMgaW50IHdvbCA9IE5WX1dPTF9ESVNBQkxFRDsKKworLyoKKyAqIFRhZ2dpbmcgODAyLjFwcQor
ICovCitlbnVtIHsKKwlOVl84MDIxUFFfRElTQUJMRUQsCisJTlZfODAyMVBRX0VOQUJMRUQKK307
CitzdGF0aWMgaW50IHRhZ2dpbmdfODAyMXBxID0gTlZfODAyMVBRX0VOQUJMRUQ7CisKK3N0YXRp
YyB2b2lkIG52X21zbGVlcCh1bnNpZ25lZCBpbnQgbXNlY3MpCit7CisJbXNsZWVwKG1zZWNzKTsK
K30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgZmVfcHJpdiAqZ2V0X252cHJpdihzdHJ1Y3QgbmV0
X2RldmljZSAqZGV2KQogewogCXJldHVybiBuZXRkZXZfcHJpdihkZXYpOwogfQogCitzdGF0aWMg
dm9pZCBfX2luaXQgcXVpcmtfbmZvcmNlX25ldHdvcmtfY2xhc3Moc3RydWN0IHBjaV9kZXYgKnBk
ZXYpCit7CisJLyogU29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5WaWRpYSBuZXR3b3JrIGNv
bnRyb2xsZXJzCisJICogc2hvdyB1cCBhcyBicmlkZ2VzLCB3aGVuIHdlIG5lZWQgdG8gc2VlIHRo
ZW0gYXMgbmV0d29yaworCSAqIGRldmljZXMuCisJICovCisKKwkvKiBJZiB0aGlzIGlzIGFscmVh
ZHkga25vd24gYXMgYSBuZXR3b3JrIGN0bHIsIGRvIG5vdGhpbmcuICovCisJaWYgKChwZGV2LT5j
bGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCkKKwkJcmV0dXJuOworCisJ
aWYgKChwZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfQlJJREdFX09USEVSKSB7CisJCWNo
YXIgICAgYzsKKworCQkvKiBDbGVhcmluZyBiaXQgNiBvZiB0aGUgcmVnaXN0ZXIgYXQgMHhmOAor
CQkgKiBzZWxlY3RzIEV0aGVybmV0IGRldmljZSBjbGFzcworCQkgKi8KKwkJcGNpX3JlYWRfY29u
ZmlnX2J5dGUocGRldiwgMHhmOCwgJmMpOworCQljICY9IDB4YmY7CisJCXBjaV93cml0ZV9jb25m
aWdfYnl0ZShwZGV2LCAweGY4LCBjKTsKKworCQkvKiBzeXNmcyBuZWVkcyBwZGV2LT5jbGFzcyB0
byBiZSBzZXQgY29ycmVjdGx5ICovCisJCXBkZXYtPmNsYXNzICY9IDB4MDAwMGZmOworCQlwZGV2
LT5jbGFzcyB8PSAoUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQgPDwgOCk7CisJfQorfQorCiBz
dGF0aWMgaW5saW5lIHU4IF9faW9tZW0gKmdldF9od2Jhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRl
dikKIHsKLQlyZXR1cm4gKChzdHJ1Y3QgZmVfcHJpdiAqKW5ldGRldl9wcml2KGRldikpLT5iYXNl
OworCXJldHVybiAoKHN0cnVjdCBmZV9wcml2ICopZ2V0X252cHJpdihkZXYpKS0+YmFzZTsKIH0K
IAogc3RhdGljIGlubGluZSB2b2lkIHBjaV9wdXNoKHU4IF9faW9tZW0gKmJhc2UpCkBAIC04OTMs
MTYgKzExMzYsMTAgQEAKIAkJCXBjaV9mcmVlX2NvbnNpc3RlbnQobnAtPnBjaV9kZXYsIHNpemVv
ZihzdHJ1Y3QgcmluZ19kZXNjX2V4KSAqIChucC0+cnhfcmluZ19zaXplICsgbnAtPnR4X3Jpbmdf
c2l6ZSksCiAJCQkJCSAgICBucC0+cnhfcmluZy5leCwgbnAtPnJpbmdfYWRkcik7CiAJfQotCWlm
IChucC0+cnhfc2tidWZmKQotCQlrZnJlZShucC0+cnhfc2tidWZmKTsKLQlpZiAobnAtPnJ4X2Rt
YSkKLQkJa2ZyZWUobnAtPnJ4X2RtYSk7Ci0JaWYgKG5wLT50eF9za2J1ZmYpCi0JCWtmcmVlKG5w
LT50eF9za2J1ZmYpOwotCWlmIChucC0+dHhfZG1hKQotCQlrZnJlZShucC0+dHhfZG1hKTsKLQlp
ZiAobnAtPnR4X2RtYV9sZW4pCi0JCWtmcmVlKG5wLT50eF9kbWFfbGVuKTsKKwlpZiAobnAtPnJ4
X3NrYikKKwkJa2ZyZWUobnAtPnJ4X3NrYik7CisJaWYgKG5wLT50eF9za2IpCisJCWtmcmVlKG5w
LT50eF9za2IpOwkKIH0KIAogc3RhdGljIGludCB1c2luZ19tdWx0aV9pcnFzKHN0cnVjdCBuZXRf
ZGV2aWNlICpkZXYpCkBAIC05MTAsNyArMTE0Nyw3IEBACiAJc3RydWN0IGZlX3ByaXYgKm5wID0g
Z2V0X252cHJpdihkZXYpOwogCiAJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJM
RUQpIHx8Ci0JICAgICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpICYmCisJICAg
ICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpICYmIAogCSAgICAgKChucC0+bXNp
X2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKSA9PSAweDEpKSkKIAkJcmV0dXJuIDA7CiAJ
ZWxzZQpAQCAtOTIxLDYgKzExNTgsOCBAQAogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9u
dnByaXYoZGV2KTsKIAorCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X2VuYWJsZV9pcnE6IGJl
Z2luXG4iLGRldi0+bmFtZSk7CisJLyogbW9kaWZ5IG5ldHdvcmsgZGV2aWNlIGNsYXNzIGlkICov
CQogCWlmICghdXNpbmdfbXVsdGlfaXJxcyhkZXYpKSB7CiAJCWlmIChucC0+bXNpX2ZsYWdzICYg
TlZfTVNJX1hfRU5BQkxFRCkKIAkJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9Y
X1ZFQ1RPUl9BTExdLnZlY3Rvcik7CkBAIC05MzcsNiArMTE3Niw3IEBACiB7CiAJc3RydWN0IGZl
X3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCisJZHByaW50ayhLRVJOX0RFQlVHICIlczog
bnZfZGlzYWJsZV9pcnE6IGJlZ2luXG4iLGRldi0+bmFtZSk7CiAJaWYgKCF1c2luZ19tdWx0aV9p
cnFzKGRldikpIHsKIAkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQogCQkJ
ZGlzYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3Rvcik7
CkBAIC0xMDIwLDI5ICsxMjYwLDgzIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGlu
dCBwaHlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIG52X3NhdmVf
TEVEX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5w
ID0gZ2V0X252cHJpdihkZXYpOworCXUzMiByZWc9MDsKKwl1MzIgdmFsdWU9MDsKKwlpbnQgaT0w
OworCisJcmVnID0gTXZfUGFnZV9BZGRyZXNzOworCXZhbHVlID0gMzsKKwltaWlfcncoZGV2LG5w
LT5waHlhZGRyLHJlZyx2YWx1ZSk7CisJdWRlbGF5KDUpOworCisJcmVnID0gTXZfTEVEX0NvbnRy
b2w7CisJZm9yKGk9MDtpPDM7aSsrKXsKKwkJbnAtPmxlZF9zdGF0c1tpXT1taWlfcncoZGV2LG5w
LT5waHlhZGRyLHJlZytpLE1JSV9SRUFEKTsJCisJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNh
dmUgTEVEIHJlZyVkOiB2YWx1ZT0weCV4XG4iLGRldi0+bmFtZSxyZWcraSxucC0+bGVkX3N0YXRz
W2ldKTsKKwl9CisKKwlyZWcgPSBNdl9QYWdlX0FkZHJlc3M7CisJdmFsdWUgPSAwOworCW1paV9y
dyhkZXYsbnAtPnBoeWFkZHIscmVnLHZhbHVlKTsKKwl1ZGVsYXkoNSk7Cit9CisKK3N0YXRpYyB2
b2lkIG52X3Jlc3RvcmVfTEVEX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisKKwlz
dHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisJdTMyIHJlZz0wOworCXUzMiB2
YWx1ZT0wOworCWludCBpPTA7CisKKwlyZWcgPSBNdl9QYWdlX0FkZHJlc3M7CisJdmFsdWUgPSAz
OworCW1paV9ydyhkZXYsbnAtPnBoeWFkZHIscmVnLHZhbHVlKTsKKwl1ZGVsYXkoNSk7CisKKwly
ZWcgPSBNdl9MRURfQ29udHJvbDsKKwlmb3IoaT0wO2k8MztpKyspeworCQltaWlfcncoZGV2LG5w
LT5waHlhZGRyLHJlZytpLG5wLT5sZWRfc3RhdHNbaV0pOwkKKwkJdWRlbGF5KDEpOworCQlkcHJp
bnRrKEtFUk5fREVCVUcgIiVzOiByZXN0b3JlIExFRCByZWclZDogdmFsdWU9MHgleFxuIixkZXYt
Pm5hbWUscmVnK2ksbnAtPmxlZF9zdGF0c1tpXSk7CisJfQorCisJcmVnID0gTXZfUGFnZV9BZGRy
ZXNzOworCXZhbHVlID0gMDsKKwltaWlfcncoZGV2LG5wLT5waHlhZGRyLHJlZyx2YWx1ZSk7CisJ
dWRlbGF5KDUpOworfQorCitzdGF0aWMgaW50IHBoeV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAq
ZGV2LCB1MzIgYm1jcl9zZXR1cCkKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJp
dihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAl1MzIgbWlp
Y29udHJvbDsKIAl1bnNpZ25lZCBpbnQgdHJpZXMgPSAwOwogCi0JbWlpY29udHJvbCA9IG1paV9y
dyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgTUlJX1JFQUQpOwotCW1paWNvbnRyb2wgfD0g
Qk1DUl9SRVNFVDsKKwlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwaHlfcmVzZXQ6IGJlZ2luXG4i
LGRldi0+bmFtZSk7CisJLyoqLworCW52X3NhdmVfTEVEX3N0YXRzKGRldik7CisJbWlpY29udHJv
bCA9IEJNQ1JfUkVTRVQgfCBibWNyX3NldHVwOwogCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRk
ciwgTUlJX0JNQ1IsIG1paWNvbnRyb2wpKSB7CiAJCXJldHVybiAtMTsKIAl9CiAKIAkvKiB3YWl0
IGZvciA1MDBtcyAqLwotCW1zbGVlcCg1MDApOworCW52X21zbGVlcCg1MDApOwogCiAJLyogbXVz
dCB3YWl0IHRpbGwgcmVzZXQgaXMgZGVhc3NlcnRlZCAqLwogCXdoaWxlIChtaWljb250cm9sICYg
Qk1DUl9SRVNFVCkgewotCQltc2xlZXAoMTApOworCQludl9tc2xlZXAoMTApOwogCQltaWljb250
cm9sID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBNSUlfUkVBRCk7CiAJCS8q
IEZJWE1FOiAxMDAgdHJpZXMgc2VlbSBleGNlc3NpdmUgKi8KIAkJaWYgKHRyaWVzKysgPiAxMDAp
CiAJCQlyZXR1cm4gLTE7CiAJfQorCW52X3Jlc3RvcmVfTEVEX3N0YXRzKGRldik7CisKIAlyZXR1
cm4gMDsKIH0KIApAQCAtMTA1Miw5ICsxMzQ2LDM2IEBACiAJdTggX19pb21lbSAqYmFzZSA9IGdl
dF9od2Jhc2UoZGV2KTsKIAl1MzIgcGh5aW50ZXJmYWNlLCBwaHlfcmVzZXJ2ZWQsIG1paV9zdGF0
dXMsIG1paV9jb250cm9sLCBtaWlfY29udHJvbF8xMDAwLHJlZzsKIAorCWRwcmludGsoS0VSTl9E
RUJVRyAiJXM6IHBoeV9pbml0OiBiZWdpblxuIixkZXYtPm5hbWUpOworCS8qIHBoeSBlcnJhdGEg
Zm9yIEUzMDE2IHBoeSAqLworCWlmIChucC0+cGh5X21vZGVsID09IFBIWV9NT0RFTF9NQVJWRUxM
X0UzMDE2KSB7CisJCXJlZyA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfTkNPTkZJRywg
TUlJX1JFQUQpOworCQlyZWcgJj0gflBIWV9NQVJWRUxMX0UzMDE2X0lOSVRNQVNLOworCQlpZiAo
bWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9OQ09ORklHLCByZWcpKSB7CisJCQlwcmludGso
S0VSTl9JTkZPICIlczogcGh5IHdyaXRlIHRvIGVycmF0YSByZWcgZmFpbGVkLlxuIiwgcGNpX25h
bWUobnAtPnBjaV9kZXYpKTsKKwkJCXJldHVybiBQSFlfRVJST1I7CisJCX0KKwl9CisKIAkvKiBz
ZXQgYWR2ZXJ0aXNlIHJlZ2lzdGVyICovCiAJcmVnID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIs
IE1JSV9BRFZFUlRJU0UsIE1JSV9SRUFEKTsKLQlyZWcgfD0gKEFEVkVSVElTRV8xMEhBTEZ8QURW
RVJUSVNFXzEwRlVMTHxBRFZFUlRJU0VfMTAwSEFMRnxBRFZFUlRJU0VfMTAwRlVMTHxBRFZFUlRJ
U0VfUEFVU0VfQVNZTXxBRFZFUlRJU0VfUEFVU0VfQ0FQKTsKKwlyZWcgJj0gfihBRFZFUlRJU0Vf
QUxMIHwgQURWRVJUSVNFXzEwMEJBU0U0IHwgQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElT
RV9QQVVTRV9BU1lNKTsKKwlpZiAoc3BlZWRfZHVwbGV4ID09IE5WX1NQRUVEX0RVUExFWF9BVVRP
KQorCQlyZWcgfD0gKEFEVkVSVElTRV8xMEhBTEZ8QURWRVJUSVNFXzEwRlVMTHxBRFZFUlRJU0Vf
MTAwSEFMRnxBRFZFUlRJU0VfMTAwRlVMTCk7CisJaWYgKHNwZWVkX2R1cGxleCA9PSBOVl9TUEVF
RF9EVVBMRVhfMTBfSEFMRl9EVVBMRVgpCisJCXJlZyB8PSBBRFZFUlRJU0VfMTBIQUxGOworCWlm
IChzcGVlZF9kdXBsZXggPT0gTlZfU1BFRURfRFVQTEVYXzEwX0ZVTExfRFVQTEVYKQorCQlyZWcg
fD0gQURWRVJUSVNFXzEwRlVMTDsKKwlpZiAoc3BlZWRfZHVwbGV4ID09IE5WX1NQRUVEX0RVUExF
WF8xMDBfSEFMRl9EVVBMRVgpCisJCXJlZyB8PSBBRFZFUlRJU0VfMTAwSEFMRjsKKwlpZiAoc3Bl
ZWRfZHVwbGV4ID09IE5WX1NQRUVEX0RVUExFWF8xMDBfRlVMTF9EVVBMRVgpCisJCXJlZyB8PSBB
RFZFUlRJU0VfMTAwRlVMTDsKKwlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9S
WF9SRVEpIC8qIGZvciByeCB3ZSBzZXQgYm90aCBhZHZlcnRpc21lbnRzIGJ1dCBkaXNhYmxlIHR4
IHBhdXNlICovCisJCXJlZyB8PSBBRFZFUlRJU0VfUEFVU0VfQ0FQIHwgQURWRVJUSVNFX1BBVVNF
X0FTWU07CisJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfVFhfUkVRKQorCQly
ZWcgfD0gQURWRVJUSVNFX1BBVVNFX0FTWU07CisJbnAtPmZpeGVkX21vZGUgPSByZWc7CisKIAlp
ZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIHJlZykpIHsKIAkJcHJp
bnRrKEtFUk5fSU5GTyAiJXM6IHBoeSB3cml0ZSB0byBhZHZlcnRpc2UgZmFpbGVkLlxuIiwgcGNp
X25hbWUobnAtPnBjaV9kZXYpKTsKIAkJcmV0dXJuIFBIWV9FUlJPUjsKQEAgLTEwNjksMTEgKzEz
OTAsMTUgQEAKIAkJbnAtPmdpZ2FiaXQgPSBQSFlfR0lHQUJJVDsKIAkJbWlpX2NvbnRyb2xfMTAw
MCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQ1RSTDEwMDAsIE1JSV9SRUFEKTsKIAkJ
bWlpX2NvbnRyb2xfMTAwMCAmPSB+QURWRVJUSVNFXzEwMDBIQUxGOwotCQlpZiAocGh5aW50ZXJm
YWNlICYgUEhZX1JHTUlJKQorCQlpZiAocGh5aW50ZXJmYWNlICYgUEhZX1JHTUlJICYmIAorCQkg
ICAgKHNwZWVkX2R1cGxleCA9PSBOVl9TUEVFRF9EVVBMRVhfQVVUTyB8fCAKKwkJICAgICAoc3Bl
ZWRfZHVwbGV4ID09IE5WX1NQRUVEX0RVUExFWF8xMDAwX0ZVTExfRFVQTEVYICYmIGF1dG9uZWcg
PT0gQVVUT05FR19FTkFCTEUpKSkKIAkJCW1paV9jb250cm9sXzEwMDAgfD0gQURWRVJUSVNFXzEw
MDBGVUxMOwotCQllbHNlCisJCWVsc2UgeworCQkJaWYgKHNwZWVkX2R1cGxleCA9PSBOVl9TUEVF
RF9EVVBMRVhfMTAwMF9GVUxMX0RVUExFWCAmJiBhdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkK
KwkJCQlwcmludGsoS0VSTl9JTkZPICIlczogMTAwMG1wYnMgZnVsbCBvbmx5IGFsbG93ZWQgd2l0
aCBhdXRvbmVnXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwogCQkJbWlpX2NvbnRyb2xfMTAw
MCAmPSB+QURWRVJUSVNFXzEwMDBGVUxMOwotCisJCX0KIAkJaWYgKG1paV9ydyhkZXYsIG5wLT5w
aHlhZGRyLCBNSUlfQ1RSTDEwMDAsIG1paV9jb250cm9sXzEwMDApKSB7CiAJCQlwcmludGsoS0VS
Tl9JTkZPICIlczogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsK
IAkJCXJldHVybiBQSFlfRVJST1I7CkBAIC0xMDgyLDggKzE0MDcsMjUgQEAKIAllbHNlCiAJCW5w
LT5naWdhYml0ID0gMDsKIAotCS8qIHJlc2V0IHRoZSBwaHkgKi8KLQlpZiAocGh5X3Jlc2V0KGRl
dikpIHsKKwltaWlfY29udHJvbCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwg
TUlJX1JFQUQpOworCWlmIChhdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSl7CisJCW5wLT5wYXVz
ZV9mbGFncyAmPSB+KE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFIHwgTlZfUEFVU0VGUkFNRV9UWF9F
TkFCTEUpOworCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9SWF9SRVEpCisJ
CQlucC0+cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9SWF9FTkFCTEU7CisJCWlmIChucC0+
cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1RYX1JFUSkKKwkJCW5wLT5wYXVzZV9mbGFncyB8
PSBOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRTsKKwkJbWlpX2NvbnRyb2wgJj0gfihCTUNSX0FORU5B
QkxFfEJNQ1JfU1BFRUQxMDB8Qk1DUl9TUEVFRDEwMDB8Qk1DUl9GVUxMRFBMWCk7CisJCWlmIChy
ZWcgJiAoQURWRVJUSVNFXzEwRlVMTHxBRFZFUlRJU0VfMTAwRlVMTCkpCisJCQltaWlfY29udHJv
bCB8PSBCTUNSX0ZVTExEUExYOworCQlpZiAocmVnICYgKEFEVkVSVElTRV8xMDBIQUxGfEFEVkVS
VElTRV8xMDBGVUxMKSkKKwkJCW1paV9jb250cm9sIHw9IEJNQ1JfU1BFRUQxMDA7CisJfSBlbHNl
IHsKKwkJbWlpX2NvbnRyb2wgfD0gQk1DUl9BTkVOQUJMRTsKKwl9CisKKwkvKiByZXNldCB0aGUg
cGh5IGFuZCBzZXR1cCBCTUNSIAorCSAqIChjZXJ0YWluIHBoeXMgbmVlZCByZXNldCBhdCBzYW1l
IHRpbWUgbmV3IHZhbHVlcyBhcmUgc2V0KSAqLworCWlmIChwaHlfcmVzZXQoZGV2LCBtaWlfY29u
dHJvbCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSByZXNldCBmYWlsZWRcbiIsIHBj
aV9uYW1lKG5wLT5wY2lfZGV2KSk7CiAJCXJldHVybiBQSFlfRVJST1I7CiAJfQpAQCAtMTA5MSwx
NCArMTQzMywxNCBAQAogCS8qIHBoeSB2ZW5kb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqLwog
CWlmICgobnAtPnBoeV9vdWkgPT0gUEhZX09VSV9DSUNBREEpICYmIChwaHlpbnRlcmZhY2UgJiBQ
SFlfUkdNSUkpICkgewogCQlwaHlfcmVzZXJ2ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwg
TUlJX1JFU1YxLCBNSUlfUkVBRCk7Ci0JCXBoeV9yZXNlcnZlZCAmPSB+KFBIWV9JTklUMSB8IFBI
WV9JTklUMik7Ci0JCXBoeV9yZXNlcnZlZCB8PSAoUEhZX0lOSVQzIHwgUEhZX0lOSVQ0KTsKKwkJ
cGh5X3Jlc2VydmVkICY9IH4oUEhZX0NJQ0FEQV9JTklUMSB8IFBIWV9DSUNBREFfSU5JVDIpOwor
CQlwaHlfcmVzZXJ2ZWQgfD0gKFBIWV9DSUNBREFfSU5JVDMgfCBQSFlfQ0lDQURBX0lOSVQ0KTsK
IAkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfUkVTVjEsIHBoeV9yZXNlcnZlZCkp
IHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFt
ZShucC0+cGNpX2RldikpOwogCQkJcmV0dXJuIFBIWV9FUlJPUjsKIAkJfQogCQlwaHlfcmVzZXJ2
ZWQgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX05DT05GSUcsIE1JSV9SRUFEKTsKLQkJ
cGh5X3Jlc2VydmVkIHw9IFBIWV9JTklUNTsKKwkJcGh5X3Jlc2VydmVkIHw9IFBIWV9DSUNBREFf
SU5JVDU7CiAJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX05DT05GSUcsIHBoeV9y
ZXNlcnZlZCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4i
LCBwY2lfbmFtZShucC0+cGNpX2RldikpOwogCQkJcmV0dXJuIFBIWV9FUlJPUjsKQEAgLTExMDYs
MjAgKzE0NDgsOTIgQEAKIAl9CiAJaWYgKG5wLT5waHlfb3VpID09IFBIWV9PVUlfQ0lDQURBKSB7
CiAJCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfU1JFVklTSU9O
LCBNSUlfUkVBRCk7Ci0JCXBoeV9yZXNlcnZlZCB8PSBQSFlfSU5JVDY7CisJCXBoeV9yZXNlcnZl
ZCB8PSBQSFlfQ0lDQURBX0lOSVQ2OwogCQlpZiAobWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1J
SV9TUkVWSVNJT04sIHBoeV9yZXNlcnZlZCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBw
aHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwogCQkJcmV0dXJuIFBI
WV9FUlJPUjsKIAkJfQogCX0KKwlpZiAobnAtPnBoeV9vdWkgPT0gUEhZX09VSV9WSVRFU1NFKSB7
CisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUcxLCBQ
SFlfVklURVNTRV9JTklUMSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBm
YWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOworCQkJcmV0dXJuIFBIWV9FUlJPUjsK
KwkJfQkJCisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9S
RUcyLCBQSFlfVklURVNTRV9JTklUMikpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkg
aW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOworCQkJcmV0dXJuIFBIWV9F
UlJPUjsKKwkJfQkJCisJCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQ
SFlfVklURVNTRV9JTklUX1JFRzQsIE1JSV9SRUFEKTsKKwkJaWYgKG1paV9ydyhkZXYsIG5wLT5w
aHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzQsIHBoeV9yZXNlcnZlZCkpIHsKKwkJCXByaW50
ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2Rl
dikpOworCQkJcmV0dXJuIFBIWV9FUlJPUjsKKwkJfQkJCisJCXBoeV9yZXNlcnZlZCA9IG1paV9y
dyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzMsIE1JSV9SRUFEKTsKKwkJ
cGh5X3Jlc2VydmVkICY9IH5QSFlfVklURVNTRV9JTklUX01TSzE7CisJCXBoeV9yZXNlcnZlZCB8
PSBQSFlfVklURVNTRV9JTklUMzsKKwkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlf
VklURVNTRV9JTklUX1JFRzMsIHBoeV9yZXNlcnZlZCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8g
IiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOworCQkJcmV0
dXJuIFBIWV9FUlJPUjsKKwkJfQkJCisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZ
X1ZJVEVTU0VfSU5JVF9SRUcyLCBQSFlfVklURVNTRV9JTklUNCkpIHsKKwkJCXByaW50ayhLRVJO
X0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwor
CQkJcmV0dXJuIFBIWV9FUlJPUjsKKwkJfQkJCisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRk
ciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUcyLCBQSFlfVklURVNTRV9JTklUNSkpIHsKKwkJCXByaW50
ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2Rl
dikpOworCQkJcmV0dXJuIFBIWV9FUlJPUjsKKwkJfQkJCisJCXBoeV9yZXNlcnZlZCA9IG1paV9y
dyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzQsIE1JSV9SRUFEKTsKKwkJ
cGh5X3Jlc2VydmVkICY9IH5QSFlfVklURVNTRV9JTklUX01TSzE7CisJCXBoeV9yZXNlcnZlZCB8
PSBQSFlfVklURVNTRV9JTklUMzsKKwkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlf
VklURVNTRV9JTklUX1JFRzQsIHBoeV9yZXNlcnZlZCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8g
IiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOworCQkJcmV0
dXJuIFBIWV9FUlJPUjsKKwkJfQkJCisJCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5w
aHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzMsIE1JSV9SRUFEKTsKKwkJaWYgKG1paV9ydyhk
ZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzMsIHBoeV9yZXNlcnZlZCkpIHsK
KwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShu
cC0+cGNpX2RldikpOworCQkJcmV0dXJuIFBIWV9FUlJPUjsKKwkJfQkJCisJCWlmIChtaWlfcnco
ZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUcyLCBQSFlfVklURVNTRV9JTklU
NikpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lf
bmFtZShucC0+cGNpX2RldikpOworCQkJcmV0dXJuIFBIWV9FUlJPUjsKKwkJfQkJCisJCWlmICht
aWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9SRUcyLCBQSFlfVklURVNT
RV9JTklUNykpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBmYWlsZWQuXG4i
LCBwY2lfbmFtZShucC0+cGNpX2RldikpOworCQkJcmV0dXJuIFBIWV9FUlJPUjsKKwkJfQkJCisJ
CXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklU
X1JFRzQsIE1JSV9SRUFEKTsKKwkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklU
RVNTRV9JTklUX1JFRzQsIHBoeV9yZXNlcnZlZCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVz
OiBwaHkgaW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOworCQkJcmV0dXJu
IFBIWV9FUlJPUjsKKwkJfQkJCisJCXBoeV9yZXNlcnZlZCA9IG1paV9ydyhkZXYsIG5wLT5waHlh
ZGRyLCBQSFlfVklURVNTRV9JTklUX1JFRzMsIE1JSV9SRUFEKTsKKwkJcGh5X3Jlc2VydmVkICY9
IH5QSFlfVklURVNTRV9JTklUX01TSzI7CisJCXBoeV9yZXNlcnZlZCB8PSBQSFlfVklURVNTRV9J
TklUODsKKwkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBQSFlfVklURVNTRV9JTklUX1JF
RzMsIHBoeV9yZXNlcnZlZCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgaW5pdCBm
YWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOworCQkJcmV0dXJuIFBIWV9FUlJPUjsK
KwkJfQkJCisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0VfSU5JVF9S
RUcyLCBQSFlfVklURVNTRV9JTklUOSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkg
aW5pdCBmYWlsZWQuXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOworCQkJcmV0dXJuIFBIWV9F
UlJPUjsKKwkJfQkJCisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgUEhZX1ZJVEVTU0Vf
SU5JVF9SRUcxLCBQSFlfVklURVNTRV9JTklUMTApKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIl
czogcGh5IGluaXQgZmFpbGVkLlxuIiwgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKKwkJCXJldHVy
biBQSFlfRVJST1I7CisJCX0JCQorCX0KIAkvKiBzb21lIHBoeXMgY2xlYXIgb3V0IHBhdXNlIGFk
dmVydGlzbWVudCBvbiByZXNldCwgc2V0IGl0IGJhY2sgKi8KIAltaWlfcncoZGV2LCBucC0+cGh5
YWRkciwgTUlJX0FEVkVSVElTRSwgcmVnKTsKIAogCS8qIHJlc3RhcnQgYXV0byBuZWdvdGlhdGlv
biAqLwotCW1paV9jb250cm9sID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBN
SUlfUkVBRCk7Ci0JbWlpX2NvbnRyb2wgfD0gKEJNQ1JfQU5SRVNUQVJUIHwgQk1DUl9BTkVOQUJM
RSk7Ci0JaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgbWlpX2NvbnRyb2wp
KSB7Ci0JCXJldHVybiBQSFlfRVJST1I7CisJaWYgKGF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUp
IHsKKwkJbWlpX2NvbnRyb2wgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIE1J
SV9SRUFEKTsKKwkJbWlpX2NvbnRyb2wgfD0gKEJNQ1JfQU5SRVNUQVJUIHwgQk1DUl9BTkVOQUJM
RSk7CisJCWlmIChtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIG1paV9jb250cm9s
KSkgeworCQkJcmV0dXJuIFBIWV9FUlJPUjsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMTEy
NywxOCArMTU0MSwyMyBAQAogCiBzdGF0aWMgdm9pZCBudl9zdGFydF9yeChzdHJ1Y3QgbmV0X2Rl
dmljZSAqZGV2KQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJ
c3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2Ug
PSBnZXRfaHdiYXNlKGRldik7CisJdTMyIHJ4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdSZWNl
aXZlckNvbnRyb2wpOwogCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RhcnRfcnhcbiIs
IGRldi0+bmFtZSk7CiAJLyogQWxyZWFkeSBydW5uaW5nPyBTdG9wIGl0LiAqLwotCWlmIChyZWFk
bChiYXNlICsgTnZSZWdSZWNlaXZlckNvbnRyb2wpICYgTlZSRUdfUkNWQ1RMX1NUQVJUKSB7Ci0J
CXdyaXRlbCgwLCBiYXNlICsgTnZSZWdSZWNlaXZlckNvbnRyb2wpOworCWlmICgocmVhZGwoYmFz
ZSArIE52UmVnUmVjZWl2ZXJDb250cm9sKSAmIE5WUkVHX1JDVkNUTF9TVEFSVCkgJiYgIW5wLT5t
YWNfaW5fdXNlKSB7CisJCXJ4X2N0cmwgJj0gfk5WUkVHX1JDVkNUTF9TVEFSVDsKKwkJd3JpdGVs
KHJ4X2N0cmwsIGJhc2UgKyBOdlJlZ1JlY2VpdmVyQ29udHJvbCk7CiAJCXBjaV9wdXNoKGJhc2Up
OwogCX0KIAl3cml0ZWwobnAtPmxpbmtzcGVlZCwgYmFzZSArIE52UmVnTGlua1NwZWVkKTsKIAlw
Y2lfcHVzaChiYXNlKTsKLQl3cml0ZWwoTlZSRUdfUkNWQ1RMX1NUQVJULCBiYXNlICsgTnZSZWdS
ZWNlaXZlckNvbnRyb2wpOworICAgICAgICByeF9jdHJsIHw9IE5WUkVHX1JDVkNUTF9TVEFSVDsK
KyAgICAgICAgaWYgKG5wLT5tYWNfaW5fdXNlKQorCQlyeF9jdHJsICY9IH5OVlJFR19SQ1ZDVExf
UlhfUEFUSF9FTjsKKwl3cml0ZWwocnhfY3RybCwgYmFzZSArIE52UmVnUmVjZWl2ZXJDb250cm9s
KTsKIAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9zdGFydF9yeCB0byBkdXBsZXggJWQsIHNw
ZWVkIDB4JTA4eC5cbiIsCiAJCQkJZGV2LT5uYW1lLCBucC0+ZHVwbGV4LCBucC0+bGlua3NwZWVk
KTsKIAlwY2lfcHVzaChiYXNlKTsKQEAgLTExNDYsNDQgKzE1NjUsNjMgQEAKIAogc3RhdGljIHZv
aWQgbnZfc3RvcF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBmZV9wcml2
ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShk
ZXYpOworCXUzMiByeF9jdHJsID0gcmVhZGwoYmFzZSArIE52UmVnUmVjZWl2ZXJDb250cm9sKTsK
IAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3N0b3BfcnhcbiIsIGRldi0+bmFtZSk7Ci0J
d3JpdGVsKDAsIGJhc2UgKyBOdlJlZ1JlY2VpdmVyQ29udHJvbCk7CisJaWYgKCFucC0+bWFjX2lu
X3VzZSkKKwkJcnhfY3RybCAmPSB+TlZSRUdfUkNWQ1RMX1NUQVJUOworCWVsc2UKKwkJcnhfY3Ry
bCB8PSBOVlJFR19SQ1ZDVExfUlhfUEFUSF9FTjsKKwl3cml0ZWwocnhfY3RybCwgYmFzZSArIE52
UmVnUmVjZWl2ZXJDb250cm9sKTsKIAlyZWdfZGVsYXkoZGV2LCBOdlJlZ1JlY2VpdmVyU3RhdHVz
LCBOVlJFR19SQ1ZTVEFUX0JVU1ksIDAsCiAJCQlOVl9SWFNUT1BfREVMQVkxLCBOVl9SWFNUT1Bf
REVMQVkxTUFYLAogCQkJS0VSTl9JTkZPICJudl9zdG9wX3J4OiBSZWNlaXZlclN0YXR1cyByZW1h
aW5lZCBidXN5Iik7CiAKIAl1ZGVsYXkoTlZfUlhTVE9QX0RFTEFZMik7CisJaWYgKCFucC0+bWFj
X2luX3VzZSkKIAl3cml0ZWwoMCwgYmFzZSArIE52UmVnTGlua1NwZWVkKTsKIH0KIAogc3RhdGlj
IHZvaWQgbnZfc3RhcnRfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZmVf
cHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jh
c2UoZGV2KTsKKwl1MzIgdHhfY3RybCA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29u
dHJvbCk7CiAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9zdGFydF90eFxuIiwgZGV2LT5u
YW1lKTsKLQl3cml0ZWwoTlZSRUdfWE1JVENUTF9TVEFSVCwgYmFzZSArIE52UmVnVHJhbnNtaXR0
ZXJDb250cm9sKTsKKwl0eF9jdHJsIHw9IE5WUkVHX1hNSVRDVExfU1RBUlQ7CisJaWYgKG5wLT5t
YWNfaW5fdXNlKQorCQl0eF9jdHJsICY9IH5OVlJFR19YTUlUQ1RMX1RYX1BBVEhfRU47CisJd3Jp
dGVsKHR4X2N0cmwsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CiAJcGNpX3B1c2go
YmFzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIG52X3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRl
dikKIHsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTggX19pb21l
bSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKwl1MzIgdHhfY3RybCA9IHJlYWRsKGJhc2UgKyBO
dlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CiAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9z
dG9wX3R4XG4iLCBkZXYtPm5hbWUpOwotCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdUcmFuc21pdHRl
ckNvbnRyb2wpOworCWlmICghbnAtPm1hY19pbl91c2UpCisJCXR4X2N0cmwgJj0gfk5WUkVHX1hN
SVRDVExfU1RBUlQ7CisJZWxzZQorCQl0eF9jdHJsIHw9IE5WUkVHX1hNSVRDVExfVFhfUEFUSF9F
TjsKKwl3cml0ZWwodHhfY3RybCwgYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKIAly
ZWdfZGVsYXkoZGV2LCBOdlJlZ1RyYW5zbWl0dGVyU3RhdHVzLCBOVlJFR19YTUlUU1RBVF9CVVNZ
LCAwLAogCQkJTlZfVFhTVE9QX0RFTEFZMSwgTlZfVFhTVE9QX0RFTEFZMU1BWCwKIAkJCUtFUk5f
SU5GTyAibnZfc3RvcF90eDogVHJhbnNtaXR0ZXJTdGF0dXMgcmVtYWluZWQgYnVzeSIpOwogCiAJ
dWRlbGF5KE5WX1RYU1RPUF9ERUxBWTIpOwotCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdVbmtub3du
VHJhbnNtaXR0ZXJSZWcpOworCWlmICghbnAtPm1hY19pbl91c2UpCisJCXdyaXRlbChyZWFkbChi
YXNlICsgTnZSZWdUcmFuc21pdFBvbGwpICYgTlZSRUdfVFJBTlNNSVRQT0xMX01BQ19BRERSX1JF
ViwgYmFzZSArIE52UmVnVHJhbnNtaXRQb2xsKTsKIH0KIAogc3RhdGljIHZvaWQgbnZfdHhyeF9y
ZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5l
dGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwog
CXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAKIAlkcHJpbnRrKEtFUk5fREVC
VUcgIiVzOiBudl90eHJ4X3Jlc2V0XG4iLCBkZXYtPm5hbWUpOwpAQCAtMTE5Niw3ICsxNjM0LDcg
QEAKIAogc3RhdGljIHZvaWQgbnZfbWFjX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7
Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJp
diAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2Uo
ZGV2KTsKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X21hY19yZXNldFxuIiwgZGV2LT5u
YW1lKTsKQEAgLTEyMTMsNzQgKzE2NTEsODEgQEAKIH0KIAogLyoKLSAqIG52X2dldF9zdGF0czog
ZGV2LT5nZXRfc3RhdHMgZnVuY3Rpb24KLSAqIEdldCBsYXRlc3Qgc3RhdHMgdmFsdWUgZnJvbSB0
aGUgbmljLgotICogQ2FsbGVkIHdpdGggcmVhZF9sb2NrKCZkZXZfYmFzZV9sb2NrKSBoZWxkIGZv
ciByZWFkIC0KLSAqIG9ubHkgc3luY2hyb25pemVkIGFnYWluc3QgdW5yZWdpc3Rlcl9uZXRkZXZp
Y2UuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnZfZ2V0X3N0YXRzKHN0
cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3By
aXYoZGV2KTsKLQotCS8qIEl0IHNlZW1zIHRoYXQgdGhlIG5pYyBhbHdheXMgZ2VuZXJhdGVzIGlu
dGVycnVwdHMgYW5kIGRvZXNuJ3QKLQkgKiBhY2N1bXVsYXRlIGVycm9ycyBpbnRlcm5hbGx5LiBU
aHVzIHRoZSBjdXJyZW50IHZhbHVlcyBpbiBucC0+c3RhdHMKLQkgKiBhcmUgYWxyZWFkeSB1cCB0
byBkYXRlLgotCSAqLwotCXJldHVybiAmbnAtPnN0YXRzOwotfQotCi0vKgogICogbnZfYWxsb2Nf
cng6IGZpbGwgcnggcmluZyBlbnRyaWVzLgogICogUmV0dXJuIDEgaWYgdGhlIGFsbG9jYXRpb25z
IGZvciB0aGUgc2ticyBmYWlsZWQgYW5kIHRoZQogICogcnggZW5naW5lIGlzIHdpdGhvdXQgQXZh
aWxhYmxlIGRlc2NyaXB0b3JzCiAgKi8KLXN0YXRpYyBpbnQgbnZfYWxsb2Nfcngoc3RydWN0IG5l
dF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgaW50IG52X2FsbG9jX3J4KHN0cnVjdCBuZXRf
ZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsK
LQl1bnNpZ25lZCBpbnQgcmVmaWxsX3J4ID0gbnAtPnJlZmlsbF9yeDsKLQlpbnQgbnI7Ci0KLQl3
aGlsZSAobnAtPmN1cl9yeCAhPSByZWZpbGxfcngpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsK
LQotCQluciA9IHJlZmlsbF9yeCAlIG5wLT5yeF9yaW5nX3NpemU7Ci0JCWlmIChucC0+cnhfc2ti
dWZmW25yXSA9PSBOVUxMKSB7Ci0KLQkJCXNrYiA9IGRldl9hbGxvY19za2IobnAtPnJ4X2J1Zl9z
eiArIE5WX1JYX0FMTE9DX1BBRCk7Ci0JCQlpZiAoIXNrYikKLQkJCQlicmVhazsKKwlzdHJ1Y3Qg
ZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisJc3RydWN0IHJpbmdfZGVzYyogbGVzc19y
eDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCisJbGVzc19yeCA9IG5wLT5nZXRfcngub3JpZzsK
KwlpZiAobGVzc19yeC0tID09IG5wLT5maXJzdF9yeC5vcmlnKQorCQlsZXNzX3J4ID0gbnAtPmxh
c3Rfcngub3JpZzsKKworCXdoaWxlIChucC0+cHV0X3J4Lm9yaWcgIT0gbGVzc19yeCkgeworCQlz
a2IgPSBkZXZfYWxsb2Nfc2tiKG5wLT5yeF9idWZfc3ogKyBOVl9SWF9BTExPQ19QQUQpOworCQlp
ZiAoc2tiKSB7CiAJCQlza2ItPmRldiA9IGRldjsKLQkJCW5wLT5yeF9za2J1ZmZbbnJdID0gc2ti
OwotCQl9IGVsc2UgewotCQkJc2tiID0gbnAtPnJ4X3NrYnVmZltucl07Ci0JCX0KLQkJbnAtPnJ4
X2RtYVtucl0gPSBwY2lfbWFwX3NpbmdsZShucC0+cGNpX2Rldiwgc2tiLT5kYXRhLAotCQkJCQlz
a2ItPmVuZC1za2ItPmRhdGEsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChucC0+ZGVzY192
ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgewotCQkJbnAt
PnJ4X3Jpbmcub3JpZ1tucl0uUGFja2V0QnVmZmVyID0gY3B1X3RvX2xlMzIobnAtPnJ4X2RtYVtu
cl0pOworCQkJbnAtPnB1dF9yeF9jdHgtPnNrYiA9IHNrYjsKKwkJCW5wLT5wdXRfcnhfY3R4LT5k
bWEgPSBwY2lfbWFwX3NpbmdsZShucC0+cGNpX2Rldiwgc2tiLT5kYXRhLAorCQkJCQkJCSAgICAg
c2tiLT5lbmQtc2tiLT5kYXRhLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJbnAtPnB1dF9yeF9j
dHgtPmRtYV9sZW4gPSBza2ItPmVuZC1za2ItPmRhdGE7CisJCQlucC0+cHV0X3J4Lm9yaWctPlBh
Y2tldEJ1ZmZlciA9IGNwdV90b19sZTMyKG5wLT5wdXRfcnhfY3R4LT5kbWEpOwogCQkJd21iKCk7
Ci0JCQlucC0+cnhfcmluZy5vcmlnW25yXS5GbGFnTGVuID0gY3B1X3RvX2xlMzIobnAtPnJ4X2J1
Zl9zeiB8IE5WX1JYX0FWQUlMKTsKKwkJCW5wLT5wdXRfcngub3JpZy0+RmxhZ0xlbiA9IGNwdV90
b19sZTMyKG5wLT5yeF9idWZfc3ogfCBOVl9SWF9BVkFJTCk7CisJCQlpZiAodW5saWtlbHkobnAt
PnB1dF9yeC5vcmlnKysgPT0gbnAtPmxhc3Rfcngub3JpZykpCisJCQkJbnAtPnB1dF9yeC5vcmln
ID0gbnAtPmZpcnN0X3J4Lm9yaWc7CisJCQlpZiAodW5saWtlbHkobnAtPnB1dF9yeF9jdHgrKyA9
PSBucC0+bGFzdF9yeF9jdHgpKQorCQkJCW5wLT5wdXRfcnhfY3R4ID0gbnAtPmZpcnN0X3J4X2N0
eDsKIAkJfSBlbHNlIHsKLQkJCW5wLT5yeF9yaW5nLmV4W25yXS5QYWNrZXRCdWZmZXJIaWdoID0g
Y3B1X3RvX2xlNjQobnAtPnJ4X2RtYVtucl0pID4+IDMyOwotCQkJbnAtPnJ4X3JpbmcuZXhbbnJd
LlBhY2tldEJ1ZmZlckxvdyA9IGNwdV90b19sZTY0KG5wLT5yeF9kbWFbbnJdKSAmIDB4MEZGRkZG
RkZGOwotCQkJd21iKCk7Ci0JCQlucC0+cnhfcmluZy5leFtucl0uRmxhZ0xlbiA9IGNwdV90b19s
ZTMyKG5wLT5yeF9idWZfc3ogfCBOVl9SWDJfQVZBSUwpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG52X2FsbG9jX3J4X29wdGltaXpl
ZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9u
dnByaXYoZGV2KTsKKwlzdHJ1Y3QgcmluZ19kZXNjX2V4KiBsZXNzX3J4OworCXN0cnVjdCBza19i
dWZmICpza2I7CisKKwlsZXNzX3J4ID0gbnAtPmdldF9yeC5leDsKKwlpZiAobGVzc19yeC0tID09
IG5wLT5maXJzdF9yeC5leCkKKwkJbGVzc19yeCA9IG5wLT5sYXN0X3J4LmV4OworCisJd2hpbGUg
KG5wLT5wdXRfcnguZXggIT0gbGVzc19yeCkgeworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKG5wLT5y
eF9idWZfc3ogKyBOVl9SWF9BTExPQ19QQUQpOworCQlpZiAoc2tiKSB7CisJCQlza2ItPmRldiA9
IGRldjsKKwkJCW5wLT5wdXRfcnhfY3R4LT5za2IgPSBza2I7CisJCQlucC0+cHV0X3J4X2N0eC0+
ZG1hID0gcGNpX21hcF9zaW5nbGUobnAtPnBjaV9kZXYsIHNrYi0+ZGF0YSwKKwkJCQkJCQkgICAg
IHNrYi0+ZW5kLXNrYi0+ZGF0YSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCW5wLT5wdXRfcnhf
Y3R4LT5kbWFfbGVuID0gc2tiLT5lbmQtc2tiLT5kYXRhOworCQkJbnAtPnB1dF9yeC5leC0+UGFj
a2V0QnVmZmVySGlnaCA9IGNwdV90b19sZTY0KG5wLT5wdXRfcnhfY3R4LT5kbWEpID4+IDMyOwor
CQkJbnAtPnB1dF9yeC5leC0+UGFja2V0QnVmZmVyTG93ID0gY3B1X3RvX2xlNjQobnAtPnB1dF9y
eF9jdHgtPmRtYSkgJiAweDBGRkZGRkZGRjsJCQkKKwkJCXdtYigpOworCQkJbnAtPnB1dF9yeC5l
eC0+RmxhZ0xlbiA9IGNwdV90b19sZTMyKG5wLT5yeF9idWZfc3ogfCBOVl9SWDJfQVZBSUwpOwor
CQkJaWYgKHVubGlrZWx5KG5wLT5wdXRfcnguZXgrKyA9PSBucC0+bGFzdF9yeC5leCkpCisJCQkJ
bnAtPnB1dF9yeC5leCA9IG5wLT5maXJzdF9yeC5leDsKKwkJCWlmICh1bmxpa2VseShucC0+cHV0
X3J4X2N0eCsrID09IG5wLT5sYXN0X3J4X2N0eCkpCisJCQkJbnAtPnB1dF9yeF9jdHggPSBucC0+
Zmlyc3RfcnhfY3R4OworCQl9IGVsc2UgeworCQkJcmV0dXJuIDE7CiAJCX0KLQkJZHByaW50ayhL
RVJOX0RFQlVHICIlczogbnZfYWxsb2Nfcng6IFBhY2tldCAlZCBtYXJrZWQgYXMgQXZhaWxhYmxl
XG4iLAotCQkJCQlkZXYtPm5hbWUsIHJlZmlsbF9yeCk7Ci0JCXJlZmlsbF9yeCsrOwogCX0KLQlu
cC0+cmVmaWxsX3J4ID0gcmVmaWxsX3J4OwotCWlmIChucC0+Y3VyX3J4IC0gcmVmaWxsX3J4ID09
IG5wLT5yeF9yaW5nX3NpemUpCi0JCXJldHVybiAxOwogCXJldHVybiAwOworCiB9CiAKIHN0YXRp
YyB2b2lkIG52X2RvX3J4X3JlZmlsbCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IG5l
dF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwotCXN0cnVjdCBmZV9w
cml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252
cHJpdihkZXYpOworCWludCByZXRjb2RlOwogCiAJaWYgKCF1c2luZ19tdWx0aV9pcnFzKGRldikp
IHsKIAkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQpAQCAtMTI5MCw3ICsx
NzM1LDEyIEBACiAJfSBlbHNlIHsKIAkJZGlzYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01T
SV9YX1ZFQ1RPUl9SWF0udmVjdG9yKTsKIAl9Ci0JaWYgKG52X2FsbG9jX3J4KGRldikpIHsKKwor
CWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19W
RVJfMikKKwkJcmV0Y29kZSA9IG52X2FsbG9jX3J4KGRldik7CisJZWxzZQorCQlyZXRjb2RlID0g
bnZfYWxsb2Nfcnhfb3B0aW1pemVkKGRldik7CisJaWYgKHJldGNvZGUpIHsKIAkJc3Bpbl9sb2Nr
X2lycSgmbnAtPmxvY2spOwogCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKIAkJCW1vZF90aW1lcigm
bnAtPm9vbV9raWNrLCBqaWZmaWVzICsgT09NX1JFRklMTCk7CkBAIC0xMzA2LDYwICsxNzU2LDg5
IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBudl9pbml0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpk
ZXYpCitzdGF0aWMgdm9pZCBudl9pbml0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIAogewot
CXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYg
Km5wID0gZ2V0X252cHJpdihkZXYpOwogCWludCBpOwogCi0JbnAtPmN1cl9yeCA9IG5wLT5yeF9y
aW5nX3NpemU7Ci0JbnAtPnJlZmlsbF9yeCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG5wLT5yeF9y
aW5nX3NpemU7IGkrKykKKwlucC0+Z2V0X3J4ID0gbnAtPnB1dF9yeCA9IG5wLT5maXJzdF9yeCA9
IG5wLT5yeF9yaW5nOwogCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRl
c2NfdmVyID09IERFU0NfVkVSXzIpCisJCW5wLT5sYXN0X3J4Lm9yaWcgPSAmbnAtPnJ4X3Jpbmcu
b3JpZ1tucC0+cnhfcmluZ19zaXplLTFdOworCWVsc2UKKwkJbnAtPmxhc3RfcnguZXggPSAmbnAt
PnJ4X3JpbmcuZXhbbnAtPnJ4X3Jpbmdfc2l6ZS0xXTsKKwlucC0+Z2V0X3J4X2N0eCA9IG5wLT5w
dXRfcnhfY3R4ID0gbnAtPmZpcnN0X3J4X2N0eCA9IG5wLT5yeF9za2I7CisJbnAtPmxhc3Rfcnhf
Y3R4ID0gJm5wLT5yeF9za2JbbnAtPnJ4X3Jpbmdfc2l6ZS0xXTsKKworCWZvciAoaSA9IDA7IGkg
PCBucC0+cnhfcmluZ19zaXplOyBpKyspIHsKKwkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZF
Ul8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CiAJCQlucC0+cnhfcmluZy5vcmln
W2ldLkZsYWdMZW4gPSAwOwotCSAgICAgICAgZWxzZQorCQkJbnAtPnJ4X3Jpbmcub3JpZ1tpXS5Q
YWNrZXRCdWZmZXIgPSAwOworCQl9IGVsc2UgewogCQkJbnAtPnJ4X3JpbmcuZXhbaV0uRmxhZ0xl
biA9IDA7CisJCQlucC0+cnhfcmluZy5leFtpXS5UeFZsYW4gPSAwOworCQkJbnAtPnJ4X3Jpbmcu
ZXhbaV0uUGFja2V0QnVmZmVySGlnaCA9IDA7CisJCQlucC0+cnhfcmluZy5leFtpXS5QYWNrZXRC
dWZmZXJMb3cgPSAwOworCQl9CisJCW5wLT5yeF9za2JbaV0uc2tiID0gTlVMTDsKKwkJbnAtPnJ4
X3NrYltpXS5kbWEgPSAwOworCX0KIH0KIAogc3RhdGljIHZvaWQgbnZfaW5pdF90eChzdHJ1Y3Qg
bmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRl
dik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCWludCBpOwogCi0J
bnAtPm5leHRfdHggPSBucC0+bmljX3R4ID0gMDsKKwlucC0+Z2V0X3R4ID0gbnAtPnB1dF90eCA9
IG5wLT5maXJzdF90eCA9IG5wLT50eF9yaW5nOworCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19W
RVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKKwkJbnAtPmxhc3RfdHgub3JpZyA9
ICZucC0+dHhfcmluZy5vcmlnW25wLT50eF9yaW5nX3NpemUtMV07CisJZWxzZQorCQlucC0+bGFz
dF90eC5leCA9ICZucC0+dHhfcmluZy5leFtucC0+dHhfcmluZ19zaXplLTFdOworCW5wLT5nZXRf
dHhfY3R4ID0gbnAtPnB1dF90eF9jdHggPSBucC0+Zmlyc3RfdHhfY3R4ID0gbnAtPnR4X3NrYjsK
KwlucC0+bGFzdF90eF9jdHggPSAmbnAtPnR4X3NrYltucC0+dHhfcmluZ19zaXplLTFdOworCiAJ
Zm9yIChpID0gMDsgaSA8IG5wLT50eF9yaW5nX3NpemU7IGkrKykgewotCQlpZiAobnAtPmRlc2Nf
dmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCisJCWlmIChu
cC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikg
ewogCQkJbnAtPnR4X3Jpbmcub3JpZ1tpXS5GbGFnTGVuID0gMDsKLQkgICAgICAgIGVsc2UKKwkJ
CW5wLT50eF9yaW5nLm9yaWdbaV0uUGFja2V0QnVmZmVyID0gMDsKKwkJfSBlbHNlIHsKIAkJCW5w
LT50eF9yaW5nLmV4W2ldLkZsYWdMZW4gPSAwOwotCQlucC0+dHhfc2tidWZmW2ldID0gTlVMTDsK
LQkJbnAtPnR4X2RtYVtpXSA9IDA7CisJCQlucC0+dHhfcmluZy5leFtpXS5UeFZsYW4gPSAwOwor
CQkJbnAtPnR4X3JpbmcuZXhbaV0uUGFja2V0QnVmZmVySGlnaCA9IDA7CisJCQlucC0+dHhfcmlu
Zy5leFtpXS5QYWNrZXRCdWZmZXJMb3cgPSAwOworCQl9CisJCW5wLT50eF9za2JbaV0uc2tiID0g
TlVMTDsKKwkJbnAtPnR4X3NrYltpXS5kbWEgPSAwOwogCX0KIH0KIAogc3RhdGljIGludCBudl9p
bml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAg
PSBnZXRfbnZwcml2KGRldik7CiAJbnZfaW5pdF90eChkZXYpOwogCW52X2luaXRfcngoZGV2KTsK
LQlyZXR1cm4gbnZfYWxsb2NfcngoZGV2KTsKKwlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVS
XzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCisJCXJldHVybiBudl9hbGxvY19yeChk
ZXYpOworCWVsc2UKKwkJcmV0dXJuIG52X2FsbG9jX3J4X29wdGltaXplZChkZXYpOwogfQogCiBz
dGF0aWMgaW50IG52X3JlbGVhc2VfdHhza2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWdu
ZWQgaW50IHNrYm5yKQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7
CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCiAJZHByaW50ayhLRVJO
X0lORk8gIiVzOiBudl9yZWxlYXNlX3R4c2tiIGZvciBza2JuciAlZFxuIiwKIAkJZGV2LT5uYW1l
LCBza2Jucik7CiAKLQlpZiAobnAtPnR4X2RtYVtza2Jucl0pIHsKLQkJcGNpX3VubWFwX3BhZ2Uo
bnAtPnBjaV9kZXYsIG5wLT50eF9kbWFbc2tibnJdLAotCQkJICAgICAgIG5wLT50eF9kbWFfbGVu
W3NrYm5yXSwKKwlpZiAobnAtPnR4X3NrYltza2Jucl0uZG1hKSB7CisJCXBjaV91bm1hcF9wYWdl
KG5wLT5wY2lfZGV2LCBucC0+dHhfc2tiW3NrYm5yXS5kbWEsCisJCQkgICAgICAgbnAtPnR4X3Nr
Yltza2Jucl0uZG1hX2xlbiwKIAkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJbnAtPnR4
X2RtYVtza2Jucl0gPSAwOworCQlucC0+dHhfc2tiW3NrYm5yXS5kbWEgPSAwOwogCX0KLQotCWlm
IChucC0+dHhfc2tidWZmW3NrYm5yXSkgewotCQlkZXZfa2ZyZWVfc2tiX2FueShucC0+dHhfc2ti
dWZmW3NrYm5yXSk7Ci0JCW5wLT50eF9za2J1ZmZbc2tibnJdID0gTlVMTDsKKwlpZiAobnAtPnR4
X3NrYltza2Jucl0uc2tiKSB7CisJCWRldl9rZnJlZV9za2JfYW55KG5wLT50eF9za2Jbc2tibnJd
LnNrYik7CisJCW5wLT50eF9za2Jbc2tibnJdLnNrYiA9IE5VTEw7CiAJCXJldHVybiAxOwogCX0g
ZWxzZSB7CiAJCXJldHVybiAwOwpAQCAtMTM2OCwxNCArMTg0NywxOSBAQAogCiBzdGF0aWMgdm9p
ZCBudl9kcmFpbl90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmZV9wcml2
ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJp
dihkZXYpOwogCXVuc2lnbmVkIGludCBpOwotCisJCiAJZm9yIChpID0gMDsgaSA8IG5wLT50eF9y
aW5nX3NpemU7IGkrKykgewotCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAt
PmRlc2NfdmVyID09IERFU0NfVkVSXzIpCisJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJf
MSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgewogCQkJbnAtPnR4X3Jpbmcub3JpZ1tp
XS5GbGFnTGVuID0gMDsKLQkJZWxzZQorCQkJbnAtPnR4X3Jpbmcub3JpZ1tpXS5QYWNrZXRCdWZm
ZXIgPSAwOworCQl9IGVsc2UgewogCQkJbnAtPnR4X3JpbmcuZXhbaV0uRmxhZ0xlbiA9IDA7CisJ
CQlucC0+dHhfcmluZy5leFtpXS5UeFZsYW4gPSAwOworCQkJbnAtPnR4X3JpbmcuZXhbaV0uUGFj
a2V0QnVmZmVySGlnaCA9IDA7CisJCQlucC0+dHhfcmluZy5leFtpXS5QYWNrZXRCdWZmZXJMb3cg
PSAwOworCQl9CiAJCWlmIChudl9yZWxlYXNlX3R4c2tiKGRldiwgaSkpCiAJCQlucC0+c3RhdHMu
dHhfZHJvcHBlZCsrOwogCX0KQEAgLTEzODMsMjAgKzE4NjcsMjUgQEAKIAogc3RhdGljIHZvaWQg
bnZfZHJhaW5fcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAq
bnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYo
ZGV2KTsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPnJ4X3Jpbmdfc2l6ZTsgaSsrKSB7
Ci0JCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVT
Q19WRVJfMikKKwkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3Zl
ciA9PSBERVNDX1ZFUl8yKSB7CiAJCQlucC0+cnhfcmluZy5vcmlnW2ldLkZsYWdMZW4gPSAwOwot
CQllbHNlCisJCQlucC0+cnhfcmluZy5vcmlnW2ldLlBhY2tldEJ1ZmZlciA9IDA7CisJCX0gZWxz
ZSB7CiAJCQlucC0+cnhfcmluZy5leFtpXS5GbGFnTGVuID0gMDsKKwkJCW5wLT5yeF9yaW5nLmV4
W2ldLlR4VmxhbiA9IDA7CisJCQlucC0+cnhfcmluZy5leFtpXS5QYWNrZXRCdWZmZXJIaWdoID0g
MDsKKwkJCW5wLT5yeF9yaW5nLmV4W2ldLlBhY2tldEJ1ZmZlckxvdyA9IDA7CisJCX0KIAkJd21i
KCk7Ci0JCWlmIChucC0+cnhfc2tidWZmW2ldKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKG5wLT5w
Y2lfZGV2LCBucC0+cnhfZG1hW2ldLAotCQkJCQkJbnAtPnJ4X3NrYnVmZltpXS0+ZW5kLW5wLT5y
eF9za2J1ZmZbaV0tPmRhdGEsCisJCWlmIChucC0+cnhfc2tiW2ldLnNrYikgeworCQkJcGNpX3Vu
bWFwX3NpbmdsZShucC0+cGNpX2RldiwgbnAtPnJ4X3NrYltpXS5kbWEsCisJCQkJCQlucC0+cnhf
c2tiW2ldLnNrYi0+ZW5kLW5wLT5yeF9za2JbaV0uc2tiLT5kYXRhLAogCQkJCQkJUENJX0RNQV9G
Uk9NREVWSUNFKTsKLQkJCWRldl9rZnJlZV9za2IobnAtPnJ4X3NrYnVmZltpXSk7Ci0JCQlucC0+
cnhfc2tidWZmW2ldID0gTlVMTDsKKwkJCWRldl9rZnJlZV9za2IobnAtPnJ4X3NrYltpXS5za2Ip
OworCQkJbnAtPnJ4X3NrYltpXS5za2IgPSBOVUxMOwogCQl9CiAJfQogfQpAQCAtMTQwOSw1NyAr
MTg5OCw1NSBAQAogCiAvKgogICogbnZfc3RhcnRfeG1pdDogZGV2LT5oYXJkX3N0YXJ0X3htaXQg
ZnVuY3Rpb24KLSAqIENhbGxlZCB3aXRoIG5ldGlmX3R4X2xvY2sgaGVsZC4KKyAqIENhbGxlZCB3
aXRoIGRldi0+eG1pdF9sb2NrIGhlbGQuCiAgKi8KIHN0YXRpYyBpbnQgbnZfc3RhcnRfeG1pdChz
dHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBm
ZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0
X252cHJpdihkZXYpOwogCXUzMiB0eF9mbGFncyA9IDA7CiAJdTMyIHR4X2ZsYWdzX2V4dHJhID0g
KG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xID8gTlZfVFhfTEFTVFBBQ0tFVCA6IE5WX1RYMl9M
QVNUUEFDS0VUKTsKIAl1bnNpZ25lZCBpbnQgZnJhZ21lbnRzID0gc2tiX3NoaW5mbyhza2IpLT5u
cl9mcmFnczsKLQl1bnNpZ25lZCBpbnQgbnIgPSAobnAtPm5leHRfdHggLSAxKSAlIG5wLT50eF9y
aW5nX3NpemU7Ci0JdW5zaWduZWQgaW50IHN0YXJ0X25yID0gbnAtPm5leHRfdHggJSBucC0+dHhf
cmluZ19zaXplOwogCXVuc2lnbmVkIGludCBpOwogCXUzMiBvZmZzZXQgPSAwOwogCXUzMiBiY250
OwogCXUzMiBzaXplID0gc2tiLT5sZW4tc2tiLT5kYXRhX2xlbjsKIAl1MzIgZW50cmllcyA9IChz
aXplID4+IE5WX1RYMl9UU09fTUFYX1NISUZUKSArICgoc2l6ZSAmIChOVl9UWDJfVFNPX01BWF9T
SVpFLTEpKSA/IDEgOiAwKTsKLQl1MzIgdHhfZmxhZ3NfdmxhbiA9IDA7CisJdTMyIGVtcHR5X3Ns
b3RzOworCXN0cnVjdCByaW5nX2Rlc2MqIHB1dF90eDsKKwlzdHJ1Y3QgcmluZ19kZXNjKiBzdGFy
dF90eDsKKwlzdHJ1Y3QgcmluZ19kZXNjKiBwcmV2X3R4OworCXN0cnVjdCBudl9za2JfbWFwKiBw
cmV2X3R4X2N0eDsKIAorCS8vZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RhcnRfeG1pdCBc
biIsIGRldi0+bmFtZSk7CiAJLyogYWRkIGZyYWdtZW50cyB0byBlbnRyaWVzIGNvdW50ICovCiAJ
Zm9yIChpID0gMDsgaSA8IGZyYWdtZW50czsgaSsrKSB7CiAJCWVudHJpZXMgKz0gKHNrYl9zaGlu
Zm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSA+PiBOVl9UWDJfVFNPX01BWF9TSElGVCkgKwogCQkJICAg
KChza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemUgJiAoTlZfVFgyX1RTT19NQVhfU0laRS0x
KSkgPyAxIDogMCk7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOworCWVtcHR5X3Ns
b3RzID0gKHUzMikobnAtPnR4X3Jpbmdfc2l6ZSAtICgobnAtPnR4X3Jpbmdfc2l6ZSArIChucC0+
cHV0X3R4X2N0eCAtIG5wLT5nZXRfdHhfY3R4KSkgJSBucC0+dHhfcmluZ19zaXplKSk7CisJaWYg
KGxpa2VseShlbXB0eV9zbG90cyA+IGVudHJpZXMpKSB7CiAKLQlpZiAoKG5wLT5uZXh0X3R4IC0g
bnAtPm5pY190eCArIGVudHJpZXMgLSAxKSA+IG5wLT50eF9saW1pdF9zdG9wKSB7Ci0JCXNwaW5f
dW5sb2NrX2lycSgmbnAtPmxvY2spOwotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCXJldHVy
biBORVRERVZfVFhfQlVTWTsKLQl9CisJc3RhcnRfdHggPSBwdXRfdHggPSBucC0+cHV0X3R4Lm9y
aWc7CiAKIAkvKiBzZXR1cCB0aGUgaGVhZGVyIGJ1ZmZlciAqLwogCWRvIHsKKwkJcHJldl90eCA9
IHB1dF90eDsKKwkJcHJldl90eF9jdHggPSBucC0+cHV0X3R4X2N0eDsKIAkJYmNudCA9IChzaXpl
ID4gTlZfVFgyX1RTT19NQVhfU0laRSkgPyBOVl9UWDJfVFNPX01BWF9TSVpFIDogc2l6ZTsKLQkJ
bnIgPSAobnIgKyAxKSAlIG5wLT50eF9yaW5nX3NpemU7Ci0KLQkJbnAtPnR4X2RtYVtucl0gPSBw
Y2lfbWFwX3NpbmdsZShucC0+cGNpX2Rldiwgc2tiLT5kYXRhICsgb2Zmc2V0LCBiY250LAorCQlu
cC0+cHV0X3R4X2N0eC0+ZG1hID0gcGNpX21hcF9zaW5nbGUobnAtPnBjaV9kZXYsIHNrYi0+ZGF0
YSArIG9mZnNldCwgYmNudCwKIAkJCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCQlucC0+dHhfZG1h
X2xlbltucl0gPSBiY250OworCQlucC0+cHV0X3R4X2N0eC0+ZG1hX2xlbiA9IGJjbnQ7CisJCXB1
dF90eC0+UGFja2V0QnVmZmVyID0gY3B1X3RvX2xlMzIobnAtPnB1dF90eF9jdHgtPmRtYSk7CisJ
CXB1dF90eC0+RmxhZ0xlbiA9IGNwdV90b19sZTMyKChiY250LTEpIHwgdHhfZmxhZ3MpOwogCi0J
CWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19W
RVJfMikgewotCQkJbnAtPnR4X3Jpbmcub3JpZ1tucl0uUGFja2V0QnVmZmVyID0gY3B1X3RvX2xl
MzIobnAtPnR4X2RtYVtucl0pOwotCQkJbnAtPnR4X3Jpbmcub3JpZ1tucl0uRmxhZ0xlbiA9IGNw
dV90b19sZTMyKChiY250LTEpIHwgdHhfZmxhZ3MpOwotCQl9IGVsc2UgewotCQkJbnAtPnR4X3Jp
bmcuZXhbbnJdLlBhY2tldEJ1ZmZlckhpZ2ggPSBjcHVfdG9fbGU2NChucC0+dHhfZG1hW25yXSkg
Pj4gMzI7Ci0JCQlucC0+dHhfcmluZy5leFtucl0uUGFja2V0QnVmZmVyTG93ID0gY3B1X3RvX2xl
NjQobnAtPnR4X2RtYVtucl0pICYgMHgwRkZGRkZGRkY7Ci0JCQlucC0+dHhfcmluZy5leFtucl0u
RmxhZ0xlbiA9IGNwdV90b19sZTMyKChiY250LTEpIHwgdHhfZmxhZ3MpOwotCQl9CiAJCXR4X2Zs
YWdzID0gbnAtPnR4X2ZsYWdzOwogCQlvZmZzZXQgKz0gYmNudDsKIAkJc2l6ZSAtPSBiY250Owor
CQlpZiAodW5saWtlbHkocHV0X3R4KysgPT0gbnAtPmxhc3RfdHgub3JpZykpCisJCQlwdXRfdHgg
PSBucC0+Zmlyc3RfdHgub3JpZzsKKwkJaWYgKHVubGlrZWx5KG5wLT5wdXRfdHhfY3R4KysgPT0g
bnAtPmxhc3RfdHhfY3R4KSkKKwkJCW5wLT5wdXRfdHhfY3R4ID0gbnAtPmZpcnN0X3R4X2N0eDsK
IAl9IHdoaWxlKHNpemUpOwogCiAJLyogc2V0dXAgdGhlIGZyYWdtZW50cyAqLwpAQCAtMTQ2OSwz
NCArMTk1NiwzMCBAQAogCQlvZmZzZXQgPSAwOwogCiAJCWRvIHsKKwkJCXByZXZfdHggPSBwdXRf
dHg7CisJCQlwcmV2X3R4X2N0eCA9IG5wLT5wdXRfdHhfY3R4OwogCQkJYmNudCA9IChzaXplID4g
TlZfVFgyX1RTT19NQVhfU0laRSkgPyBOVl9UWDJfVFNPX01BWF9TSVpFIDogc2l6ZTsKLQkJCW5y
ID0gKG5yICsgMSkgJSBucC0+dHhfcmluZ19zaXplOwogCi0JCQlucC0+dHhfZG1hW25yXSA9IHBj
aV9tYXBfcGFnZShucC0+cGNpX2RldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQrb2Zm
c2V0LCBiY250LAotCQkJCQkJICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlucC0+dHhfZG1h
X2xlbltucl0gPSBiY250OworCQkJbnAtPnB1dF90eF9jdHgtPmRtYSA9IHBjaV9tYXBfcGFnZShu
cC0+cGNpX2RldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQrb2Zmc2V0LCBiY250LAor
CQkJCQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJbnAtPnB1dF90eF9jdHgtPmRtYV9sZW4g
PSBiY250OwogCi0JCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2Nf
dmVyID09IERFU0NfVkVSXzIpIHsKLQkJCQlucC0+dHhfcmluZy5vcmlnW25yXS5QYWNrZXRCdWZm
ZXIgPSBjcHVfdG9fbGUzMihucC0+dHhfZG1hW25yXSk7Ci0JCQkJbnAtPnR4X3Jpbmcub3JpZ1tu
cl0uRmxhZ0xlbiA9IGNwdV90b19sZTMyKChiY250LTEpIHwgdHhfZmxhZ3MpOwotCQkJfSBlbHNl
IHsKLQkJCQlucC0+dHhfcmluZy5leFtucl0uUGFja2V0QnVmZmVySGlnaCA9IGNwdV90b19sZTY0
KG5wLT50eF9kbWFbbnJdKSA+PiAzMjsKLQkJCQlucC0+dHhfcmluZy5leFtucl0uUGFja2V0QnVm
ZmVyTG93ID0gY3B1X3RvX2xlNjQobnAtPnR4X2RtYVtucl0pICYgMHgwRkZGRkZGRkY7Ci0JCQkJ
bnAtPnR4X3JpbmcuZXhbbnJdLkZsYWdMZW4gPSBjcHVfdG9fbGUzMigoYmNudC0xKSB8IHR4X2Zs
YWdzKTsKLQkJCX0KKwkJCXB1dF90eC0+UGFja2V0QnVmZmVyID0gY3B1X3RvX2xlMzIobnAtPnB1
dF90eF9jdHgtPmRtYSk7CisJCQlwdXRfdHgtPkZsYWdMZW4gPSBjcHVfdG9fbGUzMigoYmNudC0x
KSB8IHR4X2ZsYWdzKTsKIAkJCW9mZnNldCArPSBiY250OwogCQkJc2l6ZSAtPSBiY250OworCQkJ
aWYgKHVubGlrZWx5KHB1dF90eCsrID09IG5wLT5sYXN0X3R4Lm9yaWcpKQorCQkJCXB1dF90eCA9
IG5wLT5maXJzdF90eC5vcmlnOworCQkJaWYgKHVubGlrZWx5KG5wLT5wdXRfdHhfY3R4KysgPT0g
bnAtPmxhc3RfdHhfY3R4KSkKKwkJCQlucC0+cHV0X3R4X2N0eCA9IG5wLT5maXJzdF90eF9jdHg7
CiAJCX0gd2hpbGUgKHNpemUpOwogCX0KIAogCS8qIHNldCBsYXN0IGZyYWdtZW50IGZsYWcgICov
Ci0JaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVND
X1ZFUl8yKSB7Ci0JCW5wLT50eF9yaW5nLm9yaWdbbnJdLkZsYWdMZW4gfD0gY3B1X3RvX2xlMzIo
dHhfZmxhZ3NfZXh0cmEpOwotCX0gZWxzZSB7Ci0JCW5wLT50eF9yaW5nLmV4W25yXS5GbGFnTGVu
IHw9IGNwdV90b19sZTMyKHR4X2ZsYWdzX2V4dHJhKTsKLQl9CisJcHJldl90eC0+RmxhZ0xlbiB8
PSBjcHVfdG9fbGUzMih0eF9mbGFnc19leHRyYSk7CiAKLQlucC0+dHhfc2tidWZmW25yXSA9IHNr
YjsKKwkvKiBzYXZlIHNrYiBpbiB0aGlzIHNsb3QncyBjb250ZXh0IGFyZWEgKi8KKwlwcmV2X3R4
X2N0eC0+c2tiID0gc2tiOwogCiAjaWZkZWYgTkVUSUZfRl9UU08KIAlpZiAoc2tiX2lzX2dzbyhz
a2IpKQpAQCAtMTUwNSwzOCArMTk4OCwxMzIgQEAKICNlbmRpZgogCXR4X2ZsYWdzX2V4dHJhID0g
KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXID8gKE5WX1RYMl9DSEVDS1NVTV9MM3xOVl9U
WDJfQ0hFQ0tTVU1fTDQpIDogMCk7CiAKLQkvKiB2bGFuIHRhZyAqLwotCWlmIChucC0+dmxhbmdy
cCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJdHhfZmxhZ3NfdmxhbiA9IE5WX1RY
M19WTEFOX1RBR19QUkVTRU5UIHwgdmxhbl90eF90YWdfZ2V0KHNrYik7Ci0JfQorCXN0YXJ0X3R4
LT5GbGFnTGVuIHw9IGNwdV90b19sZTMyKHR4X2ZsYWdzIHwgdHhfZmxhZ3NfZXh0cmEpOworCW5w
LT5wdXRfdHgub3JpZyA9IHB1dF90eDsKIAotCS8qIHNldCB0eCBmbGFncyAqLwotCWlmIChucC0+
ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgewot
CQlucC0+dHhfcmluZy5vcmlnW3N0YXJ0X25yXS5GbGFnTGVuIHw9IGNwdV90b19sZTMyKHR4X2Zs
YWdzIHwgdHhfZmxhZ3NfZXh0cmEpOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXdy
aXRlbChOVlJFR19UWFJYQ1RMX0tJQ0t8bnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShkZXYp
ICsgTnZSZWdUeFJ4Q29udHJvbCk7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9IGVsc2Ugewot
CQlucC0+dHhfcmluZy5leFtzdGFydF9ucl0uVHhWbGFuID0gY3B1X3RvX2xlMzIodHhfZmxhZ3Nf
dmxhbik7Ci0JCW5wLT50eF9yaW5nLmV4W3N0YXJ0X25yXS5GbGFnTGVuIHw9IGNwdV90b19sZTMy
KHR4X2ZsYWdzIHwgdHhfZmxhZ3NfZXh0cmEpOworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJ
CW5wLT5zdG9wX3R4ID0gMTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KK30KIAotCWRw
cmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3N0YXJ0X3htaXQ6IHBhY2tldCAlZCAoZW50cmllcyAl
ZCkgcXVldWVkIGZvciB0cmFuc21pc3Npb24uIHR4X2ZsYWdzX2V4dHJhOiAleFxuIiwKLQkJZGV2
LT5uYW1lLCBucC0+bmV4dF90eCwgZW50cmllcywgdHhfZmxhZ3NfZXh0cmEpOwotCXsKLQkJaW50
IGo7Ci0JCWZvciAoaj0wOyBqPDY0OyBqKyspIHsKLQkJCWlmICgoaiUxNikgPT0gMCkKLQkJCQlk
cHJpbnRrKCJcbiUwM3g6Iiwgaik7Ci0JCQlkcHJpbnRrKCIgJTAyeCIsICgodW5zaWduZWQgY2hh
ciopc2tiLT5kYXRhKVtqXSk7Ci0JCX0KLQkJZHByaW50aygiXG4iKTsKK3N0YXRpYyBpbnQgbnZf
c3RhcnRfeG1pdF9vcHRpbWl6ZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZp
Y2UgKmRldikKK3sKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisJdTMy
IHR4X2ZsYWdzID0gMDsKKwl1MzIgdHhfZmxhZ3NfZXh0cmE7CisJdW5zaWduZWQgaW50IGZyYWdt
ZW50cyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJdW5zaWduZWQgaW50IGk7CisJdTMy
IG9mZnNldCA9IDA7CisJdTMyIGJjbnQ7CisJdTMyIHNpemUgPSBza2ItPmxlbi1za2ItPmRhdGFf
bGVuOworCXUzMiBlbXB0eV9zbG90czsKKwlzdHJ1Y3QgcmluZ19kZXNjX2V4KiBwdXRfdHg7CisJ
c3RydWN0IHJpbmdfZGVzY19leCogc3RhcnRfdHg7CisJc3RydWN0IHJpbmdfZGVzY19leCogcHJl
dl90eDsKKwlzdHJ1Y3QgbnZfc2tiX21hcCogcHJldl90eF9jdHg7CisKKwl1MzIgZW50cmllcyA9
IChzaXplID4+IE5WX1RYMl9UU09fTUFYX1NISUZUKSArICgoc2l6ZSAmIChOVl9UWDJfVFNPX01B
WF9TSVpFLTEpKSA/IDEgOiAwKTsKKworCS8vZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3Rh
cnRfeG1pdF9vcHRpbWl6ZWQgXG4iLCBkZXYtPm5hbWUpOworCS8qIGFkZCBmcmFnbWVudHMgdG8g
ZW50cmllcyBjb3VudCAqLworCWZvciAoaSA9IDA7IGkgPCBmcmFnbWVudHM7IGkrKykgeworCQll
bnRyaWVzICs9IChza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemUgPj4gTlZfVFgyX1RTT19N
QVhfU0hJRlQpICsKKwkJCSAgICgoc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplICYgKE5W
X1RYMl9UU09fTUFYX1NJWkUtMSkpID8gMSA6IDApOwogCX0KIAotCW5wLT5uZXh0X3R4ICs9IGVu
dHJpZXM7CisJZW1wdHlfc2xvdHMgPSAodTMyKShucC0+dHhfcmluZ19zaXplIC0gKChucC0+dHhf
cmluZ19zaXplICsgKG5wLT5wdXRfdHhfY3R4IC0gbnAtPmdldF90eF9jdHgpKSAlIG5wLT50eF9y
aW5nX3NpemUpKTsKKwlpZiAobGlrZWx5KGVtcHR5X3Nsb3RzID4gZW50cmllcykpIHsKKworCXN0
YXJ0X3R4ID0gcHV0X3R4ID0gbnAtPnB1dF90eC5leDsKKworCS8qIHNldHVwIHRoZSBoZWFkZXIg
YnVmZmVyICovCisJZG8geworCQlwcmV2X3R4ID0gcHV0X3R4OworCQlwcmV2X3R4X2N0eCA9IG5w
LT5wdXRfdHhfY3R4OworCQliY250ID0gKHNpemUgPiBOVl9UWDJfVFNPX01BWF9TSVpFKSA/IE5W
X1RYMl9UU09fTUFYX1NJWkUgOiBzaXplOworCQlucC0+cHV0X3R4X2N0eC0+ZG1hID0gcGNpX21h
cF9zaW5nbGUobnAtPnBjaV9kZXYsIHNrYi0+ZGF0YSArIG9mZnNldCwgYmNudCwKKwkJCQkJCVBD
SV9ETUFfVE9ERVZJQ0UpOworCQlucC0+cHV0X3R4X2N0eC0+ZG1hX2xlbiA9IGJjbnQ7CisJCXB1
dF90eC0+UGFja2V0QnVmZmVySGlnaCA9IGNwdV90b19sZTY0KG5wLT5wdXRfdHhfY3R4LT5kbWEp
ID4+IDMyOworCQlwdXRfdHgtPlBhY2tldEJ1ZmZlckxvdyA9IGNwdV90b19sZTY0KG5wLT5wdXRf
dHhfY3R4LT5kbWEpICYgMHgwRkZGRkZGRkY7CisJCXB1dF90eC0+RmxhZ0xlbiA9IGNwdV90b19s
ZTMyKChiY250LTEpIHwgdHhfZmxhZ3MpOworCisJCXR4X2ZsYWdzID0gTlZfVFgyX1ZBTElEOwor
CQlvZmZzZXQgKz0gYmNudDsKKwkJc2l6ZSAtPSBiY250OworCQlpZiAodW5saWtlbHkocHV0X3R4
KysgPT0gbnAtPmxhc3RfdHguZXgpKQorCQkJcHV0X3R4ID0gbnAtPmZpcnN0X3R4LmV4OworCQlp
ZiAodW5saWtlbHkobnAtPnB1dF90eF9jdHgrKyA9PSBucC0+bGFzdF90eF9jdHgpKQorCQkJbnAt
PnB1dF90eF9jdHggPSBucC0+Zmlyc3RfdHhfY3R4OworCX0gd2hpbGUoc2l6ZSk7CisJLyogc2V0
dXAgdGhlIGZyYWdtZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBmcmFnbWVudHM7IGkrKykgewor
CQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCXUzMiBz
aXplID0gZnJhZy0+c2l6ZTsKKwkJb2Zmc2V0ID0gMDsKKworCQlkbyB7CisJCQlwcmV2X3R4ID0g
cHV0X3R4OworCQkJcHJldl90eF9jdHggPSBucC0+cHV0X3R4X2N0eDsKKwkJCWJjbnQgPSAoc2l6
ZSA+IE5WX1RYMl9UU09fTUFYX1NJWkUpID8gTlZfVFgyX1RTT19NQVhfU0laRSA6IHNpemU7CisK
KwkJCW5wLT5wdXRfdHhfY3R4LT5kbWEgPSBwY2lfbWFwX3BhZ2UobnAtPnBjaV9kZXYsIGZyYWct
PnBhZ2UsIGZyYWctPnBhZ2Vfb2Zmc2V0K29mZnNldCwgYmNudCwKKwkJCQkJCQkgICBQQ0lfRE1B
X1RPREVWSUNFKTsKKwkJCW5wLT5wdXRfdHhfY3R4LT5kbWFfbGVuID0gYmNudDsKKworCQkJcHV0
X3R4LT5QYWNrZXRCdWZmZXJIaWdoID0gY3B1X3RvX2xlNjQobnAtPnB1dF90eF9jdHgtPmRtYSkg
Pj4gMzI7CisJCQlwdXRfdHgtPlBhY2tldEJ1ZmZlckxvdyA9IGNwdV90b19sZTY0KG5wLT5wdXRf
dHhfY3R4LT5kbWEpICYgMHgwRkZGRkZGRkY7CisJCQlwdXRfdHgtPkZsYWdMZW4gPSBjcHVfdG9f
bGUzMigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKKwkJCW9mZnNldCArPSBiY250OworCQkJc2l6ZSAt
PSBiY250OworCQkJaWYgKHVubGlrZWx5KHB1dF90eCsrID09IG5wLT5sYXN0X3R4LmV4KSkKKwkJ
CQlwdXRfdHggPSBucC0+Zmlyc3RfdHguZXg7CisJCQlpZiAodW5saWtlbHkobnAtPnB1dF90eF9j
dHgrKyA9PSBucC0+bGFzdF90eF9jdHgpKQorCQkJCW5wLT5wdXRfdHhfY3R4ID0gbnAtPmZpcnN0
X3R4X2N0eDsKKwkJfSB3aGlsZSAoc2l6ZSk7CisJfQorCisJLyogc2V0IGxhc3QgZnJhZ21lbnQg
ZmxhZyAgKi8KKwlwcmV2X3R4LT5GbGFnTGVuIHw9IGNwdV90b19sZTMyKE5WX1RYMl9MQVNUUEFD
S0VUKTsKKworCS8qIHNhdmUgc2tiIGluIHRoaXMgc2xvdCdzIGNvbnRleHQgYXJlYSAqLworCXBy
ZXZfdHhfY3R4LT5za2IgPSBza2I7CisKKyNpZmRlZiBORVRJRl9GX1RTTworCWlmIChza2JfaXNf
Z3NvKHNrYikpCisJCXR4X2ZsYWdzX2V4dHJhID0gTlZfVFgyX1RTTyB8IChza2Jfc2hpbmZvKHNr
YiktPmdzb19zaXplIDw8IE5WX1RYMl9UU09fU0hJRlQpOworCWVsc2UKKyNlbmRpZgorCXR4X2Zs
YWdzX2V4dHJhID0gKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXID8gKE5WX1RYMl9DSEVD
S1NVTV9MM3xOVl9UWDJfQ0hFQ0tTVU1fTDQpIDogMCk7CisKKwkvKiB2bGFuIHRhZyAqLworCWlm
IChsaWtlbHkoIW5wLT52bGFuZ3JwKSkgeworCQlzdGFydF90eC0+VHhWbGFuID0gMDsKKwl9IGVs
c2UgeworCQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKQorCQkJc3RhcnRfdHgtPlR4Vmxh
biA9IGNwdV90b19sZTMyKE5WX1RYM19WTEFOX1RBR19QUkVTRU5UIHwgdmxhbl90eF90YWdfZ2V0
KHNrYikpOworCQllbHNlCisJCQlzdGFydF90eC0+VHhWbGFuID0gMDsKKwl9CisKKwkvKiBzZXQg
dHggZmxhZ3MgKi8KKwlzdGFydF90eC0+RmxhZ0xlbiB8PSBjcHVfdG9fbGUzMih0eF9mbGFncyB8
IHR4X2ZsYWdzX2V4dHJhKTsKKwlucC0+cHV0X3R4LmV4ID0gcHV0X3R4OwogCiAJZGV2LT50cmFu
c19zdGFydCA9IGppZmZpZXM7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJd3JpdGVs
KE5WUkVHX1RYUlhDVExfS0lDS3xucC0+dHhyeGN0bF9iaXRzLCBnZXRfaHdiYXNlKGRldikgKyBO
dlJlZ1R4UnhDb250cm9sKTsKLQlwY2lfcHVzaChnZXRfaHdiYXNlKGRldikpOwogCXJldHVybiBO
RVRERVZfVFhfT0s7CisKKwl9IGVsc2UgeworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCW5w
LT5zdG9wX3R4ID0gMTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KIH0KIAogLyoKQEAg
LTE1NDQsMzAgKzIxMjEsMjYgQEAKICAqCiAgKiBDYWxsZXIgbXVzdCBvd24gbnAtPmxvY2suCiAg
Ki8KLXN0YXRpYyB2b2lkIG52X3R4X2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRp
YyBpbmxpbmUgdm9pZCBudl90eF9kb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3Ry
dWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAg
PSBnZXRfbnZwcml2KGRldik7CiAJdTMyIEZsYWdzOwotCXVuc2lnbmVkIGludCBpOwotCXN0cnVj
dCBza19idWZmICpza2I7CisJc3RydWN0IHJpbmdfZGVzYyogb3JpZ19nZXRfdHggPSBucC0+Z2V0
X3R4Lm9yaWc7CisJc3RydWN0IHJpbmdfZGVzYyogcHV0X3R4ID0gbnAtPnB1dF90eC5vcmlnOwog
Ci0Jd2hpbGUgKG5wLT5uaWNfdHggIT0gbnAtPm5leHRfdHgpIHsKLQkJaSA9IG5wLT5uaWNfdHgg
JSBucC0+dHhfcmluZ19zaXplOworCS8vZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfdHhfZG9u
ZSBcbiIsIGRldi0+bmFtZSk7CisJd2hpbGUgKChucC0+Z2V0X3R4Lm9yaWcgIT0gcHV0X3R4KSAm
JgorCSAgICAgICAhKChGbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfdHgub3JpZy0+RmxhZ0xl
bikpICYgTlZfVFhfVkFMSUQpKSB7CisJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3R4X2Rv
bmU6TlZMQU4gdHggZG9uZVxuIiwgZGV2LT5uYW1lKTsKIAotCQlpZiAobnAtPmRlc2NfdmVyID09
IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCi0JCQlGbGFncyA9IGxl
MzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaV0uRmxhZ0xlbik7Ci0JCWVsc2UKLQkJCUZsYWdz
ID0gbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaV0uRmxhZ0xlbik7CisJCXBjaV91bm1hcF9w
YWdlKG5wLT5wY2lfZGV2LCBucC0+Z2V0X3R4X2N0eC0+ZG1hLAorCQkJICAgICAgIG5wLT5nZXRf
dHhfY3R4LT5kbWFfbGVuLAorCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlucC0+Z2V0
X3R4X2N0eC0+ZG1hID0gMDsKIAotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl90eF9kb25l
OiBsb29raW5nIGF0IHBhY2tldCAlZCwgRmxhZ3MgMHgleC5cbiIsCi0JCQkJCWRldi0+bmFtZSwg
bnAtPm5pY190eCwgRmxhZ3MpOwotCQlpZiAoRmxhZ3MgJiBOVl9UWF9WQUxJRCkKLQkJCWJyZWFr
OwogCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEpIHsKIAkJCWlmIChGbGFncyAmIE5W
X1RYX0xBU1RQQUNLRVQpIHsKLQkJCQlza2IgPSBucC0+dHhfc2tidWZmW2ldOwotCQkJCWlmIChG
bGFncyAmIChOVl9UWF9SRVRSWUVSUk9SfE5WX1RYX0NBUlJJRVJMT1NUfE5WX1RYX0xBVEVDT0xM
SVNJT058Ci0JCQkJCSAgICAgTlZfVFhfVU5ERVJGTE9XfE5WX1RYX0VSUk9SKSkgeworCQkJCWlm
IChGbGFncyAmIE5WX1RYX0VSUk9SKSB7CiAJCQkJCWlmIChGbGFncyAmIE5WX1RYX1VOREVSRkxP
VykKIAkJCQkJCW5wLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJCQlpZiAoRmxhZ3MgJiBO
Vl9UWF9DQVJSSUVSTE9TVCkKQEAgLTE1NzUsMTQgKzIxNDgsMTUgQEAKIAkJCQkJbnAtPnN0YXRz
LnR4X2Vycm9ycysrOwogCQkJCX0gZWxzZSB7CiAJCQkJCW5wLT5zdGF0cy50eF9wYWNrZXRzKys7
Ci0JCQkJCW5wLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCQkJbnAtPnN0YXRzLnR4
X2J5dGVzICs9IG5wLT5nZXRfdHhfY3R4LT5za2ItPmxlbjsKIAkJCQl9CisJCQkJZGV2X2tmcmVl
X3NrYl9hbnkobnAtPmdldF90eF9jdHgtPnNrYik7CisJCQkJbnAtPmdldF90eF9jdHgtPnNrYiA9
IE5VTEw7CisKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmIChGbGFncyAmIE5WX1RYMl9MQVNUUEFD
S0VUKSB7Ci0JCQkJc2tiID0gbnAtPnR4X3NrYnVmZltpXTsKLQkJCQlpZiAoRmxhZ3MgJiAoTlZf
VFgyX1JFVFJZRVJST1J8TlZfVFgyX0NBUlJJRVJMT1NUfE5WX1RYMl9MQVRFQ09MTElTSU9OfAot
CQkJCQkgICAgIE5WX1RYMl9VTkRFUkZMT1d8TlZfVFgyX0VSUk9SKSkgeworCQkJCWlmIChGbGFn
cyAmIE5WX1RYMl9FUlJPUikgewogCQkJCQlpZiAoRmxhZ3MgJiBOVl9UWDJfVU5ERVJGTE9XKQog
CQkJCQkJbnAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCQkJCWlmIChGbGFncyAmIE5WX1RY
Ml9DQVJSSUVSTE9TVCkKQEAgLTE1OTAsMjcgKzIxNjQsNzQgQEAKIAkJCQkJbnAtPnN0YXRzLnR4
X2Vycm9ycysrOwogCQkJCX0gZWxzZSB7CiAJCQkJCW5wLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0J
CQkJCW5wLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJCQl9CisJCQkJCW5wLT5zdGF0
cy50eF9ieXRlcyArPSBucC0+Z2V0X3R4X2N0eC0+c2tiLT5sZW47CisJCQkJfQkJCQkKKwkJCQlk
ZXZfa2ZyZWVfc2tiX2FueShucC0+Z2V0X3R4X2N0eC0+c2tiKTsKKwkJCQlucC0+Z2V0X3R4X2N0
eC0+c2tiID0gTlVMTDsKKwkJCX0KKwkJfQorCisJCWlmICh1bmxpa2VseShucC0+Z2V0X3R4Lm9y
aWcrKyA9PSBucC0+bGFzdF90eC5vcmlnKSkKKwkJCW5wLT5nZXRfdHgub3JpZyA9IG5wLT5maXJz
dF90eC5vcmlnOworCQlpZiAodW5saWtlbHkobnAtPmdldF90eF9jdHgrKyA9PSBucC0+bGFzdF90
eF9jdHgpKQorCQkJbnAtPmdldF90eF9jdHggPSBucC0+Zmlyc3RfdHhfY3R4OworCX0KKwlpZiAo
dW5saWtlbHkoKG5wLT5zdG9wX3R4ID09IDEpICYmIChucC0+Z2V0X3R4Lm9yaWcgIT0gb3JpZ19n
ZXRfdHgpKSkgeworCQlucC0+c3RvcF90eCA9IDA7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsK
Kwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBudl90eF9kb25lX29wdGltaXplZChzdHJ1Y3Qg
bmV0X2RldmljZSAqZGV2LCBpbnQgbWF4X3dvcmspCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0g
Z2V0X252cHJpdihkZXYpOworCXUzMiBGbGFnczsKKwlzdHJ1Y3QgcmluZ19kZXNjX2V4KiBvcmln
X2dldF90eCA9IG5wLT5nZXRfdHguZXg7CisJc3RydWN0IHJpbmdfZGVzY19leCogcHV0X3R4ID0g
bnAtPnB1dF90eC5leDsKKworCS8vZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfdHhfZG9uZV9v
cHRpbWl6ZWQgXG4iLCBkZXYtPm5hbWUpOworCXdoaWxlICgobnAtPmdldF90eC5leCAhPSBwdXRf
dHgpICYmCisJICAgICAgICEoKEZsYWdzID0gbGUzMl90b19jcHUobnAtPmdldF90eC5leC0+Rmxh
Z0xlbikpICYgTlZfVFhfVkFMSUQpICYmCisJICAgICAgIChtYXhfd29yay0tID4gMCkpIHsKKwkJ
ZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfdHhfZG9uZV9vcHRpbWl6ZWQ6TlZMQU4gdHggZG9u
ZVxuIiwgZGV2LT5uYW1lKTsKKworCQlwY2lfdW5tYXBfcGFnZShucC0+cGNpX2RldiwgbnAtPmdl
dF90eF9jdHgtPmRtYSwKKwkJCSAgICAgICBucC0+Z2V0X3R4X2N0eC0+ZG1hX2xlbiwKKwkJCSAg
ICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJbnAtPmdldF90eF9jdHgtPmRtYSA9IDA7CisKKwkJ
aWYgKEZsYWdzICYgTlZfVFgyX0xBU1RQQUNLRVQpIHsKKwkJCWlmICghKEZsYWdzICYgTlZfVFgy
X0VSUk9SKSkgeworCQkJCW5wLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQl9CisJCQlkZXZfa2Zy
ZWVfc2tiX2FueShucC0+Z2V0X3R4X2N0eC0+c2tiKTsKKwkJCW5wLT5nZXRfdHhfY3R4LT5za2Ig
PSBOVUxMOwogCQl9Ci0JCW52X3JlbGVhc2VfdHhza2IoZGV2LCBpKTsKLQkJbnAtPm5pY190eCsr
OworCQkKKwkJaWYgKHVubGlrZWx5KG5wLT5nZXRfdHguZXgrKyA9PSBucC0+bGFzdF90eC5leCkp
CisJCQlucC0+Z2V0X3R4LmV4ID0gbnAtPmZpcnN0X3R4LmV4OworCQlpZiAodW5saWtlbHkobnAt
PmdldF90eF9jdHgrKyA9PSBucC0+bGFzdF90eF9jdHgpKQorCQkJbnAtPmdldF90eF9jdHggPSBu
cC0+Zmlyc3RfdHhfY3R4OwogCX0KLQlpZiAobnAtPm5leHRfdHggLSBucC0+bmljX3R4IDwgbnAt
PnR4X2xpbWl0X3N0YXJ0KQorCWlmICh1bmxpa2VseSgobnAtPnN0b3BfdHggPT0gMSkgJiYgKG5w
LT5nZXRfdHguZXggIT0gb3JpZ19nZXRfdHgpKSkgeworCQlucC0+c3RvcF90eCA9IDA7CiAJCW5l
dGlmX3dha2VfcXVldWUoZGV2KTsKKwl9CiB9CiAKIC8qCiAgKiBudl90eF90aW1lb3V0OiBkZXYt
PnR4X3RpbWVvdXQgZnVuY3Rpb24KLSAqIENhbGxlZCB3aXRoIG5ldGlmX3R4X2xvY2sgaGVsZC4K
KyAqIENhbGxlZCB3aXRoIGRldi0+eG1pdF9sb2NrIGhlbGQuCiAgKi8KIHN0YXRpYyB2b2lkIG52
X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAq
bnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYo
ZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCXUzMiBzdGF0dXM7
CiAKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuOworCiAJaWYgKG5wLT5tc2lf
ZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQogCQlzdGF0dXMgPSByZWFkbChiYXNlICsgTnZSZWdN
U0lYSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKIAllbHNlCkBAIC0xNjIxLDkgKzIy
NDIsMTUgQEAKIAl7CiAJCWludCBpOwogCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSaW5nIGF0
ICVseDogbmV4dCAlZCBuaWMgJWRcbiIsCi0JCQkJZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZylu
cC0+cmluZ19hZGRyLAotCQkJCW5wLT5uZXh0X3R4LCBucC0+bmljX3R4KTsKKwkJaWYgKG5wLT5k
ZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CisJ
CQlwcmludGsoS0VSTl9JTkZPICIlczogUmluZyBhdCAlbHg6IGdldCAlbHggcHV0ICVseFxuIiwK
KwkJCSAgICAgICBkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nKW5wLT50eF9yaW5nLm9yaWcsCisJ
CQkgICAgICAgKHVuc2lnbmVkIGxvbmcpbnAtPmdldF90eC5vcmlnLCAodW5zaWduZWQgbG9uZylu
cC0+cHV0X3R4Lm9yaWcpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJp
bmcgYXQgJWx4OiBnZXQgJWx4IHB1dCAlbHhcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCAodW5z
aWduZWQgbG9uZylucC0+dHhfcmluZy5leCwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZylucC0+
Z2V0X3R4LmV4LCAodW5zaWduZWQgbG9uZylucC0+cHV0X3R4LmV4KTsKKwkJfQogCQlwcmludGso
S0VSTl9JTkZPICIlczogRHVtcGluZyB0eCByZWdpc3RlcnNcbiIsIGRldi0+bmFtZSk7CiAJCWZv
ciAoaT0wO2k8PW5wLT5yZWdpc3Rlcl9zaXplO2krPSAzMikgewogCQkJcHJpbnRrKEtFUk5fSU5G
TyAiJTN4OiAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCkBAIC0x
NjM3LDcgKzIyNjQsNyBAQAogCQlmb3IgKGk9MDtpPG5wLT50eF9yaW5nX3NpemU7aSs9IDQpIHsK
IAkJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVT
Q19WRVJfMikgewogCQkJCXByaW50ayhLRVJOX0lORk8gIiUwM3g6ICUwOHggJTA4eCAvLyAlMDh4
ICUwOHggLy8gJTA4eCAlMDh4IC8vICUwOHggJTA4eFxuIiwKLQkJCQkgICAgICAgaSwKKwkJCQkg
ICAgICAgaSwgCiAJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaV0uUGFj
a2V0QnVmZmVyKSwKIAkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpXS5G
bGFnTGVuKSwKIAkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpKzFdLlBh
Y2tldEJ1ZmZlciksCkBAIC0xNjQ4LDcgKzIyNzUsNyBAQAogCQkJCSAgICAgICBsZTMyX3RvX2Nw
dShucC0+dHhfcmluZy5vcmlnW2krM10uRmxhZ0xlbikpOwogCQkJfSBlbHNlIHsKIAkJCQlwcmlu
dGsoS0VSTl9JTkZPICIlMDN4OiAlMDh4ICUwOHggJTA4eCAvLyAlMDh4ICUwOHggJTA4eCAvLyAl
MDh4ICUwOHggJTA4eCAvLyAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCQkgICAgICAgaSwKKwkJCQkg
ICAgICAgaSwgCiAJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2ldLlBhY2tl
dEJ1ZmZlckhpZ2gpLAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpXS5Q
YWNrZXRCdWZmZXJMb3cpLAogCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtp
XS5GbGFnTGVuKSwKQEAgLTE2NjUsMTkgKzIyOTIsMjcgQEAKIAkJfQogCX0KIAorCW52X2Rpc2Fi
bGVfaXJxKGRldik7CiAJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCiAJLyogMSkgc3RvcCB0
eCBlbmdpbmUgKi8KIAludl9zdG9wX3R4KGRldik7CiAKIAkvKiAyKSBjaGVjayB0aGF0IHRoZSBw
YWNrZXRzIHdlcmUgbm90IHNlbnQgYWxyZWFkeTogKi8KKwlpZiAobnAtPmRlc2NfdmVyID09IERF
U0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCiAJbnZfdHhfZG9uZShkZXYp
OworCWVsc2UKKwkJbnZfdHhfZG9uZV9vcHRpbWl6ZWQoZGV2LCBucC0+dHhfcmluZ19zaXplKTsK
IAogCS8qIDMpIGlmIHRoZXJlIGFyZSBkZWFkIGVudHJpZXM6IGNsZWFyIGV2ZXJ5dGhpbmcgKi8K
LQlpZiAobnAtPm5leHRfdHggIT0gbnAtPm5pY190eCkgeworCWlmIChucC0+Z2V0X3R4X2N0eCAh
PSBucC0+cHV0X3R4X2N0eCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4X3RpbWVvdXQ6
IGRlYWQgZW50cmllcyFcbiIsIGRldi0+bmFtZSk7CiAJCW52X2RyYWluX3R4KGRldik7Ci0JCW5w
LT5uZXh0X3R4ID0gbnAtPm5pY190eCA9IDA7CisJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19W
RVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKKwkJCW5wLT5nZXRfdHgub3JpZyA9
IG5wLT5wdXRfdHgub3JpZyA9IG5wLT5maXJzdF90eC5vcmlnOworCQllbHNlCisJCQlucC0+Z2V0
X3R4LmV4ID0gbnAtPnB1dF90eC5leCA9IG5wLT5maXJzdF90eC5leDsKKwkJbnAtPmdldF90eF9j
dHggPSBucC0+cHV0X3R4X2N0eCA9IG5wLT5maXJzdF90eF9jdHg7CiAJCXNldHVwX2h3X3Jpbmdz
KGRldiwgTlZfU0VUVVBfVFhfUklORyk7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAl9CkBA
IC0xNjg1LDYgKzIzMjAsNyBAQAogCS8qIDQpIHJlc3RhcnQgdHggZW5naW5lICovCiAJbnZfc3Rh
cnRfdHgoZGV2KTsKIAlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKwludl9lbmFibGVfaXJx
KGRldik7CiB9CiAKIC8qCkBAIC0xNzQwLDQzICsyMzc2LDIzIEBACiAJfQogfQogCi1zdGF0aWMg
dm9pZCBudl9yeF9wcm9jZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5l
IHZvaWQgbnZfcnhfcHJvY2VzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBm
ZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0
X252cHJpdihkZXYpOwogCXUzMiBGbGFnczsKLQl1MzIgdmxhbmZsYWdzID0gMDsKLQotCWZvciAo
OzspIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJaW50IGxlbjsKLQkJaW50IGk7Ci0JCWlm
IChucC0+Y3VyX3J4IC0gbnAtPnJlZmlsbF9yeCA+PSBucC0+cnhfcmluZ19zaXplKQotCQkJYnJl
YWs7CS8qIHdlIHNjYW5uZWQgdGhlIHdob2xlIHJpbmcgLSBkbyBub3QgY29udGludWUgKi8KLQot
CQlpID0gbnAtPmN1cl9yeCAlIG5wLT5yeF9yaW5nX3NpemU7Ci0JCWlmIChucC0+ZGVzY192ZXIg
PT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgewotCQkJRmxhZ3Mg
PSBsZTMyX3RvX2NwdShucC0+cnhfcmluZy5vcmlnW2ldLkZsYWdMZW4pOwotCQkJbGVuID0gbnZf
ZGVzY3JfZ2V0bGVuZ3RoKCZucC0+cnhfcmluZy5vcmlnW2ldLCBucC0+ZGVzY192ZXIpOwotCQl9
IGVsc2UgewotCQkJRmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+cnhfcmluZy5leFtpXS5GbGFnTGVu
KTsKLQkJCWxlbiA9IG52X2Rlc2NyX2dldGxlbmd0aF9leCgmbnAtPnJ4X3JpbmcuZXhbaV0sIG5w
LT5kZXNjX3Zlcik7Ci0JCQl2bGFuZmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+cnhfcmluZy5leFtp
XS5QYWNrZXRCdWZmZXJMb3cpOwotCQl9Ci0KLQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZf
cnhfcHJvY2VzczogbG9va2luZyBhdCBwYWNrZXQgJWQsIEZsYWdzIDB4JXguXG4iLAotCQkJCQlk
ZXYtPm5hbWUsIG5wLT5jdXJfcngsIEZsYWdzKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWlu
dCBsZW47CiAKLQkJaWYgKEZsYWdzICYgTlZfUlhfQVZBSUwpCi0JCQlicmVhazsJLyogc3RpbGwg
b3duZWQgYnkgaGFyZHdhcmUsICovCisJLy9kcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9yeF9w
cm9jZXNzIFxuIiwgZGV2LT5uYW1lKTsKKwl3aGlsZSgobnAtPmdldF9yeC5vcmlnICE9IG5wLT5w
dXRfcngub3JpZykgJiYKKwkgICAgICAhKChGbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfcngu
b3JpZy0+RmxhZ0xlbikpICYgTlZfUlhfQVZBSUwpKSB7CisKKwkJcGNpX3VubWFwX3NpbmdsZShu
cC0+cGNpX2RldiwgbnAtPmdldF9yeF9jdHgtPmRtYSwKKwkJCQkgbnAtPmdldF9yeF9jdHgtPmRt
YV9sZW4sCisJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKLQkJLyoKLQkJICogdGhlIHBhY2tl
dCBpcyBmb3IgdXMgLSBpbW1lZGlhdGVseSB0ZWFyIGRvd24gdGhlIHBjaSBtYXBwaW5nLgotCQkg
KiBUT0RPOiBjaGVjayBpZiBhIHByZWZldGNoIG9mIHRoZSBmaXJzdCBjYWNoZWxpbmUgaW1wcm92
ZXMKLQkJICogdGhlIHBlcmZvcm1hbmNlLgotCQkgKi8KLQkJcGNpX3VubWFwX3NpbmdsZShucC0+
cGNpX2RldiwgbnAtPnJ4X2RtYVtpXSwKLQkJCQlucC0+cnhfc2tidWZmW2ldLT5lbmQtbnAtPnJ4
X3NrYnVmZltpXS0+ZGF0YSwKLQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlza2IgPSBucC0+
Z2V0X3J4X2N0eC0+c2tiOworCQlucC0+Z2V0X3J4X2N0eC0+c2tiID0gTlVMTDsKIAogCQl7CiAJ
CQlpbnQgajsKQEAgLTE3ODQsMTE4ICsyNDAwLDE5OCBAQAogCQkJZm9yIChqPTA7IGo8NjQ7IGor
KykgewogCQkJCWlmICgoaiUxNikgPT0gMCkKIAkJCQkJZHByaW50aygiXG4lMDN4OiIsIGopOwot
CQkJCWRwcmludGsoIiAlMDJ4IiwgKCh1bnNpZ25lZCBjaGFyKilucC0+cnhfc2tidWZmW2ldLT5k
YXRhKVtqXSk7CisJCQkJZHByaW50aygiICUwMngiLCAoKHVuc2lnbmVkIGNoYXIqKXNrYi0+ZGF0
YSlbal0pOwogCQkJfQogCQkJZHByaW50aygiXG4iKTsKIAkJfQotCQkvKiBsb29rIGF0IHdoYXQg
d2UgYWN0dWFsbHkgZ290OiAqLworCiAJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSkg
ewotCQkJaWYgKCEoRmxhZ3MgJiBOVl9SWF9ERVNDUklQVE9SVkFMSUQpKQotCQkJCWdvdG8gbmV4
dF9wa3Q7CiAKLQkJCWlmIChGbGFncyAmIE5WX1JYX0VSUk9SKSB7Ci0JCQkJaWYgKEZsYWdzICYg
TlZfUlhfTUlTU0VERlJBTUUpIHsKLQkJCQkJbnAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsK
LQkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCQlnb3RvIG5leHRfcGt0OwotCQkJCX0K
LQkJCQlpZiAoRmxhZ3MgJiAoTlZfUlhfRVJST1IxfE5WX1JYX0VSUk9SMnxOVl9SWF9FUlJPUjMp
KSB7Ci0JCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQkJZ290byBuZXh0X3BrdDsKLQkJ
CQl9Ci0JCQkJaWYgKEZsYWdzICYgTlZfUlhfQ1JDRVJSKSB7Ci0JCQkJCW5wLT5zdGF0cy5yeF9j
cmNfZXJyb3JzKys7Ci0JCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQkJZ290byBuZXh0
X3BrdDsKLQkJCQl9Ci0JCQkJaWYgKEZsYWdzICYgTlZfUlhfT1ZFUkZMT1cpIHsKLQkJCQkJbnAt
PnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7Ci0JCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJ
CQkJZ290byBuZXh0X3BrdDsKKwkJCWlmIChsaWtlbHkoRmxhZ3MgJiBOVl9SWF9ERVNDUklQVE9S
VkFMSUQpKSB7CisJCQkJbGVuID0gRmxhZ3MgJiBMRU5fTUFTS19WMTsKKwkJCQlpZiAodW5saWtl
bHkoRmxhZ3MgJiBOVl9SWF9FUlJPUikpIHsKKwkJCQkJaWYgKEZsYWdzICYgTlZfUlhfRVJST1I0
KSB7CisJCQkJCQlsZW4gPSBudl9nZXRsZW4oZGV2LCBza2ItPmRhdGEsIGxlbik7CisJCQkJCQlp
ZiAobGVuIDwgMCkgeworCQkJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJCQlkZXZf
a2ZyZWVfc2tiKHNrYik7CisJCQkJCQkJZ290byBuZXh0X3BrdDsKKwkJCQkJCX0KKwkJCQkJfQor
CQkJCQkvKiBmcmFtaW5nIGVycm9ycyBhcmUgc29mdCBlcnJvcnMgKi8KKwkJCQkJZWxzZSBpZiAo
RmxhZ3MgJiBOVl9SWF9GUkFNSU5HRVJSKSB7CisJCQkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9TVUJT
VFJBQ1QxKSB7CisJCQkJCQkJbGVuLS07CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJLyogdGhlIHJl
c3QgYXJlIGhhcmQgZXJyb3JzICovCisJCQkJCWVsc2UgeworCQkJCQkJaWYgKEZsYWdzICYgTlZf
UlhfTUlTU0VERlJBTUUpCisJCQkJCQkJbnAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJ
CQkJCWlmIChGbGFncyAmIE5WX1JYX0NSQ0VSUikKKwkJCQkJCQlucC0+c3RhdHMucnhfY3JjX2Vy
cm9ycysrOworCQkJCQkJaWYgKEZsYWdzICYgTlZfUlhfT1ZFUkZMT1cpCisJCQkJCQkJbnAtPnN0
YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJ
CQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQkJCQlnb3RvIG5leHRfcGt0OworCQkJCQl9CiAJCQkJ
fQotCQkJCWlmIChGbGFncyAmIE5WX1JYX0VSUk9SNCkgewotCQkJCQlsZW4gPSBudl9nZXRsZW4o
ZGV2LCBucC0+cnhfc2tidWZmW2ldLT5kYXRhLCBsZW4pOwotCQkJCQlpZiAobGVuIDwgMCkgewor
CQkJfSBlbHNlIHsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQkJZ290byBuZXh0X3BrdDsK
KwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChsaWtlbHkoRmxhZ3MgJiBOVl9SWDJfREVTQ1JJUFRP
UlZBTElEKSkgeworCQkJCWxlbiA9IEZsYWdzICYgTEVOX01BU0tfVjI7CisJCQkJaWYgKHVubGlr
ZWx5KEZsYWdzICYgTlZfUlgyX0VSUk9SKSkgeworCQkJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRVJS
T1I0KSB7CisJCQkJCQlsZW4gPSBudl9nZXRsZW4oZGV2LCBza2ItPmRhdGEsIGxlbik7CisJCQkJ
CQlpZiAobGVuIDwgMCkgeworCQkJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJCQlk
ZXZfa2ZyZWVfc2tiKHNrYik7CisJCQkJCQkJZ290byBuZXh0X3BrdDsKKwkJCQkJCX0KKwkJCQkJ
fQorCQkJCQkvKiBmcmFtaW5nIGVycm9ycyBhcmUgc29mdCBlcnJvcnMgKi8KKwkJCQkJZWxzZSBp
ZiAoRmxhZ3MgJiBOVl9SWDJfRlJBTUlOR0VSUikgeworCQkJCQkJaWYgKEZsYWdzICYgTlZfUlgy
X1NVQlNUUkFDVDEpIHsKKwkJCQkJCQlsZW4tLTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkvKiB0
aGUgcmVzdCBhcmUgaGFyZCBlcnJvcnMgKi8KKwkJCQkJZWxzZSB7CisJCQkJCQlpZiAoRmxhZ3Mg
JiBOVl9SWDJfQ1JDRVJSKQorCQkJCQkJCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQkJ
CQlpZiAoRmxhZ3MgJiBOVl9SWDJfT1ZFUkZMT1cpCisJCQkJCQkJbnAtPnN0YXRzLnJ4X292ZXJf
ZXJyb3JzKys7CiAJCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCQlkZXZfa2ZyZWVf
c2tiKHNrYik7CiAJCQkJCQlnb3RvIG5leHRfcGt0OwogCQkJCQl9CiAJCQkJfQotCQkJCS8qIGZy
YW1pbmcgZXJyb3JzIGFyZSBzb2Z0IGVycm9ycy4gKi8KLQkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9G
UkFNSU5HRVJSKSB7Ci0JCQkJCWlmIChGbGFncyAmIE5WX1JYX1NVQlNUUkFDVDEpIHsKLQkJCQkJ
CWxlbi0tOworCQkJCWlmICgoRmxhZ3MgJiBOVl9SWDJfQ0hFQ0tTVU1NQVNLKSA9PSBOVl9SWDJf
Q0hFQ0tTVU1PSzIpLyppcCBhbmQgdGNwICovIHsKKwkJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVD
S1NVTV9VTk5FQ0VTU0FSWTsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoKEZsYWdzICYgTlZfUlgy
X0NIRUNLU1VNTUFTSykgPT0gTlZfUlgyX0NIRUNLU1VNT0sxIHx8CisJCQkJCSAgICAoRmxhZ3Mg
JiBOVl9SWDJfQ0hFQ0tTVU1NQVNLKSA9PSBOVl9SWDJfQ0hFQ0tTVU1PSzMpIHsKKwkJCQkJCXNr
Yi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCQkJCX0KIAkJCQl9Ci0JCQl9
Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoIShGbGFncyAmIE5WX1JYMl9ERVNDUklQVE9SVkFMSUQpKQor
CQkJfSBlbHNlIHsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQkJZ290byBuZXh0X3BrdDsK
KwkJCX0KKwkJfQogCi0JCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRVJST1IpIHsKLQkJCQlpZiAoRmxh
Z3MgJiAoTlZfUlgyX0VSUk9SMXxOVl9SWDJfRVJST1IyfE5WX1JYMl9FUlJPUjMpKSB7Ci0JCQkJ
CW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQkJZ290byBuZXh0X3BrdDsKLQkJCQl9Ci0JCQkJ
aWYgKEZsYWdzICYgTlZfUlgyX0NSQ0VSUikgewotCQkJCQlucC0+c3RhdHMucnhfY3JjX2Vycm9y
cysrOwotCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJCWdvdG8gbmV4dF9wa3Q7Ci0J
CQkJfQotCQkJCWlmIChGbGFncyAmIE5WX1JYMl9PVkVSRkxPVykgewotCQkJCQlucC0+c3RhdHMu
cnhfb3Zlcl9lcnJvcnMrKzsKLQkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCQlnb3Rv
IG5leHRfcGt0OwotCQkJCX0KKwkJLyogZ290IGEgdmFsaWQgcGFja2V0IC0gZm9yd2FyZCBpdCB0
byB0aGUgbmV0d29yayBjb3JlICovCisJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3J4X3By
b2Nlc3M6TlZMQU4gcnggZG9uZVxuIiwgZGV2LT5uYW1lKTsKKwkJc2tiX3B1dChza2IsIGxlbik7
CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCW5ldGlmX3J4
KHNrYik7CisJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCW5wLT5zdGF0cy5yeF9wYWNrZXRz
Kys7CisJCW5wLT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CituZXh0X3BrdDoKKwkJaWYgKHVubGlr
ZWx5KG5wLT5nZXRfcngub3JpZysrID09IG5wLT5sYXN0X3J4Lm9yaWcpKQorCQkJbnAtPmdldF9y
eC5vcmlnID0gbnAtPmZpcnN0X3J4Lm9yaWc7CisJCWlmICh1bmxpa2VseShucC0+Z2V0X3J4X2N0
eCsrID09IG5wLT5sYXN0X3J4X2N0eCkpCisJCQlucC0+Z2V0X3J4X2N0eCA9IG5wLT5maXJzdF9y
eF9jdHg7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBudl9yeF9wcm9jZXNzX29wdGltaXpl
ZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbWF4X3dvcmspCit7CisJc3RydWN0IGZlX3By
aXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCXUzMiBGbGFnczsKKwl1MzIgdmxhbmZsYWdzID0g
MDsKKwl1MzIgcnhfcHJvY2Vzc2VkX2NudCA9IDA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlp
bnQgbGVuOworCisvLwlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9yeF9wcm9jZXNzX29wdGlt
aXplZCBcbiIsIGRldi0+bmFtZSk7CisJd2hpbGUoKG5wLT5nZXRfcnguZXggIT0gbnAtPnB1dF9y
eC5leCkgJiYKKwkgICAgICAhKChGbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfcnguZXgtPkZs
YWdMZW4pKSAmIE5WX1JYMl9BVkFJTCkgJiYKKwkgICAgICAocnhfcHJvY2Vzc2VkX2NudCsrIDwg
bWF4X3dvcmspKSB7CisKKwkJcGNpX3VubWFwX3NpbmdsZShucC0+cGNpX2RldiwgbnAtPmdldF9y
eF9jdHgtPmRtYSwKKwkJCQkgbnAtPmdldF9yeF9jdHgtPmRtYV9sZW4sCisJCQkJIFBDSV9ETUFf
RlJPTURFVklDRSk7CisKKwkJc2tiID0gbnAtPmdldF9yeF9jdHgtPnNrYjsKKwkJbnAtPmdldF9y
eF9jdHgtPnNrYiA9IE5VTEw7CisKKwkJLyogbG9vayBhdCB3aGF0IHdlIGFjdHVhbGx5IGdvdDog
Ki8KKwkJaWYgKGxpa2VseShGbGFncyAmIE5WX1JYMl9ERVNDUklQVE9SVkFMSUQpKSB7CisJCQls
ZW4gPSBGbGFncyAmIExFTl9NQVNLX1YyOworCQkJaWYgKHVubGlrZWx5KEZsYWdzICYgTlZfUlgy
X0VSUk9SKSkgewogCQkJCWlmIChGbGFncyAmIE5WX1JYMl9FUlJPUjQpIHsKLQkJCQkJbGVuID0g
bnZfZ2V0bGVuKGRldiwgbnAtPnJ4X3NrYnVmZltpXS0+ZGF0YSwgbGVuKTsKKwkJCQkJbGVuID0g
bnZfZ2V0bGVuKGRldiwgc2tiLT5kYXRhLCBsZW4pOwogCQkJCQlpZiAobGVuIDwgMCkgewotCQkJ
CQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQkJbnAtPnJ4X2xlbl9lcnJvcnMrKzsKKwkJ
CQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCQkJCWdvdG8gbmV4dF9wa3Q7CiAJCQkJCX0KIAkJ
CQl9CiAJCQkJLyogZnJhbWluZyBlcnJvcnMgYXJlIHNvZnQgZXJyb3JzICovCi0JCQkJaWYgKEZs
YWdzICYgTlZfUlgyX0ZSQU1JTkdFUlIpIHsKKwkJCQllbHNlIGlmIChGbGFncyAmIE5WX1JYMl9G
UkFNSU5HRVJSKSB7CiAJCQkJCWlmIChGbGFncyAmIE5WX1JYMl9TVUJTVFJBQ1QxKSB7CiAJCQkJ
CQlsZW4tLTsKIAkJCQkJfQogCQkJCX0KKwkJCQkvKiB0aGUgcmVzdCBhcmUgaGFyZCBlcnJvcnMg
Ki8KKwkJCQllbHNlIHsKKwkJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJCQlnb3RvIG5leHRf
cGt0OworCQkJCX0KIAkJCX0KLQkJCWlmIChucC0+dHhyeGN0bF9iaXRzICYgTlZSRUdfVFhSWENU
TF9SWENIRUNLKSB7Ci0JCQkJRmxhZ3MgJj0gTlZfUlgyX0NIRUNLU1VNTUFTSzsKLQkJCQlpZiAo
RmxhZ3MgPT0gTlZfUlgyX0NIRUNLU1VNT0sxIHx8Ci0JCQkJICAgIEZsYWdzID09IE5WX1JYMl9D
SEVDS1NVTU9LMiB8fAotCQkJCSAgICBGbGFncyA9PSBOVl9SWDJfQ0hFQ0tTVU1PSzMpIHsKLQkJ
CQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogaHcgY2hlY2tzdW0gaGl0IS5cbiIsIGRldi0+bmFt
ZSk7Ci0JCQkJCW5wLT5yeF9za2J1ZmZbaV0tPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNT
QVJZOworCisJCQlpZiAobGlrZWx5KG5wLT5yeF9jc3VtKSkgeworCQkJCWlmIChsaWtlbHkoKEZs
YWdzICYgTlZfUlgyX0NIRUNLU1VNTUFTSykgPT0gTlZfUlgyX0NIRUNLU1VNT0syKSkgeworCQkJ
CQkvKmlwIGFuZCB0Y3AgKi8KKwkJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VT
U0FSWTsKIAkJCQl9IGVsc2UgewotCQkJCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBod2NoZWNr
c3VtIG1pc3MhLlxuIiwgZGV2LT5uYW1lKTsKKwkJCQkJaWYgKChGbGFncyAmIE5WX1JYMl9DSEVD
S1NVTU1BU0spID09IE5WX1JYMl9DSEVDS1NVTU9LMSB8fAorCQkJCQkgICAgKEZsYWdzICYgTlZf
UlgyX0NIRUNLU1VNTUFTSykgPT0gTlZfUlgyX0NIRUNLU1VNT0szKSB7CisJCQkJCQlza2ItPmlw
X3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJCQl9CiAJCQkJfQogCQkJfQotCQl9
Ci0JCS8qIGdvdCBhIHZhbGlkIHBhY2tldCAtIGZvcndhcmQgaXQgdG8gdGhlIG5ldHdvcmsgY29y
ZSAqLwotCQlza2IgPSBucC0+cnhfc2tidWZmW2ldOwotCQlucC0+cnhfc2tidWZmW2ldID0gTlVM
TDsKKwkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3J4X3Byb2Nlc3Nfb3B0aW1pemVkOk5W
TEFOIHJ4IGRvbmVcbiIsIGRldi0+bmFtZSk7CiAKLQkJc2tiX3B1dChza2IsIGxlbik7Ci0JCXNr
Yi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCWRwcmludGsoS0VSTl9E
RUJVRyAiJXM6IG52X3J4X3Byb2Nlc3M6IHBhY2tldCAlZCB3aXRoICVkIGJ5dGVzLCBwcm90byAl
ZCBhY2NlcHRlZC5cbiIsCi0JCQkJCWRldi0+bmFtZSwgbnAtPmN1cl9yeCwgbGVuLCBza2ItPnBy
b3RvY29sKTsKLQkJaWYgKG5wLT52bGFuZ3JwICYmICh2bGFuZmxhZ3MgJiBOVl9SWDNfVkxBTl9U
QUdfUFJFU0VOVCkpIHsKLQkJCXZsYW5faHdhY2NlbF9yeChza2IsIG5wLT52bGFuZ3JwLCB2bGFu
ZmxhZ3MgJiBOVl9SWDNfVkxBTl9UQUdfTUFTSyk7CisJCQkvKiBnb3QgYSB2YWxpZCBwYWNrZXQg
LSBmb3J3YXJkIGl0IHRvIHRoZSBuZXR3b3JrIGNvcmUgKi8KKwkJCXNrYl9wdXQoc2tiLCBsZW4p
OworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJCXByZWZl
dGNoKHNrYi0+ZGF0YSk7CisKKwkJCWlmIChsaWtlbHkoIW5wLT52bGFuZ3JwKSkgeworCQkJCW5l
dGlmX3J4KHNrYik7CisJCQl9IGVsc2UgeworCQkJCXZsYW5mbGFncyA9IGxlMzJfdG9fY3B1KG5w
LT5nZXRfcnguZXgtPlBhY2tldEJ1ZmZlckxvdyk7CisJCQkJaWYgKHZsYW5mbGFncyAmIE5WX1JY
M19WTEFOX1RBR19QUkVTRU5UKQorCQkJCQl2bGFuX2h3YWNjZWxfcngoc2tiLCBucC0+dmxhbmdy
cCwgdmxhbmZsYWdzICYgTlZfUlgzX1ZMQU5fVEFHX01BU0spOworCQkJCWVsc2UKKwkJCQkJbmV0
aWZfcngoc2tiKTsKKwkJCX0KKworCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJCW5wLT5z
dGF0cy5yeF9wYWNrZXRzKys7CisJCQlucC0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOwogCQl9IGVs
c2UgewotCQkJbmV0aWZfcngoc2tiKTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJfQotCQlk
ZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQlucC0+c3RhdHMucnhfcGFja2V0cysrOwotCQlucC0+
c3RhdHMucnhfYnl0ZXMgKz0gbGVuOwogbmV4dF9wa3Q6Ci0JCW5wLT5jdXJfcngrKzsKKwkJaWYg
KHVubGlrZWx5KG5wLT5nZXRfcnguZXgrKyA9PSBucC0+bGFzdF9yeC5leCkpCisJCQlucC0+Z2V0
X3J4LmV4ID0gbnAtPmZpcnN0X3J4LmV4OworCQlpZiAodW5saWtlbHkobnAtPmdldF9yeF9jdHgr
KyA9PSBucC0+bGFzdF9yeF9jdHgpKQorCQkJbnAtPmdldF9yeF9jdHggPSBucC0+Zmlyc3Rfcnhf
Y3R4OwogCX0KKwlyZXR1cm4gcnhfcHJvY2Vzc2VkX2NudDsKIH0KIAogc3RhdGljIHZvaWQgc2V0
X2J1ZnNpemUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAg
PSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2
KTsKIAogCWlmIChkZXYtPm10dSA8PSBFVEhfREFUQV9MRU4pCiAJCW5wLT5yeF9idWZfc3ogPSBF
VEhfREFUQV9MRU4gKyBOVl9SWF9IRUFERVJTOwpAQCAtMTkwOSw3ICsyNjA1LDcgQEAKICAqLwog
c3RhdGljIGludCBudl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdf
bXR1KQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0
IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCWludCBvbGRfbXR1OwogCiAJaWYgKG5l
d19tdHUgPCA2NCB8fCBuZXdfbXR1ID4gbnAtPnBrdF9saW1pdCkKQEAgLTE5ODcsMTIgKzI2ODMs
MTMgQEAKICAqLwogc3RhdGljIGludCBudl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZp
Y2UgKmRldiwgdm9pZCAqYWRkcikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJp
dihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAlzdHJ1Y3Qg
c29ja2FkZHIgKm1hY2FkZHIgPSAoc3RydWN0IHNvY2thZGRyKilhZGRyOwogCiAJaWYoIWlzX3Zh
bGlkX2V0aGVyX2FkZHIobWFjYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJ
TDsKIAorCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3NldF9tYWNfYWRkcmVzcyBcbiIsIGRl
di0+bmFtZSk7CiAJLyogc3luY2hyb25pemVkIGFnYWluc3Qgb3BlbiA6IHJ0bmxfbG9jaygpIGhl
bGQgYnkgY2FsbGVyICovCiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIG1hY2FkZHItPnNhX2RhdGEs
IEVUSF9BTEVOKTsKIApAQCAtMjAxOCwxMSArMjcxNSwxMSBAQAogCiAvKgogICogbnZfc2V0X211
bHRpY2FzdDogZGV2LT5zZXRfbXVsdGljYXN0IGZ1bmN0aW9uCi0gKiBDYWxsZWQgd2l0aCBuZXRp
Zl90eF9sb2NrIGhlbGQuCisgKiBDYWxsZWQgd2l0aCBkZXYtPnhtaXRfbG9jayBoZWxkLgogICov
CiBzdGF0aWMgdm9pZCBudl9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7
Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJp
diAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2Uo
ZGV2KTsKIAl1MzIgYWRkclsyXTsKIAl1MzIgbWFza1syXTsKQEAgLTIwMzIsNyArMjcyOSw3IEBA
CiAJbWVtc2V0KG1hc2ssIDAsIHNpemVvZihtYXNrKSk7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElG
Rl9QUk9NSVNDKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFByb21pc2N1b3VzIG1vZGUg
ZW5hYmxlZC5cbiIsIGRldi0+bmFtZSk7CisJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb21p
c2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsIGRldi0+bmFtZSk7CiAJCXBmZiB8PSBOVlJFR19QRkZf
UFJPTUlTQzsKIAl9IGVsc2UgewogCQlwZmYgfD0gTlZSRUdfUEZGX01ZQUREUjsKQEAgLTIwODIs
NyArMjc3OSw3IEBACiAKIHN0YXRpYyB2b2lkIG52X3VwZGF0ZV9wYXVzZShzdHJ1Y3QgbmV0X2Rl
dmljZSAqZGV2LCB1MzIgcGF1c2VfZmxhZ3MpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0
ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJ
dTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAogCW5wLT5wYXVzZV9mbGFncyAm
PSB+KE5WX1BBVVNFRlJBTUVfVFhfRU5BQkxFIHwgTlZfUEFVU0VGUkFNRV9SWF9FTkFCTEUpOwpA
QCAtMjEwNCw3ICsyODAxLDcgQEAKIAkJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1F
X1RYX0VOQUJMRTsKIAkJfSBlbHNlIHsKIAkJCXdyaXRlbChOVlJFR19UWF9QQVVTRUZSQU1FX0RJ
U0FCTEUsICBiYXNlICsgTnZSZWdUeFBhdXNlRnJhbWUpOwotCQkJd3JpdGVsKHJlZ21pc2MsIGJh
c2UgKyBOdlJlZ01pc2MxKTsKKwkJCXdyaXRlbChyZWdtaXNjLCBiYXNlICsgTnZSZWdNaXNjMSk7
CQkJCiAJCX0KIAl9CiB9CkBAIC0yMTIyLDcgKzI4MTksNyBAQAogICovCiBzdGF0aWMgaW50IG52
X3VwZGF0ZV9saW5rc3BlZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVf
cHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9u
dnByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCWludCBh
ZHYgPSAwOwogCWludCBscGEgPSAwOwpAQCAtMjE0OCw3ICsyODQ1LDcgQEAKIAkJZ290byBzZXRf
c3BlZWQ7CiAJfQogCi0JaWYgKG5wLT5hdXRvbmVnID09IDApIHsKKwlpZiAobnAtPmF1dG9uZWcg
PT0gQVVUT05FR19ESVNBQkxFKSB7CiAJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3VwZGF0
ZV9saW5rc3BlZWQ6IGF1dG9uZWcgb2ZmLCBQSFkgc2V0IHRvIDB4JTA0eC5cbiIsCiAJCQkJZGV2
LT5uYW1lLCBucC0+Zml4ZWRfbW9kZSk7CiAJCWlmIChucC0+Zml4ZWRfbW9kZSAmIExQQV8xMDBG
VUxMKSB7CkBAIC0yMTgxLDcgKzI4NzgsNiBAQAogCWxwYSA9IG1paV9ydyhkZXYsIG5wLT5waHlh
ZGRyLCBNSUlfTFBBLCBNSUlfUkVBRCk7CiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfdXBk
YXRlX2xpbmtzcGVlZDogUEhZIGFkdmVydGlzZXMgMHglMDR4LCBscGEgMHglMDR4LlxuIiwKIAkJ
CQlkZXYtPm5hbWUsIGFkdiwgbHBhKTsKLQogCXJldHZhbCA9IDE7CiAJaWYgKG5wLT5naWdhYml0
ID09IFBIWV9HSUdBQklUKSB7CiAJCWNvbnRyb2xfMTAwMCA9IG1paV9ydyhkZXYsIG5wLT5waHlh
ZGRyLCBNSUlfQ1RSTDEwMDAsIE1JSV9SRUFEKTsKQEAgLTIyNjgsNyArMjk2NCw2IEBACiAJCQl0
eHJlZyA9IE5WUkVHX1RYX1dNX0RFU0MyXzNfREVGQVVMVDsKIAl9CiAJd3JpdGVsKHR4cmVnLCBi
YXNlICsgTnZSZWdUeFdhdGVybWFyayk7Ci0KIAl3cml0ZWwoTlZSRUdfTUlTQzFfRk9SQ0UgfCAo
IG5wLT5kdXBsZXggPyAwIDogTlZSRUdfTUlTQzFfSEQpLAogCQliYXNlICsgTnZSZWdNaXNjMSk7
CiAJcGNpX3B1c2goYmFzZSk7CkBAIC0yMzA2LDcgKzMwMDEsNyBAQAogCQkJCWlmIChscGFfcGF1
c2UgPT0gTFBBX1BBVVNFX0FTWU0pCiAJCQkJewogCQkJCQlwYXVzZV9mbGFncyB8PSBOVl9QQVVT
RUZSQU1FX1JYX0VOQUJMRTsKLQkJCQl9CisJCQkJfSAKIAkJCQlicmVhazsKIAkJCX0KIAkJfSBl
bHNlIHsKQEAgLTIzNTIsNyArMzA0Nyw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2ly
cShpbnQgZm9vLCB2b2lkICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qg
bmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7Ci0Jc3RydWN0IGZl
X3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRf
bnZwcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAl1MzIg
ZXZlbnRzOwogCWludCBpOwpAQCAtMjM3MiwxMCArMzA2Nyw4IEBACiAJCWlmICghKGV2ZW50cyAm
IG5wLT5pcnFtYXNrKSkKIAkJCWJyZWFrOwogCi0JCXNwaW5fbG9jaygmbnAtPmxvY2spOwogCQlu
dl90eF9kb25lKGRldik7Ci0JCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0KKwkJCiAJCW52X3J4
X3Byb2Nlc3MoZGV2KTsKIAkJaWYgKG52X2FsbG9jX3J4KGRldikpIHsKIAkJCXNwaW5fbG9jaygm
bnAtPmxvY2spOwpAQCAtMjM4Myw3ICszMDc2LDcgQEAKIAkJCQltb2RfdGltZXIoJm5wLT5vb21f
a2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwogCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsK
IAkJfQotCisJCQogCQlpZiAoZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspIHsKIAkJCXNwaW5fbG9j
aygmbnAtPmxvY2spOwogCQkJbnZfbGlua19pcnEoZGV2KTsKQEAgLTI0MjcsMTAgKzMxMjAsNzYg
QEAKIAlyZXR1cm4gSVJRX1JFVFZBTChpKTsKIH0KIAorI2RlZmluZSBUWF9XT1JLX1BFUl9MT09Q
ICA2NAorI2RlZmluZSBSWF9XT1JLX1BFUl9MT09QICA2NAorc3RhdGljIGlycXJldHVybl90IG52
X25pY19pcnFfb3B0aW1pemVkKGludCBmb28sIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpy
ZWdzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikg
ZGF0YTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisJdTggX19pb21l
bSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKwl1MzIgZXZlbnRzOworCWludCBpID0gMTsKKwor
CWRvIHsKKwkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKSB7CisJCQll
dmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdJcnFTdGF0dXMpICYgTlZSRUdfSVJRU1RBVF9NQVNL
OworCQkJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsK
KwkJfSBlbHNlIHsKKwkJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMp
ICYgTlZSRUdfSVJRU1RBVF9NQVNLOworCQkJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFz
ZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisJCX0KKwkJaWYgKGV2ZW50cyAmIG5wLT5pcnFtYXNr
KSB7CisKKwkJCW52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgVFhfV09SS19QRVJfTE9PUCk7CisK
KwkJCWlmIChudl9yeF9wcm9jZXNzX29wdGltaXplZChkZXYsIFJYX1dPUktfUEVSX0xPT1ApKSB7
CisJCQkJaWYgKHVubGlrZWx5KG52X2FsbG9jX3J4X29wdGltaXplZChkZXYpKSkgeworCQkJCQlz
cGluX2xvY2soJm5wLT5sb2NrKTsKKwkJCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pCisJCQkJCQlt
b2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOworCQkJCQlzcGlu
X3VubG9jaygmbnAtPmxvY2spOworCQkJCX0KKwkJCX0KKwkJCWlmICh1bmxpa2VseShldmVudHMg
JiBOVlJFR19JUlFfTElOSykpIHsKKwkJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJCQludl9s
aW5rX2lycShkZXYpOworCQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCQl9CisJCQlpZiAo
dW5saWtlbHkobnAtPm5lZWRfbGlua3RpbWVyICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgbnAtPmxp
bmtfdGltZW91dCkpKSB7CisJCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCQkJbnZfbGlua2No
YW5nZShkZXYpOworCQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCQkJbnAtPmxpbmtfdGlt
ZW91dCA9IGppZmZpZXMgKyBMSU5LX1RJTUVPVVQ7CisJCQl9CisJCQlpZiAodW5saWtlbHkoZXZl
bnRzICYgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpKSB7CisJCQkJc3Bpbl9sb2NrKCZucC0+bG9j
ayk7CisJCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KKwkJCQlpZiAoIShu
cC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCisJCQkJCXdyaXRlbCgwLCBiYXNlICsg
TnZSZWdJcnFNYXNrKTsKKwkJCQllbHNlCisJCQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSAr
IE52UmVnSXJxTWFzayk7CisJCQkJcGNpX3B1c2goYmFzZSk7CisKKwkJCQlpZiAoIW5wLT5pbl9z
aHV0ZG93bikgeworCQkJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7CisJCQkJCW5w
LT5yZWNvdmVyX2Vycm9yID0gMTsKKwkJCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZp
ZXMgKyBQT0xMX1dBSVQpOworCQkJCX0KKwkJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQkJ
CWJyZWFrOworCQkJfQorCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKwl3aGlsZSAoaSsrIDw9IG1h
eF9pbnRlcnJ1cHRfd29yayk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChpKTsKK30KKwogc3RhdGlj
IGlycXJldHVybl90IG52X25pY19pcnFfdHgoaW50IGZvbywgdm9pZCAqZGF0YSwgc3RydWN0IHB0
X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2Rl
dmljZSAqKSBkYXRhOwotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJ
c3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2Ug
PSBnZXRfaHdiYXNlKGRldik7CiAJdTMyIGV2ZW50czsKIAlpbnQgaTsKQEAgLTI0NDAsMTUgKzMx
OTksMTIgQEAKIAlmb3IgKGk9MDsgOyBpKyspIHsKIAkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52
UmVnTVNJWElycVN0YXR1cykgJiBOVlJFR19JUlFfVFhfQUxMOwogCQl3cml0ZWwoTlZSRUdfSVJR
X1RYX0FMTCwgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7Ci0JCXBjaV9wdXNoKGJhc2UpOwog
CQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgZXZl
bnRzKTsKIAkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQogCQkJYnJlYWs7CiAKLQkJc3Bp
bl9sb2NrX2lycSgmbnAtPmxvY2spOwotCQludl90eF9kb25lKGRldik7Ci0JCXNwaW5fdW5sb2Nr
X2lycSgmbnAtPmxvY2spOwotCisJCW52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgVFhfV09SS19Q
RVJfTE9PUCk7CisJCQogCQlpZiAoZXZlbnRzICYgKE5WUkVHX0lSUV9UWF9FUlIpKSB7CiAJCQlk
cHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCBldmVudHMgMHgleC4gUHJv
YmFibHkgVFggZmFpbC5cbiIsCiAJCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7CkBAIC0yNDc3LDcg
KzMyMzMsNyBAQAogc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnFfcngoaW50IGZvbywgdm9p
ZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRl
diA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5l
dGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwog
CXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJdTMyIGV2ZW50czsKIAlpbnQg
aTsKQEAgLTI0ODcsMTkgKzMyNDMsMTkgQEAKIAlmb3IgKGk9MDsgOyBpKyspIHsKIAkJZXZlbnRz
ID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cykgJiBOVlJFR19JUlFfUlhfQUxMOwog
CQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7Ci0J
CXBjaV9wdXNoKGJhc2UpOwogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByeCBpcnE6ICUwOHhc
biIsIGRldi0+bmFtZSwgZXZlbnRzKTsKIAkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQog
CQkJYnJlYWs7Ci0KLQkJbnZfcnhfcHJvY2VzcyhkZXYpOwotCQlpZiAobnZfYWxsb2NfcngoZGV2
KSkgeworCQkKKwkJaWYgKG52X3J4X3Byb2Nlc3Nfb3B0aW1pemVkKGRldiwgUlhfV09SS19QRVJf
TE9PUCkpIHsKKwkJCWlmICh1bmxpa2VseShudl9hbGxvY19yeF9vcHRpbWl6ZWQoZGV2KSkpIHsK
IAkJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJCWlmICghbnAtPmluX3NodXRkb3duKQog
CQkJCW1vZF90aW1lcigmbnAtPm9vbV9raWNrLCBqaWZmaWVzICsgT09NX1JFRklMTCk7CiAJCQlz
cGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJCX0KIAkJfQotCisJCQogCQlpZiAoaSA+IG1h
eF9pbnRlcnJ1cHRfd29yaykgewogCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJLyog
ZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KQEAgLTI1MjQsNyArMzI4MCw3IEBACiBz
dGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV9vdGhlcihpbnQgZm9vLCB2b2lkICpkYXRhLCBz
dHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVj
dCBuZXRfZGV2aWNlICopIGRhdGE7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYo
ZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTggX19pb21l
bSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAl1MzIgZXZlbnRzOwogCWludCBpOwpAQCAtMjUz
NCwxMSArMzI5MCwxMCBAQAogCWZvciAoaT0wOyA7IGkrKykgewogCQlldmVudHMgPSByZWFkbChi
YXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKSAmIE5WUkVHX0lSUV9PVEhFUjsKIAkJd3JpdGVsKE5W
UkVHX0lSUV9PVEhFUiwgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7Ci0JCXBjaV9wdXNoKGJh
c2UpOwogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwg
ZXZlbnRzKTsKIAkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQogCQkJYnJlYWs7Ci0KKwkJ
CiAJCWlmIChldmVudHMgJiBOVlJFR19JUlFfTElOSykgewogCQkJc3Bpbl9sb2NrX2lycSgmbnAt
PmxvY2spOwogCQkJbnZfbGlua19pcnEoZGV2KTsKQEAgLTI1NTAsNiArMzMwNSwyMCBAQAogCQkJ
c3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJCQlucC0+bGlua190aW1lb3V0ID0gamlmZmll
cyArIExJTktfVElNRU9VVDsKIAkJfQorCQlpZiAoZXZlbnRzICYgTlZSRUdfSVJRX1JFQ09WRVJf
RVJST1IpIHsKKwkJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJCS8qIGRpc2FibGUgaW50
ZXJydXB0cyBvbiB0aGUgbmljICovCisJCQl3cml0ZWwoTlZSRUdfSVJRX09USEVSLCBiYXNlICsg
TnZSZWdJcnFNYXNrKTsKKwkJCXBjaV9wdXNoKGJhc2UpOworCQkJCisJCQlpZiAoIW5wLT5pbl9z
aHV0ZG93bikgeworCQkJCW5wLT5uaWNfcG9sbF9pcnEgfD0gTlZSRUdfSVJRX09USEVSOworCQkJ
CW5wLT5yZWNvdmVyX2Vycm9yID0gMTsKKwkJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlm
ZmllcyArIFBPTExfV0FJVCk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsK
KwkJCWJyZWFrOworCQl9CiAJCWlmIChldmVudHMgJiAoTlZSRUdfSVJRX1VOS05PV04pKSB7CiAJ
CQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIHVua25vd24gZXZlbnRz
IDB4JXguIFBsZWFzZSByZXBvcnRcbiIsCiAJCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7CkBAIC0y
NTc4LDcgKzMzNDcsNyBAQAogc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnFfdGVzdChpbnQg
Zm9vLCB2b2lkICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgbmV0X2Rl
dmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7Ci0Jc3RydWN0IGZlX3ByaXYg
Km5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2
KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAl1MzIgZXZlbnRz
OwogCkBAIC0yNTk1LDE2ICszMzY0LDE3IEBACiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJx
OiAlMDh4XG4iLCBkZXYtPm5hbWUsIGV2ZW50cyk7CiAJaWYgKCEoZXZlbnRzICYgTlZSRUdfSVJR
X1RJTUVSKSkKIAkJcmV0dXJuIElSUV9SRVRWQUwoMCk7Ci0KKwkKIAlzcGluX2xvY2soJm5wLT5s
b2NrKTsKIAlucC0+aW50cl90ZXN0ID0gMTsKIAlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCisJ
CQogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFfdGVzdCBjb21wbGV0ZWRcbiIs
IGRldi0+bmFtZSk7CiAKIAlyZXR1cm4gSVJRX1JFVFZBTCgxKTsKIH0KIAorI2lmZGVmIENPTkZJ
R19QQ0lfTVNJCiBzdGF0aWMgdm9pZCBzZXRfbXNpeF92ZWN0b3JfbWFwKHN0cnVjdCBuZXRfZGV2
aWNlICpkZXYsIHUzMiB2ZWN0b3IsIHUzMiBpcnFtYXNrKQogewogCXU4IF9faW9tZW0gKmJhc2Ug
PSBnZXRfaHdiYXNlKGRldik7CkBAIC0yNjMwLDEyICszNDAwLDE0IEBACiAJfQogCXdyaXRlbChy
ZWFkbChiYXNlICsgTnZSZWdNU0lYTWFwMSkgfCBtc2l4bWFwLCBiYXNlICsgTnZSZWdNU0lYTWFw
MSk7CiB9CisjZW5kaWYKIAogc3RhdGljIGludCBudl9yZXF1ZXN0X2lycShzdHJ1Y3QgbmV0X2Rl
dmljZSAqZGV2LCBpbnQgaW50cl90ZXN0KQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9u
dnByaXYoZGV2KTsKLQl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCWludCBy
ZXQgPSAxOworCisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAlpbnQgaTsK
IAogCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfQ0FQQUJMRSkgewpAQCAtMjY0NiwyMSAr
MzQxOCwyMSBAQAogCQkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfWF9FTkFCTEVEOwogCQkJaWYg
KG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQgJiYg
IWludHJfdGVzdCkgewogCQkJCS8qIFJlcXVlc3QgaXJxIGZvciByeCBoYW5kbGluZyAqLwotCQkJ
CWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0
b3IsICZudl9uaWNfaXJxX3J4LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsK
KwkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0u
dmVjdG9yLCAmbnZfbmljX2lycV9yeCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7
CiAJCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkIGZv
ciByeCAlZFxuIiwgcmV0KTsKIAkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CiAJ
CQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CiAJCQkJCWdvdG8gb3V0X2Vy
cjsKIAkJCQl9CiAJCQkJLyogUmVxdWVzdCBpcnEgZm9yIHR4IGhhbmRsaW5nICovCi0JCQkJaWYg
KHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvciwg
Jm52X25pY19pcnFfdHgsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJ
CWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0
b3IsICZudl9uaWNfaXJxX3R4LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKIAkJ
CQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIHR4
ICVkXG4iLCByZXQpOwogCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKIAkJCQkJ
bnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKIAkJCQkJZ290byBvdXRfZnJlZV9y
eDsKIAkJCQl9CiAJCQkJLyogUmVxdWVzdCBpcnEgZm9yIGxpbmsgYW5kIHRpbWVyIGhhbmRsaW5n
ICovCi0JCQkJaWYgKHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1Jf
T1RIRVJdLnZlY3RvciwgJm52X25pY19pcnFfb3RoZXIsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUs
IGRldikgIT0gMCkgeworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJ
X1hfVkVDVE9SX09USEVSXS52ZWN0b3IsICZudl9uaWNfaXJxX290aGVyLCBTQV9TSElSUSwgZGV2
LT5uYW1lLCBkZXYpICE9IDApIHsKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiBy
ZXF1ZXN0X2lycSBmYWlsZWQgZm9yIGxpbmsgJWRcbiIsIHJldCk7CiAJCQkJCXBjaV9kaXNhYmxl
X21zaXgobnAtPnBjaV9kZXYpOwogCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFC
TEVEOwpAQCAtMjY2OSwxNSArMzQ0MSwxOSBAQAogCQkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHRo
ZWlyIHJlc3BlY3RpdmUgdmVjdG9yICovCiAJCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhN
YXAwKTsKIAkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOworI2lmZGVmIENPTkZJ
R19QQ0lfTVNJCiAJCQkJc2V0X21zaXhfdmVjdG9yX21hcChkZXYsIE5WX01TSV9YX1ZFQ1RPUl9S
WCwgTlZSRUdfSVJRX1JYX0FMTCk7CiAJCQkJc2V0X21zaXhfdmVjdG9yX21hcChkZXYsIE5WX01T
SV9YX1ZFQ1RPUl9UWCwgTlZSRUdfSVJRX1RYX0FMTCk7CiAJCQkJc2V0X21zaXhfdmVjdG9yX21h
cChkZXYsIE5WX01TSV9YX1ZFQ1RPUl9PVEhFUiwgTlZSRUdfSVJRX09USEVSKTsKKyNlbmRpZgog
CQkJfSBlbHNlIHsKIAkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgYWxsIGludGVycnVwdHMgKi8KLQkJ
CQlpZiAoKCFpbnRyX3Rlc3QgJiYKLQkJCQkgICAgIHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRy
eVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IsICZudl9uaWNfaXJxLCBJUlFGX1NIQVJFRCwg
ZGV2LT5uYW1lLCBkZXYpICE9IDApIHx8CisJCQkJaWYgKCghaW50cl90ZXN0ICYmIG5wLT5kZXNj
X3ZlciA9PSBERVNDX1ZFUl8zICYmCisJCQkJICAgICByZXF1ZXN0X2lycShucC0+bXNpX3hfZW50
cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yLCAmbnZfbmljX2lycV9vcHRpbWl6ZWQsIFNB
X1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgfHwKKwkJCQkgICAgKCFpbnRyX3Rlc3QgJiYg
bnAtPmRlc2NfdmVyICE9IERFU0NfVkVSXzMgJiYKKwkJCQkgICAgIHJlcXVlc3RfaXJxKG5wLT5t
c2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IsICZudl9uaWNfaXJxLCBTQV9T
SElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHx8CiAJCQkJICAgIChpbnRyX3Rlc3QgJiYKLQkJ
CQkgICAgIHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52
ZWN0b3IsICZudl9uaWNfaXJxX3Rlc3QsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikgIT0g
MCkpIHsKKwkJCQkgICAgIHJlcXVlc3RfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNU
T1JfQUxMXS52ZWN0b3IsICZudl9uaWNfaXJxX3Rlc3QsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRl
dikgIT0gMCkpIHsKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2ly
cSBmYWlsZWQgJWRcbiIsIHJldCk7CiAJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYp
OwogCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwpAQCAtMjY5Myw4ICsz
NDY5LDExIEBACiAJaWYgKHJldCAhPSAwICYmIG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfQ0FQQUJM
RSkgewogCQlpZiAoKHJldCA9IHBjaV9lbmFibGVfbXNpKG5wLT5wY2lfZGV2KSkgPT0gMCkgewog
CQkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfRU5BQkxFRDsKLQkJCWlmICgoIWludHJfdGVzdCAm
JiByZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycSwgSVJRRl9TSEFSRUQs
IGRldi0+bmFtZSwgZGV2KSAhPSAwKSB8fAotCQkJICAgIChpbnRyX3Rlc3QgJiYgcmVxdWVzdF9p
cnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnFfdGVzdCwgSVJRRl9TSEFSRUQsIGRldi0+
bmFtZSwgZGV2KSAhPSAwKSkgeworCQkJaWYgKCghaW50cl90ZXN0ICYmIG5wLT5kZXNjX3ZlciA9
PSBERVNDX1ZFUl8zICYmCisJCQkgICAgIHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZu
dl9uaWNfaXJxX29wdGltaXplZCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB8fAor
CQkJICAgICghaW50cl90ZXN0ICYmIG5wLT5kZXNjX3ZlciAhPSBERVNDX1ZFUl8zICYmCisJCQkg
ICAgIHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxLCBTQV9TSElSUSwg
ZGV2LT5uYW1lLCBkZXYpICE9IDApIHx8CisJCQkgICAgKGludHJfdGVzdCAmJiByZXF1ZXN0X2ly
cShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycV90ZXN0LCBTQV9TSElSUSwgZGV2LT5uYW1l
LCBkZXYpICE9IDApKSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0
X2lycSBmYWlsZWQgJWRcbiIsIHJldCk7CiAJCQkJcGNpX2Rpc2FibGVfbXNpKG5wLT5wY2lfZGV2
KTsKIAkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfRU5BQkxFRDsKQEAgLTI3MDksMTMgKzM0
ODgsMTcgQEAKIAkJfQogCX0KIAlpZiAocmV0ICE9IDApIHsKLQkJaWYgKCghaW50cl90ZXN0ICYm
IHJlcXVlc3RfaXJxKG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxLCBJUlFGX1NIQVJFRCwg
ZGV2LT5uYW1lLCBkZXYpICE9IDApIHx8Ci0JCSAgICAoaW50cl90ZXN0ICYmIHJlcXVlc3RfaXJx
KG5wLT5wY2lfZGV2LT5pcnEsICZudl9uaWNfaXJxX3Rlc3QsIElSUUZfU0hBUkVELCBkZXYtPm5h
bWUsIGRldikgIT0gMCkpCisJCWlmICgoIWludHJfdGVzdCAgJiYgbnAtPmRlc2NfdmVyID09IERF
U0NfVkVSXzMgJiYgCisJCSAgICAgcmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25p
Y19pcnFfb3B0aW1pemVkLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHx8CisJCSAg
ICAoIWludHJfdGVzdCAgJiYgbnAtPmRlc2NfdmVyICE9IERFU0NfVkVSXzMgJiYKKwkJICAgICBy
ZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCAmbnZfbmljX2lycSwgU0FfU0hJUlEsIGRldi0+
bmFtZSwgZGV2KSAhPSAwKSB8fCAKKwkJICAgIChpbnRyX3Rlc3QgJiYgcmVxdWVzdF9pcnEobnAt
PnBjaV9kZXYtPmlycSwgJm52X25pY19pcnFfdGVzdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2
KSAhPSAwKSkKIAkJCWdvdG8gb3V0X2VycjsKLQorCQkJCiAJfQogCiAJcmV0dXJuIDA7CisKIG91
dF9mcmVlX3R4OgogCWZyZWVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhd
LnZlY3RvciwgZGV2KTsKIG91dF9mcmVlX3J4OgpAQCAtMjcyOCw3ICszNTExLDcgQEAKIHsKIAlz
dHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJaW50IGk7Ci0KKwkKIAlpZiAo
bnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpIHsKIAkJZm9yIChpID0gMDsgaSA8IChu
cC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKTsgaSsrKSB7CiAJCQlmcmVlX2ly
cShucC0+bXNpX3hfZW50cnlbaV0udmVjdG9yLCBkZXYpOwpAQCAtMjc0Nyw3ICszNTMwLDcgQEAK
IHN0YXRpYyB2b2lkIG52X2RvX25pY19wb2xsKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1
Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7Ci0Jc3RydWN0
IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBn
ZXRfbnZwcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAl1
MzIgbWFzayA9IDA7CiAKQEAgLTI3NTksNDkgKzM1NDIsODcgQEAKIAogCWlmICghdXNpbmdfbXVs
dGlfaXJxcyhkZXYpKSB7CiAJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkK
LQkJCWRpc2FibGVfaXJxX2xvY2tkZXAobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9B
TExdLnZlY3Rvcik7CisJCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVD
VE9SX0FMTF0udmVjdG9yKTsKIAkJZWxzZQotCQkJZGlzYWJsZV9pcnFfbG9ja2RlcChkZXYtPmly
cSk7CisJCQlkaXNhYmxlX2lycShkZXYtPmlycSk7CiAJCW1hc2sgPSBucC0+aXJxbWFzazsKIAl9
IGVsc2UgewogCQlpZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9SWF9BTEwpIHsKLQkJ
CWRpc2FibGVfaXJxX2xvY2tkZXAobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0u
dmVjdG9yKTsKKwkJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1Jf
UlhdLnZlY3Rvcik7CiAJCQltYXNrIHw9IE5WUkVHX0lSUV9SWF9BTEw7CiAJCX0KIAkJaWYgKG5w
LT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfVFhfQUxMKSB7Ci0JCQlkaXNhYmxlX2lycV9sb2Nr
ZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7CisJCQlkaXNh
YmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IpOwogCQkJ
bWFzayB8PSBOVlJFR19JUlFfVFhfQUxMOwogCQl9CiAJCWlmIChucC0+bmljX3BvbGxfaXJxICYg
TlZSRUdfSVJRX09USEVSKSB7Ci0JCQlkaXNhYmxlX2lycV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRy
eVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3Rvcik7CisJCQlkaXNhYmxlX2lycShucC0+bXNp
X3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09USEVSXS52ZWN0b3IpOwogCQkJbWFzayB8PSBOVlJF
R19JUlFfT1RIRVI7CiAJCX0KIAl9CiAJbnAtPm5pY19wb2xsX2lycSA9IDA7CiAKLQkvKiBGSVhN
RTogRG8gd2UgbmVlZCBzeW5jaHJvbml6ZV9pcnEoZGV2LT5pcnEpIGhlcmU/ICovCisJaWYgKG5w
LT5yZWNvdmVyX2Vycm9yKSB7CisJCW5wLT5yZWNvdmVyX2Vycm9yID0gMDsKKwkJcHJpbnRrKEtF
Uk5fSU5GTyAiZm9yY2VkZXRoOiBNQUMgaW4gcmVjb3ZlcmFibGUgZXJyb3Igc3RhdGVcbiIpOwor
CQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQluZXRpZl90eF9sb2NrX2JoKGRldik7CisJ
CQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJCS8qIHN0b3AgZW5naW5lcyAqLworCQkJbnZfc3Rv
cF9yeChkZXYpOworCQkJbnZfc3RvcF90eChkZXYpOworCQkJbnZfdHhyeF9yZXNldChkZXYpOwor
CQkJLyogZHJhaW4gcnggcXVldWUgKi8KKwkJCW52X2RyYWluX3J4KGRldik7CisJCQludl9kcmFp
bl90eChkZXYpOworCQkJLyogcmVpbml0IGRyaXZlciB2aWV3IG9mIHRoZSByeCBxdWV1ZSAqLwor
CQkJc2V0X2J1ZnNpemUoZGV2KTsKKwkJCWlmIChudl9pbml0X3JpbmcoZGV2KSkgeworCQkJCWlm
ICghbnAtPmluX3NodXRkb3duKQorCQkJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmll
cyArIE9PTV9SRUZJTEwpOworCQkJfQorCQkJLyogcmVpbml0IG5pYyB2aWV3IG9mIHRoZSByeCBx
dWV1ZSAqLworCQkJd3JpdGVsKG5wLT5yeF9idWZfc3osIGJhc2UgKyBOdlJlZ09mZmxvYWRDb25m
aWcpOworCQkJc2V0dXBfaHdfcmluZ3MoZGV2LCBOVl9TRVRVUF9SWF9SSU5HIHwgTlZfU0VUVVBf
VFhfUklORyk7CisJCQl3cml0ZWwoICgobnAtPnJ4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5H
U1pfUlhTSElGVCkgKyAoKG5wLT50eF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1RYU0hJ
RlQpLAorCQkJCWJhc2UgKyBOdlJlZ1JpbmdTaXplcyk7CisJCQlwY2lfcHVzaChiYXNlKTsKKwkJ
CXdyaXRlbChOVlJFR19UWFJYQ1RMX0tJQ0t8bnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShk
ZXYpICsgTnZSZWdUeFJ4Q29udHJvbCk7CisJCQlwY2lfcHVzaChiYXNlKTsKIAorCQkJLyogcmVz
dGFydCByeCBlbmdpbmUgKi8KKwkJCW52X3N0YXJ0X3J4KGRldik7CisJCQludl9zdGFydF90eChk
ZXYpOworCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCW5ldGlmX3R4X3VubG9ja19iaChk
ZXYpOworCQl9CisJfQorCS8qIEZJWE1FOiBEbyB3ZSBuZWVkIHN5bmNocm9uaXplX2lycShkZXYt
PmlycSkgaGVyZT8gKi8KKwkKIAl3cml0ZWwobWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CiAJ
cGNpX3B1c2goYmFzZSk7CiAKIAlpZiAoIXVzaW5nX211bHRpX2lycXMoZGV2KSkgewotCQludl9u
aWNfaXJxKDAsIGRldiwgTlVMTCk7CisJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8
fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKKwkJbnZfbmljX2lycSgoaW50KSAwLCAodm9p
ZCAqKSBkYXRhLCAoc3RydWN0IHB0X3JlZ3MgKikgTlVMTCk7CisJCWVsc2UKKwkJCW52X25pY19p
cnFfb3B0aW1pemVkKChpbnQpIDAsICh2b2lkICopIGRhdGEsIChzdHJ1Y3QgcHRfcmVncyAqKSBO
VUxMKTsKIAkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQotCQkJZW5hYmxl
X2lycV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3Ip
OworCQkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVj
dG9yKTsKIAkJZWxzZQotCQkJZW5hYmxlX2lycV9sb2NrZGVwKGRldi0+aXJxKTsKKwkJCWVuYWJs
ZV9pcnEoZGV2LT5pcnEpOwogCX0gZWxzZSB7CiAJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZS
RUdfSVJRX1JYX0FMTCkgewotCQkJbnZfbmljX2lycV9yeCgwLCBkZXYsIE5VTEwpOwotCQkJZW5h
YmxlX2lycV9sb2NrZGVwKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rv
cik7CisJCQludl9uaWNfaXJxX3J4KChpbnQpIDAsICh2b2lkICopIGRhdGEsIChzdHJ1Y3QgcHRf
cmVncyAqKSBOVUxMKTsKKwkJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZF
Q1RPUl9SWF0udmVjdG9yKTsKIAkJfQogCQlpZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lS
UV9UWF9BTEwpIHsKLQkJCW52X25pY19pcnFfdHgoMCwgZGV2LCBOVUxMKTsKLQkJCWVuYWJsZV9p
cnFfbG9ja2RlcChucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IpOwor
CQkJbnZfbmljX2lycV90eCgoaW50KSAwLCAodm9pZCAqKSBkYXRhLCAoc3RydWN0IHB0X3JlZ3Mg
KikgTlVMTCk7CisJCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1Jf
VFhdLnZlY3Rvcik7CiAJCX0KIAkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfT1RI
RVIpIHsKLQkJCW52X25pY19pcnFfb3RoZXIoMCwgZGV2LCBOVUxMKTsKLQkJCWVuYWJsZV9pcnFf
bG9ja2RlcChucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09USEVSXS52ZWN0b3IpOwor
CQkJbnZfbmljX2lycV9vdGhlcigoaW50KSAwLCAodm9pZCAqKSBkYXRhLCAoc3RydWN0IHB0X3Jl
Z3MgKikgTlVMTCk7CisJCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNU
T1JfT1RIRVJdLnZlY3Rvcik7CiAJCX0KIAl9CiB9CkBAIC0yODE2LDU2ICszNjM3LDEwNCBAQAog
c3RhdGljIHZvaWQgbnZfZG9fc3RhdHNfcG9sbCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3Ry
dWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwotCXN0cnVj
dCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0g
Z2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAK
LQlucC0+ZXN0YXRzLnR4X2J5dGVzICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4Q250KTsKLQlucC0+
ZXN0YXRzLnR4X3plcm9fcmV4bXQgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhaZXJvUmVYbXQpOwot
CW5wLT5lc3RhdHMudHhfb25lX3JleG10ICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4T25lUmVYbXQp
OwotCW5wLT5lc3RhdHMudHhfbWFueV9yZXhtdCArPSByZWFkbChiYXNlICsgTnZSZWdUeE1hbnlS
ZVhtdCk7Ci0JbnAtPmVzdGF0cy50eF9sYXRlX2NvbGxpc2lvbiArPSByZWFkbChiYXNlICsgTnZS
ZWdUeExhdGVDb2wpOwotCW5wLT5lc3RhdHMudHhfZmlmb19lcnJvcnMgKz0gcmVhZGwoYmFzZSAr
IE52UmVnVHhVbmRlcmZsb3cpOwotCW5wLT5lc3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gcmVh
ZGwoYmFzZSArIE52UmVnVHhMb3NzQ2Fycmllcik7Ci0JbnAtPmVzdGF0cy50eF9leGNlc3NfZGVm
ZXJyYWwgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhFeGNlc3NEZWYpOwotCW5wLT5lc3RhdHMudHhf
cmV0cnlfZXJyb3IgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhSZXRyeUVycik7Ci0JbnAtPmVzdGF0
cy50eF9kZWZlcnJhbCArPSByZWFkbChiYXNlICsgTnZSZWdUeERlZik7Ci0JbnAtPmVzdGF0cy50
eF9wYWNrZXRzICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4RnJhbWUpOwotCW5wLT5lc3RhdHMudHhf
cGF1c2UgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhQYXVzZSk7Ci0JbnAtPmVzdGF0cy5yeF9mcmFt
ZV9lcnJvciArPSByZWFkbChiYXNlICsgTnZSZWdSeEZyYW1lRXJyKTsKLQlucC0+ZXN0YXRzLnJ4
X2V4dHJhX2J5dGUgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhFeHRyYUJ5dGUpOwotCW5wLT5lc3Rh
dHMucnhfbGF0ZV9jb2xsaXNpb24gKz0gcmVhZGwoYmFzZSArIE52UmVnUnhMYXRlQ29sKTsKLQlu
cC0+ZXN0YXRzLnJ4X3J1bnQgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhSdW50KTsKLQlucC0+ZXN0
YXRzLnJ4X2ZyYW1lX3Rvb19sb25nICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4RnJhbWVUb29Mb25n
KTsKLQlucC0+ZXN0YXRzLnJ4X292ZXJfZXJyb3JzICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4T3Zl
cmZsb3cpOwotCW5wLT5lc3RhdHMucnhfY3JjX2Vycm9ycyArPSByZWFkbChiYXNlICsgTnZSZWdS
eEZDU0Vycik7Ci0JbnAtPmVzdGF0cy5yeF9mcmFtZV9hbGlnbl9lcnJvciArPSByZWFkbChiYXNl
ICsgTnZSZWdSeEZyYW1lQWxpZ25FcnIpOwotCW5wLT5lc3RhdHMucnhfbGVuZ3RoX2Vycm9yICs9
IHJlYWRsKGJhc2UgKyBOdlJlZ1J4TGVuRXJyKTsKLQlucC0+ZXN0YXRzLnJ4X3VuaWNhc3QgKz0g
cmVhZGwoYmFzZSArIE52UmVnUnhVbmljYXN0KTsKLQlucC0+ZXN0YXRzLnJ4X211bHRpY2FzdCAr
PSByZWFkbChiYXNlICsgTnZSZWdSeE11bHRpY2FzdCk7Ci0JbnAtPmVzdGF0cy5yeF9icm9hZGNh
c3QgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhCcm9hZGNhc3QpOwotCW5wLT5lc3RhdHMucnhfYnl0
ZXMgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhDbnQpOwotCW5wLT5lc3RhdHMucnhfcGF1c2UgKz0g
cmVhZGwoYmFzZSArIE52UmVnUnhQYXVzZSk7Ci0JbnAtPmVzdGF0cy5yeF9kcm9wX2ZyYW1lICs9
IHJlYWRsKGJhc2UgKyBOdlJlZ1J4RHJvcEZyYW1lKTsKLQlucC0+ZXN0YXRzLnJ4X3BhY2tldHMg
PQotCQlucC0+ZXN0YXRzLnJ4X3VuaWNhc3QgKwotCQlucC0+ZXN0YXRzLnJ4X211bHRpY2FzdCAr
Ci0JCW5wLT5lc3RhdHMucnhfYnJvYWRjYXN0OwotCW5wLT5lc3RhdHMucnhfZXJyb3JzX3RvdGFs
ID0KLQkJbnAtPmVzdGF0cy5yeF9jcmNfZXJyb3JzICsKLQkJbnAtPmVzdGF0cy5yeF9vdmVyX2Vy
cm9ycyArCi0JCW5wLT5lc3RhdHMucnhfZnJhbWVfZXJyb3IgKwotCQkobnAtPmVzdGF0cy5yeF9m
cmFtZV9hbGlnbl9lcnJvciAtIG5wLT5lc3RhdHMucnhfZXh0cmFfYnl0ZSkgKwotCQlucC0+ZXN0
YXRzLnJ4X2xhdGVfY29sbGlzaW9uICsKLQkJbnAtPmVzdGF0cy5yeF9ydW50ICsKLQkJbnAtPmVz
dGF0cy5yeF9mcmFtZV90b29fbG9uZzsKKwlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CisJCisJ
bnAtPmVzdGF0cy50eF9kcm9wcGVkID0gbnAtPnN0YXRzLnR4X2Ryb3BwZWQ7CisJaWYgKG5wLT5k
cml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDUykgeworCQlucC0+ZXN0YXRzLnR4X3BhY2tl
dHMgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhGcmFtZSk7CisJCW5wLT5lc3RhdHMudHhfZmlmb19l
cnJvcnMgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhVbmRlcmZsb3cpOworCQlucC0+ZXN0YXRzLnR4
X2NhcnJpZXJfZXJyb3JzICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4TG9zc0NhcnJpZXIpOworCQlu
cC0+ZXN0YXRzLnR4X2J5dGVzICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4Q250KTsKKwkJbnAtPmVz
dGF0cy5yeF9ieXRlcyArPSByZWFkbChiYXNlICsgTnZSZWdSeENudCk7CisJCW5wLT5lc3RhdHMu
cnhfY3JjX2Vycm9ycyArPSByZWFkbChiYXNlICsgTnZSZWdSeEZDU0Vycik7CisJCW5wLT5lc3Rh
dHMucnhfb3Zlcl9lcnJvcnMgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhPdmVyZmxvdyk7CisKKwkJ
bnAtPmVzdGF0cy50eF96ZXJvX3JleG10ICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4WmVyb1JlWG10
KTsKKwkJbnAtPmVzdGF0cy50eF9vbmVfcmV4bXQgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhPbmVS
ZVhtdCk7CisJCW5wLT5lc3RhdHMudHhfbWFueV9yZXhtdCArPSByZWFkbChiYXNlICsgTnZSZWdU
eE1hbnlSZVhtdCk7CisJCW5wLT5lc3RhdHMudHhfbGF0ZV9jb2xsaXNpb24gKz0gcmVhZGwoYmFz
ZSArIE52UmVnVHhMYXRlQ29sKTsKKwkJbnAtPmVzdGF0cy50eF9leGNlc3NfZGVmZXJyYWwgKz0g
cmVhZGwoYmFzZSArIE52UmVnVHhFeGNlc3NEZWYpOworCQlucC0+ZXN0YXRzLnR4X3JldHJ5X2Vy
cm9yICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1R4UmV0cnlFcnIpOworCQlucC0+ZXN0YXRzLnJ4X2Zy
YW1lX2Vycm9yICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4RnJhbWVFcnIpOworCQlucC0+ZXN0YXRz
LnJ4X2V4dHJhX2J5dGUgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhFeHRyYUJ5dGUpOworCQlucC0+
ZXN0YXRzLnJ4X2xhdGVfY29sbGlzaW9uICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4TGF0ZUNvbCk7
CisJCW5wLT5lc3RhdHMucnhfcnVudCArPSByZWFkbChiYXNlICsgTnZSZWdSeFJ1bnQpOworCQlu
cC0+ZXN0YXRzLnJ4X2ZyYW1lX3Rvb19sb25nICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4RnJhbWVU
b29Mb25nKTsKKwkJbnAtPmVzdGF0cy5yeF9mcmFtZV9hbGlnbl9lcnJvciArPSByZWFkbChiYXNl
ICsgTnZSZWdSeEZyYW1lQWxpZ25FcnIpOworCQlucC0+ZXN0YXRzLnJ4X2xlbmd0aF9lcnJvciAr
PSByZWFkbChiYXNlICsgTnZSZWdSeExlbkVycik7CisJCW5wLT5lc3RhdHMucnhfdW5pY2FzdCAr
PSByZWFkbChiYXNlICsgTnZSZWdSeFVuaWNhc3QpOworCQlucC0+ZXN0YXRzLnJ4X211bHRpY2Fz
dCArPSByZWFkbChiYXNlICsgTnZSZWdSeE11bHRpY2FzdCk7CisJCW5wLT5lc3RhdHMucnhfYnJv
YWRjYXN0ICs9IHJlYWRsKGJhc2UgKyBOdlJlZ1J4QnJvYWRjYXN0KTsKKwkJbnAtPmVzdGF0cy50
eF9kZWZlcnJhbCArPSByZWFkbChiYXNlICsgTnZSZWdUeERlZik7CisJCW5wLT5lc3RhdHMudHhf
cGF1c2UgKz0gcmVhZGwoYmFzZSArIE52UmVnVHhQYXVzZSk7CisJCW5wLT5lc3RhdHMucnhfcGF1
c2UgKz0gcmVhZGwoYmFzZSArIE52UmVnUnhQYXVzZSk7CisJCW5wLT5lc3RhdHMucnhfZHJvcF9m
cmFtZSArPSByZWFkbChiYXNlICsgTnZSZWdSeERyb3BGcmFtZSk7CisJCW5wLT5lc3RhdHMucnhf
cGFja2V0cyA9IAorCQkJbnAtPmVzdGF0cy5yeF91bmljYXN0ICsgCisJCQlucC0+ZXN0YXRzLnJ4
X211bHRpY2FzdCArIAorCQkJbnAtPmVzdGF0cy5yeF9icm9hZGNhc3Q7CisJCW5wLT5lc3RhdHMu
cnhfZXJyb3JzX3RvdGFsID0gCisJCQlucC0+ZXN0YXRzLnJ4X2NyY19lcnJvcnMgKworCQkJbnAt
PmVzdGF0cy5yeF9vdmVyX2Vycm9ycyArCisJCQlucC0+ZXN0YXRzLnJ4X2ZyYW1lX2Vycm9yICsK
KwkJCShucC0+ZXN0YXRzLnJ4X2ZyYW1lX2FsaWduX2Vycm9yIC0gbnAtPmVzdGF0cy5yeF9leHRy
YV9ieXRlKSArCisJCQlucC0+ZXN0YXRzLnJ4X2xhdGVfY29sbGlzaW9uICsKKwkJCW5wLT5lc3Rh
dHMucnhfcnVudCArCisJCQlucC0+ZXN0YXRzLnJ4X2ZyYW1lX3Rvb19sb25nICsKKwkJCW5wLT5y
eF9sZW5fZXJyb3JzOworCisJCS8qIGNvcHkgdG8gbmV0X2RldmljZSBzdGF0cyAqLworCQlucC0+
c3RhdHMudHhfcGFja2V0cyA9IG5wLT5lc3RhdHMudHhfcGFja2V0czsKKwkJbnAtPnN0YXRzLnR4
X2ZpZm9fZXJyb3JzID0gbnAtPmVzdGF0cy50eF9maWZvX2Vycm9yczsKKwkJbnAtPnN0YXRzLnR4
X2NhcnJpZXJfZXJyb3JzID0gbnAtPmVzdGF0cy50eF9jYXJyaWVyX2Vycm9yczsKKwkJbnAtPnN0
YXRzLnR4X2J5dGVzID0gbnAtPmVzdGF0cy50eF9ieXRlczsKKwkJbnAtPnN0YXRzLnJ4X2J5dGVz
ID0gbnAtPmVzdGF0cy5yeF9ieXRlczsKKwkJbnAtPnN0YXRzLnJ4X2NyY19lcnJvcnMgPSBucC0+
ZXN0YXRzLnJ4X2NyY19lcnJvcnM7CisJCW5wLT5zdGF0cy5yeF9vdmVyX2Vycm9ycyA9IG5wLT5l
c3RhdHMucnhfb3Zlcl9lcnJvcnM7CisJCW5wLT5zdGF0cy5yeF9wYWNrZXRzID0gbnAtPmVzdGF0
cy5yeF9wYWNrZXRzOworCQlucC0+c3RhdHMucnhfZXJyb3JzID0gbnAtPmVzdGF0cy5yeF9lcnJv
cnNfdG90YWw7CisJCQorCX0gZWxzZSB7CisJCW5wLT5lc3RhdHMudHhfcGFja2V0cyA9IG5wLT5z
dGF0cy50eF9wYWNrZXRzOworCQlucC0+ZXN0YXRzLnR4X2ZpZm9fZXJyb3JzID0gbnAtPnN0YXRz
LnR4X2ZpZm9fZXJyb3JzOworCQlucC0+ZXN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzID0gbnAtPnN0
YXRzLnR4X2NhcnJpZXJfZXJyb3JzOworCQlucC0+ZXN0YXRzLnR4X2J5dGVzID0gbnAtPnN0YXRz
LnR4X2J5dGVzOworCQlucC0+ZXN0YXRzLnJ4X2J5dGVzID0gbnAtPnN0YXRzLnJ4X2J5dGVzOwor
CQlucC0+ZXN0YXRzLnJ4X2NyY19lcnJvcnMgPSBucC0+c3RhdHMucnhfY3JjX2Vycm9yczsKKwkJ
bnAtPmVzdGF0cy5yeF9vdmVyX2Vycm9ycyA9IG5wLT5zdGF0cy5yeF9vdmVyX2Vycm9yczsKKwkJ
bnAtPmVzdGF0cy5yeF9wYWNrZXRzID0gbnAtPnN0YXRzLnJ4X3BhY2tldHM7CisJCW5wLT5lc3Rh
dHMucnhfZXJyb3JzX3RvdGFsID0gbnAtPnN0YXRzLnJ4X2Vycm9yczsKKwl9CiAKLQlpZiAoIW5w
LT5pbl9zaHV0ZG93bikKKwlpZiAoIW5wLT5pbl9zaHV0ZG93biAmJiBuZXRpZl9ydW5uaW5nKGRl
dikpCiAJCW1vZF90aW1lcigmbnAtPnN0YXRzX3BvbGwsIGppZmZpZXMgKyBTVEFUU19JTlRFUlZB
TCk7CisJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7Cit9CisKKy8qCisgKiBudl9nZXRfc3Rh
dHM6IGRldi0+Z2V0X3N0YXRzIGZ1bmN0aW9uCisgKiBHZXQgbGF0ZXN0IHN0YXRzIHZhbHVlIGZy
b20gdGhlIG5pYy4KKyAqIENhbGxlZCB3aXRoIHJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jaykgaGVs
ZCBmb3IgcmVhZCAtCisgKiBvbmx5IHN5bmNocm9uaXplZCBhZ2FpbnN0IHVucmVnaXN0ZXJfbmV0
ZGV2aWNlLgorICovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm52X2dldF9zdGF0
cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9u
dnByaXYoZGV2KTsKKworCS8qIEl0IHNlZW1zIHRoYXQgdGhlIG5pYyBhbHdheXMgZ2VuZXJhdGVz
IGludGVycnVwdHMgYW5kIGRvZXNuJ3QKKwkgKiBhY2N1bXVsYXRlIGVycm9ycyBpbnRlcm5hbGx5
LiBUaHVzIHRoZSBjdXJyZW50IHZhbHVlcyBpbiBucC0+c3RhdHMKKwkgKiBhcmUgYWxyZWFkeSB1
cCB0byBkYXRlLgorCSAqLworCW52X2RvX3N0YXRzX3BvbGwoKHVuc2lnbmVkIGxvbmcpZGV2KTsK
KwlyZXR1cm4gJm5wLT5zdGF0czsKIH0KIAogc3RhdGljIHZvaWQgbnZfZ2V0X2RydmluZm8oc3Ry
dWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKIHsKLQlz
dHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpu
cCA9IGdldF9udnByaXYoZGV2KTsKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCAiZm9yY2VkZXRoIik7
CiAJc3RyY3B5KGluZm8tPnZlcnNpb24sIEZPUkNFREVUSF9WRVJTSU9OKTsKIAlzdHJjcHkoaW5m
by0+YnVzX2luZm8sIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CkBAIC0yODczLDcgKzM3NDIsNyBA
QAogCiBzdGF0aWMgdm9pZCBudl9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVj
dCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0
ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJ
d29saW5mby0+c3VwcG9ydGVkID0gV0FLRV9NQUdJQzsKIAogCXNwaW5fbG9ja19pcnEoJm5wLT5s
b2NrKTsKQEAgLTI4ODQsNyArMzc1Myw3IEBACiAKIHN0YXRpYyBpbnQgbnZfc2V0X3dvbChzdHJ1
Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2xpbmZvKQogewot
CXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYg
Km5wID0gZ2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRl
dik7CiAJdTMyIGZsYWdzID0gMDsKIApAQCAtMjkwNCw3ICszNzczLDcgQEAKIAogc3RhdGljIGlu
dCBudl9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xf
Y21kICplY21kKQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJ
c3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCWludCBhZHY7CiAKIAlzcGlu
X2xvY2tfaXJxKCZucC0+bG9jayk7CkBAIC0yOTc4LDggKzM4NDcsOSBAQAogCiBzdGF0aWMgaW50
IG52X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9j
bWQgKmVjbWQpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlz
dHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAKKwlkcHJpbnRrKEtFUk5fREVC
VUcgIiVzOiBudl9zZXRfc2V0dGluZ3MgXG4iLCBkZXYtPm5hbWUpOwogCWlmIChlY21kLT5wb3J0
ICE9IFBPUlRfTUlJKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZWNtZC0+dHJhbnNjZWl2ZXIg
IT0gWENWUl9FWFRFUk5BTCkKQEAgLTMwNTcsOSArMzkyNywxOCBAQAogCQlpZiAobmV0aWZfcnVu
bmluZyhkZXYpKQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgZG93bi5cbiIsIGRldi0+
bmFtZSk7CiAJCWJtY3IgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIE1JSV9S
RUFEKTsKKwkJaWYgKG5wLT5waHlfbW9kZWwgPT0gUEhZX01PREVMX01BUlZFTExfRTMwMTYpIHsK
KwkJCWJtY3IgfD0gQk1DUl9BTkVOQUJMRTsKKwkJCS8qIHJlc2V0IHRoZSBwaHkgaW4gb3JkZXIg
Zm9yIHNldHRpbmdzIHRvIHN0aWNrLAorCQkJICogYW5kIGNhdXNlIGF1dG9uZWcgdG8gc3RhcnQg
Ki8KKwkJCWlmIChwaHlfcmVzZXQoZGV2LCBibWNyKSkgeworCQkJCXByaW50ayhLRVJOX0lORk8g
IiVzOiBwaHkgcmVzZXQgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQkJCXJldHVybiAtRUlOVkFM
OworCQkJfQorCQl9IGVsc2UgewogCQlibWNyIHw9IChCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJF
U1RBUlQpOwogCQltaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIGJtY3IpOwotCisJ
CX0KIAl9IGVsc2UgewogCQlpbnQgYWR2LCBibWNyOwogCkBAIC0zMDk5LDE3ICszOTc4LDE5IEBA
CiAJCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7CiAJCWlmIChucC0+Zml4ZWRfbW9kZSAmIChBRFZF
UlRJU0VfMTAwSEFMRnxBRFZFUlRJU0VfMTAwRlVMTCkpCiAJCQlibWNyIHw9IEJNQ1JfU1BFRUQx
MDA7Ci0JCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgYm1jcik7CiAJCWlmIChu
cC0+cGh5X291aSA9PSBQSFlfT1VJX01BUlZFTEwpIHsKLQkJCS8qIHJlc2V0IHRoZSBwaHkgKi8K
LQkJCWlmIChwaHlfcmVzZXQoZGV2KSkgeworCQkJLyogcmVzZXQgdGhlIHBoeSBpbiBvcmRlciBm
b3IgZm9yY2VkIG1vZGUgc2V0dGluZ3MgdG8gc3RpY2sgKi8KKwkJCWlmIChwaHlfcmVzZXQoZGV2
LCBibWNyKSkgewogCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgcmVzZXQgZmFpbGVkXG4i
LCBkZXYtPm5hbWUpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQl9IGVsc2UgaWYgKG5l
dGlmX3J1bm5pbmcoZGV2KSkgewotCQkJLyogV2FpdCBhIGJpdCBhbmQgdGhlbiByZWNvbmZpZ3Vy
ZSB0aGUgbmljLiAqLwotCQkJdWRlbGF5KDEwKTsKLQkJCW52X2xpbmtjaGFuZ2UoZGV2KTsKKwkJ
fSBlbHNlIHsKKwkJCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgYm1jcik7CisJ
CQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQkJLyogV2FpdCBhIGJpdCBhbmQgdGhlbiBy
ZWNvbmZpZ3VyZSB0aGUgbmljLiAqLworCQkJCXVkZWxheSgxMCk7CisJCQkJbnZfbGlua2NoYW5n
ZShkZXYpOworCQkJfQogCQl9CiAJfQogCkBAIC0zMTI2LDEzICs0MDA3LDEzIEBACiAKIHN0YXRp
YyBpbnQgbnZfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0
IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBn
ZXRfbnZwcml2KGRldik7CiAJcmV0dXJuIG5wLT5yZWdpc3Rlcl9zaXplOwogfQogCiBzdGF0aWMg
dm9pZCBudl9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9y
ZWdzICpyZWdzLCB2b2lkICpidWYpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3By
aXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTggX19p
b21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAl1MzIgKnJidWYgPSBidWY7CiAJaW50IGk7
CkBAIC0zMTQ2LDcgKzQwMjcsNyBAQAogCiBzdGF0aWMgaW50IG52X253YXlfcmVzZXQoc3RydWN0
IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihk
ZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAlpbnQgcmV0Owog
CiAJaWYgKG5wLT5hdXRvbmVnKSB7CkBAIC0zMTY2LDggKzQwNDcsMTcgQEAKIAkJfQogCiAJCWJt
Y3IgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIE1JSV9SRUFEKTsKLQkJYm1j
ciB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKLQkJbWlpX3J3KGRldiwgbnAt
PnBoeWFkZHIsIE1JSV9CTUNSLCBibWNyKTsKKwkJaWYgKG5wLT5waHlfbW9kZWwgPT0gUEhZX01P
REVMX01BUlZFTExfRTMwMTYpIHsKKwkJCWJtY3IgfD0gQk1DUl9BTkVOQUJMRTsKKwkJCS8qIHJl
c2V0IHRoZSBwaHkgaW4gb3JkZXIgZm9yIHNldHRpbmdzIHRvIHN0aWNrKi8KKwkJCWlmIChwaHlf
cmVzZXQoZGV2LCBibWNyKSkgeworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgcmVzZXQg
ZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9IGVs
c2UgeworCQkJYm1jciB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKKwkJCW1p
aV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgYm1jcik7CisJCX0KIAogCQlpZiAobmV0
aWZfcnVubmluZyhkZXYpKSB7CiAJCQludl9zdGFydF9yeChkZXYpOwpAQCAtMzE4MiwxOSArNDA3
Miw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBudl9zZXRfdHNvKHN0cnVjdCBu
ZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRk
ZXZfcHJpdihkZXYpOwotCi0JaWYgKChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VN
KSkKLQkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3RzbyhkZXYsIHZhbHVlKTsKLQllbHNlCi0JCXJl
dHVybiAtRU9QTk9UU1VQUDsKLX0KLQogc3RhdGljIHZvaWQgbnZfZ2V0X3JpbmdwYXJhbShzdHJ1
Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0qIHJpbmcpCiB7Ci0J
c3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAq
bnAgPSBnZXRfbnZwcml2KGRldik7CiAKIAlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IChucC0+ZGVz
Y192ZXIgPT0gREVTQ19WRVJfMSkgPyBSSU5HX01BWF9ERVNDX1ZFUl8xIDogUklOR19NQVhfREVT
Q19WRVJfMl8zOwogCXJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOwpAQCAtMzIwOSwyMCAr
NDA4OSwyMCBAQAogCiBzdGF0aWMgaW50IG52X3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZp
Y2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtKiByaW5nKQogewotCXN0cnVjdCBmZV9w
cml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252
cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7Ci0JdTggKnJ4
dHhfcmluZywgKnJ4X3NrYnVmZiwgKnR4X3NrYnVmZiwgKnJ4X2RtYSwgKnR4X2RtYSwgKnR4X2Rt
YV9sZW47CisJdTggKnJ4dHhfcmluZywgKnJ4X3NrYnVmZiwgKnR4X3NrYnVmZjsKIAlkbWFfYWRk
cl90IHJpbmdfYWRkcjsKIAogCWlmIChyaW5nLT5yeF9wZW5kaW5nIDwgUlhfUklOR19NSU4gfHwK
IAkgICAgcmluZy0+dHhfcGVuZGluZyA8IFRYX1JJTkdfTUlOIHx8CiAJICAgIHJpbmctPnJ4X21p
bmlfcGVuZGluZyAhPSAwIHx8CiAJICAgIHJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgIT0gMCB8fAot
CSAgICAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgJiYKLQkgICAgIChyaW5nLT5yeF9wZW5k
aW5nID4gUklOR19NQVhfREVTQ19WRVJfMSB8fAorCSAgICAobnAtPmRlc2NfdmVyID09IERFU0Nf
VkVSXzEgJiYgCisJICAgICAocmluZy0+cnhfcGVuZGluZyA+IFJJTkdfTUFYX0RFU0NfVkVSXzEg
fHwgCiAJICAgICAgcmluZy0+dHhfcGVuZGluZyA+IFJJTkdfTUFYX0RFU0NfVkVSXzEpKSB8fAot
CSAgICAobnAtPmRlc2NfdmVyICE9IERFU0NfVkVSXzEgJiYKLQkgICAgIChyaW5nLT5yeF9wZW5k
aW5nID4gUklOR19NQVhfREVTQ19WRVJfMl8zIHx8CisJICAgIChucC0+ZGVzY192ZXIgIT0gREVT
Q19WRVJfMSAmJiAKKwkgICAgIChyaW5nLT5yeF9wZW5kaW5nID4gUklOR19NQVhfREVTQ19WRVJf
Ml8zIHx8IAogCSAgICAgIHJpbmctPnR4X3BlbmRpbmcgPiBSSU5HX01BWF9ERVNDX1ZFUl8yXzMp
KSkgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0zMjM3LDEyICs0MTE3LDEwIEBACiAJCQkJ
CSAgICBzaXplb2Yoc3RydWN0IHJpbmdfZGVzY19leCkgKiAocmluZy0+cnhfcGVuZGluZyArIHJp
bmctPnR4X3BlbmRpbmcpLAogCQkJCQkgICAgJnJpbmdfYWRkcik7CiAJfQotCXJ4X3NrYnVmZiA9
IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBza19idWZmKikgKiByaW5nLT5yeF9wZW5kaW5nLCBHRlBf
S0VSTkVMKTsKLQlyeF9kbWEgPSBrbWFsbG9jKHNpemVvZihkbWFfYWRkcl90KSAqIHJpbmctPnJ4
X3BlbmRpbmcsIEdGUF9LRVJORUwpOwotCXR4X3NrYnVmZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVj
dCBza19idWZmKikgKiByaW5nLT50eF9wZW5kaW5nLCBHRlBfS0VSTkVMKTsKLQl0eF9kbWEgPSBr
bWFsbG9jKHNpemVvZihkbWFfYWRkcl90KSAqIHJpbmctPnR4X3BlbmRpbmcsIEdGUF9LRVJORUwp
OwotCXR4X2RtYV9sZW4gPSBrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBpbnQpICogcmluZy0+dHhf
cGVuZGluZywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyeHR4X3JpbmcgfHwgIXJ4X3NrYnVmZiB8fCAh
cnhfZG1hIHx8ICF0eF9za2J1ZmYgfHwgIXR4X2RtYSB8fCAhdHhfZG1hX2xlbikgeworCXJ4X3Nr
YnVmZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBudl9za2JfbWFwKSAqIHJpbmctPnJ4X3BlbmRp
bmcsIEdGUF9LRVJORUwpOworCXR4X3NrYnVmZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBudl9z
a2JfbWFwKSAqIHJpbmctPnR4X3BlbmRpbmcsIEdGUF9LRVJORUwpOworCisJaWYgKCFyeHR4X3Jp
bmcgfHwgIXJ4X3NrYnVmZiB8fCAhdHhfc2tidWZmKSB7CiAJCS8qIGZhbGwgYmFjayB0byBvbGQg
cmluZ3MgKi8KIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3Zl
ciA9PSBERVNDX1ZFUl8yKSB7CiAJCQlpZihyeHR4X3JpbmcpCkBAIC0zMjU1LDE0ICs0MTMzLDgg
QEAKIAkJfQogCQlpZiAocnhfc2tidWZmKQogCQkJa2ZyZWUocnhfc2tidWZmKTsKLQkJaWYgKHJ4
X2RtYSkKLQkJCWtmcmVlKHJ4X2RtYSk7CiAJCWlmICh0eF9za2J1ZmYpCiAJCQlrZnJlZSh0eF9z
a2J1ZmYpOwotCQlpZiAodHhfZG1hKQotCQkJa2ZyZWUodHhfZG1hKTsKLQkJaWYgKHR4X2RtYV9s
ZW4pCi0JCQlrZnJlZSh0eF9kbWFfbGVuKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMzI4MCwx
MiArNDE1MiwxMiBAQAogCQkvKiBkZWxldGUgcXVldWVzICovCiAJCWZyZWVfcmluZ3MoZGV2KTsK
IAl9Ci0KKwkKIAkvKiBzZXQgbmV3IHZhbHVlcyAqLwogCW5wLT5yeF9yaW5nX3NpemUgPSByaW5n
LT5yeF9wZW5kaW5nOwogCW5wLT50eF9yaW5nX3NpemUgPSByaW5nLT50eF9wZW5kaW5nOwotCW5w
LT50eF9saW1pdF9zdG9wID0gcmluZy0+dHhfcGVuZGluZyAtIFRYX0xJTUlUX0RJRkZFUkVOQ0U7
Ci0JbnAtPnR4X2xpbWl0X3N0YXJ0ID0gcmluZy0+dHhfcGVuZGluZyAtIFRYX0xJTUlUX0RJRkZF
UkVOQ0UgLSAxOworCW5wLT50eF9saW1pdF9zdG9wID1ucC0+dHhfcmluZ19zaXplIC0gVFhfTElN
SVRfRElGRkVSRU5DRTsKKwlucC0+dHhfbGltaXRfc3RhcnQgPW5wLT50eF9yaW5nX3NpemUgLSBU
WF9MSU1JVF9ESUZGRVJFTkNFIC0gMTsKIAlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEg
fHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKIAkJbnAtPnJ4X3Jpbmcub3JpZyA9IChz
dHJ1Y3QgcmluZ19kZXNjKilyeHR4X3Jpbmc7CiAJCW5wLT50eF9yaW5nLm9yaWcgPSAmbnAtPnJ4
X3Jpbmcub3JpZ1tucC0+cnhfcmluZ19zaXplXTsKQEAgLTMyOTMsMTggKzQxNjUsMTIgQEAKIAkJ
bnAtPnJ4X3JpbmcuZXggPSAoc3RydWN0IHJpbmdfZGVzY19leCopcnh0eF9yaW5nOwogCQlucC0+
dHhfcmluZy5leCA9ICZucC0+cnhfcmluZy5leFtucC0+cnhfcmluZ19zaXplXTsKIAl9Ci0JbnAt
PnJ4X3NrYnVmZiA9IChzdHJ1Y3Qgc2tfYnVmZioqKXJ4X3NrYnVmZjsKLQlucC0+cnhfZG1hID0g
KGRtYV9hZGRyX3QqKXJ4X2RtYTsKLQlucC0+dHhfc2tidWZmID0gKHN0cnVjdCBza19idWZmKiop
dHhfc2tidWZmOwotCW5wLT50eF9kbWEgPSAoZG1hX2FkZHJfdCopdHhfZG1hOwotCW5wLT50eF9k
bWFfbGVuID0gKHVuc2lnbmVkIGludCopdHhfZG1hX2xlbjsKKwlucC0+cnhfc2tiID0gKHN0cnVj
dCBudl9za2JfbWFwKilyeF9za2J1ZmY7CisJbnAtPnR4X3NrYiA9IChzdHJ1Y3QgbnZfc2tiX21h
cCopdHhfc2tidWZmOwogCW5wLT5yaW5nX2FkZHIgPSByaW5nX2FkZHI7Ci0KLQltZW1zZXQobnAt
PnJ4X3NrYnVmZiwgMCwgc2l6ZW9mKHN0cnVjdCBza19idWZmKikgKiBucC0+cnhfcmluZ19zaXpl
KTsKLQltZW1zZXQobnAtPnJ4X2RtYSwgMCwgc2l6ZW9mKGRtYV9hZGRyX3QpICogbnAtPnJ4X3Jp
bmdfc2l6ZSk7Ci0JbWVtc2V0KG5wLT50eF9za2J1ZmYsIDAsIHNpemVvZihzdHJ1Y3Qgc2tfYnVm
ZiopICogbnAtPnR4X3Jpbmdfc2l6ZSk7Ci0JbWVtc2V0KG5wLT50eF9kbWEsIDAsIHNpemVvZihk
bWFfYWRkcl90KSAqIG5wLT50eF9yaW5nX3NpemUpOwotCW1lbXNldChucC0+dHhfZG1hX2xlbiwg
MCwgc2l6ZW9mKHVuc2lnbmVkIGludCkgKiBucC0+dHhfcmluZ19zaXplKTsKKwkKKwltZW1zZXQo
bnAtPnJ4X3NrYiwgMCwgc2l6ZW9mKHN0cnVjdCBudl9za2JfbWFwKSAqIG5wLT5yeF9yaW5nX3Np
emUpOworCW1lbXNldChucC0+dHhfc2tiLCAwLCBzaXplb2Yoc3RydWN0IG52X3NrYl9tYXApICog
bnAtPnR4X3Jpbmdfc2l6ZSk7CiAKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCS8qIHJl
aW5pdCBkcml2ZXIgdmlldyBvZiB0aGUgcXVldWVzICovCkBAIC0zMzEzLDcgKzQxNzksNyBAQAog
CQkJaWYgKCFucC0+aW5fc2h1dGRvd24pCiAJCQkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGpp
ZmZpZXMgKyBPT01fUkVGSUxMKTsKIAkJfQotCisJCQogCQkvKiByZWluaXQgbmljIHZpZXcgb2Yg
dGhlIHF1ZXVlcyAqLwogCQl3cml0ZWwobnAtPnJ4X2J1Zl9zeiwgYmFzZSArIE52UmVnT2ZmbG9h
ZENvbmZpZyk7CiAJCXNldHVwX2h3X3JpbmdzKGRldiwgTlZfU0VUVVBfUlhfUklORyB8IE5WX1NF
VFVQX1RYX1JJTkcpOwpAQCAtMzMyMiw3ICs0MTg4LDcgQEAKIAkJcGNpX3B1c2goYmFzZSk7CiAJ
CXdyaXRlbChOVlJFR19UWFJYQ1RMX0tJQ0t8bnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShk
ZXYpICsgTnZSZWdUeFJ4Q29udHJvbCk7CiAJCXBjaV9wdXNoKGJhc2UpOwotCisJCQogCQkvKiBy
ZXN0YXJ0IGVuZ2luZXMgKi8KIAkJbnZfc3RhcnRfcngoZGV2KTsKIAkJbnZfc3RhcnRfdHgoZGV2
KTsKQEAgLTMzMzcsNyArNDIwMyw3IEBACiAKIHN0YXRpYyB2b2lkIG52X2dldF9wYXVzZXBhcmFt
KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0qIHBhdXNl
KQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGZl
X3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCiAJcGF1c2UtPmF1dG9uZWcgPSAobnAtPnBh
dXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9BVVRPTkVHKSAhPSAwOwogCXBhdXNlLT5yeF9wYXVz
ZSA9IChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1JYX0VOQUJMRSkgIT0gMDsKQEAg
LTMzNDYsMTIgKzQyMTIsMTIgQEAKIAogc3RhdGljIGludCBudl9zZXRfcGF1c2VwYXJhbShzdHJ1
Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtKiBwYXVzZSkKIHsK
LQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2
ICpucCA9IGdldF9udnByaXYoZGV2KTsKIAlpbnQgYWR2LCBibWNyOwogCiAJaWYgKCghbnAtPmF1
dG9uZWcgJiYgbnAtPmR1cGxleCA9PSAwKSB8fAogCSAgICAobnAtPmF1dG9uZWcgJiYgIXBhdXNl
LT5hdXRvbmVnICYmIG5wLT5kdXBsZXggPT0gMCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6
IGNhbiBub3Qgc2V0IHBhdXNlIHNldHRpbmdzIHdoZW4gZm9yY2VkIGxpbmsgaXMgaW4gaGFsZiBk
dXBsZXguXG4iLAorCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FuIG5vdCBzZXQgcGF1c2Ugc2V0
dGluZ3Mgd2hlbiBmb3JjZWQgbGluayBpcyBpbiBoYWxmIGR1cGxleC5cbiIsIAogCQkgICAgICAg
ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMzQxNywzMSArNDI4MywyNiBA
QAogCiBzdGF0aWMgdTMyIG52X2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7
Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gKG5wLT50
eHJ4Y3RsX2JpdHMgJiBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0spICE9IDA7CisJc3RydWN0IGZlX3By
aXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCXJldHVybiAobnAtPnJ4X2NzdW0pICE9IDA7CiB9
CiAKIHN0YXRpYyBpbnQgbnZfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMy
IGRhdGEpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1
Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdl
dF9od2Jhc2UoZGV2KTsKIAlpbnQgcmV0Y29kZSA9IDA7CiAKIAlpZiAobnAtPmRyaXZlcl9kYXRh
ICYgREVWX0hBU19DSEVDS1NVTSkgewogCi0JCWlmICgoKG5wLT50eHJ4Y3RsX2JpdHMgJiBOVlJF
R19UWFJYQ1RMX1JYQ0hFQ0spICYmIGRhdGEpIHx8Ci0JCSAgICAoIShucC0+dHhyeGN0bF9iaXRz
ICYgTlZSRUdfVFhSWENUTF9SWENIRUNLKSAmJiAhZGF0YSkpIHsKLQkJCS8qIGFscmVhZHkgc2V0
IG9yIHVuc2V0ICovCi0JCQlyZXR1cm4gMDsKLQkJfQotCiAJCWlmIChkYXRhKSB7CisJCQlucC0+
cnhfY3N1bSA9IDE7CiAJCQlucC0+dHhyeGN0bF9iaXRzIHw9IE5WUkVHX1RYUlhDVExfUlhDSEVD
SzsKLQkJfSBlbHNlIGlmICghKG5wLT52bGFuY3RsX2JpdHMgJiBOVlJFR19WTEFOQ09OVFJPTF9F
TkFCTEUpKSB7Ci0JCQlucC0+dHhyeGN0bF9iaXRzICY9IH5OVlJFR19UWFJYQ1RMX1JYQ0hFQ0s7
CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJDYW4gbm90IGRpc2FibGUgcnggY2hl
Y2tzdW0gaWYgdmxhbiBpcyBlbmFibGVkXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJbnAt
PnJ4X2NzdW0gPSAwOworCQkJLyogdmxhbiBpcyBkZXBlbmRlbnQgb24gcnggY2hlY2tzdW0gb2Zm
bG9hZCAqLworCQkJaWYgKCEobnAtPnZsYW5jdGxfYml0cyAmIE5WUkVHX1ZMQU5DT05UUk9MX0VO
QUJMRSkpCisJCQkJbnAtPnR4cnhjdGxfYml0cyAmPSB+TlZSRUdfVFhSWENUTF9SWENIRUNLOwog
CQl9CiAKIAkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewpAQCAtMzQ1NiwzOSArNDMxNyw1MSBA
QAogCXJldHVybiByZXRjb2RlOwogfQogCi1zdGF0aWMgaW50IG52X3NldF90eF9jc3VtKHN0cnVj
dCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorI2lmZGVmIE5FVElGX0ZfVFNPCitzdGF0aWMg
aW50IG52X3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCiB7Ci0Jc3Ry
dWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChucC0+ZHJpdmVyX2Rh
dGEgJiBERVZfSEFTX0NIRUNLU1VNKQotCQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1
bShkZXYsIGRhdGEpOwotCWVsc2UKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCXN0cnVjdCBmZV9w
cml2ICpucCA9IGdldF9udnByaXYoZGV2KTsKKwkKKwlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVW
X0hBU19DSEVDS1NVTSl7CisJCXJldHVybiBldGh0b29sX29wX3NldF90c28oZGV2LCBkYXRhKTsK
Kwl9ZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50IG52X3Nl
dF9zZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKIHsKLQlzdHJ1Y3QgZmVfcHJp
diAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnBy
aXYoZGV2KTsKKwkKKwlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19DSEVDS1NVTSl7CisJ
CXJldHVybiBldGh0b29sX29wX3NldF9zZyhkZXYsIGRhdGEpOworCX1lbHNlCisJCXJldHVybiAt
RUlOVkFMOworfQorCitzdGF0aWMgaW50IG52X3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNl
ICpkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2
KTsKIAogCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKQotCQlyZXR1cm4g
ZXRodG9vbF9vcF9zZXRfc2coZGV2LCBkYXRhKTsKKwkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3R4
X2h3X2NzdW0oZGV2LCBkYXRhKTsKIAllbHNlCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmV0
dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgbnZfZ2V0X3N0YXRzX2NvdW50KHN0cnVjdCBu
ZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2
KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAKIAlpZiAobnAtPmRy
aXZlcl9kYXRhICYgREVWX0hBU19TVEFUSVNUSUNTKQogCQlyZXR1cm4gKHNpemVvZihzdHJ1Y3Qg
bnZfZXRodG9vbF9zdGF0cykvc2l6ZW9mKHU2NCkpOwogCWVsc2UKLQkJcmV0dXJuIDA7CisJCXJl
dHVybiBOVl9TVEFUU19DT1VOVF9TVzsKIH0KIAogc3RhdGljIHZvaWQgbnZfZ2V0X2V0aHRvb2xf
c3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfc3RhdHMgKmVzdGF0
cywgdTY0ICpidWZmZXIpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2
KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAKIAkvKiB1cGRhdGUg
c3RhdHMgKi8KIAludl9kb19zdGF0c19wb2xsKCh1bnNpZ25lZCBsb25nKWRldik7CkBAIC0zNDk4
LDcgKzQzNzEsNyBAQAogCiBzdGF0aWMgaW50IG52X3NlbGZfdGVzdF9jb3VudChzdHJ1Y3QgbmV0
X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7
CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCiAJaWYgKG5wLT5kcml2
ZXJfZGF0YSAmIERFVl9IQVNfVEVTVF9FWFRFTkRFRCkKIAkJcmV0dXJuIE5WX1RFU1RfQ09VTlRf
RVhURU5ERUQ7CkBAIC0zNTA4LDcgKzQzODEsNyBAQAogCiBzdGF0aWMgaW50IG52X2xpbmtfdGVz
dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRl
dl9wcml2KGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCWlu
dCBtaWlfc3RhdHVzOwogCiAJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTVNSLCBNSUlf
UkVBRCk7CkBAIC0zNTUxLDcgKzQ0MjQsNyBAQAogCiBzdGF0aWMgaW50IG52X2ludGVycnVwdF90
ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0
ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJ
dTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAlpbnQgcmV0ID0gMTsKIAlpbnQg
dGVzdGNudDsKQEAgLTM1ODAsNyArNDQ1Myw3IEBACiAJbnZfZW5hYmxlX2h3X2ludGVycnVwdHMo
ZGV2LCBOVlJFR19JUlFfVElNRVIpOwogCiAJLyogd2FpdCBmb3IgYXQgbGVhc3Qgb25lIGludGVy
cnVwdCAqLwotCW1zbGVlcCgxMDApOworCW52X21zbGVlcCgxMDApOwogCiAJc3Bpbl9sb2NrX2ly
cSgmbnAtPmxvY2spOwogCkBAIC0zNjE0LDcgKzQ0ODcsNyBAQAogCiBzdGF0aWMgaW50IG52X2xv
b3BiYWNrX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmVfcHJpdiAq
bnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYo
ZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCXN0cnVjdCBza19i
dWZmICp0eF9za2IsICpyeF9za2I7CiAJZG1hX2FkZHJfdCB0ZXN0X2RtYV9hZGRyOwpAQCAtMzY3
MywxMyArNDU0NiwxMyBAQAogCXdyaXRlbChOVlJFR19UWFJYQ1RMX0tJQ0t8bnAtPnR4cnhjdGxf
Yml0cywgZ2V0X2h3YmFzZShkZXYpICsgTnZSZWdUeFJ4Q29udHJvbCk7CiAJcGNpX3B1c2goZ2V0
X2h3YmFzZShkZXYpKTsKIAotCW1zbGVlcCg1MDApOworCW52X21zbGVlcCg1MDApOwogCiAJLyog
Y2hlY2sgZm9yIHJ4IG9mIHRoZSBwYWNrZXQgKi8KIAlpZiAobnAtPmRlc2NfdmVyID09IERFU0Nf
VkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKIAkJRmxhZ3MgPSBsZTMyX3Rv
X2NwdShucC0+cnhfcmluZy5vcmlnWzBdLkZsYWdMZW4pOwogCQlsZW4gPSBudl9kZXNjcl9nZXRs
ZW5ndGgoJm5wLT5yeF9yaW5nLm9yaWdbMF0sIG5wLT5kZXNjX3Zlcik7Ci0KKwkJCQogCX0gZWxz
ZSB7CiAJCUZsYWdzID0gbGUzMl90b19jcHUobnAtPnJ4X3JpbmcuZXhbMF0uRmxhZ0xlbik7CiAJ
CWxlbiA9IG52X2Rlc2NyX2dldGxlbmd0aF9leCgmbnAtPnJ4X3JpbmcuZXhbMF0sIG5wLT5kZXNj
X3Zlcik7CkBAIC0zNjk2LDE3ICs0NTY5LDE3IEBACiAJCX0KIAl9CiAKLQlpZiAocmV0KSB7CisJ
aWYgKHJldCkgewkJCiAJCWlmIChsZW4gIT0gcGt0X2xlbikgewogCQkJcmV0ID0gMDsKLQkJCWRw
cmludGsoS0VSTl9ERUJVRyAiJXM6IGxvb3BiYWNrIGxlbiBtaXNtYXRjaCAlZCB2cyAlZFxuIiwK
KwkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGxvb3BiYWNrIGxlbiBtaXNtYXRjaCAlZCB2cyAl
ZFxuIiwgCiAJCQkJZGV2LT5uYW1lLCBsZW4sIHBrdF9sZW4pOwogCQl9IGVsc2UgewotCQkJcnhf
c2tiID0gbnAtPnJ4X3NrYnVmZlswXTsKKwkJCXJ4X3NrYiA9IG5wLT5yeF9za2JbMF0uc2tiOwog
CQkJZm9yIChpID0gMDsgaSA8IHBrdF9sZW47IGkrKykgewogCQkJCWlmIChyeF9za2ItPmRhdGFb
aV0gIT0gKHU4KShpICYgMHhmZikpIHsKIAkJCQkJcmV0ID0gMDsKLQkJCQkJZHByaW50ayhLRVJO
X0RFQlVHICIlczogbG9vcGJhY2sgcGF0dGVybiBjaGVjayBmYWlsZWQgb24gYnl0ZSAlZFxuIiwK
KwkJCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbG9vcGJhY2sgcGF0dGVybiBjaGVjayBmYWls
ZWQgb24gYnl0ZSAlZFxuIiwgCiAJCQkJCQlkZXYtPm5hbWUsIGkpOwogCQkJCQlicmVhazsKIAkJ
CQl9CkBAIC0zNzIwLDcgKzQ1OTMsNyBAQAogCQkgICAgICAgdHhfc2tiLT5lbmQtdHhfc2tiLT5k
YXRhLAogCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CiAJZGV2X2tmcmVlX3NrYl9hbnkodHhf
c2tiKTsKLQorCQogCS8qIHN0b3AgZW5naW5lcyAqLwogCW52X3N0b3BfcngoZGV2KTsKIAludl9z
dG9wX3R4KGRldik7CkBAIC0zNzQwLDcgKzQ2MTMsNyBAQAogCiBzdGF0aWMgdm9pZCBudl9zZWxm
X3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfdGVzdCAqdGVzdCwg
dTY0ICpidWZmZXIpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsK
KwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAJdTggX19pb21lbSAqYmFz
ZSA9IGdldF9od2Jhc2UoZGV2KTsKIAlpbnQgcmVzdWx0OwogCW1lbXNldChidWZmZXIsIDAsIG52
X3NlbGZfdGVzdF9jb3VudChkZXYpKnNpemVvZih1NjQpKTsKQEAgLTM4MzksOCArNDcxMiw2IEBA
CiAJLmdldF9yZWdzID0gbnZfZ2V0X3JlZ3MsCiAJLm53YXlfcmVzZXQgPSBudl9ud2F5X3Jlc2V0
LAogCS5nZXRfcGVybV9hZGRyID0gZXRodG9vbF9vcF9nZXRfcGVybV9hZGRyLAotCS5nZXRfdHNv
ID0gZXRodG9vbF9vcF9nZXRfdHNvLAotCS5zZXRfdHNvID0gbnZfc2V0X3RzbywKIAkuZ2V0X3Jp
bmdwYXJhbSA9IG52X2dldF9yaW5ncGFyYW0sCiAJLnNldF9yaW5ncGFyYW0gPSBudl9zZXRfcmlu
Z3BhcmFtLAogCS5nZXRfcGF1c2VwYXJhbSA9IG52X2dldF9wYXVzZXBhcmFtLApAQCAtMzg1MSw2
ICs0NzIyLDEwIEBACiAJLnNldF90eF9jc3VtID0gbnZfc2V0X3R4X2NzdW0sCiAJLmdldF9zZyA9
IGV0aHRvb2xfb3BfZ2V0X3NnLAogCS5zZXRfc2cgPSBudl9zZXRfc2csCisjaWZkZWYgTkVUSUZf
Rl9UU08KKwkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKKwkuc2V0X3RzbyA9IG52X3Nl
dF90c28sCisjZW5kaWYKIAkuZ2V0X3N0cmluZ3MgPSBudl9nZXRfc3RyaW5ncywKIAkuZ2V0X3N0
YXRzX2NvdW50ID0gbnZfZ2V0X3N0YXRzX2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IG52
X2dldF9ldGh0b29sX3N0YXRzLApAQCAtMzg3MCwxMCArNDc0NSwxMyBAQAogCWlmIChncnApIHsK
IAkJLyogZW5hYmxlIHZsYW4gb24gTUFDICovCiAJCW5wLT50eHJ4Y3RsX2JpdHMgfD0gTlZSRUdf
VFhSWENUTF9WTEFOU1RSSVAgfCBOVlJFR19UWFJYQ1RMX1ZMQU5JTlM7CisJCW5wLT50eHJ4Y3Rs
X2JpdHMgfD0gTlZSRUdfVFhSWENUTF9SWENIRUNLOwogCX0gZWxzZSB7CiAJCS8qIGRpc2FibGUg
dmxhbiBvbiBNQUMgKi8KIAkJbnAtPnR4cnhjdGxfYml0cyAmPSB+TlZSRUdfVFhSWENUTF9WTEFO
U1RSSVA7CiAJCW5wLT50eHJ4Y3RsX2JpdHMgJj0gfk5WUkVHX1RYUlhDVExfVkxBTklOUzsKKwkJ
aWYgKCFucC0+cnhfY3N1bSkKKwkJCW5wLT50eHJ4Y3RsX2JpdHMgJj0gfk5WUkVHX1RYUlhDVExf
UlhDSEVDSzsKIAl9CiAKIAl3cml0ZWwobnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShkZXYp
ICsgTnZSZWdUeFJ4Q29udHJvbCk7CkBAIC0zODg2LDUzICs0NzY0LDEwMiBAQAogCS8qIG5vdGhp
bmcgdG8gZG8gKi8KIH07CiAKKy8qIFRoZSBtZ210IHVuaXQgYW5kIGRyaXZlciB1c2UgYSBzZW1h
cGhvcmUgdG8gYWNjZXNzIHRoZSBwaHkgZHVyaW5nIGluaXQgKi8KK3N0YXRpYyBpbnQgbnZfbWdt
dF9hY3F1aXJlX3NlbWEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1OCBfX2lvbWVtICpi
YXNlID0gZ2V0X2h3YmFzZShkZXYpOworCWludCBpOworCXUzMiB0eF9jdHJsLCBtZ210X3NlbWE7
CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQltZ210X3NlbWEgPSByZWFkbChiYXNl
ICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9NR01UX1NFTUFfTUFT
SzsKKwkJaWYgKG1nbXRfc2VtYSA9PSBOVlJFR19YTUlUQ1RMX01HTVRfU0VNQV9GUkVFKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiBudl9t
Z210X2FjcXVpcmVfc2VtYTogc2VtYSBpcyBmcmVlXG4iKTsKKwkJCWJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKwkJbnZfbXNsZWVwKDUwMCk7CisJfQorCisJaWYgKG1nbXRfc2VtYSAhPSBOVlJF
R19YTUlUQ1RMX01HTVRfU0VNQV9GUkVFKSB7CisgICAgICAgICAgICAgICAgZHByaW50ayhLRVJO
X0lORk8gImZvcmNlZGV0aDogbnZfbWdtdF9hY3F1aXJlX3NlbWE6IHNlbWEgaXMgbm90IGZyZWVc
biIpOworCQlyZXR1cm4gMDsKKyAgICAgICAgfQorCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykg
eworCQl0eF9jdHJsID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKKwkJ
dHhfY3RybCB8PSBOVlJFR19YTUlUQ1RMX0hPU1RfU0VNQV9BQ1E7CisJCXdyaXRlbCh0eF9jdHJs
LCBiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOworCisJCS8qIHZlcmlmeSB0aGF0IHNl
bWFwaG9yZSB3YXMgYWNxdWlyZWQgKi8KKwkJdHhfY3RybCA9IHJlYWRsKGJhc2UgKyBOdlJlZ1Ry
YW5zbWl0dGVyQ29udHJvbCk7CisJCWlmICgoKHR4X2N0cmwgJiBOVlJFR19YTUlUQ1RMX0hPU1Rf
U0VNQV9NQVNLKSA9PSBOVlJFR19YTUlUQ1RMX0hPU1RfU0VNQV9BQ1EpICYmCisJCSAgICAoKHR4
X2N0cmwgJiBOVlJFR19YTUlUQ1RMX01HTVRfU0VNQV9NQVNLKSA9PSBOVlJFR19YTUlUQ1RMX01H
TVRfU0VNQV9GUkVFKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZHByaW50ayhLRVJOX0lO
Rk8gImZvcmNlZGV0aDogbnZfbWdtdF9hY3F1aXJlX3NlbWE6IGFjcXVpcmVkIHNlbWFcbiIpOwor
CQkJcmV0dXJuIDE7CisJCX0gZWxzZQorCQkJdWRlbGF5KDUwKTsKKwl9CisKKyAgICAgICAgZHBy
aW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogbnZfbWdtdF9hY3F1aXJlX3NlbWE6IGV4aXRcbiIp
OworCXJldHVybiAwOworfQorCisvKiBJbmRpY2F0ZSB0byBtZ210IHVuaXQgd2hldGhlciBkcml2
ZXIgaXMgbG9hZGVkIG9yIG5vdCAqLworc3RhdGljIHZvaWQgbnZfbWdtdF9kcml2ZXJfbG9hZGVk
KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsb2FkZWQpCit7CisJdTggX19pb21lbSAqYmFz
ZSA9IGdldF9od2Jhc2UoZGV2KTsKKwl1MzIgdHhfY3RybDsKKworCXR4X2N0cmwgPSByZWFkbChi
YXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOworCWlmIChsb2FkZWQpCisJCXR4X2N0cmwg
fD0gTlZSRUdfWE1JVENUTF9IT1NUX0xPQURFRDsKKwllbHNlCisJCXR4X2N0cmwgJj0gfk5WUkVH
X1hNSVRDVExfSE9TVF9MT0FERUQ7CisJd3JpdGVsKHR4X2N0cmwsIGJhc2UgKyBOdlJlZ1RyYW5z
bWl0dGVyQ29udHJvbCk7Cit9CisKIHN0YXRpYyBpbnQgbnZfb3BlbihzdHJ1Y3QgbmV0X2Rldmlj
ZSAqZGV2KQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3Ry
dWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBn
ZXRfaHdiYXNlKGRldik7CiAJaW50IHJldCA9IDE7CiAJaW50IG9vbSwgaTsKIAogCWRwcmludGso
S0VSTl9ERUJVRyAibnZfb3BlbjogYmVnaW5cbiIpOwogCi0JLyogMSkgZXJhc2UgcHJldmlvdXMg
bWlzY29uZmlndXJhdGlvbiAqLworCS8qIGVyYXNlIHByZXZpb3VzIG1pc2NvbmZpZ3VyYXRpb24g
Ki8KIAlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19QT1dFUl9DTlRSTCkKIAkJbnZfbWFj
X3Jlc2V0KGRldik7Ci0JLyogNC4xLTE6IHN0b3AgYWRhcHRlcjogaWdub3JlZCwgNC4zIHNlZW1z
IHRvIGJlIG92ZXJraWxsICovCisJLyogc3RvcCBhZGFwdGVyOiBpZ25vcmVkLCA0LjMgc2VlbXMg
dG8gYmUgb3ZlcmtpbGwgKi8KIAl3cml0ZWwoTlZSRUdfTUNBU1RBRERSQV9GT1JDRSwgYmFzZSAr
IE52UmVnTXVsdGljYXN0QWRkckEpOwogCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNdWx0aWNhc3RB
ZGRyQik7CiAJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ011bHRpY2FzdE1hc2tBKTsKIAl3cml0ZWwo
MCwgYmFzZSArIE52UmVnTXVsdGljYXN0TWFza0IpOwogCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdQ
YWNrZXRGaWx0ZXJGbGFncyk7CiAKLQl3cml0ZWwoMCwgYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJD
b250cm9sKTsKLQl3cml0ZWwoMCwgYmFzZSArIE52UmVnUmVjZWl2ZXJDb250cm9sKTsKKwludl9z
dG9wX3R4KGRldik7CisJbnZfc3RvcF9yeChkZXYpOwogCiAJd3JpdGVsKDAsIGJhc2UgKyBOdlJl
Z0FkYXB0ZXJDb250cm9sKTsKIAogCWlmIChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1F
X1RYX0NBUEFCTEUpCiAJCXdyaXRlbChOVlJFR19UWF9QQVVTRUZSQU1FX0RJU0FCTEUsICBiYXNl
ICsgTnZSZWdUeFBhdXNlRnJhbWUpOwogCi0JLyogMikgaW5pdGlhbGl6ZSBkZXNjcmlwdG9yIHJp
bmdzICovCisJLyogaW5pdGlhbGl6ZSBkZXNjcmlwdG9yIHJpbmdzICovCiAJc2V0X2J1ZnNpemUo
ZGV2KTsKIAlvb20gPSBudl9pbml0X3JpbmcoZGV2KTsKIAotCXdyaXRlbCgwLCBiYXNlICsgTnZS
ZWdMaW5rU3BlZWQpOwotCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdVbmtub3duVHJhbnNtaXR0ZXJS
ZWcpOwogCW52X3R4cnhfcmVzZXQoZGV2KTsKIAl3cml0ZWwoMCwgYmFzZSArIE52UmVnVW5rbm93
blNldHVwUmVnNik7CiAKIAlucC0+aW5fc2h1dGRvd24gPSAwOwogCi0JLyogMykgc2V0IG1hYyBh
ZGRyZXNzICovCi0JbnZfY29weV9tYWNfdG9faHcoZGV2KTsKLQotCS8qIDQpIGdpdmUgaHcgcmlu
Z3MgKi8KKwkvKiBnaXZlIGh3IHJpbmdzICovCiAJc2V0dXBfaHdfcmluZ3MoZGV2LCBOVl9TRVRV
UF9SWF9SSU5HIHwgTlZfU0VUVVBfVFhfUklORyk7CiAJd3JpdGVsKCAoKG5wLT5yeF9yaW5nX3Np
emUtMSkgPDwgTlZSRUdfUklOR1NaX1JYU0hJRlQpICsgKChucC0+dHhfcmluZ19zaXplLTEpIDw8
IE5WUkVHX1JJTkdTWl9UWFNISUZUKSwKIAkJYmFzZSArIE52UmVnUmluZ1NpemVzKTsKIAotCS8q
IDUpIGNvbnRpbnVlIHNldHVwICovCisJLyogY29udGludWUgc2V0dXAgKi8KIAl3cml0ZWwobnAt
PmxpbmtzcGVlZCwgYmFzZSArIE52UmVnTGlua1NwZWVkKTsKIAlpZiAobnAtPmRlc2NfdmVyID09
IERFU0NfVkVSXzEpCiAJCXdyaXRlbChOVlJFR19UWF9XTV9ERVNDMV9ERUZBVUxULCBiYXNlICsg
TnZSZWdUeFdhdGVybWFyayk7CkBAIC0zOTQ2LDExICs0ODczLDExIEBACiAJCQlOVl9TRVRVUDVf
REVMQVksIE5WX1NFVFVQNV9ERUxBWU1BWCwKIAkJCUtFUk5fSU5GTyAib3BlbjogU2V0dXBSZWc1
LCBCaXQgMzEgcmVtYWluZWQgb2ZmXG4iKTsKIAotCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdVbmtu
b3duU2V0dXBSZWc0KTsKKwl3cml0ZWwoMCwgYmFzZSArIE52UmVnTUlJTWFzayk7CiAJd3JpdGVs
KE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKIAl3cml0ZWwoTlZS
RUdfTUlJU1RBVF9NQVNLMiwgYmFzZSArIE52UmVnTUlJU3RhdHVzKTsKIAotCS8qIDYpIGNvbnRp
bnVlIHNldHVwICovCisJLyogY29udGludWUgc2V0dXAgKi8KIAl3cml0ZWwoTlZSRUdfTUlTQzFf
Rk9SQ0UgfCBOVlJFR19NSVNDMV9IRCwgYmFzZSArIE52UmVnTWlzYzEpOwogCXdyaXRlbChyZWFk
bChiYXNlICsgTnZSZWdUcmFuc21pdHRlclN0YXR1cyksIGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVy
U3RhdHVzKTsKIAl3cml0ZWwoTlZSRUdfUEZGX0FMV0FZUywgYmFzZSArIE52UmVnUGFja2V0Rmls
dGVyRmxhZ3MpOwpAQCAtMzk3Myw3ICs0OTAwLDcgQEAKIAl3cml0ZWwoKG5wLT5waHlhZGRyIDw8
IE5WUkVHX0FEQVBUQ1RMX1BIWVNISUZUKXxOVlJFR19BREFQVENUTF9QSFlWQUxJRHxOVlJFR19B
REFQVENUTF9SVU5OSU5HLAogCQkJYmFzZSArIE52UmVnQWRhcHRlckNvbnRyb2wpOwogCXdyaXRl
bChOVlJFR19NSUlTUEVFRF9CSVQ4fE5WUkVHX01JSURFTEFZLCBiYXNlICsgTnZSZWdNSUlTcGVl
ZCk7Ci0Jd3JpdGVsKE5WUkVHX1VOS1NFVFVQNF9WQUwsIGJhc2UgKyBOdlJlZ1Vua25vd25TZXR1
cFJlZzQpOworCXdyaXRlbChOVlJFR19NSUlfTElOS0NIQU5HRSwgYmFzZSArIE52UmVnTUlJTWFz
ayk7CiAJaWYgKG5wLT53b2xlbmFibGVkKQogCQl3cml0ZWwoTlZSRUdfV0FLRVVQRkxBR1NfRU5B
QkxFICwgYmFzZSArIE52UmVnV2FrZVVwRmxhZ3MpOwogCkBAIC00MDIzLDE1ICs0OTUwLDE0IEBA
CiAJaWYgKHJldCkgewogCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJfSBlbHNlIHsKLQkJcHJp
bnRrKCIlczogbm8gbGluayBkdXJpbmcgaW5pdGlhbGl6YXRpb24uXG4iLCBkZXYtPm5hbWUpOwor
CQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBubyBsaW5rIGR1cmluZyBpbml0aWFsaXphdGlvbi5c
biIsIGRldi0+bmFtZSk7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJfQogCWlmIChvb20p
CiAJCW1vZF90aW1lcigmbnAtPm9vbV9raWNrLCBqaWZmaWVzICsgT09NX1JFRklMTCk7CiAKIAkv
KiBzdGFydCBzdGF0aXN0aWNzIHRpbWVyICovCi0JaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9I
QVNfU1RBVElTVElDUykKLQkJbW9kX3RpbWVyKCZucC0+c3RhdHNfcG9sbCwgamlmZmllcyArIFNU
QVRTX0lOVEVSVkFMKTsKKwltb2RfdGltZXIoJm5wLT5zdGF0c19wb2xsLCBqaWZmaWVzICsgU1RB
VFNfSU5URVJWQUwpOwogCiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAKQEAgLTQwNDMs
MTIgKzQ5NjksMTQgQEAKIAogc3RhdGljIGludCBudl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAq
ZGV2KQogewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0
IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2U7CiAKKwlk
cHJpbnRrKEtFUk5fREVCVUcgIm52X2Nsb3NlOiBiZWdpblxuIik7CiAJc3Bpbl9sb2NrX2lycSgm
bnAtPmxvY2spOwogCW5wLT5pbl9zaHV0ZG93biA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+
bG9jayk7CisKIAlzeW5jaHJvbml6ZV9pcnEoZGV2LT5pcnEpOwogCiAJZGVsX3RpbWVyX3N5bmMo
Jm5wLT5vb21fa2ljayk7CkBAIC00MDc2LDEyICs1MDA0LDYgQEAKIAlpZiAobnAtPndvbGVuYWJs
ZWQpCiAJCW52X3N0YXJ0X3J4KGRldik7CiAKLQkvKiBzcGVjaWFsIG9wOiB3cml0ZSBiYWNrIHRo
ZSBtaXNvcmRlcmVkIE1BQyBhZGRyZXNzIC0gb3RoZXJ3aXNlCi0JICogdGhlIG5leHQgbnZfcHJv
YmUgd291bGQgc2VlIGEgd3JvbmcgYWRkcmVzcy4KLQkgKi8KLQl3cml0ZWwobnAtPm9yaWdfbWFj
WzBdLCBiYXNlICsgTnZSZWdNYWNBZGRyQSk7Ci0Jd3JpdGVsKG5wLT5vcmlnX21hY1sxXSwgYmFz
ZSArIE52UmVnTWFjQWRkckIpOwotCiAJLyogRklYTUU6IHBvd2VyIGRvd24gbmljICovCiAKIAly
ZXR1cm4gMDsKQEAgLTQwOTQsMTQgKzUwMTYsMTkgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJ
dTggX19pb21lbSAqYmFzZTsKIAlpbnQgZXJyLCBpOwotCXUzMiBwb3dlcnN0YXRlOworCXUzMiBw
b3dlcnN0YXRlLCBwaHlzdGF0ZV9vcmlnID0gMCwgcGh5c3RhdGUsIHR4cmVnOworCWludCBwaHlp
bml0aWFsaXplZCA9IDA7CiAKKwkvL05WTEFOX0RJU0FCTEVfQUxMX0ZFQVRVUkVTIDsKKyAgICAg
ICAJLyogbW9kaWZ5IG5ldHdvcmsgZGV2aWNlIGNsYXNzIGlkICovCQorCXF1aXJrX25mb3JjZV9u
ZXR3b3JrX2NsYXNzKHBjaV9kZXYpOwogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1
Y3QgZmVfcHJpdikpOwogCWVyciA9IC1FTk9NRU07CiAJaWYgKCFkZXYpCiAJCWdvdG8gb3V0Owog
Ci0JbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6bnZfcHJv
YmU6IGJlZ2luXG4iLGRldi0+bmFtZSk7CisJbnAgPSBnZXRfbnZwcml2KGRldik7CiAJbnAtPnBj
aV9kZXYgPSBwY2lfZGV2OwogCXNwaW5fbG9ja19pbml0KCZucC0+bG9jayk7CiAJU0VUX01PRFVM
RV9PV05FUihkZXYpOwpAQCAtNDE4OCwyMSArNTExNSwzOSBAQAogCW5wLT5wa3RfbGltaXQgPSBO
Vl9QS1RMSU1JVF8xOwogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0xBUkdFREVTQykK
IAkJbnAtPnBrdF9saW1pdCA9IE5WX1BLVExJTUlUXzI7CisJaWYgKG10dSA+IG5wLT5wa3RfbGlt
aXQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiBNVFUgdmFsdWUgb2YgJWQgaXMg
dG9vIGxhcmdlLiBTZXR0aW5nIHRvIG1heGltdW0gdmFsdWUgb2YgJWRcbiIsCisJCSAgICAgICBt
dHUsIG5wLT5wa3RfbGltaXQpOworCQlkZXYtPm10dSA9IG5wLT5wa3RfbGltaXQ7CisJfSBlbHNl
IHsKKwkJZGV2LT5tdHUgPSBtdHU7CisJfQogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9I
QVNfQ0hFQ0tTVU0pIHsKLQkJbnAtPnR4cnhjdGxfYml0cyB8PSBOVlJFR19UWFJYQ1RMX1JYQ0hF
Q0s7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9TRzsKKwkJ
aWYgKHJ4X2NoZWNrc3VtX29mZmxvYWQpIHsKKwkJCW5wLT5yeF9jc3VtID0gMTsKKwkJCW5wLT50
eHJ4Y3RsX2JpdHMgfD0gTlZSRUdfVFhSWENUTF9SWENIRUNLOworCQl9CisKKwkJaWYgKHR4X2No
ZWNrc3VtX29mZmxvYWQpCQorCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CisK
KwkJaWYgKHNjYXR0ZXJfZ2F0aGVyKQorCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwog
I2lmZGVmIE5FVElGX0ZfVFNPCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJCWlm
ICh0c29fb2ZmbG9hZCkKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAjZW5kaWYK
ICAJfQogCiAJbnAtPnZsYW5jdGxfYml0cyA9IDA7Ci0JaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERF
Vl9IQVNfVkxBTikgewotCQlucC0+dmxhbmN0bF9iaXRzID0gTlZSRUdfVkxBTkNPTlRST0xfRU5B
QkxFOwotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdf
VkxBTl9UWDsKLQkJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gbnZfdmxhbl9yeF9yZWdpc3RlcjsK
LQkJZGV2LT52bGFuX3J4X2tpbGxfdmlkID0gbnZfdmxhbl9yeF9raWxsX3ZpZDsKKwlpZiAoaWQt
PmRyaXZlcl9kYXRhICYgREVWX0hBU19WTEFOICYmIHRhZ2dpbmdfODAyMXBxKSB7CisJCQlucC0+
dmxhbmN0bF9iaXRzID0gTlZSRUdfVkxBTkNPTlRST0xfRU5BQkxFOworCQkJZGV2LT5mZWF0dXJl
cyB8PSBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fVFg7CisJCQlkZXYtPnZs
YW5fcnhfcmVnaXN0ZXIgPSBudl92bGFuX3J4X3JlZ2lzdGVyOworCQkJZGV2LT52bGFuX3J4X2tp
bGxfdmlkID0gbnZfdmxhbl9yeF9raWxsX3ZpZDsKKwkJLyogdmxhbiBuZWVkcyByeCBjaGVja3N1
bSBzdXBwb3J0LCBzbyBmb3JjZSBpdCAqLworCQlucC0+dHhyeGN0bF9iaXRzIHw9IE5WUkVHX1RY
UlhDVExfUlhDSEVDSzsKIAl9CiAKIAlucC0+bXNpX2ZsYWdzID0gMDsKQEAgLTQyMTIsMTIgKzUx
NTcsMjEgQEAKIAlpZiAoKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTVNJX1gpICYmIG1zaXgp
IHsKIAkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfWF9DQVBBQkxFOwogCX0KLQotCW5wLT5wYXVz
ZV9mbGFncyA9IE5WX1BBVVNFRlJBTUVfUlhfQ0FQQUJMRSB8IE5WX1BBVVNFRlJBTUVfUlhfUkVR
IHwgTlZfUEFVU0VGUkFNRV9BVVRPTkVHOworCQorCW5wLT5wYXVzZV9mbGFncyA9IE5WX1BBVVNF
RlJBTUVfUlhfQ0FQQUJMRTsKKwlpZiAocnhfZmxvd19jb250cm9sID09IE5WX1JYX0ZMT1dfQ09O
VFJPTF9FTkFCTEVEKQorCQlucC0+cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9SWF9SRVE7
CiAJaWYgKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfUEFVU0VGUkFNRV9UWCkgewotCQlucC0+
cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9UWF9DQVBBQkxFIHwgTlZfUEFVU0VGUkFNRV9U
WF9SRVE7CisJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1RYX0NBUEFCTEU7CisJ
CWlmICh0eF9mbG93X2NvbnRyb2wgPT0gTlZfVFhfRkxPV19DT05UUk9MX0VOQUJMRUQpCisJCQlu
cC0+cGF1c2VfZmxhZ3MgfD0gTlZfUEFVU0VGUkFNRV9UWF9SRVE7CisJfQorCWlmIChhdXRvbmVn
ID09IEFVVE9ORUdfRU5BQkxFKSB7CisJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1F
X0FVVE9ORUc7CisJfSBlbHNlIGlmIChzcGVlZF9kdXBsZXggPT0gTlZfU1BFRURfRFVQTEVYXzEw
MDBfRlVMTF9EVVBMRVgpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiBzcGVlZF9k
dXBsZXggb2YgMTAwMCBmdWxsIGNhbiBub3QgZW5hYmxlZCBpZiBhdXRvbmVnIGlzIGRpc2FibGVk
XG4iKTsKKwkJZ290byBvdXRfcmVscmVnOwogCX0KLQogCiAJZXJyID0gLUVOT01FTTsKIAlucC0+
YmFzZSA9IGlvcmVtYXAoYWRkciwgbnAtPnJlZ2lzdGVyX3NpemUpOwpAQCAtNDIyNywxMCArNTE4
MSwzMyBAQAogCiAJZGV2LT5pcnEgPSBwY2lfZGV2LT5pcnE7CiAKLQlucC0+cnhfcmluZ19zaXpl
ID0gUlhfUklOR19ERUZBVUxUOwotCW5wLT50eF9yaW5nX3NpemUgPSBUWF9SSU5HX0RFRkFVTFQ7
Ci0JbnAtPnR4X2xpbWl0X3N0b3AgPSBucC0+dHhfcmluZ19zaXplIC0gVFhfTElNSVRfRElGRkVS
RU5DRTsKLQlucC0+dHhfbGltaXRfc3RhcnQgPSBucC0+dHhfcmluZ19zaXplIC0gVFhfTElNSVRf
RElGRkVSRU5DRSAtIDE7CisJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xKSB7CisJCWlm
IChyeF9yaW5nX3NpemUgPiBSSU5HX01BWF9ERVNDX1ZFUl8xKSB7CisJCQlwcmludGsoS0VSTl9J
TkZPICJmb3JjZWRldGg6IHJ4X3Jpbmdfc2l6ZSBvZiAlZCBpcyB0b28gbGFyZ2UuIFNldHRpbmcg
dG8gbWF4aW11bSBvZiAlZFxuIiwKKwkJCSAgICAgICByeF9yaW5nX3NpemUsIFJJTkdfTUFYX0RF
U0NfVkVSXzEpOworCQkJcnhfcmluZ19zaXplID0gUklOR19NQVhfREVTQ19WRVJfMTsKKwkJfQor
CQlpZiAodHhfcmluZ19zaXplID4gUklOR19NQVhfREVTQ19WRVJfMSkgeworCQkJcHJpbnRrKEtF
Uk5fSU5GTyAiZm9yY2VkZXRoOiB0eF9yaW5nX3NpemUgb2YgJWQgaXMgdG9vIGxhcmdlLiBTZXR0
aW5nIHRvIG1heGltdW0gb2YgJWRcbiIsCisJCQkgICAgICAgdHhfcmluZ19zaXplLCBSSU5HX01B
WF9ERVNDX1ZFUl8xKTsKKwkJCXR4X3Jpbmdfc2l6ZSA9IFJJTkdfTUFYX0RFU0NfVkVSXzE7CisJ
CX0KKwl9IGVsc2UgeworCQlpZiAocnhfcmluZ19zaXplID4gUklOR19NQVhfREVTQ19WRVJfMl8z
KSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJ4X3Jpbmdfc2l6ZSBvZiAlZCBp
cyB0b28gbGFyZ2UuIFNldHRpbmcgdG8gbWF4aW11bSBvZiAlZFxuIiwKKwkJCSAgICAgICByeF9y
aW5nX3NpemUsIFJJTkdfTUFYX0RFU0NfVkVSXzJfMyk7CisJCQlyeF9yaW5nX3NpemUgPSBSSU5H
X01BWF9ERVNDX1ZFUl8yXzM7CisJCX0KKwkJaWYgKHR4X3Jpbmdfc2l6ZSA+IFJJTkdfTUFYX0RF
U0NfVkVSXzJfMykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiB0eF9yaW5nX3Np
emUgb2YgJWQgaXMgdG9vIGxhcmdlLiBTZXR0aW5nIHRvIG1heGltdW0gb2YgJWRcbiIsCisJCQkg
ICAgICAgdHhfcmluZ19zaXplLCBSSU5HX01BWF9ERVNDX1ZFUl8yXzMpOworCQkJdHhfcmluZ19z
aXplID0gUklOR19NQVhfREVTQ19WRVJfMl8zOworCQl9CisJfQorCW5wLT5yeF9yaW5nX3NpemUg
PSByeF9yaW5nX3NpemU7CisJbnAtPnR4X3Jpbmdfc2l6ZSA9IHR4X3Jpbmdfc2l6ZTsKKwlucC0+
dHhfbGltaXRfc3RvcCA9IHR4X3Jpbmdfc2l6ZSAtIFRYX0xJTUlUX0RJRkZFUkVOQ0U7CisJbnAt
PnR4X2xpbWl0X3N0YXJ0ID0gdHhfcmluZ19zaXplIC0gVFhfTElNSVRfRElGRkVSRU5DRSAtIDE7
CiAKIAlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERF
U0NfVkVSXzIpIHsKIAkJbnAtPnJ4X3Jpbmcub3JpZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBj
aV9kZXYsCkBAIC00MjQ3LDI5ICs1MjI0LDI4IEBACiAJCQlnb3RvIG91dF91bm1hcDsKIAkJbnAt
PnR4X3JpbmcuZXggPSAmbnAtPnJ4X3JpbmcuZXhbbnAtPnJ4X3Jpbmdfc2l6ZV07CiAJfQotCW5w
LT5yeF9za2J1ZmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiopICogbnAtPnJ4X3Jp
bmdfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JbnAtPnJ4X2RtYSA9IGttYWxsb2Moc2l6ZW9mKGRtYV9h
ZGRyX3QpICogbnAtPnJ4X3Jpbmdfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JbnAtPnR4X3NrYnVmZiA9
IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBza19idWZmKikgKiBucC0+dHhfcmluZ19zaXplLCBHRlBf
S0VSTkVMKTsKLQlucC0+dHhfZG1hID0ga21hbGxvYyhzaXplb2YoZG1hX2FkZHJfdCkgKiBucC0+
dHhfcmluZ19zaXplLCBHRlBfS0VSTkVMKTsKLQlucC0+dHhfZG1hX2xlbiA9IGttYWxsb2Moc2l6
ZW9mKHVuc2lnbmVkIGludCkgKiBucC0+dHhfcmluZ19zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAo
IW5wLT5yeF9za2J1ZmYgfHwgIW5wLT5yeF9kbWEgfHwgIW5wLT50eF9za2J1ZmYgfHwgIW5wLT50
eF9kbWEgfHwgIW5wLT50eF9kbWFfbGVuKQorCW5wLT5yeF9za2IgPSBrbWFsbG9jKHNpemVvZihz
dHJ1Y3QgbnZfc2tiX21hcCkgKiBucC0+cnhfcmluZ19zaXplLCBHRlBfS0VSTkVMKTsKKwlucC0+
dHhfc2tiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG52X3NrYl9tYXApICogbnAtPnR4X3Jpbmdf
c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFucC0+cnhfc2tiIHx8ICFucC0+dHhfc2tiKQogCQln
b3RvIG91dF9mcmVlcmluZzsKLQltZW1zZXQobnAtPnJ4X3NrYnVmZiwgMCwgc2l6ZW9mKHN0cnVj
dCBza19idWZmKikgKiBucC0+cnhfcmluZ19zaXplKTsKLQltZW1zZXQobnAtPnJ4X2RtYSwgMCwg
c2l6ZW9mKGRtYV9hZGRyX3QpICogbnAtPnJ4X3Jpbmdfc2l6ZSk7Ci0JbWVtc2V0KG5wLT50eF9z
a2J1ZmYsIDAsIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiopICogbnAtPnR4X3Jpbmdfc2l6ZSk7Ci0J
bWVtc2V0KG5wLT50eF9kbWEsIDAsIHNpemVvZihkbWFfYWRkcl90KSAqIG5wLT50eF9yaW5nX3Np
emUpOwotCW1lbXNldChucC0+dHhfZG1hX2xlbiwgMCwgc2l6ZW9mKHVuc2lnbmVkIGludCkgKiBu
cC0+dHhfcmluZ19zaXplKTsKKwltZW1zZXQobnAtPnJ4X3NrYiwgMCwgc2l6ZW9mKHN0cnVjdCBu
dl9za2JfbWFwKSAqIG5wLT5yeF9yaW5nX3NpemUpOworCW1lbXNldChucC0+dHhfc2tiLCAwLCBz
aXplb2Yoc3RydWN0IG52X3NrYl9tYXApICogbnAtPnR4X3Jpbmdfc2l6ZSk7CiAKIAlkZXYtPm9w
ZW4gPSBudl9vcGVuOwogCWRldi0+c3RvcCA9IG52X2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94
bWl0ID0gbnZfc3RhcnRfeG1pdDsKKwlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwg
bnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCisJCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbnZf
c3RhcnRfeG1pdDsKKwllbHNlCisJCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbnZfc3RhcnRfeG1p
dF9vcHRpbWl6ZWQ7CiAJZGV2LT5nZXRfc3RhdHMgPSBudl9nZXRfc3RhdHM7CiAJZGV2LT5jaGFu
Z2VfbXR1ID0gbnZfY2hhbmdlX210dTsKIAlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IG52X3NldF9t
YWNfYWRkcmVzczsKIAlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG52X3NldF9tdWx0aWNhc3Q7
CisKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCWRldi0+cG9sbF9jb250cm9s
bGVyID0gbnZfcG9sbF9jb250cm9sbGVyOwogI2VuZGlmCisKIAlTRVRfRVRIVE9PTF9PUFMoZGV2
LCAmb3BzKTsKIAlkZXYtPnR4X3RpbWVvdXQgPSBudl90eF90aW1lb3V0OwogCWRldi0+d2F0Y2hk
b2dfdGltZW8gPSBOVl9XQVRDSERPR19USU1FTzsKQEAgLTQyODEsMTIgKzUyNTcsMjkgQEAKIAlu
cC0+b3JpZ19tYWNbMF0gPSByZWFkbChiYXNlICsgTnZSZWdNYWNBZGRyQSk7CiAJbnAtPm9yaWdf
bWFjWzFdID0gcmVhZGwoYmFzZSArIE52UmVnTWFjQWRkckIpOwogCisJLyogY2hlY2sgdGhlIHdv
cmthcm91bmQgYml0IGZvciBjb3JyZWN0IG1hYyBhZGRyZXNzIG9yZGVyICovCisJdHhyZWcgPSBy
ZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdFBvbGwpOworCWlmICh0eHJlZyAmIE5WUkVHX1RSQU5T
TUlUUE9MTF9NQUNfQUREUl9SRVYpIHsKKwkJLyogbWFjIGFkZHJlc3MgaXMgYWxyZWFkeSBpbiBj
b3JyZWN0IG9yZGVyICovCisJCWRldi0+ZGV2X2FkZHJbMF0gPSAobnAtPm9yaWdfbWFjWzBdID4+
ICAwKSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbMV0gPSAobnAtPm9yaWdfbWFjWzBdID4+ICA4
KSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbMl0gPSAobnAtPm9yaWdfbWFjWzBdID4+IDE2KSAm
IDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbM10gPSAobnAtPm9yaWdfbWFjWzBdID4+IDI0KSAmIDB4
ZmY7CisJCWRldi0+ZGV2X2FkZHJbNF0gPSAobnAtPm9yaWdfbWFjWzFdID4+ICAwKSAmIDB4ZmY7
CisJCWRldi0+ZGV2X2FkZHJbNV0gPSAobnAtPm9yaWdfbWFjWzFdID4+ICA4KSAmIDB4ZmY7CisJ
fSBlbHNlIHsKIAlkZXYtPmRldl9hZGRyWzBdID0gKG5wLT5vcmlnX21hY1sxXSA+PiAgOCkgJiAw
eGZmOwogCWRldi0+ZGV2X2FkZHJbMV0gPSAobnAtPm9yaWdfbWFjWzFdID4+ICAwKSAmIDB4ZmY7
CiAJZGV2LT5kZXZfYWRkclsyXSA9IChucC0+b3JpZ19tYWNbMF0gPj4gMjQpICYgMHhmZjsKIAlk
ZXYtPmRldl9hZGRyWzNdID0gKG5wLT5vcmlnX21hY1swXSA+PiAxNikgJiAweGZmOwogCWRldi0+
ZGV2X2FkZHJbNF0gPSAobnAtPm9yaWdfbWFjWzBdID4+ICA4KSAmIDB4ZmY7CiAJZGV2LT5kZXZf
YWRkcls1XSA9IChucC0+b3JpZ19tYWNbMF0gPj4gIDApICYgMHhmZjsKKwkJLyogc2V0IHBlcm1h
bmVudCBhZGRyZXNzIHRvIGJlIGNvcnJlY3QgYXN3ZWxsICovCisJCW5wLT5vcmlnX21hY1swXSA9
IChkZXYtPmRldl9hZGRyWzBdIDw8IDApICsgKGRldi0+ZGV2X2FkZHJbMV0gPDwgOCkgKworCQkJ
KGRldi0+ZGV2X2FkZHJbMl0gPDwgMTYpICsgKGRldi0+ZGV2X2FkZHJbM10gPDwgMjQpOworCQlu
cC0+b3JpZ19tYWNbMV0gPSAoZGV2LT5kZXZfYWRkcls0XSA8PCAwKSArIChkZXYtPmRldl9hZGRy
WzVdIDw8IDgpOworCQl3cml0ZWwodHhyZWd8TlZSRUdfVFJBTlNNSVRQT0xMX01BQ19BRERSX1JF
ViwgYmFzZSArIE52UmVnVHJhbnNtaXRQb2xsKTsKKwl9CiAJbWVtY3B5KGRldi0+cGVybV9hZGRy
LCBkZXYtPmRldl9hZGRyLCBkZXYtPmFkZHJfbGVuKTsKIAogCWlmICghaXNfdmFsaWRfZXRoZXJf
YWRkcihkZXYtPnBlcm1fYWRkcikpIHsKQEAgLTQzMDgsMTAgKzUzMDEsMTIgQEAKIAlkcHJpbnRr
KEtFUk5fREVCVUcgIiVzOiBNQUMgQWRkcmVzcyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAy
eFxuIiwgcGNpX25hbWUocGNpX2RldiksCiAJCQlkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9h
ZGRyWzFdLCBkZXYtPmRldl9hZGRyWzJdLAogCQkJZGV2LT5kZXZfYWRkclszXSwgZGV2LT5kZXZf
YWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSk7CisJLyogc2V0IG1hYyBhZGRyZXNzICovCisJbnZf
Y29weV9tYWNfdG9faHcoZGV2KTsKIAogCS8qIGRpc2FibGUgV09MICovCiAJd3JpdGVsKDAsIGJh
c2UgKyBOdlJlZ1dha2VVcEZsYWdzKTsKLQlucC0+d29sZW5hYmxlZCA9IDA7CisJbnAtPndvbGVu
YWJsZWQgPSB3b2w7CiAKIAlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19QT1dFUl9DTlRS
TCkgewogCQl1OCByZXZpc2lvbl9pZDsKQEAgLTQzNTMsNiArNTM0OCw1OSBAQAogCQlucC0+bmVl
ZF9saW5rdGltZXIgPSAwOwogCX0KIAorCS8qIGNsZWFyIHBoeSBzdGF0ZSBhbmQgdGVtcG9yYXJp
bHkgaGFsdCBwaHkgaW50ZXJydXB0cyAqLworCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNSUlNYXNr
KTsKKwlwaHlzdGF0ZSA9IHJlYWRsKGJhc2UgKyBOdlJlZ0FkYXB0ZXJDb250cm9sKTsKKwlpZiAo
cGh5c3RhdGUgJiBOVlJFR19BREFQVENUTF9SVU5OSU5HKSB7CisJCXBoeXN0YXRlX29yaWcgPSAx
OworCQlwaHlzdGF0ZSAmPSB+TlZSRUdfQURBUFRDVExfUlVOTklORzsKKwkJd3JpdGVsKHBoeXN0
YXRlLCBiYXNlICsgTnZSZWdBZGFwdGVyQ29udHJvbCk7CisJfQorCXdyaXRlbChOVlJFR19NSUlT
VEFUX01BU0ssIGJhc2UgKyBOdlJlZ01JSVN0YXR1cyk7CisKKwlpZiAoaWQtPmRyaXZlcl9kYXRh
ICYgREVWX0hBU19NR01UX1VOSVQpIHsKKwkJd3JpdGVsKE5WX1VOS05PV05fVkFMLCBiYXNlICsg
TnZSZWdQYXR0ZXJuQ1JDKTsKKwkgICAgICAgCXBjaV9wdXNoKGJhc2UpOworCQludl9tc2xlZXAo
NTAwKTsKKwkJLyogbWFuYWdlbWVudCB1bml0IHJ1bm5pbmcgb24gdGhlIG1hYz8gKi8KKwkJbnAt
Pm1hY19pbl91c2UgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZS
RUdfWE1JVENUTF9NR01UX1NUOworCQlpZiAobnAtPm1hY19pbl91c2UpIHsKKwkJCXUzMiBtZ210
X3N5bmM7CisJCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcm9iZTogbWFjIGluIHVzZVxuIixk
ZXYtPm5hbWUpOworCQkJLyogbWFuYWdlbWVudCB1bml0IHNldHVwIHRoZSBwaHkgYWxyZWFkeT8g
Ki8KKwkJCW1nbXRfc3luYyA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkg
JiBOVlJFR19YTUlUQ1RMX1NZTkNfTUFTSzsKKwkJCWlmIChtZ210X3N5bmMgPT0gTlZSRUdfWE1J
VENUTF9TWU5DX05PVF9SRUFEWSkgeworCQkJCWRwcmludGsoS0VSTl9ERUJVRyIlcyA6IHByb2Jl
OiBzeW5jIG5vdCByZWFkeVxuIixkZXYtPm5hbWUpOworCQkJCWlmICghbnZfbWdtdF9hY3F1aXJl
X3NlbWEoZGV2KSkgeworCQkJCQlkcHJpbnRrKEtFUk5fREVCVUciJXM6IHByb2JlOiBjb3VsZCBu
b3QgYWNxdWlyZSBzZW1hXG4iLGRldi0+bmFtZSk7CisJCQkJCWZvciAoaSA9IDA7IGkgPCA1MDAw
OyBpKyspIHsKKwkJCQkJCW52X21zbGVlcCgxKTsKKwkJCQkJCW1nbXRfc3luYyA9IHJlYWRsKGJh
c2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX1NZTkNfTUFTSzsK
KwkJCQkJCWlmIChtZ210X3N5bmMgPT0gTlZSRUdfWE1JVENUTF9TWU5DX05PVF9SRUFEWSkKKwkJ
CQkJCQljb250aW51ZTsKKwkJCQkJCWlmIChtZ210X3N5bmMgPT0gTlZSRUdfWE1JVENUTF9TWU5D
X1BIWV9JTklUKSB7CisJCQkJCQkJZHByaW50ayhLRVJOX0RFQlVHIiVzOiBwcm9iZTogcGh5IGlu
aXRlZCBieSBTTVUgMVxuIixkZXYtPm5hbWUpOworCQkJCQkJCXBoeWluaXRpYWxpemVkID0gMTsK
KwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQkJZHByaW50ayhLRVJOX0RFQlVHIiVzOiBwcm9i
ZTogYnJlYWtpbmcgb3V0IG9mIGxvb3BcbiIsZGV2LT5uYW1lKTsKKwkJCQkJfQorCQkJCX0gZWxz
ZSB7CisJCQkJCS8qIHdlIG5lZWQgdG8gaW5pdCB0aGUgcGh5ICovCisJCQkJCWRwcmludGsoS0VS
Tl9ERUJVRyIlczogcHJvYmU6IHdlIG5lZWQgdG8gaW5pdCBwaHkgMVxuIixkZXYtPm5hbWUpOwor
CQkJCX0KKwkJCX0gZWxzZSBpZiAobWdtdF9zeW5jID09IE5WUkVHX1hNSVRDVExfU1lOQ19QSFlf
SU5JVCkgeworCQkJCWRwcmludGsoS0VSTl9ERUJVRyIlczogcHJvYmU6IHBoeSBpbml0ZWQgYnkg
U01VIDJcbiIsZGV2LT5uYW1lKTsKKwkJCQkvKiBwaHkgaXMgaW5pdGVkIGJ5IFNNVSAqLworCQkJ
CXBoeWluaXRpYWxpemVkID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJLyogd2UgbmVlZCB0byBpbml0
IHRoZSBwaHkgKi8KKwkJCQlkcHJpbnRrKEtFUk5fREVCVUciJXM6IHByb2JlOiB3ZSBuZWVkIHRv
IGluaXQgcGh5IDJcbiIsZGV2LT5uYW1lKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlkcHJpbnRrKEtF
Uk5fREVCVUciJXM6IHByb2JlOiBtYWMgbm90IGluIHVzZVxuIixkZXYtPm5hbWUpOworCX0KKwog
CS8qIGZpbmQgYSBzdWl0YWJsZSBwaHkgKi8KIAlmb3IgKGkgPSAxOyBpIDw9IDMyOyBpKyspIHsK
IAkJaW50IGlkMSwgaWQyOwpAQCAtNDM2OSw2ICs1NDE3LDcgQEAKIAkJaWYgKGlkMiA8IDAgfHwg
aWQyID09IDB4ZmZmZikKIAkJCWNvbnRpbnVlOwogCisJCW5wLT5waHlfbW9kZWwgPSBpZDIgJiBQ
SFlJRDJfTU9ERUxfTUFTSzsKIAkJaWQxID0gKGlkMSAmIFBIWUlEMV9PVUlfTUFTSykgPDwgUEhZ
SUQxX09VSV9TSEZUOwogCQlpZDIgPSAoaWQyICYgUEhZSUQyX09VSV9NQVNLKSA+PiBQSFlJRDJf
T1VJX1NIRlQ7CiAJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9wZW46IEZvdW5kIFBIWSAlMDR4
OiUwNHggYXQgYWRkcmVzcyAlZC5cbiIsCkBAIC00MzgyLDE0ICs1NDMxLDI1IEBACiAJCSAgICAg
ICBwY2lfbmFtZShwY2lfZGV2KSk7CiAJCWdvdG8gb3V0X2Vycm9yOwogCX0KLQorCQorCWlmICgh
cGh5aW5pdGlhbGl6ZWQpIHsJCQogCS8qIHJlc2V0IGl0ICovCiAJcGh5X2luaXQoZGV2KTsKKwl9
IGVsc2UgeworCQkvKiBzZWUgaWYgZ2lnYWJpdCBwaHkgKi8KKwkJdTMyIG1paV9zdGF0dXMgPSBt
aWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNU1IsIE1JSV9SRUFEKTsKKwkJaWYgKG1paV9z
dGF0dXMgJiBQSFlfR0lHQUJJVCkgeworCQkJbnAtPmdpZ2FiaXQgPSBQSFlfR0lHQUJJVDsKKwkJ
fQorCX0KKwlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NR01UX1VOSVQpIHsKKwkJbnZf
bWdtdF9kcml2ZXJfbG9hZGVkKGRldiwgMSk7CisJfQogCiAJLyogc2V0IGRlZmF1bHQgbGluayBz
cGVlZCBzZXR0aW5ncyAqLwogCW5wLT5saW5rc3BlZWQgPSBOVlJFR19MSU5LU1BFRURfRk9SQ0V8
TlZSRUdfTElOS1NQRUVEXzEwOwogCW5wLT5kdXBsZXggPSAwOwotCW5wLT5hdXRvbmVnID0gMTsK
KwlucC0+YXV0b25lZyA9IGF1dG9uZWc7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsK
IAlpZiAoZXJyKSB7CkBAIC00NDAzLDYgKzU0NjMsMTAgQEAKIAlyZXR1cm4gMDsKIAogb3V0X2Vy
cm9yOgorCWlmIChwaHlzdGF0ZV9vcmlnKQorCQl3cml0ZWwocGh5c3RhdGV8TlZSRUdfQURBUFRD
VExfUlVOTklORywgYmFzZSArIE52UmVnQWRhcHRlckNvbnRyb2wpOworCWlmIChucC0+bWFjX2lu
X3VzZSkKKwkJbnZfbWdtdF9kcml2ZXJfbG9hZGVkKGRldiwgMCk7CiAJcGNpX3NldF9kcnZkYXRh
KHBjaV9kZXYsIE5VTEwpOwogb3V0X2ZyZWVyaW5nOgogCWZyZWVfcmluZ3MoZGV2KTsKQEAgLTQ0
MjEsOCArNTQ4NSwxNyBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IG52X3JlbW92ZShzdHJ1Y3Qg
cGNpX2RldiAqcGNpX2RldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9k
cnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IGdldF9udnByaXYoZGV2KTsK
Kwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCiAJdW5yZWdpc3Rlcl9uZXRk
ZXYoZGV2KTsKKwkvKiBzcGVjaWFsIG9wOiB3cml0ZSBiYWNrIHRoZSBtaXNvcmRlcmVkIE1BQyBh
ZGRyZXNzIC0gb3RoZXJ3aXNlCisJICogdGhlIG5leHQgbnZfcHJvYmUgd291bGQgc2VlIGEgd3Jv
bmcgYWRkcmVzcy4KKwkgKi8KKwl3cml0ZWwobnAtPm9yaWdfbWFjWzBdLCBiYXNlICsgTnZSZWdN
YWNBZGRyQSk7CisJd3JpdGVsKG5wLT5vcmlnX21hY1sxXSwgYmFzZSArIE52UmVnTWFjQWRkckIp
OworCWlmIChucC0+bWFjX2luX3VzZSkKKwkJbnZfbWdtdF9kcml2ZXJfbG9hZGVkKGRldiwgMCk7
CiAKIAkvKiBmcmVlIGFsbCBzdHJ1Y3R1cmVzICovCiAJZnJlZV9yaW5ncyhkZXYpOwpAQCAtNDQ4
OCw0MyArNTU2MSw0MyBAQAogCX0sCiAJewkvKiBNQ1A1NSBFdGhlcm5ldCBDb250cm9sbGVyICov
CiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElB
X05WRU5FVF8xNCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVE
X0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElH
SF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dF
Ul9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNf
VEVTVF9FWFRFTkRFRCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05F
RURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19I
SUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BP
V0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hB
U19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklULAogCX0sCiAJewkvKiBNQ1A1NSBFdGhl
cm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBD
SV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVE
X1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NI
RUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNf
TVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19T
VEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05F
RURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNf
Q0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hB
U19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFT
X1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklULAogCX0s
CiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZF
TkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNiksCi0JCS5kcml2
ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJ
R0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1F
X1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUQsCisJCS5kcml2ZXJf
ZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hf
RE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RY
fERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VO
SVQsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklD
RShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE3KSwK
LQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERF
Vl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BB
VVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKKwkJ
LmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9I
QVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNF
RlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFT
X01HTVRfVU5JVCwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQ
Q0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVO
RVRfMTgpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5L
VElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERF
Vl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVO
REVELAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElN
RVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9I
QVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVE
fERFVl9IQVNfTUdNVF9VTklULAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVy
ICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJ
RElBX05WRU5FVF8xOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9O
RUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hB
U19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RF
U1RfRVhURU5ERUQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVE
X0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19N
U0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1Rf
RVhURU5ERUR8REVWX0hBU19NR01UX1VOSVQsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENv
bnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklD
RV9JRF9OVklESUFfTlZFTkVUXzIwKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJ
UlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18
REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNf
UEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAor
CQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVW
X0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNf
UE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RB
VElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVQsCiAJfSwKIAl7
CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9S
X0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIxKSwKLQkJLmRyaXZlcl9k
YXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VE
RVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJM
fERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVW
X0hBU19URVNUX0VYVEVOREVELAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxE
RVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZf
SEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVT
RUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hB
U19NR01UX1VOSVQsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJ
UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZF
TkVUXzIyKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElO
S1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RN
QXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxE
RVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAorCQkuZHJpdmVyX2RhdGEg
PSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8
REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVW
X0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFT
X1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVQsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVy
bmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJ
X0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURf
VElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hF
Q0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERF
Vl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVO
REVELAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElN
RVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERF
Vl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9I
QVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVQsCiAJ
fSwKIAl7MCx9LAogfTsKQEAgLTQ1NDAsNiArNTYxMyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBp
bml0X25pYyh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aC5jOiBSZXZlcnNl
IEVuZ2luZWVyZWQgbkZvcmNlIGV0aGVybmV0IGRyaXZlci4gVmVyc2lvbiAlcy5cbiIsIEZPUkNF
REVUSF9WRVJTSU9OKTsKKwlkcHJpbnRrKEtFUk5fREVCVUcgIkRFQlVHIFZFUlNJT05cbiIpOwog
CXJldHVybiBwY2lfbW9kdWxlX2luaXQoJmRyaXZlcik7CiB9CiAKQEAgLTQ1NTgsOSArNTYzMiwz
NSBAQAogTU9EVUxFX1BBUk1fREVTQyhtc2ksICJNU0kgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCBi
eSBzZXR0aW5nIHRvIDEgYW5kIGRpc2FibGVkIGJ5IHNldHRpbmcgdG8gMC4iKTsKIG1vZHVsZV9w
YXJhbShtc2l4LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtc2l4LCAiTVNJWCBpbnRlcnJ1
cHRzIGFyZSBlbmFibGVkIGJ5IHNldHRpbmcgdG8gMSBhbmQgZGlzYWJsZWQgYnkgc2V0dGluZyB0
byAwLiIpOworCittb2R1bGVfcGFyYW0oc3BlZWRfZHVwbGV4LCBpbnQsIDApOworTU9EVUxFX1BB
Uk1fREVTQyhzcGVlZF9kdXBsZXgsICJQSFkgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5ncy4gQXV0
byA9IDAsIDEwbWJwcyBoYWxmID0gMSwgMTBtYnBzIGZ1bGwgPSAyLCAxMDBtYnBzIGhhbGYgPSAz
LCAxMDBtYnBzIGZ1bGwgPSA0LCAxMDAwbWJwcyBmdWxsID0gNS4iKTsKK21vZHVsZV9wYXJhbShh
dXRvbmVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhhdXRvbmVnLCAiUEhZIGF1dG9uZWdv
dGlhdGUgaXMgZW5hYmxlZCBieSBzZXR0aW5nIHRvIDEgYW5kIGRpc2FibGVkIGJ5IHNldHRpbmcg
dG8gMC4iKTsKK21vZHVsZV9wYXJhbShzY2F0dGVyX2dhdGhlciwgaW50LCAwKTsKK01PRFVMRV9Q
QVJNX0RFU0Moc2NhdHRlcl9nYXRoZXIsICJTY2F0dGVyIGdhdGhlciBpcyBlbmFibGVkIGJ5IHNl
dHRpbmcgdG8gMSBhbmQgZGlzYWJsZWQgYnkgc2V0dGluZyB0byAwLiIpOworbW9kdWxlX3BhcmFt
KHRzb19vZmZsb2FkLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0c29fb2ZmbG9hZCwgIlRD
UCBTZWdtZW50YXRpb24gb2ZmbG9hZCBpcyBlbmFibGVkIGJ5IHNldHRpbmcgdG8gMSBhbmQgZGlz
YWJsZWQgYnkgc2V0dGluZyB0byAwLiIpOworbW9kdWxlX3BhcmFtKG10dSwgaW50LCAwKTsKK01P
RFVMRV9QQVJNX0RFU0MobXR1LCAiTVRVIHZhbHVlLiBNYXhpbXVtIHZhbHVlIG9mIDE1MDAgb3Ig
OTEwMCBkZXBlbmRpbmcgb24gaGFyZHdhcmUuIik7Cittb2R1bGVfcGFyYW0odHhfY2hlY2tzdW1f
b2ZmbG9hZCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModHhfY2hlY2tzdW1fb2ZmbG9hZCwg
IlR4IGNoZWNrc3VtIG9mZmxvYWQgaXMgZW5hYmxlZCBieSBzZXR0aW5nIHRvIDEgYW5kIGRpc2Fi
bGVkIGJ5IHNldHRpbmcgdG8gMC4iKTsKK21vZHVsZV9wYXJhbShyeF9jaGVja3N1bV9vZmZsb2Fk
LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhyeF9jaGVja3N1bV9vZmZsb2FkLCAiUnggY2hl
Y2tzdW0gb2ZmbG9hZCBpcyBlbmFibGVkIGJ5IHNldHRpbmcgdG8gMSBhbmQgZGlzYWJsZWQgYnkg
c2V0dGluZyB0byAwLiIpOworbW9kdWxlX3BhcmFtKHR4X3Jpbmdfc2l6ZSwgaW50LCAwKTsKK01P
RFVMRV9QQVJNX0RFU0ModHhfcmluZ19zaXplLCAiVHggcmluZyBzaXplLiBNYXhpbXVtIHZhbHVl
IG9mIDEwMjQgb3IgMTYzODQgZGVwZW5kaW5nIG9uIGhhcmR3YXJlLiIpOworbW9kdWxlX3BhcmFt
KHJ4X3Jpbmdfc2l6ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocnhfcmluZ19zaXplLCAi
UnggcmluZyBzaXplLiBNYXhpbXVtIHZhbHVlIG9mIDEwMjQgb3IgMTYzODQgZGVwZW5kaW5nIG9u
IGhhcmR3YXJlLiIpOworbW9kdWxlX3BhcmFtKHR4X2Zsb3dfY29udHJvbCwgaW50LCAwKTsKK01P
RFVMRV9QQVJNX0RFU0ModHhfZmxvd19jb250cm9sLCAiVHggZmxvdyBjb250cm9sIGlzIGVuYWJs
ZWQgYnkgc2V0dGluZyB0byAxIGFuZCBkaXNhYmxlZCBieSBzZXR0aW5nIHRvIDAuIik7Cittb2R1
bGVfcGFyYW0ocnhfZmxvd19jb250cm9sLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhyeF9m
bG93X2NvbnRyb2wsICJSeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBieSBzZXR0aW5nIHRvIDEg
YW5kIGRpc2FibGVkIGJ5IHNldHRpbmcgdG8gMC4iKTsKIG1vZHVsZV9wYXJhbShkbWFfNjRiaXQs
IGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRtYV82NGJpdCwgIkhpZ2ggRE1BIGlzIGVuYWJs
ZWQgYnkgc2V0dGluZyB0byAxIGFuZCBkaXNhYmxlZCBieSBzZXR0aW5nIHRvIDAuIik7Ci0KK21v
ZHVsZV9wYXJhbSh3b2wsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHdvbCwgIldha2UtT24t
TGFuIGlzIGVuYWJsZWQgYnkgc2V0dGluZyB0byAxIGFuZCBkaXNhYmxlZCBieSBzZXR0aW5nIHRv
IDAuIik7Cittb2R1bGVfcGFyYW0odGFnZ2luZ184MDIxcHEsIGludCwgMCk7CitNT0RVTEVfUEFS
TV9ERVNDKHRhZ2dpbmdfODAyMXBxLCAiODAyLjFwcSB0YWdnaW5nIGlzIGVuYWJsZWQgYnkgc2V0
dGluZyB0byAxIGFuZCBkaXNhYmxlZCBieSBzZXR0aW5nIHRvIDAuIik7CiBNT0RVTEVfQVVUSE9S
KCJNYW5mcmVkIFNwcmF1bCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPiIpOwogTU9EVUxFX0RF
U0NSSVBUSU9OKCJSZXZlcnNlIEVuZ2luZWVyZWQgbkZvcmNlIGV0aGVybmV0IGRyaXZlciIpOwog
TU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>